@appsolutely-io/waypoint 0.0.0-stage → 0.1.1-next.1
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/LICENSE +21 -0
- package/README.md +297 -2
- package/dist/block-reply-r8u-DNmZ.d.cts +181 -0
- package/dist/block-reply-z8El20nD.d.ts +181 -0
- package/dist/blocks-2ABWECKG.js +1 -0
- package/dist/blocks-7453YTYJ.cjs +1 -0
- package/dist/chunk-3KV7TDDR.cjs +3 -0
- package/dist/chunk-4BWV3SEL.cjs +1 -0
- package/dist/chunk-5Q3INHKA.js +1 -0
- package/dist/chunk-5TBO732O.js +1 -0
- package/dist/chunk-6OZSKCPT.cjs +1 -0
- package/dist/chunk-A3YOSFLE.cjs +1 -0
- package/dist/chunk-BRUQ75G3.cjs +1 -0
- package/dist/chunk-C3VS33WJ.js +1 -0
- package/dist/chunk-D2EGPBCX.cjs +1 -0
- package/dist/chunk-D4Q46KWA.js +1 -0
- package/dist/chunk-FBADWFRR.cjs +1 -0
- package/dist/chunk-FQSWQLRW.js +1 -0
- package/dist/chunk-GT6PI4CT.cjs +1 -0
- package/dist/chunk-II26UWZM.cjs +1 -0
- package/dist/chunk-IPI4O4LP.js +1 -0
- package/dist/chunk-JFMVVGGB.js +1 -0
- package/dist/chunk-K73VV7KA.js +1 -0
- package/dist/chunk-L4PFFRDE.js +3 -0
- package/dist/chunk-LLPGVQUT.cjs +1 -0
- package/dist/chunk-M63QOANE.js +1 -0
- package/dist/chunk-MEKDQDSV.js +1 -0
- package/dist/chunk-OEPKPDLD.js +1 -0
- package/dist/chunk-OWT55N6J.js +3 -0
- package/dist/chunk-PFR2J5BV.js +1 -0
- package/dist/chunk-Q7BULGQG.cjs +1 -0
- package/dist/chunk-QFBAOEPD.js +1 -0
- package/dist/chunk-QS3MKZOY.cjs +3 -0
- package/dist/chunk-RZ3AGK3U.cjs +1 -0
- package/dist/chunk-RZZDQWC2.js +1 -0
- package/dist/chunk-S73WZWDP.js +1 -0
- package/dist/chunk-T5XF2R74.js +1 -0
- package/dist/chunk-TCFCSGQ3.js +1 -0
- package/dist/chunk-TODYQ3SG.cjs +1 -0
- package/dist/chunk-TVSQHTK2.cjs +1 -0
- package/dist/chunk-VGGJGRNK.cjs +1 -0
- package/dist/chunk-XSHOLIC7.cjs +1 -0
- package/dist/chunk-XTKUDSDK.cjs +1 -0
- package/dist/chunk-XWDB2LS3.cjs +1 -0
- package/dist/cli.js +3 -0
- package/dist/confirmation-view-5BZ2PP7J.cjs +1 -0
- package/dist/confirmation-view-Z5JHY2F5.js +1 -0
- package/dist/conformance.cjs +1 -0
- package/dist/conformance.d.cts +10 -0
- package/dist/conformance.d.ts +10 -0
- package/dist/conformance.js +1 -0
- package/dist/flow-parser.cjs +1 -0
- package/dist/flow-parser.d.cts +3 -0
- package/dist/flow-parser.d.ts +3 -0
- package/dist/flow-parser.js +1 -0
- package/dist/flows-panel-2SCPYZ3X.js +1 -0
- package/dist/flows-panel-HQYJMOP4.cjs +1 -0
- package/dist/form-extras-RNMBCYV7.cjs +1 -0
- package/dist/form-extras-X3B3JCMH.js +1 -0
- package/dist/form-fill-C32AHxSr.d.cts +653 -0
- package/dist/form-fill-Dp3ut1_Y.d.ts +653 -0
- package/dist/form-session.cjs +1 -0
- package/dist/form-session.d.cts +7 -0
- package/dist/form-session.d.ts +7 -0
- package/dist/form-session.js +1 -0
- package/dist/frame-decoder.cjs +3 -0
- package/dist/frame-decoder.d.cts +5 -0
- package/dist/frame-decoder.d.ts +5 -0
- package/dist/frame-decoder.js +3 -0
- package/dist/generated-C9tbjwK0.d.cts +797 -0
- package/dist/generated-C9tbjwK0.d.ts +797 -0
- package/dist/hooks/index.cjs +1 -0
- package/dist/hooks/index.d.cts +48 -0
- package/dist/hooks/index.d.ts +48 -0
- package/dist/hooks/index.js +1 -0
- package/dist/i18n-WC9f-h_q.d.cts +151 -0
- package/dist/i18n-WC9f-h_q.d.ts +151 -0
- package/dist/index-B5idIFTx.d.cts +34 -0
- package/dist/index-DPzoKXCK.d.ts +34 -0
- package/dist/index.cjs +3 -0
- package/dist/index.d.cts +38 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +3 -0
- package/dist/intent-BQPPows1.d.cts +154 -0
- package/dist/intent-BuvqEU3Q.d.ts +154 -0
- package/dist/intent.cjs +1 -0
- package/dist/intent.d.cts +2 -0
- package/dist/intent.d.ts +2 -0
- package/dist/intent.js +1 -0
- package/dist/markdown-5NUOCOGY.js +23 -0
- package/dist/markdown-CG7NXI7X.cjs +23 -0
- package/dist/message-actions-ORBVYGNE.cjs +1 -0
- package/dist/message-actions-XNBBFHGW.js +1 -0
- package/dist/messages/en/index.cjs +1 -0
- package/dist/messages/en/index.d.cts +3 -0
- package/dist/messages/en/index.d.ts +3 -0
- package/dist/messages/en/index.js +1 -0
- package/dist/messages/index.cjs +1 -0
- package/dist/messages/index.d.cts +14 -0
- package/dist/messages/index.d.ts +14 -0
- package/dist/messages/index.js +1 -0
- package/dist/messages/zh-Hans/index.cjs +1 -0
- package/dist/messages/zh-Hans/index.d.cts +3 -0
- package/dist/messages/zh-Hans/index.d.ts +3 -0
- package/dist/messages/zh-Hans/index.js +1 -0
- package/dist/on-demand.cjs +1 -0
- package/dist/on-demand.d.cts +56 -0
- package/dist/on-demand.d.ts +56 -0
- package/dist/on-demand.js +1 -0
- package/dist/problem-messages-THONMXFZ.cjs +1 -0
- package/dist/problem-messages-Z5QGO6RE.js +1 -0
- package/dist/react/index.cjs +1 -0
- package/dist/react/index.d.cts +421 -0
- package/dist/react/index.d.ts +421 -0
- package/dist/react/index.js +1 -0
- package/dist/reads-Bk84x_rt.d.ts +38 -0
- package/dist/reads-DlpCt8dE.d.cts +38 -0
- package/dist/recovery-panel-6EBUMANX.js +3 -0
- package/dist/recovery-panel-EQIIV7TT.cjs +3 -0
- package/dist/reply-controls-HUYHUO3W.js +1 -0
- package/dist/reply-controls-LGY2RKRJ.cjs +1 -0
- package/dist/run-XBABOEXK.js +1 -0
- package/dist/schema.json +2900 -0
- package/dist/skin-antd/index.cjs +1 -0
- package/dist/skin-antd/index.d.cts +30 -0
- package/dist/skin-antd/index.d.ts +30 -0
- package/dist/skin-antd/index.js +1 -0
- package/dist/skin-default/index.cjs +1 -0
- package/dist/skin-default/index.d.cts +42 -0
- package/dist/skin-default/index.d.ts +42 -0
- package/dist/skin-default/index.js +1 -0
- package/dist/step-name-BlgVvshf.d.ts +19 -0
- package/dist/step-name-CB3d3kkP.d.cts +19 -0
- package/dist/storage-commit.cjs +1 -0
- package/dist/storage-commit.d.cts +17 -0
- package/dist/storage-commit.d.ts +17 -0
- package/dist/storage-commit.js +1 -0
- package/dist/stream-reads.cjs +1 -0
- package/dist/stream-reads.d.cts +22 -0
- package/dist/stream-reads.d.ts +22 -0
- package/dist/stream-reads.js +1 -0
- package/dist/styles.css +811 -0
- package/dist/testing/index.cjs +1 -0
- package/dist/testing/index.d.cts +57 -0
- package/dist/testing/index.d.ts +57 -0
- package/dist/testing/index.js +1 -0
- package/docs/examples/message-versions.tsx +74 -0
- package/docs/form-fill-protocol.md +83 -0
- package/docs/message-versions.md +64 -0
- package/docs/plan-protocol.md +83 -0
- package/docs/reply-protocol.md +75 -0
- package/etc/hooks.api.md +2394 -0
- package/etc/index.api.md +2159 -0
- package/etc/messages-en.api.md +13 -0
- package/etc/messages-zh-Hans.api.md +13 -0
- package/etc/messages.api.md +186 -0
- package/etc/react.api.md +2977 -0
- package/etc/skin-antd.api.md +2998 -0
- package/etc/skin-default.api.md +61 -0
- package/etc/testing.api.md +3043 -0
- package/package.json +169 -4
package/dist/styles.css
ADDED
|
@@ -0,0 +1,811 @@
|
|
|
1
|
+
.waypoint {
|
|
2
|
+
/* Its padding and border count inside its width, so it is never wider
|
|
3
|
+
than its container (WCAG 1.4.10). */
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
max-inline-size: 100%;
|
|
6
|
+
container-type: inline-size;
|
|
7
|
+
color: var(--wp-foreground);
|
|
8
|
+
background: var(--wp-background);
|
|
9
|
+
font-family: var(--wp-font-family);
|
|
10
|
+
font-size: var(--wp-font-size);
|
|
11
|
+
border: 1px solid var(--wp-border);
|
|
12
|
+
border-radius: var(--wp-radius);
|
|
13
|
+
padding: var(--wp-space);
|
|
14
|
+
box-shadow: var(--wp-shadow);
|
|
15
|
+
}
|
|
16
|
+
.waypoint * {
|
|
17
|
+
box-sizing: border-box;
|
|
18
|
+
}
|
|
19
|
+
.waypoint .wp-shell {
|
|
20
|
+
display: grid;
|
|
21
|
+
grid-template-columns: minmax(8rem, 1fr) minmax(0, 3fr);
|
|
22
|
+
gap: var(--wp-space);
|
|
23
|
+
}
|
|
24
|
+
/* The plan column only while a plan is shown. */
|
|
25
|
+
.waypoint .wp-shell[data-has-aside] {
|
|
26
|
+
grid-template-columns: minmax(8rem, 1fr) minmax(0, 3fr) minmax(0, 1fr);
|
|
27
|
+
}
|
|
28
|
+
/* No rail column without a conversation list (or a host's own rail). */
|
|
29
|
+
.waypoint .wp-shell:not([data-has-rail]) {
|
|
30
|
+
grid-template-columns: minmax(0, 1fr);
|
|
31
|
+
}
|
|
32
|
+
.waypoint .wp-shell:not([data-has-rail])[data-has-aside] {
|
|
33
|
+
grid-template-columns: minmax(0, 3fr) minmax(0, 1fr);
|
|
34
|
+
}
|
|
35
|
+
.waypoint .wp-shell:not([data-has-rail]) > [data-part="rail"] {
|
|
36
|
+
display: none;
|
|
37
|
+
}
|
|
38
|
+
.waypoint main {
|
|
39
|
+
min-inline-size: 0;
|
|
40
|
+
}
|
|
41
|
+
/* In the conversation (narrow), the plan stands apart from what follows. */
|
|
42
|
+
.waypoint main > [data-plan] {
|
|
43
|
+
margin-block-end: var(--wp-space);
|
|
44
|
+
}
|
|
45
|
+
.waypoint [data-part] {
|
|
46
|
+
color: var(--wp-foreground);
|
|
47
|
+
transition: color var(--wp-motion) var(--wp-easing);
|
|
48
|
+
}
|
|
49
|
+
/* A visible focus ring, 3:1 against what is around it (WCAG 1.4.11). */
|
|
50
|
+
.waypoint :focus-visible {
|
|
51
|
+
outline: 2px solid var(--wp-focus-ring);
|
|
52
|
+
outline-offset: 2px;
|
|
53
|
+
}
|
|
54
|
+
/* Status by tone; the text always says it too. */
|
|
55
|
+
.waypoint [data-reply-state="writing"] {
|
|
56
|
+
color: var(--wp-muted);
|
|
57
|
+
}
|
|
58
|
+
.waypoint [data-reply-state="overdue"],
|
|
59
|
+
.waypoint [data-tone="warning"] {
|
|
60
|
+
color: var(--wp-warning);
|
|
61
|
+
}
|
|
62
|
+
.waypoint [data-reply-state="failed"],
|
|
63
|
+
.waypoint [data-reply-state="unavailable"],
|
|
64
|
+
.waypoint [data-reply-ended],
|
|
65
|
+
.waypoint [data-tone="danger"] {
|
|
66
|
+
color: var(--wp-danger);
|
|
67
|
+
}
|
|
68
|
+
.waypoint [data-tone="success"] {
|
|
69
|
+
color: var(--wp-success);
|
|
70
|
+
}
|
|
71
|
+
.waypoint [data-body-unavailable] [data-part="bubble"] {
|
|
72
|
+
display: none;
|
|
73
|
+
}
|
|
74
|
+
/* A bubble's text and its blocks are spaced like Markdown blocks. */
|
|
75
|
+
.waypoint [data-part="bubble"] > * + * {
|
|
76
|
+
margin-block-start: var(--wp-space);
|
|
77
|
+
}
|
|
78
|
+
.waypoint [data-part="bubble"] {
|
|
79
|
+
padding: var(--wp-space);
|
|
80
|
+
border-radius: var(--wp-radius);
|
|
81
|
+
background: var(--wp-surface);
|
|
82
|
+
margin-block-end: var(--wp-space);
|
|
83
|
+
}
|
|
84
|
+
/* Who wrote a message, first in its bubble and close to what it says. */
|
|
85
|
+
.waypoint [data-sender] {
|
|
86
|
+
display: block;
|
|
87
|
+
color: var(--wp-muted);
|
|
88
|
+
font-size: var(--wp-font-size-sm);
|
|
89
|
+
font-weight: 600;
|
|
90
|
+
}
|
|
91
|
+
.waypoint [data-sender] + * {
|
|
92
|
+
margin-block-start: var(--wp-space1);
|
|
93
|
+
}
|
|
94
|
+
/* The user's messages sit at the inline end on an accent-tinted surface,
|
|
95
|
+
the assistant's at the start on the surface. The tint is 16% in dark,
|
|
96
|
+
where the surfaces are closer, so the two read as far apart as in light.
|
|
97
|
+
It is used only where its colours are checked: waypoint's tokens, and a
|
|
98
|
+
host antd theme whose colours the antd skin can read (it checks or
|
|
99
|
+
adjusts them there). Under a `theme` prop, whose colours are not
|
|
100
|
+
checked, or colours the skin cannot read (the skin sets the same two
|
|
101
|
+
properties), the bubble keeps the plain surface, where those colours
|
|
102
|
+
already hold, with an accent start edge. */
|
|
103
|
+
/* Set on every chat, so an outer chat's or a host's values never leak in. */
|
|
104
|
+
.waypoint {
|
|
105
|
+
--wp-user-tint: 12%;
|
|
106
|
+
--wp-user-edge: 0px;
|
|
107
|
+
}
|
|
108
|
+
.waypoint[data-color-scheme="dark"] {
|
|
109
|
+
--wp-user-tint: 16%;
|
|
110
|
+
}
|
|
111
|
+
.waypoint[data-custom-theme] {
|
|
112
|
+
--wp-user-tint: 0%;
|
|
113
|
+
--wp-user-edge: 3px;
|
|
114
|
+
}
|
|
115
|
+
.waypoint article:is([data-role="user"], [data-role="pending"]) {
|
|
116
|
+
display: flex;
|
|
117
|
+
flex-direction: column;
|
|
118
|
+
align-items: flex-end;
|
|
119
|
+
}
|
|
120
|
+
.waypoint
|
|
121
|
+
article:is([data-role="user"], [data-role="pending"])
|
|
122
|
+
> [data-part="bubble"] {
|
|
123
|
+
max-inline-size: 85%;
|
|
124
|
+
background: color-mix(
|
|
125
|
+
in srgb,
|
|
126
|
+
var(--wp-accent) var(--wp-user-tint),
|
|
127
|
+
var(--wp-surface)
|
|
128
|
+
);
|
|
129
|
+
border-inline-start: var(--wp-user-edge) solid var(--wp-accent);
|
|
130
|
+
}
|
|
131
|
+
.waypoint .wp-outline {
|
|
132
|
+
margin-block-end: var(--wp-space);
|
|
133
|
+
}
|
|
134
|
+
.waypoint .wp-outline ol {
|
|
135
|
+
list-style: none;
|
|
136
|
+
/* Apart from the toggle, with a visible edge whatever the platform's
|
|
137
|
+
scrollbars do. */
|
|
138
|
+
margin: var(--wp-space1) 0 0;
|
|
139
|
+
padding: var(--wp-space1);
|
|
140
|
+
max-block-size: 12rem;
|
|
141
|
+
overflow: auto;
|
|
142
|
+
border-block: 1px solid var(--wp-border);
|
|
143
|
+
}
|
|
144
|
+
/* The filter spans the outline, so a narrow chat keeps it whole. */
|
|
145
|
+
.waypoint .wp-outline [data-outline-filter] {
|
|
146
|
+
margin-block-start: var(--wp-space1);
|
|
147
|
+
}
|
|
148
|
+
.waypoint .wp-outline [data-outline-filter] input {
|
|
149
|
+
box-sizing: border-box;
|
|
150
|
+
inline-size: 100%;
|
|
151
|
+
min-block-size: 24px;
|
|
152
|
+
}
|
|
153
|
+
.waypoint .wp-outline [data-outline-filter] [role="status"] {
|
|
154
|
+
margin: var(--wp-space1) 0 0;
|
|
155
|
+
}
|
|
156
|
+
.waypoint .wp-outline [data-outline-filter] [role="status"]:empty {
|
|
157
|
+
display: none;
|
|
158
|
+
}
|
|
159
|
+
/* Drawn inside the link, so the scroller never clips it; an outline, not a
|
|
160
|
+
shadow, so it stays under forced colors. */
|
|
161
|
+
.waypoint .wp-outline a:focus-visible {
|
|
162
|
+
outline: 2px solid var(--wp-focus-ring);
|
|
163
|
+
outline-offset: -2px;
|
|
164
|
+
}
|
|
165
|
+
.waypoint .wp-outline a {
|
|
166
|
+
/* A target of at least 24 by 24 px with room between (WCAG 2.5.8). */
|
|
167
|
+
display: block;
|
|
168
|
+
min-block-size: 24px;
|
|
169
|
+
min-inline-size: 24px;
|
|
170
|
+
padding-block: 2px;
|
|
171
|
+
margin-block: 2px;
|
|
172
|
+
}
|
|
173
|
+
.waypoint .wp-transcript {
|
|
174
|
+
overflow: auto;
|
|
175
|
+
max-block-size: 32rem;
|
|
176
|
+
overflow-anchor: none;
|
|
177
|
+
}
|
|
178
|
+
.waypoint [data-back-to-latest] {
|
|
179
|
+
flex-shrink: 0;
|
|
180
|
+
margin-block-start: var(--wp-space);
|
|
181
|
+
}
|
|
182
|
+
.waypoint textarea {
|
|
183
|
+
inline-size: 100%;
|
|
184
|
+
min-block-size: 3rem;
|
|
185
|
+
resize: vertical;
|
|
186
|
+
color: inherit;
|
|
187
|
+
background: var(--wp-background);
|
|
188
|
+
/* An input's boundary must be seen (3:1); the decorative border is not. */
|
|
189
|
+
border: 1px solid var(--wp-control-border);
|
|
190
|
+
border-radius: var(--wp-radius);
|
|
191
|
+
padding-inline: var(--wp-space);
|
|
192
|
+
}
|
|
193
|
+
.waypoint input:not([type="checkbox"], [type="radio"]),
|
|
194
|
+
.waypoint select {
|
|
195
|
+
border: 1px solid var(--wp-control-border);
|
|
196
|
+
}
|
|
197
|
+
/* Fields typed into (text, numbers, dates and any later such type) and
|
|
198
|
+
selects take the chat's colours, as the textarea does, not the user
|
|
199
|
+
agent's for the scheme; antd draws its own, and file, range and colour
|
|
200
|
+
inputs keep the platform's. */
|
|
201
|
+
.waypoint
|
|
202
|
+
input:not(
|
|
203
|
+
[type="file"],
|
|
204
|
+
[type="range"],
|
|
205
|
+
[type="color"],
|
|
206
|
+
[type="hidden"],
|
|
207
|
+
[type="checkbox"],
|
|
208
|
+
[type="radio"],
|
|
209
|
+
.ant-input,
|
|
210
|
+
.ant-picker *
|
|
211
|
+
),
|
|
212
|
+
.waypoint select {
|
|
213
|
+
color: inherit;
|
|
214
|
+
background: var(--wp-background);
|
|
215
|
+
}
|
|
216
|
+
/* The selected tab is marked by a thick accent edge, a cue that is not
|
|
217
|
+
colour alone, drawn inside it so selecting a tab moves nothing. */
|
|
218
|
+
.waypoint [role="tab"][aria-selected="true"] {
|
|
219
|
+
box-shadow: inset 0 -3px 0 var(--wp-accent);
|
|
220
|
+
}
|
|
221
|
+
.waypoint button,
|
|
222
|
+
.waypoint input {
|
|
223
|
+
font: inherit;
|
|
224
|
+
}
|
|
225
|
+
.waypoint button {
|
|
226
|
+
cursor: pointer;
|
|
227
|
+
margin-inline-end: var(--wp-space);
|
|
228
|
+
}
|
|
229
|
+
/* The space is between buttons: the last one in a group ends at the
|
|
230
|
+
group's edge, so a group aligned to the end lines up with what is above. */
|
|
231
|
+
.waypoint button:last-child,
|
|
232
|
+
.waypoint button:not(:has(~ button)) {
|
|
233
|
+
margin-inline-end: 0;
|
|
234
|
+
}
|
|
235
|
+
/* An empty status after a group's buttons (it says Copied, or Loading)
|
|
236
|
+
takes no place in the row, so the row ends at its last button; it stays
|
|
237
|
+
in the page, so what it says later is still announced. */
|
|
238
|
+
.waypoint [role="group"] > [role="status"]:empty {
|
|
239
|
+
position: absolute;
|
|
240
|
+
}
|
|
241
|
+
/* Neutral buttons are drawn from the tokens, so an unavailable one can
|
|
242
|
+
look different from an available one. */
|
|
243
|
+
.waypoint button:not(.ant-btn) {
|
|
244
|
+
color: var(--wp-foreground);
|
|
245
|
+
background: var(--wp-surface);
|
|
246
|
+
border: 1px solid var(--wp-control-border);
|
|
247
|
+
border-radius: var(--wp-radius);
|
|
248
|
+
padding: var(--wp-space1) var(--wp-space2);
|
|
249
|
+
}
|
|
250
|
+
.waypoint button:not(.ant-btn) {
|
|
251
|
+
transition: border-color var(--wp-motion-fast) var(--wp-easing);
|
|
252
|
+
}
|
|
253
|
+
.waypoint button:not(.ant-btn):hover:not(:disabled, [aria-disabled="true"]) {
|
|
254
|
+
border-color: var(--wp-accent);
|
|
255
|
+
}
|
|
256
|
+
/* An unavailable action: muted (still 4.5:1), no hover change, and still
|
|
257
|
+
focusable so its reason can be reached. */
|
|
258
|
+
.waypoint button:not(.ant-btn):is(:disabled, [aria-disabled="true"]),
|
|
259
|
+
.waypoint .ant-btn.ant-btn[aria-disabled="true"],
|
|
260
|
+
.waypoint .ant-btn.ant-btn[aria-disabled="true"]:hover {
|
|
261
|
+
color: var(--wp-muted);
|
|
262
|
+
cursor: not-allowed;
|
|
263
|
+
}
|
|
264
|
+
/* The conversation list has no bullets, wherever it is shown. */
|
|
265
|
+
.waypoint .wp-rail ul {
|
|
266
|
+
list-style: none;
|
|
267
|
+
margin: 0;
|
|
268
|
+
padding-inline-start: 0;
|
|
269
|
+
}
|
|
270
|
+
.waypoint .wp-rail li + li {
|
|
271
|
+
margin-block-start: var(--wp-space1);
|
|
272
|
+
}
|
|
273
|
+
.waypoint .wp-rail ul ul {
|
|
274
|
+
padding-inline-start: var(--wp-space);
|
|
275
|
+
}
|
|
276
|
+
.waypoint a {
|
|
277
|
+
color: var(--wp-accent);
|
|
278
|
+
}
|
|
279
|
+
.waypoint [role="alert"] {
|
|
280
|
+
color: var(--wp-danger);
|
|
281
|
+
}
|
|
282
|
+
/* A reply still streaming in says so under its text, with a dot that
|
|
283
|
+
pulses (still under reduced motion); the reply row says it once. */
|
|
284
|
+
.waypoint [data-writing] {
|
|
285
|
+
display: block;
|
|
286
|
+
color: var(--wp-muted);
|
|
287
|
+
font-size: var(--wp-font-size-sm);
|
|
288
|
+
}
|
|
289
|
+
.waypoint [data-writing]::before {
|
|
290
|
+
content: "";
|
|
291
|
+
display: inline-block;
|
|
292
|
+
inline-size: 0.5em;
|
|
293
|
+
block-size: 0.5em;
|
|
294
|
+
margin-inline-end: var(--wp-space1);
|
|
295
|
+
border-radius: 50%;
|
|
296
|
+
background: var(--wp-accent);
|
|
297
|
+
animation: wp-writing calc(var(--wp-motion-slow) * 4) var(--wp-easing)
|
|
298
|
+
infinite alternate;
|
|
299
|
+
}
|
|
300
|
+
@keyframes wp-writing {
|
|
301
|
+
to {
|
|
302
|
+
opacity: 0.25;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/* A message still being sent, or not sent, says so under its bubble. */
|
|
306
|
+
.waypoint [data-pending-status] {
|
|
307
|
+
margin-block: 0 var(--wp-space1);
|
|
308
|
+
color: var(--wp-muted);
|
|
309
|
+
font-size: var(--wp-font-size-sm);
|
|
310
|
+
}
|
|
311
|
+
.waypoint [data-pending-status="failed"] {
|
|
312
|
+
color: var(--wp-danger);
|
|
313
|
+
}
|
|
314
|
+
/* A message's problem, its action and its details sit at the message's
|
|
315
|
+
side, like "Not sent": an action that wraps stays there, and opening the
|
|
316
|
+
details moves nothing. */
|
|
317
|
+
.waypoint article > [role="alert"] {
|
|
318
|
+
justify-content: flex-end;
|
|
319
|
+
}
|
|
320
|
+
.waypoint article > [data-problem-details] {
|
|
321
|
+
align-self: stretch;
|
|
322
|
+
text-align: end;
|
|
323
|
+
}
|
|
324
|
+
/* A field's validation when it is invalid: the danger tone, with the word
|
|
325
|
+
"Invalid" in front as the cue that is not colour. */
|
|
326
|
+
.waypoint .wp-invalid {
|
|
327
|
+
color: var(--wp-danger);
|
|
328
|
+
}
|
|
329
|
+
/* A text field's label sits above it, at every width. */
|
|
330
|
+
.waypoint label > input:not([type="checkbox"], [type="radio"]) {
|
|
331
|
+
display: block;
|
|
332
|
+
}
|
|
333
|
+
.waypoint .wp-attachments,
|
|
334
|
+
.waypoint [role="tabpanel"] > ul {
|
|
335
|
+
padding-inline-start: 0;
|
|
336
|
+
list-style-type: none;
|
|
337
|
+
}
|
|
338
|
+
.waypoint .wp-attachments > li,
|
|
339
|
+
.waypoint [role="tabpanel"] > ul > li {
|
|
340
|
+
display: flex;
|
|
341
|
+
flex-wrap: wrap;
|
|
342
|
+
align-items: center;
|
|
343
|
+
gap: var(--wp-space1);
|
|
344
|
+
margin-block-end: var(--wp-space1);
|
|
345
|
+
}
|
|
346
|
+
/* A fill's suggestion for an edited field reads as one aside: a small
|
|
347
|
+
label over its value, its validation under it, its answers in a row. */
|
|
348
|
+
.waypoint [data-suggestion] {
|
|
349
|
+
display: grid;
|
|
350
|
+
gap: var(--wp-space1);
|
|
351
|
+
margin-block: var(--wp-space1);
|
|
352
|
+
padding-inline-start: var(--wp-space1);
|
|
353
|
+
border-inline-start: 3px solid var(--wp-accent);
|
|
354
|
+
}
|
|
355
|
+
.waypoint [data-suggestion] p {
|
|
356
|
+
margin: 0;
|
|
357
|
+
}
|
|
358
|
+
.waypoint [data-suggestion] > p:first-child {
|
|
359
|
+
color: var(--wp-muted);
|
|
360
|
+
font-size: var(--wp-font-size-sm);
|
|
361
|
+
font-weight: 600;
|
|
362
|
+
}
|
|
363
|
+
/* "Invalid" leads its first message on one line. */
|
|
364
|
+
.waypoint .wp-invalid > strong {
|
|
365
|
+
margin-inline-end: var(--wp-space1);
|
|
366
|
+
}
|
|
367
|
+
.waypoint .wp-invalid > strong + p {
|
|
368
|
+
display: inline;
|
|
369
|
+
}
|
|
370
|
+
/* A row of answers or actions; a reason wraps under them. */
|
|
371
|
+
.waypoint .wp-actions {
|
|
372
|
+
display: flex;
|
|
373
|
+
flex-wrap: wrap;
|
|
374
|
+
align-items: center;
|
|
375
|
+
gap: var(--wp-space1);
|
|
376
|
+
}
|
|
377
|
+
.waypoint .wp-actions > [data-reason] {
|
|
378
|
+
order: 1;
|
|
379
|
+
flex-basis: 100%;
|
|
380
|
+
}
|
|
381
|
+
/* A flow's parameters, one per line, with Run and its reason after them. */
|
|
382
|
+
.waypoint .wp-flow-form {
|
|
383
|
+
display: flex;
|
|
384
|
+
flex-direction: column;
|
|
385
|
+
align-items: start;
|
|
386
|
+
gap: var(--wp-space1);
|
|
387
|
+
}
|
|
388
|
+
/* An alert's action reads as its own control, not part of the sentence;
|
|
389
|
+
when it wraps, it lines up with the sentence's start. */
|
|
390
|
+
.waypoint [role="alert"]:has(> button) {
|
|
391
|
+
display: flex;
|
|
392
|
+
flex-wrap: wrap;
|
|
393
|
+
align-items: baseline;
|
|
394
|
+
gap: var(--wp-space1);
|
|
395
|
+
}
|
|
396
|
+
.waypoint [role="alert"] > button {
|
|
397
|
+
margin-inline: 0;
|
|
398
|
+
}
|
|
399
|
+
/* A plan step's facts (risk, undo, status): one row of separate items. */
|
|
400
|
+
.waypoint .wp-step-facts {
|
|
401
|
+
list-style: none;
|
|
402
|
+
margin: var(--wp-space1) 0 0;
|
|
403
|
+
padding: 0;
|
|
404
|
+
display: flex;
|
|
405
|
+
flex-wrap: wrap;
|
|
406
|
+
gap: var(--wp-space1) var(--wp-space);
|
|
407
|
+
}
|
|
408
|
+
/* Table columns stay apart at any font size. */
|
|
409
|
+
.waypoint table th,
|
|
410
|
+
.waypoint table td {
|
|
411
|
+
padding-inline: var(--wp-space1);
|
|
412
|
+
}
|
|
413
|
+
/* The toggle and the title share the top row; a long title wraps. */
|
|
414
|
+
.waypoint [data-part="topBar"] {
|
|
415
|
+
display: flex;
|
|
416
|
+
align-items: center;
|
|
417
|
+
gap: var(--wp-space1);
|
|
418
|
+
margin-block-end: var(--wp-space2);
|
|
419
|
+
}
|
|
420
|
+
.waypoint [data-part="topBar"] h2 {
|
|
421
|
+
margin-block: 0;
|
|
422
|
+
min-inline-size: 0;
|
|
423
|
+
overflow-wrap: anywhere;
|
|
424
|
+
}
|
|
425
|
+
.waypoint [data-rail-toggle] [aria-expanded="true"] {
|
|
426
|
+
box-shadow: inset 0 -2px 0 var(--wp-accent);
|
|
427
|
+
}
|
|
428
|
+
/* A drawer is a sheet over the chat and the page: it never moves the
|
|
429
|
+
chat, is at most the viewport tall, and its content scrolls inside it. */
|
|
430
|
+
.waypoint .wp-drawer {
|
|
431
|
+
position: fixed;
|
|
432
|
+
inset-block: 0;
|
|
433
|
+
inset-inline-end: 0;
|
|
434
|
+
z-index: 1000;
|
|
435
|
+
inline-size: min(24rem, 100%);
|
|
436
|
+
max-block-size: 100dvh;
|
|
437
|
+
display: flex;
|
|
438
|
+
flex-direction: column;
|
|
439
|
+
gap: var(--wp-space1);
|
|
440
|
+
padding: var(--wp-space);
|
|
441
|
+
color: var(--wp-foreground);
|
|
442
|
+
background: var(--wp-surface);
|
|
443
|
+
border-inline-start: 1px solid var(--wp-border);
|
|
444
|
+
box-shadow: var(--wp-shadow);
|
|
445
|
+
}
|
|
446
|
+
/* The sheet can be as wide as the viewport: its own ring is drawn inside,
|
|
447
|
+
in either skin. */
|
|
448
|
+
.waypoint .wp-drawer:focus-visible,
|
|
449
|
+
.waypoint .ant-drawer-content:focus-visible,
|
|
450
|
+
.waypoint :is(.wp-drawer, .ant-drawer-content) .wp-rail summary:focus-visible {
|
|
451
|
+
outline-offset: -2px;
|
|
452
|
+
}
|
|
453
|
+
.waypoint :is(.wp-drawer, .ant-drawer-content) .wp-rail summary {
|
|
454
|
+
margin-block: var(--wp-space1);
|
|
455
|
+
padding-inline: var(--wp-space1);
|
|
456
|
+
}
|
|
457
|
+
.waypoint .wp-drawer-header {
|
|
458
|
+
display: flex;
|
|
459
|
+
align-items: center;
|
|
460
|
+
justify-content: space-between;
|
|
461
|
+
gap: var(--wp-space1);
|
|
462
|
+
}
|
|
463
|
+
.waypoint .wp-drawer-header h2 {
|
|
464
|
+
margin: 0;
|
|
465
|
+
font-size: var(--wp-font-size-lg);
|
|
466
|
+
}
|
|
467
|
+
.waypoint .wp-drawer-header button {
|
|
468
|
+
margin-inline-end: 0;
|
|
469
|
+
}
|
|
470
|
+
.waypoint .wp-drawer-body {
|
|
471
|
+
flex: 1;
|
|
472
|
+
min-block-size: 0;
|
|
473
|
+
overflow-y: auto;
|
|
474
|
+
}
|
|
475
|
+
/* antd's drawer renders in place; over the viewport like the neutral one,
|
|
476
|
+
so its height is the viewport's and its body scrolls. */
|
|
477
|
+
.waypoint .ant-drawer-inline {
|
|
478
|
+
position: fixed;
|
|
479
|
+
}
|
|
480
|
+
.waypoint .wp-markdown {
|
|
481
|
+
overflow-wrap: anywhere;
|
|
482
|
+
}
|
|
483
|
+
/* Blocks are spaced by the token, not by the newlines between them; a soft
|
|
484
|
+
line break inside a paragraph or cell still breaks, and code keeps its
|
|
485
|
+
own whitespace. */
|
|
486
|
+
.waypoint .wp-markdown :is(p, td, th) {
|
|
487
|
+
white-space: pre-wrap;
|
|
488
|
+
}
|
|
489
|
+
.waypoint .wp-markdown > * {
|
|
490
|
+
margin-block: 0;
|
|
491
|
+
}
|
|
492
|
+
.waypoint .wp-markdown > * + * {
|
|
493
|
+
margin-block-start: var(--wp-space);
|
|
494
|
+
}
|
|
495
|
+
/* Table cells keep their words whole: a table wider than the bubble
|
|
496
|
+
scrolls inside its own region instead. */
|
|
497
|
+
.waypoint .wp-markdown :is(td, th) {
|
|
498
|
+
overflow-wrap: normal;
|
|
499
|
+
}
|
|
500
|
+
/* A task list shows its boxes, not bullets as well; the box is drawn from
|
|
501
|
+
the tokens so done and open read apart (the engine fades disabled
|
|
502
|
+
boxes), and an open box's edge keeps 3:1 against the bubble (WCAG
|
|
503
|
+
1.4.11), as the muted text colour does. */
|
|
504
|
+
.waypoint .wp-markdown .task-list-item {
|
|
505
|
+
list-style: none;
|
|
506
|
+
}
|
|
507
|
+
.waypoint .wp-markdown .task-list-item input[type="checkbox"] {
|
|
508
|
+
appearance: none;
|
|
509
|
+
inline-size: 1em;
|
|
510
|
+
block-size: 1em;
|
|
511
|
+
margin: 0 var(--wp-space1) 0 0;
|
|
512
|
+
vertical-align: -0.125em;
|
|
513
|
+
border: 1px solid var(--wp-muted);
|
|
514
|
+
border-radius: 2px;
|
|
515
|
+
background: var(--wp-background);
|
|
516
|
+
opacity: 1;
|
|
517
|
+
}
|
|
518
|
+
.waypoint .wp-markdown .task-list-item input[type="checkbox"]:checked {
|
|
519
|
+
background: var(--wp-foreground);
|
|
520
|
+
box-shadow: inset 0 0 0 2px var(--wp-background);
|
|
521
|
+
}
|
|
522
|
+
/* Forced colours drop backgrounds and shadows: bubbles keep a border and
|
|
523
|
+
the open toggle and the current row a visible edge. After the rules it
|
|
524
|
+
overrides, so it wins at equal specificity. */
|
|
525
|
+
@media (forced-colors: active) {
|
|
526
|
+
.waypoint [data-part="bubble"] {
|
|
527
|
+
border: 1px solid CanvasText;
|
|
528
|
+
}
|
|
529
|
+
.waypoint [data-rail-toggle] [aria-expanded="true"],
|
|
530
|
+
.waypoint [aria-current="page"] {
|
|
531
|
+
border-block-end: 2px solid Highlight;
|
|
532
|
+
}
|
|
533
|
+
/* The selected tab's inset edge is dropped with shadows: an outline,
|
|
534
|
+
which takes no space, marks it instead. */
|
|
535
|
+
.waypoint [role="tab"][aria-selected="true"] {
|
|
536
|
+
outline: 2px solid Highlight;
|
|
537
|
+
outline-offset: -2px;
|
|
538
|
+
}
|
|
539
|
+
/* An unavailable action in the system's unavailable colour. */
|
|
540
|
+
.waypoint button:not(.ant-btn):is(:disabled, [aria-disabled="true"]),
|
|
541
|
+
.waypoint .ant-btn.ant-btn[aria-disabled="true"] {
|
|
542
|
+
color: GrayText;
|
|
543
|
+
border-color: GrayText;
|
|
544
|
+
}
|
|
545
|
+
/* The token fill that marks a done task box would become the canvas;
|
|
546
|
+
drawn in the system's colours, it stays. */
|
|
547
|
+
.waypoint .wp-markdown .task-list-item input[type="checkbox"] {
|
|
548
|
+
border-color: CanvasText;
|
|
549
|
+
background: Canvas;
|
|
550
|
+
}
|
|
551
|
+
.waypoint .wp-markdown .task-list-item input[type="checkbox"]:checked {
|
|
552
|
+
background: CanvasText;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
/* A block quote is set in by the token behind a start border, not by the
|
|
556
|
+
engine's wide margins, so what it quotes fits a narrow bubble. */
|
|
557
|
+
.waypoint .wp-markdown blockquote {
|
|
558
|
+
margin-inline: 0;
|
|
559
|
+
padding-inline-start: var(--wp-space);
|
|
560
|
+
border-inline-start: 3px solid var(--wp-muted);
|
|
561
|
+
}
|
|
562
|
+
.waypoint .wp-markdown blockquote > * {
|
|
563
|
+
margin-block: 0;
|
|
564
|
+
}
|
|
565
|
+
.waypoint .wp-markdown blockquote > * + * {
|
|
566
|
+
margin-block-start: var(--wp-space);
|
|
567
|
+
}
|
|
568
|
+
/* An image never exceeds its bubble. */
|
|
569
|
+
.waypoint .wp-markdown img {
|
|
570
|
+
max-inline-size: 100%;
|
|
571
|
+
block-size: auto;
|
|
572
|
+
}
|
|
573
|
+
/* Code blocks and tables scroll inside themselves, never the transcript. */
|
|
574
|
+
.waypoint [data-scroll-region] {
|
|
575
|
+
max-inline-size: 100%;
|
|
576
|
+
overflow-x: auto;
|
|
577
|
+
}
|
|
578
|
+
/* Every control is a target of at least 24 by 24 px (WCAG 2.5.8), and 44
|
|
579
|
+
by 44 on a coarse pointer; inline links in message text are exempt. */
|
|
580
|
+
.waypoint button,
|
|
581
|
+
.waypoint select,
|
|
582
|
+
.waypoint summary,
|
|
583
|
+
.waypoint nav a,
|
|
584
|
+
.waypoint li > a,
|
|
585
|
+
.waypoint .wp-check,
|
|
586
|
+
.waypoint .ant-checkbox-wrapper,
|
|
587
|
+
.waypoint .ant-btn,
|
|
588
|
+
.waypoint .ant-input,
|
|
589
|
+
.waypoint .ant-picker {
|
|
590
|
+
min-block-size: 24px;
|
|
591
|
+
min-inline-size: 24px;
|
|
592
|
+
}
|
|
593
|
+
.waypoint nav a,
|
|
594
|
+
.waypoint li > a,
|
|
595
|
+
.waypoint .wp-check,
|
|
596
|
+
.waypoint .ant-checkbox-wrapper {
|
|
597
|
+
display: inline-flex;
|
|
598
|
+
align-items: center;
|
|
599
|
+
}
|
|
600
|
+
/* A checkbox's label is its target; the box itself takes the accent. */
|
|
601
|
+
.waypoint .wp-check {
|
|
602
|
+
gap: var(--wp-space1);
|
|
603
|
+
}
|
|
604
|
+
.waypoint input[type="checkbox"] {
|
|
605
|
+
accent-color: var(--wp-accent);
|
|
606
|
+
}
|
|
607
|
+
/* antd keeps button labels on one line at a fixed height; with enlarged
|
|
608
|
+
text that pushes the chat sideways, so labels wrap inside the chat. The
|
|
609
|
+
fixed height stays as the minimum: the skin passes antd's control height
|
|
610
|
+
(in px, unitless), the small and large sizes are 0.75 and 1.25 of it as
|
|
611
|
+
antd derives them, and a target is never under 24px (44px for a coarse
|
|
612
|
+
pointer, below). */
|
|
613
|
+
.waypoint .ant-btn {
|
|
614
|
+
--wp-target: 24px;
|
|
615
|
+
max-inline-size: 100%;
|
|
616
|
+
block-size: auto;
|
|
617
|
+
min-block-size: max(var(--wp-target), var(--wp-btn, 0) * 1px);
|
|
618
|
+
white-space: normal;
|
|
619
|
+
}
|
|
620
|
+
.waypoint .ant-btn-sm {
|
|
621
|
+
min-block-size: max(var(--wp-target), var(--wp-btn, 0) * 0.75px);
|
|
622
|
+
}
|
|
623
|
+
.waypoint .ant-btn-lg {
|
|
624
|
+
min-block-size: max(var(--wp-target), var(--wp-btn, 0) * 1.25px);
|
|
625
|
+
}
|
|
626
|
+
@media (pointer: coarse) {
|
|
627
|
+
.waypoint button,
|
|
628
|
+
.waypoint select,
|
|
629
|
+
.waypoint summary,
|
|
630
|
+
.waypoint nav a,
|
|
631
|
+
.waypoint li > a,
|
|
632
|
+
.waypoint .wp-check,
|
|
633
|
+
.waypoint .ant-checkbox-wrapper,
|
|
634
|
+
.waypoint .ant-btn,
|
|
635
|
+
.waypoint input:not([type="checkbox"], [type="radio"], [type="hidden"]),
|
|
636
|
+
.waypoint .ant-input,
|
|
637
|
+
.waypoint .ant-picker {
|
|
638
|
+
min-block-size: 44px;
|
|
639
|
+
min-inline-size: 44px;
|
|
640
|
+
}
|
|
641
|
+
.waypoint .ant-btn {
|
|
642
|
+
--wp-target: 44px;
|
|
643
|
+
}
|
|
644
|
+
/* An inline citation is a few characters wide: its touch area grows to
|
|
645
|
+
44 by 44 around it, and the text it sits in does not move. */
|
|
646
|
+
.waypoint a[data-wp-cite] {
|
|
647
|
+
position: relative;
|
|
648
|
+
}
|
|
649
|
+
.waypoint a[data-wp-cite]::after {
|
|
650
|
+
content: "";
|
|
651
|
+
position: absolute;
|
|
652
|
+
inset-block-start: 50%;
|
|
653
|
+
inset-inline-start: 50%;
|
|
654
|
+
inline-size: max(100%, 44px);
|
|
655
|
+
block-size: max(100%, 44px);
|
|
656
|
+
transform: translate(-50%, -50%);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
.waypoint .wp-sr {
|
|
660
|
+
position: absolute;
|
|
661
|
+
inline-size: 1px;
|
|
662
|
+
block-size: 1px;
|
|
663
|
+
overflow: hidden;
|
|
664
|
+
clip-path: inset(50%);
|
|
665
|
+
}
|
|
666
|
+
@container (max-width: 40rem) {
|
|
667
|
+
.waypoint .wp-shell,
|
|
668
|
+
.waypoint .wp-shell[data-has-aside],
|
|
669
|
+
.waypoint .wp-shell:not([data-has-rail])[data-has-aside] {
|
|
670
|
+
grid-template-columns: minmax(0, 1fr);
|
|
671
|
+
}
|
|
672
|
+
.waypoint [data-part="rail"] {
|
|
673
|
+
order: 2;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
.waypoint[data-layout="panel"] {
|
|
677
|
+
position: relative;
|
|
678
|
+
inline-size: 100%;
|
|
679
|
+
}
|
|
680
|
+
/* The page layout fills the page: the transcript takes the height left,
|
|
681
|
+
and the composer sits at the bottom. Other layouts keep the transcript's
|
|
682
|
+
cap, since their host decides their height. */
|
|
683
|
+
.waypoint[data-layout="page"] {
|
|
684
|
+
display: flex;
|
|
685
|
+
flex-direction: column;
|
|
686
|
+
}
|
|
687
|
+
.waypoint[data-layout="page"] > .wp-shell {
|
|
688
|
+
flex: 1;
|
|
689
|
+
min-block-size: 0;
|
|
690
|
+
}
|
|
691
|
+
/* Without a conversation list, the page's chat stays a readable width,
|
|
692
|
+
centred, instead of running lines across a wide screen. */
|
|
693
|
+
.waypoint[data-layout="page"] > .wp-shell:not([data-has-rail]) {
|
|
694
|
+
inline-size: 100%;
|
|
695
|
+
max-inline-size: 60rem;
|
|
696
|
+
margin-inline: auto;
|
|
697
|
+
}
|
|
698
|
+
.waypoint[data-layout="page"] main,
|
|
699
|
+
.waypoint[data-layout="page"] main > [data-part="transcript"],
|
|
700
|
+
.waypoint[data-layout="page"] main > [data-part="transcript"] > div {
|
|
701
|
+
display: flex;
|
|
702
|
+
flex-direction: column;
|
|
703
|
+
min-block-size: 0;
|
|
704
|
+
}
|
|
705
|
+
.waypoint[data-layout="page"] main > [data-part="transcript"],
|
|
706
|
+
.waypoint[data-layout="page"] main > [data-part="transcript"] > div,
|
|
707
|
+
.waypoint[data-layout="page"] .wp-transcript {
|
|
708
|
+
flex: 1;
|
|
709
|
+
}
|
|
710
|
+
.waypoint[data-layout="page"] .wp-transcript {
|
|
711
|
+
max-block-size: none;
|
|
712
|
+
}
|
|
713
|
+
.waypoint[data-layout="page"] {
|
|
714
|
+
inline-size: 100%;
|
|
715
|
+
min-block-size: 100dvh;
|
|
716
|
+
border: 0;
|
|
717
|
+
border-radius: 0;
|
|
718
|
+
}
|
|
719
|
+
.waypoint[data-layout="floating"] {
|
|
720
|
+
position: fixed;
|
|
721
|
+
inset-inline-end: var(--wp-space);
|
|
722
|
+
inset-block-end: var(--wp-space);
|
|
723
|
+
inline-size: min(32rem, calc(100% - 2 * var(--wp-space)));
|
|
724
|
+
max-block-size: calc(100dvh - 2 * var(--wp-space));
|
|
725
|
+
overflow: auto;
|
|
726
|
+
}
|
|
727
|
+
.waypoint[data-layout="sheet"] {
|
|
728
|
+
position: fixed;
|
|
729
|
+
inset-inline: 0;
|
|
730
|
+
inset-block-end: 0;
|
|
731
|
+
inline-size: 100%;
|
|
732
|
+
max-block-size: 80dvh;
|
|
733
|
+
overflow: auto;
|
|
734
|
+
border-end-start-radius: 0;
|
|
735
|
+
border-end-end-radius: 0;
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
/* The adornment takes its own column beside the field instead of lying
|
|
739
|
+
over it, so the field's end (where long text and the caret go) is never
|
|
740
|
+
covered; the field narrows only while the adornment is shown. */
|
|
741
|
+
.wp-field-parent {
|
|
742
|
+
display: grid;
|
|
743
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
744
|
+
column-gap: 0.25rem;
|
|
745
|
+
align-items: start;
|
|
746
|
+
}
|
|
747
|
+
.wp-field-parent > * {
|
|
748
|
+
grid-column: 1;
|
|
749
|
+
}
|
|
750
|
+
.wp-field-parent > .wp-field-adornment {
|
|
751
|
+
grid-column: 2;
|
|
752
|
+
grid-row: 1;
|
|
753
|
+
}
|
|
754
|
+
/* A suggestion spans the adornment's column too, so its answers fit on
|
|
755
|
+
one row at narrow widths. */
|
|
756
|
+
.wp-field-parent > :has(> [data-suggestion]) {
|
|
757
|
+
grid-column: 1 / -1;
|
|
758
|
+
}
|
|
759
|
+
.wp-sr-only {
|
|
760
|
+
position: absolute;
|
|
761
|
+
width: 1px;
|
|
762
|
+
height: 1px;
|
|
763
|
+
padding: 0;
|
|
764
|
+
overflow: hidden;
|
|
765
|
+
clip-path: inset(50%);
|
|
766
|
+
white-space: nowrap;
|
|
767
|
+
}
|
|
768
|
+
/* Under reduced motion a reply being written fades in rather than typing
|
|
769
|
+
out: a change of opacity only, nothing moves. */
|
|
770
|
+
@keyframes wp-fade-in {
|
|
771
|
+
from {
|
|
772
|
+
opacity: 0.4;
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
/* A message's actions and the reply's controls sit in one wrapping row. */
|
|
776
|
+
.waypoint [data-part="messageActions"] [role="group"],
|
|
777
|
+
.waypoint [data-version-walk],
|
|
778
|
+
.waypoint [data-reply-controls] {
|
|
779
|
+
display: flex;
|
|
780
|
+
flex-wrap: wrap;
|
|
781
|
+
align-items: center;
|
|
782
|
+
gap: var(--wp-space1);
|
|
783
|
+
}
|
|
784
|
+
/* What ends a message (its actions, a failed message's controls and its
|
|
785
|
+
problem's details) and the reply's controls end with the chat's spacing,
|
|
786
|
+
as a bubble does, so they never touch the next message or the row
|
|
787
|
+
below. */
|
|
788
|
+
.waypoint [data-part="messageActions"] [role="group"],
|
|
789
|
+
.waypoint [data-part="failedSendControls"]:not(:empty),
|
|
790
|
+
.waypoint article > [data-problem-details],
|
|
791
|
+
.waypoint [data-reply-controls] {
|
|
792
|
+
margin-block-end: var(--wp-space);
|
|
793
|
+
}
|
|
794
|
+
/* Previous points the way the reading goes back. */
|
|
795
|
+
.waypoint[dir="rtl"] [data-version-walk] > button {
|
|
796
|
+
transform: scaleX(-1);
|
|
797
|
+
}
|
|
798
|
+
/* Reduced motion: nothing inside the chat animates, generated effects such
|
|
799
|
+
as a skin's click wave included; state still changes, at once. */
|
|
800
|
+
@media (prefers-reduced-motion: reduce) {
|
|
801
|
+
.waypoint *,
|
|
802
|
+
.waypoint *::before,
|
|
803
|
+
.waypoint *::after {
|
|
804
|
+
transition-duration: 0s !important;
|
|
805
|
+
animation-duration: 0s !important;
|
|
806
|
+
animation-iteration-count: 1 !important;
|
|
807
|
+
}
|
|
808
|
+
.waypoint .wp-markdown[data-fade] {
|
|
809
|
+
animation: wp-fade-in 240ms ease-out !important;
|
|
810
|
+
}
|
|
811
|
+
}
|