@superxd-studio/adptr 0.5.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/GENERATIVE.md +101 -0
- package/INTERACTIONS.md +51 -0
- package/LICENSE +21 -0
- package/README.md +57 -0
- package/REUSE.md +170 -0
- package/REVIEW.md +68 -0
- package/THIRD-PARTY-NOTICES.md +28 -0
- package/ai-sdk/index.js +96 -0
- package/assets/ibm-plex-mono-cyrillic-400-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-cyrillic-500-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-cyrillic-ext-400-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-cyrillic-ext-500-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-latin-400-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-latin-500-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-latin-ext-400-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-latin-ext-500-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-vietnamese-400-normal.woff2 +0 -0
- package/assets/ibm-plex-mono-vietnamese-500-normal.woff2 +0 -0
- package/assets/instrument-sans-latin-ext-wght-normal.woff2 +0 -0
- package/assets/instrument-sans-latin-wght-normal.woff2 +0 -0
- package/assistant-ui/index.js +139 -0
- package/chunks/callout-DKMHSnjc.js +342 -0
- package/chunks/canvas-BJ15-XxE.js +598 -0
- package/chunks/controller-Cfpg0C7v.js +180 -0
- package/chunks/core-BCqVRLUy.js +312 -0
- package/chunks/text-field-BLtoaZFn.js +41 -0
- package/chunks/types-BGF7r1my.js +115 -0
- package/chunks/ui-9DyNsYXY.js +967 -0
- package/core/index.js +4 -0
- package/custom/index.js +64 -0
- package/examples/ai-sdk-backend/package.json +11 -0
- package/examples/ai-sdk-backend/server.mjs +316 -0
- package/examples/custom-backend/copy.mjs +7 -0
- package/examples/custom-backend/server.mjs +118 -0
- package/examples/generative/specs.json +2094 -0
- package/examples/review-backend/copy.mjs +27 -0
- package/examples/review-backend/package.json +11 -0
- package/examples/review-backend/server.mjs +276 -0
- package/examples/web-ai-sdk/index.html +12 -0
- package/examples/web-ai-sdk/package.json +21 -0
- package/examples/web-ai-sdk/src/copy.ts +1 -0
- package/examples/web-ai-sdk/src/main.tsx +64 -0
- package/examples/web-ai-sdk/tsconfig.json +13 -0
- package/examples/web-generative/index.html +12 -0
- package/examples/web-generative/package.json +23 -0
- package/examples/web-generative/src/copy.ts +42 -0
- package/examples/web-generative/src/main.tsx +74 -0
- package/examples/web-generative/tsconfig.json +14 -0
- package/examples/web-independent/index.html +12 -0
- package/examples/web-independent/package.json +20 -0
- package/examples/web-independent/src/main.tsx +32 -0
- package/examples/web-independent/tsconfig.json +14 -0
- package/examples/web-interactions/index.html +12 -0
- package/examples/web-interactions/package.json +21 -0
- package/examples/web-interactions/src/copy.ts +215 -0
- package/examples/web-interactions/src/examples.tsx +628 -0
- package/examples/web-interactions/src/main.tsx +116 -0
- package/examples/web-interactions/tsconfig.json +14 -0
- package/examples/web-review/index.html +12 -0
- package/examples/web-review/package.json +20 -0
- package/examples/web-review/src/main.tsx +59 -0
- package/examples/web-review/tsconfig.json +14 -0
- package/fonts.css +117 -0
- package/generative/index.js +1560 -0
- package/interactions/index.js +1591 -0
- package/langgraph-review/index.js +36 -0
- package/licenses/ai-sdk.txt +13 -0
- package/licenses/assistant-ui-generative.txt +21 -0
- package/licenses/assistant-ui.txt +23 -0
- package/licenses/ibm-plex-mono.txt +93 -0
- package/licenses/instrument-sans.txt +93 -0
- package/licenses/internationalized-date.txt +201 -0
- package/licenses/langgraph.txt +21 -0
- package/licenses/lucide.txt +43 -0
- package/licenses/react-markdown.txt +21 -0
- package/licenses/remark-gfm.txt +22 -0
- package/licenses/zod.txt +21 -0
- package/package.json +138 -0
- package/review/index.js +31 -0
- package/source/components/avatar.tsx +50 -0
- package/source/components/button.tsx +155 -0
- package/source/components/callout.tsx +65 -0
- package/source/components/canvas/connector.tsx +14 -0
- package/source/components/canvas/copy.ts +34 -0
- package/source/components/canvas/index.tsx +257 -0
- package/source/components/canvas/recorder.ts +36 -0
- package/source/components/date-time-field.tsx +77 -0
- package/source/components/flow-motion.tsx +109 -0
- package/source/components/icons.tsx +275 -0
- package/source/components/responsive-overlay.tsx +91 -0
- package/source/components/scenario-picker/copy.ts +5 -0
- package/source/components/scenario-picker/index.tsx +142 -0
- package/source/components/scroll-area.tsx +59 -0
- package/source/components/search-picker.tsx +127 -0
- package/source/components/segmented-control.tsx +123 -0
- package/source/components/skeleton.tsx +11 -0
- package/source/components/spinner.tsx +19 -0
- package/source/components/superxd-arrow.tsx +22 -0
- package/source/components/switch.tsx +45 -0
- package/source/components/text-field.tsx +81 -0
- package/source/components/thinking.tsx +16 -0
- package/source/components/ui/copy.ts +12 -0
- package/source/components/ui/display.tsx +276 -0
- package/source/components/ui/navigation.tsx +346 -0
- package/source/components/ui/portal-theme.tsx +28 -0
- package/source/components/ui/selection.tsx +336 -0
- package/source/lib/cn.ts +23 -0
- package/source/reusable/ai-sdk/index.ts +114 -0
- package/source/reusable/assistant-ui/index.tsx +266 -0
- package/source/reusable/core/attachments.ts +163 -0
- package/source/reusable/core/index.ts +417 -0
- package/source/reusable/custom/index.ts +90 -0
- package/source/reusable/generative/actions.ts +188 -0
- package/source/reusable/generative/copy.ts +47 -0
- package/source/reusable/generative/data.tsx +126 -0
- package/source/reusable/generative/index.tsx +517 -0
- package/source/reusable/generative/schema.ts +327 -0
- package/source/reusable/generative/timeline.tsx +214 -0
- package/source/reusable/generative/vocabulary.tsx +847 -0
- package/source/reusable/interactions/agent.ts +259 -0
- package/source/reusable/interactions/artifact.ts +236 -0
- package/source/reusable/interactions/context.tsx +38 -0
- package/source/reusable/interactions/copy.ts +117 -0
- package/source/reusable/interactions/feedback.ts +73 -0
- package/source/reusable/interactions/index.ts +11 -0
- package/source/reusable/interactions/presentation.tsx +483 -0
- package/source/reusable/interactions/store.ts +74 -0
- package/source/reusable/interactions/threads.ts +126 -0
- package/source/reusable/interactions/web.tsx +574 -0
- package/source/reusable/langgraph-review/index.ts +73 -0
- package/source/reusable/review/controller.ts +263 -0
- package/source/reusable/review/index.ts +47 -0
- package/source/reusable/review/types.ts +189 -0
- package/source/reusable/ui/index.ts +25 -0
- package/source/reusable/uploads/index.ts +48 -0
- package/source/reusable/web/attachments/copy.ts +23 -0
- package/source/reusable/web/attachments/index.tsx +233 -0
- package/source/reusable/web/copy.ts +22 -0
- package/source/reusable/web/index.tsx +470 -0
- package/source/reusable/web/message/copy.ts +26 -0
- package/source/reusable/web/message/index.tsx +388 -0
- package/source/reusable/web/message/streaming.ts +64 -0
- package/source/reusable/web/message/styles.css +21 -0
- package/source/reusable/web/review/copy.ts +78 -0
- package/source/reusable/web/review/flow.ts +24 -0
- package/source/reusable/web/review/index.tsx +506 -0
- package/source/reusable/web/styles.ts +2 -0
- package/source/styles/library.css +612 -0
- package/source/styles/theme.css +228 -0
- package/styles.css +3 -0
- package/styles.d.ts +1 -0
- package/types/components/avatar.d.ts +14 -0
- package/types/components/button.d.ts +36 -0
- package/types/components/callout.d.ts +19 -0
- package/types/components/canvas/connector.d.ts +2 -0
- package/types/components/canvas/copy.d.ts +34 -0
- package/types/components/canvas/index.d.ts +33 -0
- package/types/components/canvas/recorder.d.ts +10 -0
- package/types/components/date-time-field.d.ts +11 -0
- package/types/components/flow-motion.d.ts +38 -0
- package/types/components/icons.d.ts +138 -0
- package/types/components/responsive-overlay.d.ts +15 -0
- package/types/components/scenario-picker/copy.d.ts +5 -0
- package/types/components/scenario-picker/index.d.ts +14 -0
- package/types/components/scroll-area.d.ts +14 -0
- package/types/components/search-picker.d.ts +27 -0
- package/types/components/segmented-control.d.ts +23 -0
- package/types/components/skeleton.d.ts +4 -0
- package/types/components/spinner.d.ts +4 -0
- package/types/components/superxd-arrow.d.ts +5 -0
- package/types/components/switch.d.ts +8 -0
- package/types/components/text-field.d.ts +19 -0
- package/types/components/thinking.d.ts +8 -0
- package/types/components/ui/copy.d.ts +12 -0
- package/types/components/ui/display.d.ts +50 -0
- package/types/components/ui/navigation.d.ts +63 -0
- package/types/components/ui/portal-theme.d.ts +8 -0
- package/types/components/ui/selection.d.ts +37 -0
- package/types/lib/cn.d.ts +3 -0
- package/types/reusable/ai-sdk/index.d.ts +15 -0
- package/types/reusable/assistant-ui/index.d.ts +12 -0
- package/types/reusable/core/attachments.d.ts +54 -0
- package/types/reusable/core/index.d.ts +107 -0
- package/types/reusable/custom/index.d.ts +14 -0
- package/types/reusable/generative/actions.d.ts +45 -0
- package/types/reusable/generative/copy.d.ts +48 -0
- package/types/reusable/generative/data.d.ts +4 -0
- package/types/reusable/generative/index.d.ts +30 -0
- package/types/reusable/generative/schema.d.ts +303 -0
- package/types/reusable/generative/timeline.d.ts +21 -0
- package/types/reusable/generative/vocabulary.d.ts +34 -0
- package/types/reusable/interactions/agent.d.ts +98 -0
- package/types/reusable/interactions/artifact.d.ts +118 -0
- package/types/reusable/interactions/context.d.ts +130 -0
- package/types/reusable/interactions/copy.d.ts +115 -0
- package/types/reusable/interactions/feedback.d.ts +34 -0
- package/types/reusable/interactions/index.d.ts +10 -0
- package/types/reusable/interactions/presentation.d.ts +97 -0
- package/types/reusable/interactions/store.d.ts +29 -0
- package/types/reusable/interactions/threads.d.ts +38 -0
- package/types/reusable/interactions/web.d.ts +22 -0
- package/types/reusable/langgraph-review/index.d.ts +5 -0
- package/types/reusable/review/controller.d.ts +52 -0
- package/types/reusable/review/index.d.ts +12 -0
- package/types/reusable/review/types.d.ts +61 -0
- package/types/reusable/ui/index.d.ts +19 -0
- package/types/reusable/uploads/index.d.ts +11 -0
- package/types/reusable/web/attachments/copy.d.ts +25 -0
- package/types/reusable/web/attachments/index.d.ts +24 -0
- package/types/reusable/web/copy.d.ts +24 -0
- package/types/reusable/web/index.d.ts +41 -0
- package/types/reusable/web/message/copy.d.ts +27 -0
- package/types/reusable/web/message/index.d.ts +56 -0
- package/types/reusable/web/message/streaming.d.ts +27 -0
- package/types/reusable/web/review/copy.d.ts +72 -0
- package/types/reusable/web/review/flow.d.ts +3 -0
- package/types/reusable/web/review/index.d.ts +38 -0
- package/types/reusable/web/styles.d.ts +2 -0
- package/ui/index.js +4 -0
- package/uploads/index.js +34 -0
- package/web/index.js +931 -0
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The library's stylesheet: Tailwind, the theme, base rules and the few
|
|
3
|
+
* utilities the components share. The look itself lives in theme.css.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "tailwindcss";
|
|
7
|
+
@import "./theme.css";
|
|
8
|
+
|
|
9
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
10
|
+
|
|
11
|
+
/* Text roles. Components use these instead of mixing sizes and weights. */
|
|
12
|
+
@utility type-title {
|
|
13
|
+
font-family: var(--font-heading);
|
|
14
|
+
font-size: var(--text-xl);
|
|
15
|
+
line-height: var(--text-xl--line-height);
|
|
16
|
+
font-weight: var(--heading-weight);
|
|
17
|
+
letter-spacing: var(--heading-tracking);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@utility type-heading {
|
|
21
|
+
font-family: var(--font-heading);
|
|
22
|
+
font-size: var(--text-base);
|
|
23
|
+
line-height: var(--text-base--line-height);
|
|
24
|
+
font-weight: var(--heading-weight);
|
|
25
|
+
letter-spacing: var(--heading-tracking);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@utility type-body {
|
|
29
|
+
font-size: var(--text-sm);
|
|
30
|
+
line-height: var(--text-sm--line-height);
|
|
31
|
+
font-weight: 400;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@utility type-label {
|
|
35
|
+
font-size: var(--text-sm);
|
|
36
|
+
line-height: var(--text-sm--line-height);
|
|
37
|
+
font-weight: 500;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@utility type-caption {
|
|
41
|
+
font-size: var(--text-xs);
|
|
42
|
+
line-height: var(--text-xs--line-height);
|
|
43
|
+
font-weight: 500;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* The one focus ring. Applied on keyboard focus only. */
|
|
47
|
+
@utility focus-ring {
|
|
48
|
+
outline: 2px solid var(--color-focus);
|
|
49
|
+
outline-offset: 2px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Press and settle, SuperXD's press: in on the press (snap), a gentle spring back on the
|
|
53
|
+
release (settle). Colours change at snap speed. */
|
|
54
|
+
@utility press {
|
|
55
|
+
transition:
|
|
56
|
+
transform var(--duration-settle) var(--ease-settle),
|
|
57
|
+
background-color var(--duration-snap) var(--ease-snap),
|
|
58
|
+
border-color var(--duration-snap) var(--ease-snap),
|
|
59
|
+
color var(--duration-snap) var(--ease-snap),
|
|
60
|
+
box-shadow var(--duration-snap) var(--ease-snap),
|
|
61
|
+
opacity var(--duration-snap) var(--ease-snap);
|
|
62
|
+
/* An open dropdown or menu keeps its trigger "pressed"; it stays full size so the list lines up */
|
|
63
|
+
&[data-pressed]:not([aria-expanded="true"]) {
|
|
64
|
+
transform: scale(var(--press-depth));
|
|
65
|
+
transition-duration: var(--duration-snap);
|
|
66
|
+
transition-timing-function: var(--ease-snap);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* SuperXD's squircle corner, for shapes whose radius is derived from a token
|
|
71
|
+
(rounded-control, -cell and -surface get it automatically). */
|
|
72
|
+
@utility squircle {
|
|
73
|
+
corner-shape: var(--corner-shape, round);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* The thinking mark: pixels light in a spiral (top row, down the right, along the bottom,
|
|
77
|
+
up the left, then the centre) */
|
|
78
|
+
.thinking-matrix {
|
|
79
|
+
/* SuperXD's ultramarine: the thinking mark keeps the brand colour */
|
|
80
|
+
color: var(--color-done);
|
|
81
|
+
display: inline-grid;
|
|
82
|
+
flex: none;
|
|
83
|
+
grid-template-columns: repeat(3, 0.25rem);
|
|
84
|
+
gap: 0.125rem;
|
|
85
|
+
}
|
|
86
|
+
.thinking-matrix i {
|
|
87
|
+
width: 0.25rem;
|
|
88
|
+
height: 0.25rem;
|
|
89
|
+
border-radius: 1px;
|
|
90
|
+
background: currentColor;
|
|
91
|
+
opacity: 0.2;
|
|
92
|
+
animation: thinking-pixel var(--duration-thinking) var(--ease-snap) infinite;
|
|
93
|
+
}
|
|
94
|
+
.thinking-matrix i:nth-child(2) {
|
|
95
|
+
animation-delay: calc(var(--duration-thinking) * 0.07);
|
|
96
|
+
}
|
|
97
|
+
.thinking-matrix i:nth-child(3) {
|
|
98
|
+
animation-delay: calc(var(--duration-thinking) * 0.14);
|
|
99
|
+
}
|
|
100
|
+
.thinking-matrix i:nth-child(6) {
|
|
101
|
+
animation-delay: calc(var(--duration-thinking) * 0.21);
|
|
102
|
+
}
|
|
103
|
+
.thinking-matrix i:nth-child(9) {
|
|
104
|
+
animation-delay: calc(var(--duration-thinking) * 0.28);
|
|
105
|
+
}
|
|
106
|
+
.thinking-matrix i:nth-child(8) {
|
|
107
|
+
animation-delay: calc(var(--duration-thinking) * 0.35);
|
|
108
|
+
}
|
|
109
|
+
.thinking-matrix i:nth-child(7) {
|
|
110
|
+
animation-delay: calc(var(--duration-thinking) * 0.42);
|
|
111
|
+
}
|
|
112
|
+
.thinking-matrix i:nth-child(4) {
|
|
113
|
+
animation-delay: calc(var(--duration-thinking) * 0.5);
|
|
114
|
+
}
|
|
115
|
+
.thinking-matrix i:nth-child(5) {
|
|
116
|
+
animation-delay: calc(var(--duration-thinking) * 0.57);
|
|
117
|
+
}
|
|
118
|
+
@keyframes thinking-pixel {
|
|
119
|
+
0%,
|
|
120
|
+
40%,
|
|
121
|
+
100% {
|
|
122
|
+
opacity: 0.2;
|
|
123
|
+
}
|
|
124
|
+
12% {
|
|
125
|
+
opacity: 1;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/* Streaming text: the newest words arrive in the info colour and fade back to plain as more arrive */
|
|
129
|
+
.stream-word {
|
|
130
|
+
transition: color 700ms var(--ease-ink);
|
|
131
|
+
}
|
|
132
|
+
.stream-word--fresh {
|
|
133
|
+
color: var(--color-info);
|
|
134
|
+
}
|
|
135
|
+
/* The cursor after the last streamed word, in the same info colour */
|
|
136
|
+
.stream-caret {
|
|
137
|
+
display: inline-block;
|
|
138
|
+
width: 0.5em;
|
|
139
|
+
height: 1.05em;
|
|
140
|
+
margin-left: 2px;
|
|
141
|
+
background: var(--color-info);
|
|
142
|
+
vertical-align: -0.15em;
|
|
143
|
+
animation: stream-caret 1s steps(2, jump-none) infinite;
|
|
144
|
+
}
|
|
145
|
+
@keyframes stream-caret {
|
|
146
|
+
50% {
|
|
147
|
+
opacity: 0.2;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
@media (prefers-reduced-motion: reduce) {
|
|
151
|
+
.thinking-matrix i {
|
|
152
|
+
animation: none !important;
|
|
153
|
+
opacity: 0.6;
|
|
154
|
+
}
|
|
155
|
+
.stream-caret {
|
|
156
|
+
animation: none !important;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/*
|
|
161
|
+
* Flow transitions: a flow moving between its steps, as one view transition (see
|
|
162
|
+
* src/components/flow-motion.tsx). Only the flow moves: the rest of the page changes at once.
|
|
163
|
+
* Ink, chosen in the DNA lab: the old step lifts away quickly and the next one inks in from
|
|
164
|
+
* the top, the same both ways. The frame resizes on settle, and parts that carry over (the
|
|
165
|
+
* chosen time, the event's name) travel to their new place instead of reappearing.
|
|
166
|
+
* --flow-pace slows everything down (the lab's slow motion).
|
|
167
|
+
*/
|
|
168
|
+
:root:active-view-transition-type(flow-forward, flow-back, flow-swap)::view-transition-old(root),
|
|
169
|
+
:root:active-view-transition-type(flow-forward, flow-back, flow-swap)::view-transition-new(root) {
|
|
170
|
+
animation: none;
|
|
171
|
+
mix-blend-mode: normal;
|
|
172
|
+
}
|
|
173
|
+
::view-transition-group(.flow-motion) {
|
|
174
|
+
animation-duration: calc(var(--duration-settle) * var(--flow-pace, 1));
|
|
175
|
+
animation-timing-function: var(--ease-settle);
|
|
176
|
+
}
|
|
177
|
+
/* The frame: stretched to the moving box, so it reads as one card changing size */
|
|
178
|
+
::view-transition-old(.flow-card) {
|
|
179
|
+
animation: none;
|
|
180
|
+
opacity: 0;
|
|
181
|
+
}
|
|
182
|
+
::view-transition-new(.flow-card) {
|
|
183
|
+
width: 100%;
|
|
184
|
+
height: 100%;
|
|
185
|
+
animation: none;
|
|
186
|
+
}
|
|
187
|
+
/* Parts that carry over keep their size: only their place changes */
|
|
188
|
+
::view-transition-old(.flow-travel),
|
|
189
|
+
::view-transition-new(.flow-travel),
|
|
190
|
+
::view-transition-old(.flow-keep),
|
|
191
|
+
::view-transition-new(.flow-keep) {
|
|
192
|
+
width: auto;
|
|
193
|
+
height: 100%;
|
|
194
|
+
animation-duration: calc(var(--duration-pop) * var(--flow-pace, 1));
|
|
195
|
+
animation-timing-function: var(--ease-reveal);
|
|
196
|
+
}
|
|
197
|
+
::view-transition-old(.flow-out),
|
|
198
|
+
::view-transition-old(.flow-out-swap) {
|
|
199
|
+
animation: flow-fade-out calc(var(--duration-leave) * var(--flow-pace, 1)) var(--ease-snap) both;
|
|
200
|
+
}
|
|
201
|
+
::view-transition-new(.flow-in) {
|
|
202
|
+
animation: flow-ink-down calc(var(--duration-reveal) * var(--flow-pace, 1)) var(--ease-ink)
|
|
203
|
+
calc(var(--duration-leave) * 0.5 * var(--flow-pace, 1)) both;
|
|
204
|
+
}
|
|
205
|
+
/* A different view of the same step (month, week or columns) is a quick cross-fade */
|
|
206
|
+
::view-transition-new(.flow-in-swap) {
|
|
207
|
+
animation: flow-fade-in calc(var(--duration-pop) * var(--flow-pace, 1)) var(--ease-reveal) both;
|
|
208
|
+
}
|
|
209
|
+
@media (prefers-reduced-motion: reduce) {
|
|
210
|
+
::view-transition-group(.flow-motion),
|
|
211
|
+
::view-transition-image-pair(.flow-motion),
|
|
212
|
+
::view-transition-old(.flow-motion),
|
|
213
|
+
::view-transition-new(.flow-motion) {
|
|
214
|
+
animation: none !important;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
@keyframes flow-fade-in {
|
|
218
|
+
from {
|
|
219
|
+
opacity: 0;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
@keyframes flow-fade-out {
|
|
223
|
+
to {
|
|
224
|
+
opacity: 0;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/* The mask is used only for its alpha: black shows the step, transparent hides it */
|
|
228
|
+
@keyframes flow-ink-down {
|
|
229
|
+
from {
|
|
230
|
+
mask-image: linear-gradient(to bottom, black 45%, transparent 55%);
|
|
231
|
+
mask-size: 100% 260%;
|
|
232
|
+
mask-position: 0 100%;
|
|
233
|
+
translate: 0 calc(var(--distance-step) * 0.25);
|
|
234
|
+
}
|
|
235
|
+
to {
|
|
236
|
+
mask-image: linear-gradient(to bottom, black 45%, transparent 55%);
|
|
237
|
+
mask-size: 100% 260%;
|
|
238
|
+
mask-position: 0 0;
|
|
239
|
+
translate: 0 0;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/* Times and dates line up in columns. */
|
|
244
|
+
@utility numeric {
|
|
245
|
+
font-variant-numeric: tabular-nums;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
@theme {
|
|
249
|
+
--animate-fade-in: fade-in var(--duration-base) var(--ease-standard) both;
|
|
250
|
+
--animate-rise-in: rise-in var(--duration-base) var(--ease-standard) both;
|
|
251
|
+
--animate-slide-in: slide-in var(--duration-slow) var(--ease-standard) both;
|
|
252
|
+
--animate-dialog-in: dialog-in var(--duration-base) var(--ease-standard) both;
|
|
253
|
+
--animate-pulse-soft: pulse-soft 1.6s ease-in-out infinite;
|
|
254
|
+
/* Content entering, on the website's reveal curve */
|
|
255
|
+
--animate-reveal-in: rise-in var(--duration-reveal) var(--ease-reveal) both;
|
|
256
|
+
/* A draft becoming real: content arriving where a skeleton was sweeps in from the left */
|
|
257
|
+
--animate-ink-in: ink-in var(--duration-ink) var(--ease-ink) both;
|
|
258
|
+
/* Floating layers open from their trigger and close quickly */
|
|
259
|
+
--animate-pop-in: pop-in var(--duration-pop) var(--ease-reveal) both;
|
|
260
|
+
--animate-pop-out: pop-out var(--duration-leave) var(--ease-snap) both;
|
|
261
|
+
--animate-fade-out: fade-out var(--duration-leave) var(--ease-snap) both;
|
|
262
|
+
/* Dialogs and drawers arrive with settle */
|
|
263
|
+
--animate-dialog-settle: dialog-settle var(--duration-settle) var(--ease-settle) both;
|
|
264
|
+
--animate-drawer-settle: drawer-settle var(--duration-settle) var(--ease-settle) both;
|
|
265
|
+
--animate-drawer-out: drawer-out var(--duration-leave) var(--ease-snap) both;
|
|
266
|
+
/* Notices slide in from the edge and settle */
|
|
267
|
+
--animate-toast-in: toast-in var(--duration-settle) var(--ease-settle) both;
|
|
268
|
+
/* The done mark: pops in on settle when something is finished */
|
|
269
|
+
--animate-done-in: done-in var(--duration-settle) var(--ease-settle) both;
|
|
270
|
+
|
|
271
|
+
@keyframes fade-in {
|
|
272
|
+
from {
|
|
273
|
+
opacity: 0;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
@keyframes rise-in {
|
|
277
|
+
from {
|
|
278
|
+
opacity: 0;
|
|
279
|
+
transform: translateY(4px);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
@keyframes slide-in {
|
|
283
|
+
from {
|
|
284
|
+
opacity: 0;
|
|
285
|
+
transform: translateX(8px);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
@keyframes dialog-in {
|
|
289
|
+
from {
|
|
290
|
+
opacity: 0;
|
|
291
|
+
transform: translateY(8px) scale(0.98);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
@keyframes pulse-soft {
|
|
295
|
+
50% {
|
|
296
|
+
opacity: 0.55;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
@keyframes pop-in {
|
|
300
|
+
from {
|
|
301
|
+
opacity: 0;
|
|
302
|
+
transform: scale(0.96);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
@keyframes pop-out {
|
|
306
|
+
to {
|
|
307
|
+
opacity: 0;
|
|
308
|
+
transform: scale(0.98);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
@keyframes fade-out {
|
|
312
|
+
to {
|
|
313
|
+
opacity: 0;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
@keyframes dialog-settle {
|
|
317
|
+
from {
|
|
318
|
+
opacity: 0;
|
|
319
|
+
transform: translateY(12px) scale(0.98);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
@keyframes drawer-settle {
|
|
323
|
+
from {
|
|
324
|
+
transform: translateY(100%);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
@keyframes drawer-out {
|
|
328
|
+
to {
|
|
329
|
+
transform: translateY(100%);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
@keyframes done-in {
|
|
333
|
+
from {
|
|
334
|
+
opacity: 0;
|
|
335
|
+
transform: scale(0.4);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
@keyframes toast-in {
|
|
339
|
+
from {
|
|
340
|
+
opacity: 0;
|
|
341
|
+
transform: translateX(24px);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/* The mask is used only for its alpha: black shows the content, transparent hides it */
|
|
345
|
+
@keyframes ink-in {
|
|
346
|
+
from {
|
|
347
|
+
mask-image: linear-gradient(to right, black 45%, transparent 55%);
|
|
348
|
+
mask-size: 260% 100%;
|
|
349
|
+
mask-position: 100% 0;
|
|
350
|
+
}
|
|
351
|
+
to {
|
|
352
|
+
mask-image: linear-gradient(to right, black 45%, transparent 55%);
|
|
353
|
+
mask-size: 260% 100%;
|
|
354
|
+
mask-position: 0 0;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/* Keep the three-dot loader legible in tiny buttons and still under reduced motion. */
|
|
360
|
+
.loader-dots circle {
|
|
361
|
+
transform-box: fill-box;
|
|
362
|
+
transform-origin: center;
|
|
363
|
+
animation: loader-dot var(--duration-loader) var(--ease-settle) infinite;
|
|
364
|
+
}
|
|
365
|
+
.loader-dots circle:nth-child(2) {
|
|
366
|
+
animation-delay: var(--loader-step);
|
|
367
|
+
}
|
|
368
|
+
.loader-dots circle:nth-child(3) {
|
|
369
|
+
animation-delay: calc(var(--loader-step) * 2);
|
|
370
|
+
}
|
|
371
|
+
/* Each dot presses in and settles back in turn: the same press as the buttons */
|
|
372
|
+
@keyframes loader-dot {
|
|
373
|
+
0%,
|
|
374
|
+
70%,
|
|
375
|
+
100% {
|
|
376
|
+
opacity: 0.5;
|
|
377
|
+
transform: scale(1);
|
|
378
|
+
}
|
|
379
|
+
25% {
|
|
380
|
+
opacity: 1;
|
|
381
|
+
transform: scale(0.6);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/* Squircle corners on controls, cells and surfaces wherever the browser can draw them
|
|
386
|
+
(theme.css sets --corner-shape and the larger radii). Pills stay round. */
|
|
387
|
+
.rounded-control,
|
|
388
|
+
.rounded-cell,
|
|
389
|
+
.rounded-surface {
|
|
390
|
+
corner-shape: var(--corner-shape, round);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/* The conversation stays in the host theme, including rendered Markdown. */
|
|
394
|
+
.conversation-markdown {
|
|
395
|
+
overflow-wrap: anywhere;
|
|
396
|
+
}
|
|
397
|
+
.conversation-markdown > * + * {
|
|
398
|
+
margin-top: calc(var(--spacing) * 4);
|
|
399
|
+
}
|
|
400
|
+
.conversation-markdown :is(h1, h2, h3, h4, h5, h6) {
|
|
401
|
+
font-family: var(--font-heading);
|
|
402
|
+
font-size: var(--text-base);
|
|
403
|
+
font-weight: var(--heading-weight);
|
|
404
|
+
line-height: var(--text-base--line-height);
|
|
405
|
+
letter-spacing: var(--heading-tracking);
|
|
406
|
+
}
|
|
407
|
+
.conversation-markdown :is(ul, ol) {
|
|
408
|
+
padding-left: calc(var(--spacing) * 5);
|
|
409
|
+
}
|
|
410
|
+
.conversation-markdown ul {
|
|
411
|
+
list-style: disc;
|
|
412
|
+
}
|
|
413
|
+
.conversation-markdown ol {
|
|
414
|
+
list-style: decimal;
|
|
415
|
+
}
|
|
416
|
+
.conversation-markdown li + li {
|
|
417
|
+
margin-top: calc(var(--spacing) * 2);
|
|
418
|
+
}
|
|
419
|
+
.conversation-markdown blockquote {
|
|
420
|
+
border-left: 2px solid var(--color-line-emphasis);
|
|
421
|
+
padding-left: calc(var(--spacing) * 4);
|
|
422
|
+
color: var(--color-fg-subtle);
|
|
423
|
+
}
|
|
424
|
+
.conversation-markdown pre {
|
|
425
|
+
max-width: 100%;
|
|
426
|
+
overflow-x: auto;
|
|
427
|
+
border: 1px solid var(--color-line-subtle);
|
|
428
|
+
border-radius: var(--radius-control);
|
|
429
|
+
background: var(--color-surface-muted);
|
|
430
|
+
}
|
|
431
|
+
.conversation-markdown pre code {
|
|
432
|
+
display: block;
|
|
433
|
+
padding: calc(var(--spacing) * 4);
|
|
434
|
+
font-size: var(--text-xs);
|
|
435
|
+
font-family: var(--font-mono);
|
|
436
|
+
line-height: var(--text-xs--line-height);
|
|
437
|
+
white-space: pre;
|
|
438
|
+
}
|
|
439
|
+
.conversation-markdown :not(pre) > code {
|
|
440
|
+
border-radius: var(--radius-cell);
|
|
441
|
+
background: var(--color-surface-subtle);
|
|
442
|
+
padding-inline: var(--spacing);
|
|
443
|
+
font-family: var(--font-mono);
|
|
444
|
+
font-size: var(--text-xs);
|
|
445
|
+
}
|
|
446
|
+
.conversation-touch-hint {
|
|
447
|
+
display: none;
|
|
448
|
+
}
|
|
449
|
+
@media (pointer: coarse) {
|
|
450
|
+
.conversation-desktop-hint {
|
|
451
|
+
display: none;
|
|
452
|
+
}
|
|
453
|
+
.conversation-touch-hint {
|
|
454
|
+
display: inline;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
@media (prefers-reduced-motion: reduce) {
|
|
458
|
+
.loader-dots circle {
|
|
459
|
+
animation: none !important;
|
|
460
|
+
opacity: 1;
|
|
461
|
+
transform: none;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
@layer base {
|
|
466
|
+
:root {
|
|
467
|
+
color-scheme: light;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
html {
|
|
471
|
+
font-family: var(--font-sans);
|
|
472
|
+
-webkit-font-smoothing: antialiased;
|
|
473
|
+
-moz-osx-font-smoothing: grayscale;
|
|
474
|
+
text-rendering: optimizeLegibility;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
body {
|
|
478
|
+
background-color: var(--color-surface);
|
|
479
|
+
color: var(--color-fg);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/* A safety net for links and buttons that don't style their own focus.
|
|
483
|
+
Text boxes show focus with their border and ring instead. */
|
|
484
|
+
:where(a, button, [tabindex]:not(input, textarea)):focus-visible {
|
|
485
|
+
outline: 2px solid var(--color-focus);
|
|
486
|
+
outline-offset: 2px;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
@media (prefers-reduced-motion: reduce) {
|
|
490
|
+
*,
|
|
491
|
+
::before,
|
|
492
|
+
::after {
|
|
493
|
+
animation-duration: 0.01ms !important;
|
|
494
|
+
animation-iteration-count: 1 !important;
|
|
495
|
+
transition-duration: 0.01ms !important;
|
|
496
|
+
scroll-behavior: auto !important;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/* Calendar labels stay inside their time lanes; full details remain in the accessible name. */
|
|
502
|
+
.calendar-grid-event {
|
|
503
|
+
padding-inline: calc(var(--spacing) * 1.5);
|
|
504
|
+
padding-block: calc(var(--spacing) * 2);
|
|
505
|
+
overflow: hidden;
|
|
506
|
+
}
|
|
507
|
+
.calendar-grid-event > span:nth-child(2) {
|
|
508
|
+
display: -webkit-box;
|
|
509
|
+
-webkit-box-orient: vertical;
|
|
510
|
+
-webkit-line-clamp: 2;
|
|
511
|
+
overflow: hidden;
|
|
512
|
+
}
|
|
513
|
+
.calendar-grid-scroll,
|
|
514
|
+
.calendar-grid-heading,
|
|
515
|
+
.calendar-grid-allday {
|
|
516
|
+
scrollbar-gutter: stable;
|
|
517
|
+
}
|
|
518
|
+
/* Hidden overflow reserves the same native scrollbar gutter as the time grid.
|
|
519
|
+
This aligns all three grids with classic as well as overlay scrollbars. */
|
|
520
|
+
.calendar-grid-heading,
|
|
521
|
+
.calendar-grid-allday {
|
|
522
|
+
overflow-y: hidden;
|
|
523
|
+
}
|
|
524
|
+
.calendar-grid-heading [data-focus-visible] {
|
|
525
|
+
outline-offset: -2px;
|
|
526
|
+
}
|
|
527
|
+
.calendar-grid-scroll {
|
|
528
|
+
overscroll-behavior: contain;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
.calendar-grid-event > span:first-child {
|
|
532
|
+
display: block;
|
|
533
|
+
}
|
|
534
|
+
.calendar-grid-event > span:first-child > span:last-child {
|
|
535
|
+
position: absolute;
|
|
536
|
+
right: var(--spacing);
|
|
537
|
+
bottom: var(--spacing);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/* The chart renderer supplies geometry only; the approved theme owns every colour and type role. */
|
|
541
|
+
.generative-chart [data-aui="chart-frame"] {
|
|
542
|
+
display: grid;
|
|
543
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
544
|
+
gap: calc(var(--spacing) * 2);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
.generative-chart [data-aui="chart"] {
|
|
548
|
+
display: block;
|
|
549
|
+
width: 100%;
|
|
550
|
+
height: calc(var(--spacing) * 40);
|
|
551
|
+
overflow: visible;
|
|
552
|
+
color: var(--color-brand);
|
|
553
|
+
}
|
|
554
|
+
.generative-chart [data-aui="chart-ticks"] {
|
|
555
|
+
display: flex;
|
|
556
|
+
flex-direction: column;
|
|
557
|
+
justify-content: space-between;
|
|
558
|
+
color: var(--color-fg-subtle);
|
|
559
|
+
font-size: var(--text-xs);
|
|
560
|
+
font-variant-numeric: tabular-nums;
|
|
561
|
+
}
|
|
562
|
+
.generative-chart [data-aui="chart-xlabels"] {
|
|
563
|
+
grid-column: 2;
|
|
564
|
+
display: flex;
|
|
565
|
+
justify-content: space-between;
|
|
566
|
+
margin-top: calc(var(--spacing) * 3);
|
|
567
|
+
color: var(--color-fg-subtle);
|
|
568
|
+
font-size: var(--text-xs);
|
|
569
|
+
}
|
|
570
|
+
.generative-chart [data-aui="chart-grid"],
|
|
571
|
+
.generative-chart [data-aui="chart-zero"] {
|
|
572
|
+
color: var(--color-line-subtle);
|
|
573
|
+
}
|
|
574
|
+
.generative-chart [data-aui-series="0"] {
|
|
575
|
+
color: var(--color-brand);
|
|
576
|
+
}
|
|
577
|
+
.generative-chart [data-aui-series="1"] {
|
|
578
|
+
color: var(--color-info);
|
|
579
|
+
stroke-dasharray: 4 2;
|
|
580
|
+
}
|
|
581
|
+
.generative-chart [data-aui-series="2"] {
|
|
582
|
+
color: var(--color-success);
|
|
583
|
+
stroke-dasharray: 1 2;
|
|
584
|
+
}
|
|
585
|
+
.generative-chart [data-aui-series="3"] {
|
|
586
|
+
color: var(--color-attention);
|
|
587
|
+
stroke-dasharray: 6 2;
|
|
588
|
+
}
|
|
589
|
+
.generative-chart [data-aui-series="4"] {
|
|
590
|
+
color: var(--color-fg-subtle);
|
|
591
|
+
stroke-dasharray: 2 4;
|
|
592
|
+
}
|
|
593
|
+
.generative-chart [data-aui="chart-legend"] {
|
|
594
|
+
grid-column: 1 / -1;
|
|
595
|
+
display: flex;
|
|
596
|
+
flex-wrap: wrap;
|
|
597
|
+
gap: calc(var(--spacing) * 4);
|
|
598
|
+
font-size: var(--text-xs);
|
|
599
|
+
color: var(--color-fg-subtle);
|
|
600
|
+
}
|
|
601
|
+
.generative-chart [data-aui="chart-legend-item"] {
|
|
602
|
+
display: inline-flex;
|
|
603
|
+
align-items: center;
|
|
604
|
+
gap: calc(var(--spacing) * 2);
|
|
605
|
+
}
|
|
606
|
+
.generative-chart [data-aui="chart-legend-swatch"] {
|
|
607
|
+
display: inline-block;
|
|
608
|
+
width: calc(var(--spacing) * 2);
|
|
609
|
+
height: calc(var(--spacing) * 2);
|
|
610
|
+
border-radius: var(--radius-cell);
|
|
611
|
+
background: currentColor;
|
|
612
|
+
}
|