@slopus/happy-agent-client 0.0.111 → 0.0.112
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 +12 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/protocol/mediaLayoutStyle.d.ts +179 -0
- package/dist/protocol/mediaLayoutStyle.d.ts.map +1 -0
- package/dist/protocol/mediaLayoutStyle.js +457 -0
- package/dist/protocol/mediaLayoutStyle.js.map +1 -0
- package/dist/protocol/messages.d.ts +641 -3
- package/dist/protocol/messages.d.ts.map +1 -1
- package/dist/protocol/messages.js +63 -3
- package/dist/protocol/messages.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CSS subset a media layout may use: the properties, and the grammar every value must match.
|
|
3
|
+
*
|
|
4
|
+
* Values travel as normalized CSS text, never as free text: the daemon emits only values this
|
|
5
|
+
* grammar accepts, and a client checks each again with `mediaLayoutStyleValue` before using it.
|
|
6
|
+
* The grammar admits lowercase keywords, non-negative numbers, the units `px`, `%`, `em`, `rem`,
|
|
7
|
+
* and `fr`, and the functions `repeat`, `minmax`, and `fit-content`. Nothing it accepts can load a
|
|
8
|
+
* resource, name a colour, or place anything outside the layout.
|
|
9
|
+
*/
|
|
10
|
+
import { Type } from "@sinclair/typebox";
|
|
11
|
+
const FUNCTIONS = new Set(["repeat", "minmax", "fit-content"]);
|
|
12
|
+
const MAX_PX = 4000;
|
|
13
|
+
const MAX_EM = 100;
|
|
14
|
+
const MAX_FR = 100;
|
|
15
|
+
const MAX_GRID_LINE = 24;
|
|
16
|
+
const MAX_TRACKS = 24;
|
|
17
|
+
/** Split a value into words, slashes, commas, and the few functions the grammar knows. */
|
|
18
|
+
function parse(value) {
|
|
19
|
+
if (!/^[a-z0-9 .,%()/+-]*$/u.test(value))
|
|
20
|
+
return undefined;
|
|
21
|
+
let position = 0;
|
|
22
|
+
const list = (depth) => {
|
|
23
|
+
const components = [];
|
|
24
|
+
while (position < value.length) {
|
|
25
|
+
const character = value[position];
|
|
26
|
+
if (character === " ") {
|
|
27
|
+
position += 1;
|
|
28
|
+
}
|
|
29
|
+
else if (character === "/") {
|
|
30
|
+
components.push({ kind: "slash" });
|
|
31
|
+
position += 1;
|
|
32
|
+
}
|
|
33
|
+
else if (character === ",") {
|
|
34
|
+
components.push({ kind: "comma" });
|
|
35
|
+
position += 1;
|
|
36
|
+
}
|
|
37
|
+
else if (character === ")") {
|
|
38
|
+
if (depth === 0)
|
|
39
|
+
return undefined;
|
|
40
|
+
position += 1;
|
|
41
|
+
return components;
|
|
42
|
+
}
|
|
43
|
+
else if (character === "(") {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const word = /^[a-z0-9.%+-]+/u.exec(value.slice(position))[0];
|
|
48
|
+
position += word.length;
|
|
49
|
+
if (value[position] === "(") {
|
|
50
|
+
if (!FUNCTIONS.has(word) || depth >= 2)
|
|
51
|
+
return undefined;
|
|
52
|
+
position += 1;
|
|
53
|
+
const args = list(depth + 1);
|
|
54
|
+
if (args === undefined)
|
|
55
|
+
return undefined;
|
|
56
|
+
components.push({ kind: "function", name: word, args });
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
components.push({ kind: "word", text: word });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return depth === 0 ? components : undefined;
|
|
64
|
+
};
|
|
65
|
+
return list(0);
|
|
66
|
+
}
|
|
67
|
+
function serialize(components) {
|
|
68
|
+
let text = "";
|
|
69
|
+
for (const component of components) {
|
|
70
|
+
if (component.kind === "comma") {
|
|
71
|
+
text += ", ";
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (text !== "" && !text.endsWith(", "))
|
|
75
|
+
text += " ";
|
|
76
|
+
if (component.kind === "slash")
|
|
77
|
+
text += "/";
|
|
78
|
+
else if (component.kind === "word")
|
|
79
|
+
text += component.text;
|
|
80
|
+
else
|
|
81
|
+
text += `${component.name}(${serialize(component.args)})`;
|
|
82
|
+
}
|
|
83
|
+
return text;
|
|
84
|
+
}
|
|
85
|
+
function words(components) {
|
|
86
|
+
const texts = [];
|
|
87
|
+
for (const component of components) {
|
|
88
|
+
if (component.kind !== "word")
|
|
89
|
+
return undefined;
|
|
90
|
+
texts.push(component.text);
|
|
91
|
+
}
|
|
92
|
+
return texts;
|
|
93
|
+
}
|
|
94
|
+
/** Split on commas, or on slashes, at the top level. */
|
|
95
|
+
function split(components, kind) {
|
|
96
|
+
const parts = [[]];
|
|
97
|
+
for (const component of components) {
|
|
98
|
+
if (component.kind === kind)
|
|
99
|
+
parts.push([]);
|
|
100
|
+
else
|
|
101
|
+
parts[parts.length - 1].push(component);
|
|
102
|
+
}
|
|
103
|
+
return parts;
|
|
104
|
+
}
|
|
105
|
+
function number(text) {
|
|
106
|
+
return /^(\d+(\.\d+)?|\.\d+)$/u.test(text) ? Number(text) : undefined;
|
|
107
|
+
}
|
|
108
|
+
function dimension(text) {
|
|
109
|
+
const match = /^(\d+(?:\.\d+)?|\.\d+)(px|%|em|rem|fr)$/u.exec(text);
|
|
110
|
+
return match === null ? undefined : { value: Number(match[1]), unit: match[2] };
|
|
111
|
+
}
|
|
112
|
+
/** `0`, or a non-negative px, %, em, or rem length within bounds. */
|
|
113
|
+
function lengthPercentage(text) {
|
|
114
|
+
if (text === "0")
|
|
115
|
+
return true;
|
|
116
|
+
const found = dimension(text);
|
|
117
|
+
if (found === undefined)
|
|
118
|
+
return false;
|
|
119
|
+
switch (found.unit) {
|
|
120
|
+
case "px":
|
|
121
|
+
return found.value <= MAX_PX;
|
|
122
|
+
case "%":
|
|
123
|
+
return found.value <= 100;
|
|
124
|
+
case "em":
|
|
125
|
+
case "rem":
|
|
126
|
+
return found.value <= MAX_EM;
|
|
127
|
+
default:
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function keyword(...allowed) {
|
|
132
|
+
const set = new Set(allowed);
|
|
133
|
+
return (components) => {
|
|
134
|
+
const texts = words(components);
|
|
135
|
+
return texts !== undefined && texts.length > 0 && set.has(texts.join(" "));
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/** One to `most` words, each accepted by `accept`. */
|
|
139
|
+
function each(accept, most) {
|
|
140
|
+
return (components) => {
|
|
141
|
+
const texts = words(components);
|
|
142
|
+
return (texts !== undefined && texts.length >= 1 && texts.length <= most && texts.every(accept));
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/** One value, then optionally a second, as `place-*` and `flex-flow` take them. */
|
|
146
|
+
function pair(first, second) {
|
|
147
|
+
return (components) => {
|
|
148
|
+
if (first(components))
|
|
149
|
+
return true;
|
|
150
|
+
// Keywords such as `first baseline` are two words, so try every split.
|
|
151
|
+
for (let index = 1; index < components.length; index += 1) {
|
|
152
|
+
if (first(components.slice(0, index)) && second(components.slice(index)))
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
return false;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function either(...grammars) {
|
|
159
|
+
return (components) => grammars.some((grammar) => grammar(components));
|
|
160
|
+
}
|
|
161
|
+
const sizeKeywords = ["auto", "min-content", "max-content", "fit-content"];
|
|
162
|
+
const size = either(keyword(...sizeKeywords), (components) => each(lengthPercentage, 1)(components), (components) => fitContent(components));
|
|
163
|
+
const maxSize = either(keyword("none"), size);
|
|
164
|
+
function fitContent(components) {
|
|
165
|
+
const [only] = components;
|
|
166
|
+
if (components.length !== 1 || only?.kind !== "function" || only.name !== "fit-content") {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
return each(lengthPercentage, 1)(only.args);
|
|
170
|
+
}
|
|
171
|
+
const spacing = each(lengthPercentage, 1);
|
|
172
|
+
const margin = each((text) => text === "auto" || lengthPercentage(text), 1);
|
|
173
|
+
const contentPosition = ["normal", "start", "end", "center", "flex-start", "flex-end"];
|
|
174
|
+
const distribution = ["space-between", "space-around", "space-evenly", "stretch"];
|
|
175
|
+
const baseline = ["baseline", "first baseline", "last baseline"];
|
|
176
|
+
const selfPosition = ["self-start", "self-end"];
|
|
177
|
+
const justifyContent = keyword(...contentPosition, ...distribution, "left", "right");
|
|
178
|
+
const alignContent = keyword(...contentPosition, ...distribution, ...baseline);
|
|
179
|
+
const justifyItems = keyword("normal", "stretch", "start", "end", "center", "flex-start", "flex-end", "left", "right", ...selfPosition, ...baseline);
|
|
180
|
+
const alignItems = keyword("normal", "stretch", "start", "end", "center", "flex-start", "flex-end", ...selfPosition, ...baseline);
|
|
181
|
+
const justifySelf = either(keyword("auto"), justifyItems);
|
|
182
|
+
const alignSelf = either(keyword("auto"), alignItems);
|
|
183
|
+
/** A track breadth: a length, an `fr` share, or a content keyword. */
|
|
184
|
+
function trackBreadth(text, flexible) {
|
|
185
|
+
if (["auto", "min-content", "max-content"].includes(text))
|
|
186
|
+
return true;
|
|
187
|
+
const found = dimension(text);
|
|
188
|
+
if (flexible && found?.unit === "fr")
|
|
189
|
+
return found.value > 0 && found.value <= MAX_FR;
|
|
190
|
+
return lengthPercentage(text);
|
|
191
|
+
}
|
|
192
|
+
/** One track; returns how many tracks it is, or undefined when invalid. */
|
|
193
|
+
function trackSize(component) {
|
|
194
|
+
if (component.kind === "word")
|
|
195
|
+
return trackBreadth(component.text, true) ? 1 : undefined;
|
|
196
|
+
if (component.kind !== "function")
|
|
197
|
+
return undefined;
|
|
198
|
+
if (component.name === "fit-content")
|
|
199
|
+
return fitContent([component]) ? 1 : undefined;
|
|
200
|
+
if (component.name !== "minmax")
|
|
201
|
+
return undefined;
|
|
202
|
+
const parts = split(component.args, "comma");
|
|
203
|
+
const [min, max] = parts.map(words);
|
|
204
|
+
return parts.length === 2 &&
|
|
205
|
+
min?.length === 1 &&
|
|
206
|
+
max?.length === 1 &&
|
|
207
|
+
trackBreadth(min[0], false) &&
|
|
208
|
+
trackBreadth(max[0], true)
|
|
209
|
+
? 1
|
|
210
|
+
: undefined;
|
|
211
|
+
}
|
|
212
|
+
/** `none`, or up to 24 tracks, where `repeat(N | auto-fill | auto-fit, tracks…)` counts its tracks. */
|
|
213
|
+
const trackList = (components) => {
|
|
214
|
+
if (keyword("none")(components))
|
|
215
|
+
return true;
|
|
216
|
+
if (components.length === 0)
|
|
217
|
+
return false;
|
|
218
|
+
let tracks = 0;
|
|
219
|
+
for (const component of components) {
|
|
220
|
+
if (component.kind === "function" && component.name === "repeat") {
|
|
221
|
+
const parts = split(component.args, "comma");
|
|
222
|
+
const count = words(parts[0] ?? []);
|
|
223
|
+
if (parts.length !== 2 || count?.length !== 1)
|
|
224
|
+
return false;
|
|
225
|
+
const repeats = count[0] === "auto-fill" || count[0] === "auto-fit" ? 1 : Number(count[0]);
|
|
226
|
+
if (!Number.isInteger(repeats) || repeats < 1 || repeats > MAX_TRACKS)
|
|
227
|
+
return false;
|
|
228
|
+
const inner = parts[1];
|
|
229
|
+
if (inner.length === 0)
|
|
230
|
+
return false;
|
|
231
|
+
for (const track of inner) {
|
|
232
|
+
const counted = trackSize(track);
|
|
233
|
+
if (counted === undefined)
|
|
234
|
+
return false;
|
|
235
|
+
tracks += counted * repeats;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const counted = trackSize(component);
|
|
240
|
+
if (counted === undefined)
|
|
241
|
+
return false;
|
|
242
|
+
tracks += counted;
|
|
243
|
+
}
|
|
244
|
+
if (tracks > MAX_TRACKS)
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
return true;
|
|
248
|
+
};
|
|
249
|
+
const autoTracks = (components) => components.length >= 1 &&
|
|
250
|
+
components.length <= MAX_TRACKS &&
|
|
251
|
+
components.every((component) => trackSize(component) !== undefined);
|
|
252
|
+
/** `auto`, a line number from -24 to 24 other than 0, or `span N`. */
|
|
253
|
+
const gridLine = (components) => {
|
|
254
|
+
const texts = words(components);
|
|
255
|
+
if (texts === undefined)
|
|
256
|
+
return false;
|
|
257
|
+
if (texts.length === 1) {
|
|
258
|
+
if (texts[0] === "auto")
|
|
259
|
+
return true;
|
|
260
|
+
if (!/^-?\d+$/u.test(texts[0]))
|
|
261
|
+
return false;
|
|
262
|
+
const line = Number(texts[0]);
|
|
263
|
+
return line !== 0 && Math.abs(line) <= MAX_GRID_LINE;
|
|
264
|
+
}
|
|
265
|
+
if (texts.length === 2 && texts[0] === "span" && /^\d+$/u.test(texts[1])) {
|
|
266
|
+
const span = Number(texts[1]);
|
|
267
|
+
return span >= 1 && span <= MAX_GRID_LINE;
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
};
|
|
271
|
+
const gridLines = (components) => {
|
|
272
|
+
const parts = split(components, "slash");
|
|
273
|
+
return parts.length <= 2 && parts.every(gridLine);
|
|
274
|
+
};
|
|
275
|
+
const ratio = (components) => {
|
|
276
|
+
const parts = split(components, "slash");
|
|
277
|
+
if (parts.length > 2)
|
|
278
|
+
return false;
|
|
279
|
+
const values = parts.map((part) => {
|
|
280
|
+
const texts = words(part);
|
|
281
|
+
return texts?.length === 1 ? number(texts[0]) : undefined;
|
|
282
|
+
});
|
|
283
|
+
return values.every((value) => value !== undefined && value > 0 && value <= 10_000);
|
|
284
|
+
};
|
|
285
|
+
const aspectRatio = (components) => {
|
|
286
|
+
if (keyword("auto")(components))
|
|
287
|
+
return true;
|
|
288
|
+
const [first] = components;
|
|
289
|
+
if (first?.kind === "word" && first.text === "auto")
|
|
290
|
+
return ratio(components.slice(1));
|
|
291
|
+
const last = components[components.length - 1];
|
|
292
|
+
if (last?.kind === "word" && last.text === "auto")
|
|
293
|
+
return ratio(components.slice(0, -1));
|
|
294
|
+
return ratio(components);
|
|
295
|
+
};
|
|
296
|
+
const flexFactor = (text) => {
|
|
297
|
+
const value = number(text);
|
|
298
|
+
return value !== undefined && value <= 100;
|
|
299
|
+
};
|
|
300
|
+
const flexBasis = either(keyword("content"), size);
|
|
301
|
+
/** `none`, `auto`, a basis, or a grow factor followed by an optional shrink and basis. */
|
|
302
|
+
const flex = (components) => {
|
|
303
|
+
if (keyword("none", "auto")(components))
|
|
304
|
+
return true;
|
|
305
|
+
const texts = words(components);
|
|
306
|
+
if (texts !== undefined && texts.length >= 1 && texts.length <= 3 && flexFactor(texts[0])) {
|
|
307
|
+
if (texts.length === 1)
|
|
308
|
+
return true;
|
|
309
|
+
if (texts.length === 2) {
|
|
310
|
+
return flexFactor(texts[1]) || flexBasis(components.slice(1));
|
|
311
|
+
}
|
|
312
|
+
return flexFactor(texts[1]) && flexBasis(components.slice(2));
|
|
313
|
+
}
|
|
314
|
+
return flexBasis(components);
|
|
315
|
+
};
|
|
316
|
+
const position = ["left", "center", "right", "top", "bottom"];
|
|
317
|
+
const objectPosition = each((text) => position.includes(text) || lengthPercentage(text), 2);
|
|
318
|
+
const lineHeight = either(keyword("normal"), (components) => {
|
|
319
|
+
const texts = words(components);
|
|
320
|
+
if (texts?.length !== 1)
|
|
321
|
+
return false;
|
|
322
|
+
const value = number(texts[0]);
|
|
323
|
+
if (value !== undefined)
|
|
324
|
+
return value <= 10;
|
|
325
|
+
return lengthPercentage(texts[0]);
|
|
326
|
+
});
|
|
327
|
+
const fontWeight = either(keyword("normal", "bold", "bolder", "lighter"), (components) => {
|
|
328
|
+
const texts = words(components);
|
|
329
|
+
if (texts?.length !== 1 || !/^\d+$/u.test(texts[0]))
|
|
330
|
+
return false;
|
|
331
|
+
const weight = Number(texts[0]);
|
|
332
|
+
return weight >= 1 && weight <= 1000;
|
|
333
|
+
});
|
|
334
|
+
const borderRadius = each((text) => {
|
|
335
|
+
if (text === "0")
|
|
336
|
+
return true;
|
|
337
|
+
const found = dimension(text);
|
|
338
|
+
return found?.unit === "px" && found.value <= 999;
|
|
339
|
+
}, 4);
|
|
340
|
+
const overflow = keyword("visible", "hidden", "clip");
|
|
341
|
+
/**
|
|
342
|
+
* Every property a layout may set: its CSS name, the key it is carried under, and its grammar.
|
|
343
|
+
* Keys are the camelCase names a React style object uses. `tone` and `fontSize` are the two that
|
|
344
|
+
* are not CSS: a theme text tone in place of a colour, and four named type steps.
|
|
345
|
+
*/
|
|
346
|
+
const PROPERTIES = {
|
|
347
|
+
display: [
|
|
348
|
+
"display",
|
|
349
|
+
keyword("block", "inline", "inline-block", "flex", "inline-flex", "grid", "inline-grid", "none"),
|
|
350
|
+
],
|
|
351
|
+
flexDirection: ["flex-direction", keyword("row", "row-reverse", "column", "column-reverse")],
|
|
352
|
+
flexWrap: ["flex-wrap", keyword("nowrap", "wrap", "wrap-reverse")],
|
|
353
|
+
flexFlow: [
|
|
354
|
+
"flex-flow",
|
|
355
|
+
pair(keyword("row", "row-reverse", "column", "column-reverse", "nowrap", "wrap", "wrap-reverse"), keyword("nowrap", "wrap", "wrap-reverse")),
|
|
356
|
+
],
|
|
357
|
+
flex: ["flex", flex],
|
|
358
|
+
flexGrow: ["flex-grow", each(flexFactor, 1)],
|
|
359
|
+
flexShrink: ["flex-shrink", each(flexFactor, 1)],
|
|
360
|
+
flexBasis: ["flex-basis", flexBasis],
|
|
361
|
+
order: ["order", each((text) => /^-?\d+$/u.test(text) && Math.abs(Number(text)) <= 100, 1)],
|
|
362
|
+
justifyContent: ["justify-content", justifyContent],
|
|
363
|
+
alignContent: ["align-content", alignContent],
|
|
364
|
+
placeContent: ["place-content", pair(alignContent, justifyContent)],
|
|
365
|
+
justifyItems: ["justify-items", justifyItems],
|
|
366
|
+
alignItems: ["align-items", alignItems],
|
|
367
|
+
placeItems: ["place-items", pair(alignItems, justifyItems)],
|
|
368
|
+
justifySelf: ["justify-self", justifySelf],
|
|
369
|
+
alignSelf: ["align-self", alignSelf],
|
|
370
|
+
placeSelf: ["place-self", pair(alignSelf, justifySelf)],
|
|
371
|
+
gap: ["gap", each((text) => text === "normal" || lengthPercentage(text), 2)],
|
|
372
|
+
rowGap: ["row-gap", each((text) => text === "normal" || lengthPercentage(text), 1)],
|
|
373
|
+
columnGap: ["column-gap", each((text) => text === "normal" || lengthPercentage(text), 1)],
|
|
374
|
+
gridTemplateColumns: ["grid-template-columns", trackList],
|
|
375
|
+
gridTemplateRows: ["grid-template-rows", trackList],
|
|
376
|
+
gridAutoColumns: ["grid-auto-columns", autoTracks],
|
|
377
|
+
gridAutoRows: ["grid-auto-rows", autoTracks],
|
|
378
|
+
gridAutoFlow: [
|
|
379
|
+
"grid-auto-flow",
|
|
380
|
+
keyword("row", "column", "dense", "row dense", "column dense", "dense row", "dense column"),
|
|
381
|
+
],
|
|
382
|
+
gridColumn: ["grid-column", gridLines],
|
|
383
|
+
gridRow: ["grid-row", gridLines],
|
|
384
|
+
gridColumnStart: ["grid-column-start", gridLine],
|
|
385
|
+
gridColumnEnd: ["grid-column-end", gridLine],
|
|
386
|
+
gridRowStart: ["grid-row-start", gridLine],
|
|
387
|
+
gridRowEnd: ["grid-row-end", gridLine],
|
|
388
|
+
width: ["width", size],
|
|
389
|
+
height: ["height", size],
|
|
390
|
+
minWidth: ["min-width", size],
|
|
391
|
+
minHeight: ["min-height", size],
|
|
392
|
+
maxWidth: ["max-width", maxSize],
|
|
393
|
+
maxHeight: ["max-height", maxSize],
|
|
394
|
+
aspectRatio: ["aspect-ratio", aspectRatio],
|
|
395
|
+
boxSizing: ["box-sizing", keyword("content-box", "border-box")],
|
|
396
|
+
padding: ["padding", each(lengthPercentage, 4)],
|
|
397
|
+
paddingTop: ["padding-top", spacing],
|
|
398
|
+
paddingRight: ["padding-right", spacing],
|
|
399
|
+
paddingBottom: ["padding-bottom", spacing],
|
|
400
|
+
paddingLeft: ["padding-left", spacing],
|
|
401
|
+
margin: ["margin", each((text) => text === "auto" || lengthPercentage(text), 4)],
|
|
402
|
+
marginTop: ["margin-top", margin],
|
|
403
|
+
marginRight: ["margin-right", margin],
|
|
404
|
+
marginBottom: ["margin-bottom", margin],
|
|
405
|
+
marginLeft: ["margin-left", margin],
|
|
406
|
+
borderRadius: ["border-radius", borderRadius],
|
|
407
|
+
overflow: ["overflow", pair(overflow, overflow)],
|
|
408
|
+
overflowX: ["overflow-x", overflow],
|
|
409
|
+
overflowY: ["overflow-y", overflow],
|
|
410
|
+
objectFit: ["object-fit", keyword("fill", "contain", "cover", "none", "scale-down")],
|
|
411
|
+
objectPosition: ["object-position", objectPosition],
|
|
412
|
+
verticalAlign: [
|
|
413
|
+
"vertical-align",
|
|
414
|
+
keyword("baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super"),
|
|
415
|
+
],
|
|
416
|
+
textAlign: ["text-align", keyword("left", "right", "center", "justify", "start", "end")],
|
|
417
|
+
fontWeight: ["font-weight", fontWeight],
|
|
418
|
+
fontStyle: ["font-style", keyword("normal", "italic", "oblique")],
|
|
419
|
+
fontSize: ["font-size", keyword("small", "normal", "large", "title")],
|
|
420
|
+
lineHeight: ["line-height", lineHeight],
|
|
421
|
+
tone: ["tone", keyword("default", "muted", "accent")],
|
|
422
|
+
};
|
|
423
|
+
const STYLE_VALUE = Type.Optional(Type.String({ minLength: 1, maxLength: 512 }));
|
|
424
|
+
/**
|
|
425
|
+
* Layout styling the daemon parsed from an agent's CSS: camelCase keys of the allowed subset,
|
|
426
|
+
* each a normalized value `mediaLayoutStyleValue` accepts. Clients ignore keys they do not know
|
|
427
|
+
* and drop any value the check refuses.
|
|
428
|
+
*/
|
|
429
|
+
export const mediaLayoutStyleSchema = Type.Object(Object.fromEntries(Object.keys(PROPERTIES).map((key) => [key, STYLE_VALUE])));
|
|
430
|
+
/** The key a CSS property name is carried under, or undefined when the subset lacks it. */
|
|
431
|
+
export function mediaLayoutStyleKey(property) {
|
|
432
|
+
const name = property.trim().toLowerCase();
|
|
433
|
+
for (const [key, [cssName]] of Object.entries(PROPERTIES)) {
|
|
434
|
+
if (cssName === name)
|
|
435
|
+
return key;
|
|
436
|
+
}
|
|
437
|
+
return undefined;
|
|
438
|
+
}
|
|
439
|
+
/** The CSS property name a key stands for; `tone` is not CSS and names itself. */
|
|
440
|
+
export function mediaLayoutStyleProperty(key) {
|
|
441
|
+
return PROPERTIES[key][0];
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* The normalized form of one value, or undefined when it is outside the grammar of `key`.
|
|
445
|
+
* Normalizing lowercases the value and spaces it canonically, so a value the daemon emits is
|
|
446
|
+
* returned unchanged.
|
|
447
|
+
*/
|
|
448
|
+
export function mediaLayoutStyleValue(key, value) {
|
|
449
|
+
if (!Object.hasOwn(PROPERTIES, key) || value.length > 512)
|
|
450
|
+
return undefined;
|
|
451
|
+
const components = parse(value.trim().toLowerCase().replaceAll(/\s+/gu, " "));
|
|
452
|
+
if (components === undefined || components.length === 0)
|
|
453
|
+
return undefined;
|
|
454
|
+
const [, grammar] = PROPERTIES[key];
|
|
455
|
+
return grammar(components) ? serialize(components) : undefined;
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=mediaLayoutStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaLayoutStyle.js","sourceRoot":"","sources":["../../sources/protocol/mediaLayoutStyle.ts"],"names":[],"mappings":"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"}
|