@fusion.dev/helix 0.103.3 → 0.104.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.
Files changed (49) hide show
  1. package/custom-elements.json +10516 -753
  2. package/dist/announcement/root/announcement-root.js +2 -1
  3. package/dist/canvas/edge/canvas-edge.d.ts +24 -0
  4. package/dist/canvas/edge/canvas-edge.js +20 -0
  5. package/dist/canvas/index.d.ts +5 -0
  6. package/dist/canvas/index.js +4 -0
  7. package/dist/canvas/node/canvas-node.css.d.ts +1 -0
  8. package/dist/canvas/node/canvas-node.css.js +360 -0
  9. package/dist/canvas/node/canvas-node.d.ts +53 -0
  10. package/dist/canvas/node/canvas-node.js +23 -0
  11. package/dist/canvas/root/canvas-root.css.d.ts +1 -0
  12. package/dist/canvas/root/canvas-root.css.js +268 -0
  13. package/dist/canvas/root/canvas-root.d.ts +63 -0
  14. package/dist/canvas/root/canvas-root.js +25 -0
  15. package/dist/chat/root/chat-root.css.js +4 -10
  16. package/dist/chat/root/chat-root.js +2 -1
  17. package/dist/data-table/root/data-table-root.d.ts +1 -0
  18. package/dist/data-table/root/data-table-root.js +2 -1
  19. package/dist/drilldown/root/drilldown-root.js +2 -1
  20. package/dist/element-events.generated.js +15 -0
  21. package/dist/empty/root/empty-root.js +2 -1
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.js +1 -0
  24. package/dist/lightbox/root/lightbox-root.css.js +4 -9
  25. package/dist/lightbox/root/lightbox-root.js +2 -1
  26. package/dist/listbox/root/listbox-root.js +2 -0
  27. package/dist/map/root/map-root.css.js +2 -102
  28. package/dist/map/root/map-root.d.ts +2 -2
  29. package/dist/map/root/map-root.js +2 -1
  30. package/dist/menu/root/menu-root.js +2 -0
  31. package/dist/notifications/root/notifications-root.d.ts +1 -0
  32. package/dist/notifications/root/notifications-root.js +2 -1
  33. package/dist/pagination/root/pagination-root.css.js +0 -9
  34. package/dist/pagination/root/pagination-root.js +2 -1
  35. package/dist/sandbox/root/sandbox-root.d.ts +16 -1
  36. package/dist/sandbox/root/sandbox-root.js +13 -5
  37. package/dist/shared/live/live.css.d.ts +1 -0
  38. package/dist/shared/live/live.css.js +9 -0
  39. package/dist/shared/viewport/viewport.css.d.ts +1 -0
  40. package/dist/shared/viewport/viewport.css.js +106 -0
  41. package/dist/table/root/table-root.d.ts +1 -0
  42. package/dist/table/root/table-root.js +2 -1
  43. package/dist/tree/root/tree-root.d.ts +1 -0
  44. package/dist/tree/root/tree-root.js +2 -1
  45. package/dist/video/root/video-root.js +2 -1
  46. package/package.json +6 -6
  47. package/types/jsx.d.ts +5408 -746
  48. package/types/svelte.d.ts +3 -0
  49. package/types/vue.d.ts +1653 -209
package/types/vue.d.ts CHANGED
@@ -15,6 +15,9 @@ import type {
15
15
  HelixButtonGroup,
16
16
  HelixButton,
17
17
  HelixCallout,
18
+ HelixCanvasEdge,
19
+ HelixCanvasNode,
20
+ HelixCanvas,
18
21
  HelixCard,
19
22
  HelixCarousel,
20
23
  HelixChatComposer,
@@ -145,6 +148,18 @@ import type {
145
148
  HelixBeforeOpenEvent,
146
149
  HelixDismissEvent,
147
150
  HelixScrolledEvent,
151
+ HelixBeforeMoveEvent,
152
+ HelixBeforeReconnectEvent,
153
+ HelixBeforeRelabelEvent,
154
+ HelixCanvasEditEvent,
155
+ HelixCanvasPanEvent,
156
+ HelixCanvasViewEvent,
157
+ HelixCanvasZoomEvent,
158
+ HelixConnectEvent,
159
+ HelixMoveEvent,
160
+ HelixReconnectEvent,
161
+ HelixRelabelEvent,
162
+ HelixRemoveEvent,
148
163
  HelixSelectEvent,
149
164
  HelixSendEvent,
150
165
  HelixBeforePinEvent,
@@ -231,6 +246,10 @@ export type HelixAccordionItemHelixBeforeOpenElementEvent =
231
246
  HelixAccordionItemElementEvent<HelixBeforeOpenEvent>;
232
247
 
233
248
  export type HelixAccordionItemVueProps = {
249
+ /** Whether the markup declared it open. Ignored once `open` is written. */
250
+ "default-open"?: (HelixAccordionItem["defaultOpen"]) | undefined;
251
+ /** Whether the markup declared it open. Ignored once `open` is written. */
252
+ defaultOpen?: (HelixAccordionItem["defaultOpen"]) | undefined;
234
253
  /** Whether the element is open.
235
254
 
236
255
  One property, not two, so `dialog.open` answers the question anyone
@@ -244,10 +263,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
244
263
  last reader did rather than what the author wrote. `:state(open)` carries
245
264
  the resolved state for stylesheets, which is what the mirror is for. */
246
265
  open?: (HelixAccordionItem["open"]) | undefined;
247
- /** Whether the markup declared it open. Ignored once `open` is written. */
248
- "default-open"?: (HelixAccordionItem["defaultOpen"]) | undefined;
249
- /** Whether the markup declared it open. Ignored once `open` is written. */
250
- defaultOpen?: (HelixAccordionItem["defaultOpen"]) | undefined;
251
266
  /** Where the open indicator sits, or whether there is one.
252
267
 
253
268
  `auto` resolves to `end`, which is where a reader scanning a list of
@@ -1269,6 +1284,502 @@ there is no `severity` beside it. */
1269
1284
 
1270
1285
  export type HelixCalloutVueEvents = {};
1271
1286
 
1287
+ export type HelixCanvasEdgeVueProps = {
1288
+ /** The card it leaves. */
1289
+ from?: (HelixCanvasEdge["from"]) | undefined;
1290
+ /** What sits at the end it leaves from.
1291
+
1292
+ Absent is nothing, which is the format's own default and what makes an
1293
+ ordinary connector a one-way arrow. */
1294
+ "from-end"?: (HelixCanvasEdge["fromEnd"]) | undefined;
1295
+ /** What sits at the end it leaves from.
1296
+
1297
+ Absent is nothing, which is the format's own default and what makes an
1298
+ ordinary connector a one-way arrow. */
1299
+ fromEnd?: (HelixCanvasEdge["fromEnd"]) | undefined;
1300
+ /** Which side of that card it leaves, where the document says. */
1301
+ "from-side"?: (HelixCanvasEdge["fromSide"]) | undefined;
1302
+ /** Which side of that card it leaves, where the document says. */
1303
+ fromSide?: (HelixCanvasEdge["fromSide"]) | undefined;
1304
+ /** What the connector says, drawn at its middle. */
1305
+ label?: (HelixCanvasEdge["label"]) | undefined;
1306
+ /** What a request calls this connection, unique on its board.
1307
+
1308
+ Optional, unlike a card's: a connection is also known by its two ends,
1309
+ which `helix-remove` carries beside this, so a page that names none of its
1310
+ connections can still find the one a reader asked to take away. */
1311
+ name?: (HelixCanvasEdge["name"]) | undefined;
1312
+ /** How it travels: `straight`, or `step` for right angles.
1313
+
1314
+ Absent is whatever the board says, and a curve where the board says
1315
+ nothing. Not part of JSON Canvas, which draws every edge one way; a
1316
+ document read from one keeps its curves.
1317
+
1318
+ **`path` rather than `shape`**, which is a word this library already
1319
+ spends on how an element looks in the styled tier: this changes the line
1320
+ the connector is drawn along, which the board computes. Nor `route`, which
1321
+ every element here already has, as the method that sends a child to a slot. */
1322
+ path?: (HelixCanvasEdge["path"]) | undefined;
1323
+ /** Keeps this connection: a reader cannot remove it.
1324
+
1325
+ The board's `readonly` still wins. A connection is still removed with a
1326
+ card at either end of it, since a line to a card that has gone is not one
1327
+ the board can draw. */
1328
+ readonly?: (HelixCanvasEdge["readOnly"]) | undefined;
1329
+ /** Keeps this connection: a reader cannot remove it.
1330
+
1331
+ The board's `readonly` still wins. A connection is still removed with a
1332
+ card at either end of it, since a line to a card that has gone is not one
1333
+ the board can draw. */
1334
+ readOnly?: (HelixCanvasEdge["readOnly"]) | undefined;
1335
+ /** The card it arrives at. */
1336
+ to?: (HelixCanvasEdge["to"]) | undefined;
1337
+ /** What sits at the end it arrives at. Absent is an arrow, as the format says. */
1338
+ "to-end"?: (HelixCanvasEdge["toEnd"]) | undefined;
1339
+ /** What sits at the end it arrives at. Absent is an arrow, as the format says. */
1340
+ toEnd?: (HelixCanvasEdge["toEnd"]) | undefined;
1341
+ /** What the connection means, in the words every Helix component uses.
1342
+
1343
+ A color with no meaning is `--canvas-edge-color`, written in the edge's own
1344
+ `style`: the line is drawn by the board rather than by this element, so the
1345
+ board carries the value across from where it was written. */
1346
+ tone?: (HelixCanvasEdge["tone"]) | undefined;
1347
+ /** Which side of that card it arrives at, where the document says. */
1348
+ "to-side"?: (HelixCanvasEdge["toSide"]) | undefined;
1349
+ /** Which side of that card it arrives at, where the document says. */
1350
+ toSide?: (HelixCanvasEdge["toSide"]) | undefined;
1351
+ /** How the line is drawn: `dashed` or `dotted`, and solid where it says
1352
+ neither.
1353
+
1354
+ **A variant rather than an axis**, which is what the registry keeps it for:
1355
+ no other family draws a line whose stroke says something, and a dashed
1356
+ connection is the ordinary way to draw a weaker or an optional one. On the
1357
+ headless tier because the board that draws the line is. */
1358
+ variant?: (HelixCanvasEdge["variant"]) | undefined;
1359
+ };
1360
+
1361
+ export type HelixCanvasEdgeVueEvents = {};
1362
+
1363
+ export type HelixCanvasNodeVueProps = {
1364
+ /** What the card's ground is made of: `glass` or `frosted`, which let the
1365
+ board's ruling show through, or `transparent`.
1366
+
1367
+ Absent is an opaque surface, a resting value being an attribute's absence. */
1368
+ material?: (HelixCanvasNode["material"]) | undefined;
1369
+ /** How the card stands off the board.
1370
+
1371
+ Outlined is where it rests, a surface with its color as the edge. `filled`
1372
+ puts the color into the ground, `elevated` lifts it and keeps the edge, and
1373
+ `plain` draws no box, for a label sitting on the board. */
1374
+ separation?: (HelixCanvasNode["separation"]) | undefined;
1375
+ /** A box drawn behind the cards inside it rather than a card.
1376
+
1377
+ The board works out what is inside it from the geometry, which is what the
1378
+ format does too, and moves them with it. Its `label` is drawn above it. */
1379
+ group?: (HelixCanvasNode["group"]) | undefined;
1380
+ /** How tall the card is, in the document's own units. */
1381
+ height?: (HelixCanvasNode["height"]) | undefined;
1382
+ /** What the card is called, for a group and wherever another card names it.
1383
+
1384
+ A group needs one because it has no text of its own; a card that has text
1385
+ is named by it, and one holding a picture or a figure is named by nothing
1386
+ short enough to read out in another card's connections. */
1387
+ label?: (HelixCanvasNode["label"]) | undefined;
1388
+ /** What connections and requests call this card, unique on its board.
1389
+
1390
+ Required: a card with no name is drawn but nothing can connect to it, and
1391
+ the board has nothing to say when a reader asks for it to go. */
1392
+ name?: (HelixCanvasNode["name"]) | undefined;
1393
+ /** Keeps this card where it is: not moved, not connected, not removed.
1394
+
1395
+ **The board's own word, meaning the same thing one card at a time.** A
1396
+ board of cards a reader rearranges often has one that anchors it, a start
1397
+ or a title, and this is that card. The board's `readonly` still wins, so a
1398
+ read-only board is read-only whatever its cards say. */
1399
+ readonly?: (HelixCanvasNode["readOnly"]) | undefined;
1400
+ /** Keeps this card where it is: not moved, not connected, not removed.
1401
+
1402
+ **The board's own word, meaning the same thing one card at a time.** A
1403
+ board of cards a reader rearranges often has one that anchors it, a start
1404
+ or a title, and this is that card. The board's `readonly` still wins, so a
1405
+ read-only board is read-only whatever its cards say. */
1406
+ readOnly?: (HelixCanvasNode["readOnly"]) | undefined;
1407
+ /** The card's outline: `circle`, `diamond`, `pill` or `square`, and a rounded
1408
+ box where it says none.
1409
+
1410
+ **A flowchart's vocabulary, and the reason it is on this tier**: a diamond
1411
+ is drawn as an outline the card renders, because a border follows a box
1412
+ and a diamond is not one, so the markup differs before any rule is
1413
+ written. Every shape here meets the middle of each side of its box, which
1414
+ is where a connection arrives, so a connection to a diamond lands on its
1415
+ point and one to a circle on its curve without the board knowing which. */
1416
+ shape?: (HelixCanvasNode["shape"]) | undefined;
1417
+ /** What the card means, in the words every Helix component uses for it.
1418
+
1419
+ **`tone` rather than the format's `color`**, which was a second word for
1420
+ the same thing on this family alone: JSON Canvas writes `1` to `6` and
1421
+ leaves the meaning to the application, and this board had already pinned
1422
+ each to a tone. `fromJsonCanvas` maps the six to tones on the way in. A
1423
+ color with no meaning, a hex a document chose, is a custom property on the
1424
+ card, `--canvas-node-color`, which is a style rather than a statement.
1425
+
1426
+ On the headless tier because meaning survives having no stylesheet. */
1427
+ tone?: (HelixCanvasNode["tone"]) | undefined;
1428
+ /** How wide the card is, in the document's own units. */
1429
+ width?: (HelixCanvasNode["width"]) | undefined;
1430
+ /** Where its left edge sits, in the document's own units. */
1431
+ x?: (HelixCanvasNode["x"]) | undefined;
1432
+ /** Where its top edge sits, in the document's own units. */
1433
+ y?: (HelixCanvasNode["y"]) | undefined;
1434
+ };
1435
+
1436
+ export type HelixCanvasNodeVueEvents = {};
1437
+
1438
+ /** `HelixCanvas` component event */
1439
+ export type HelixCanvasElementEvent<E = Event> = TypedEvent<HelixCanvas, E>;
1440
+ /** `helix-before-move` event type */
1441
+ export type HelixCanvasHelixBeforeMoveElementEvent =
1442
+ HelixCanvasElementEvent<HelixBeforeMoveEvent>;
1443
+ /** `helix-before-reconnect` event type */
1444
+ export type HelixCanvasHelixBeforeReconnectElementEvent =
1445
+ HelixCanvasElementEvent<HelixBeforeReconnectEvent>;
1446
+ /** `helix-before-relabel` event type */
1447
+ export type HelixCanvasHelixBeforeRelabelElementEvent =
1448
+ HelixCanvasElementEvent<HelixBeforeRelabelEvent>;
1449
+ /** `helix-canvas-edit` event type */
1450
+ export type HelixCanvasHelixCanvasEditElementEvent =
1451
+ HelixCanvasElementEvent<HelixCanvasEditEvent>;
1452
+ /** `helix-canvas-pan` event type */
1453
+ export type HelixCanvasHelixCanvasPanElementEvent =
1454
+ HelixCanvasElementEvent<HelixCanvasPanEvent>;
1455
+ /** `helix-canvas-view` event type */
1456
+ export type HelixCanvasHelixCanvasViewElementEvent =
1457
+ HelixCanvasElementEvent<HelixCanvasViewEvent>;
1458
+ /** `helix-canvas-zoom` event type */
1459
+ export type HelixCanvasHelixCanvasZoomElementEvent =
1460
+ HelixCanvasElementEvent<HelixCanvasZoomEvent>;
1461
+ /** `helix-connect` event type */
1462
+ export type HelixCanvasHelixConnectElementEvent =
1463
+ HelixCanvasElementEvent<HelixConnectEvent>;
1464
+ /** `helix-move` event type */
1465
+ export type HelixCanvasHelixMoveElementEvent =
1466
+ HelixCanvasElementEvent<HelixMoveEvent>;
1467
+ /** `helix-reconnect` event type */
1468
+ export type HelixCanvasHelixReconnectElementEvent =
1469
+ HelixCanvasElementEvent<HelixReconnectEvent>;
1470
+ /** `helix-relabel` event type */
1471
+ export type HelixCanvasHelixRelabelElementEvent =
1472
+ HelixCanvasElementEvent<HelixRelabelEvent>;
1473
+ /** `helix-remove` event type */
1474
+ export type HelixCanvasHelixRemoveElementEvent =
1475
+ HelixCanvasElementEvent<HelixRemoveEvent>;
1476
+ /** `helix-select` event type */
1477
+ export type HelixCanvasHelixSelectElementEvent =
1478
+ HelixCanvasElementEvent<HelixSelectEvent>;
1479
+
1480
+ export type HelixCanvasVueProps = {
1481
+ /** Rules the plane, so a reader can see it move.
1482
+
1483
+ **Baked in rather than a family of its own**, which was the question worth
1484
+ asking: a grid has no content, no position and nothing to slot, so an
1485
+ element for it would be an element with no reason to exist. It is the
1486
+ board's own surface, and what a consumer varies about it is a length.
1487
+
1488
+ **On the plane and not on the well**, which is what makes it worth having:
1489
+ the ruling is drawn in the document's own units, so it moves and scales with
1490
+ the cards and a drag has something to move against. A grid on the frame
1491
+ would sit still while the board slid over it, which reads as the board
1492
+ standing still.
1493
+
1494
+ Absent is no ruling, a resting value being an attribute's absence. */
1495
+ grid?: (HelixCanvas["grid"]) | undefined;
1496
+ /** How the board stands off the page: `plain` for no frame at all.
1497
+
1498
+ Framed is where it rests. Plain is for a board that fills a panel or an
1499
+ app's working area, where the container is already the frame. */
1500
+ separation?: (HelixCanvas["separation"]) | undefined;
1501
+ /** Which of the controls this surface draws, as a list of what to keep.
1502
+
1503
+ **A list rather than a switch, because the overlap is not symmetric.** A
1504
+ surface a consumer brings often has zoom controls of its own and almost
1505
+ never has pan buttons, so a single switch would make them choose between
1506
+ a duplicate and nothing.
1507
+
1508
+ `none` draws none of them, which is the right answer where what was
1509
+ slotted already has controls a reader can find: what this argues for is
1510
+ that *a* findable control exists, never that it is ours. The methods stay
1511
+ public either way, so a consumer drawing their own chrome can still drive
1512
+ the surface.
1513
+
1514
+ Absent is whatever the family rests at, which is this library's rule that
1515
+ a resting value is an attribute's absence: all three for a map, whose
1516
+ reader may have no other way to move it, and zoom and fullscreen for a
1517
+ board, which a reader drags and whose pad took a third of the frame. The
1518
+ stylesheet lays the cluster out by which buttons are in it rather than by
1519
+ this attribute, so the two defaults need no rule each. */
1520
+ controls?: (HelixCanvas["controls"]) | undefined;
1521
+ /** What the group of controls is called, for a reader who meets it.
1522
+
1523
+ Absent is the family's own name for it, "Map controls" or "Board
1524
+ controls", which names what the controls drive rather than the
1525
+ mechanism. Written here to say it in another language, which every other
1526
+ string this surface speaks already allowed and this one did not. */
1527
+ "controls-label"?: (HelixCanvas["controlsLabel"]) | undefined;
1528
+ /** What the group of controls is called, for a reader who meets it.
1529
+
1530
+ Absent is the family's own name for it, "Map controls" or "Board
1531
+ controls", which names what the controls drive rather than the
1532
+ mechanism. Written here to say it in another language, which every other
1533
+ string this surface speaks already allowed and this one did not. */
1534
+ controlsLabel?: (HelixCanvas["controlsLabel"]) | undefined;
1535
+ /** Which corner the controls sit in.
1536
+
1537
+ **Configurable because there is no safe default**, which is a collision
1538
+ rather than a taste: whatever a consumer slots may put its own controls
1539
+ in any corner, and every library that draws some made this a setting for
1540
+ the same reason.
1541
+
1542
+ Logical corners rather than left and right, so a right-to-left page moves
1543
+ them without a consumer writing a second rule. Absent is the top end, a
1544
+ resting value being an attribute's absence: a default that reflected
1545
+ would write an attribute onto every host that no server sent. */
1546
+ "controls-placement"?: (HelixCanvas["controlsPlacement"]) | undefined;
1547
+ /** Which corner the controls sit in.
1548
+
1549
+ **Configurable because there is no safe default**, which is a collision
1550
+ rather than a taste: whatever a consumer slots may put its own controls
1551
+ in any corner, and every library that draws some made this a setting for
1552
+ the same reason.
1553
+
1554
+ Logical corners rather than left and right, so a right-to-left page moves
1555
+ them without a consumer writing a second rule. Absent is the top end, a
1556
+ resting value being an attribute's absence: a default that reflected
1557
+ would write an attribute onto every host that no server sent. */
1558
+ controlsPlacement?: (HelixCanvas["controlsPlacement"]) | undefined;
1559
+ /** What the control that fills the screen is called. */
1560
+ "fullscreen-label"?: (HelixCanvas["fullscreenLabel"]) | undefined;
1561
+ /** What the control that fills the screen is called. */
1562
+ fullscreenLabel?: (HelixCanvas["fullscreenLabel"]) | undefined;
1563
+ /** How long the reader may be still before the chrome hides, in milliseconds.
1564
+
1565
+ Zero keeps it up, which is the default: these controls are how a keyboard
1566
+ reader operates the surface, and chrome that hid itself by default would
1567
+ be the component undoing its own argument. Set it for a display nobody
1568
+ drives. */
1569
+ "idle-delay"?: (HelixCanvas["idleDelay"] | `${number}`) | undefined;
1570
+ /** How long the reader may be still before the chrome hides, in milliseconds.
1571
+
1572
+ Zero keeps it up, which is the default: these controls are how a keyboard
1573
+ reader operates the surface, and chrome that hid itself by default would
1574
+ be the component undoing its own argument. Set it for a display nobody
1575
+ drives. */
1576
+ idleDelay?: (HelixCanvas["idleDelay"]) | undefined;
1577
+ /** What the control that pans down is called.
1578
+
1579
+ **A label for each way rather than one with the way filled in**, which is
1580
+ what this was: `Pan {way}` filled in with `left`, so a page that said it
1581
+ in French read out "Déplacer left". The word for a direction is as much
1582
+ the translator's as the word for panning, and a language can put it
1583
+ anywhere in the phrase. */
1584
+ "pan-down-label"?: (HelixCanvas["panDownLabel"]) | undefined;
1585
+ /** What the control that pans down is called.
1586
+
1587
+ **A label for each way rather than one with the way filled in**, which is
1588
+ what this was: `Pan {way}` filled in with `left`, so a page that said it
1589
+ in French read out "Déplacer left". The word for a direction is as much
1590
+ the translator's as the word for panning, and a language can put it
1591
+ anywhere in the phrase. */
1592
+ panDownLabel?: (HelixCanvas["panDownLabel"]) | undefined;
1593
+ /** What the control that pans left is called, on screen. */
1594
+ "pan-left-label"?: (HelixCanvas["panLeftLabel"]) | undefined;
1595
+ /** What the control that pans left is called, on screen. */
1596
+ panLeftLabel?: (HelixCanvas["panLeftLabel"]) | undefined;
1597
+ /** What the control that pans right is called, on screen. */
1598
+ "pan-right-label"?: (HelixCanvas["panRightLabel"]) | undefined;
1599
+ /** What the control that pans right is called, on screen. */
1600
+ panRightLabel?: (HelixCanvas["panRightLabel"]) | undefined;
1601
+ /** How far one press moves the view, as a fraction of what is on screen.
1602
+
1603
+ A fraction rather than a distance, because this surface does not know the
1604
+ scale of what is inside it: a quarter of the viewport is the same gesture
1605
+ at any zoom, and a consumer who wants their own units multiplies by them. */
1606
+ "pan-step"?: (HelixCanvas["panStep"] | `${number}`) | undefined;
1607
+ /** How far one press moves the view, as a fraction of what is on screen.
1608
+
1609
+ A fraction rather than a distance, because this surface does not know the
1610
+ scale of what is inside it: a quarter of the viewport is the same gesture
1611
+ at any zoom, and a consumer who wants their own units multiplies by them. */
1612
+ panStep?: (HelixCanvas["panStep"]) | undefined;
1613
+ /** What the control that pans up is called. */
1614
+ "pan-up-label"?: (HelixCanvas["panUpLabel"]) | undefined;
1615
+ /** What the control that pans up is called. */
1616
+ panUpLabel?: (HelixCanvas["panUpLabel"]) | undefined;
1617
+ /** What the control that zooms in is called. */
1618
+ "zoom-in-label"?: (HelixCanvas["zoomInLabel"]) | undefined;
1619
+ /** What the control that zooms in is called. */
1620
+ zoomInLabel?: (HelixCanvas["zoomInLabel"]) | undefined;
1621
+ /** What the control that zooms out is called. */
1622
+ "zoom-out-label"?: (HelixCanvas["zoomOutLabel"]) | undefined;
1623
+ /** What the control that zooms out is called. */
1624
+ zoomOutLabel?: (HelixCanvas["zoomOutLabel"]) | undefined;
1625
+ /** How a card says where its connections come from, with `{cards}`. */
1626
+ "comes-from-label"?: (HelixCanvas["comesFromLabel"]) | undefined;
1627
+ /** How a card says where its connections come from, with `{cards}`. */
1628
+ comesFromLabel?: (HelixCanvas["comesFromLabel"]) | undefined;
1629
+ /** What it says when a connection is asked for, with `{from}` and `{to}`. */
1630
+ "connected-label"?: (HelixCanvas["connectedLabel"]) | undefined;
1631
+ /** What it says when a connection is asked for, with `{from}` and `{to}`. */
1632
+ connectedLabel?: (HelixCanvas["connectedLabel"]) | undefined;
1633
+ /** What the live region says when a reader starts a connection, with `{from}`
1634
+ filled in.
1635
+
1636
+ **Every sentence this board speaks is a property**, the rule the pan
1637
+ controls already kept with `pan-up-label` and its three: a board on a page in another
1638
+ language otherwise read its connections out in English. */
1639
+ "connecting-label"?: (HelixCanvas["connectingLabel"]) | undefined;
1640
+ /** What the live region says when a reader starts a connection, with `{from}`
1641
+ filled in.
1642
+
1643
+ **Every sentence this board speaks is a property**, the rule the pan
1644
+ controls already kept with `pan-up-label` and its three: a board on a page in another
1645
+ language otherwise read its connections out in English. */
1646
+ connectingLabel?: (HelixCanvas["connectingLabel"]) | undefined;
1647
+ /** What a connection is called, with `{from}` and `{to}`.
1648
+
1649
+ Its own label, where it has one, is its description rather than part of
1650
+ this, so a reader hears the ends first and what the line says after. */
1651
+ "connection-label"?: (HelixCanvas["connectionLabel"]) | undefined;
1652
+ /** What a connection is called, with `{from}` and `{to}`.
1653
+
1654
+ Its own label, where it has one, is its description rather than part of
1655
+ this, so a reader hears the ends first and what the line says after. */
1656
+ connectionLabel?: (HelixCanvas["connectionLabel"]) | undefined;
1657
+ /** Accessible name for the board, which is the one thing a consumer must write.
1658
+
1659
+ A document has no name of its own in the format, and "Canvas" names the
1660
+ widget rather than the thinking on it. */
1661
+ label?: (HelixCanvas["label"]) | undefined;
1662
+ /** What the field a label is edited in is called, with `{name}` for what it
1663
+ labels. */
1664
+ "label-editor-label"?: (HelixCanvas["labelEditorLabel"]) | undefined;
1665
+ /** What the field a label is edited in is called, with `{name}` for what it
1666
+ labels. */
1667
+ labelEditorLabel?: (HelixCanvas["labelEditorLabel"]) | undefined;
1668
+ /** How a card says where its connections go, with `{cards}` as the list.
1669
+
1670
+ The list is joined the way the page's language joins one, "Second and
1671
+ Third", rather than with a comma this component chose. */
1672
+ "leads-to-label"?: (HelixCanvas["leadsToLabel"]) | undefined;
1673
+ /** How a card says where its connections go, with `{cards}` as the list.
1674
+
1675
+ The list is joined the way the page's language joins one, "Second and
1676
+ Third", rather than with a comma this component chose. */
1677
+ leadsToLabel?: (HelixCanvas["leadsToLabel"]) | undefined;
1678
+ /** The order a reader meets the cards in.
1679
+
1680
+ `spatial` bands them into rows and reads each row across, which is how a
1681
+ person reads a board laid out on a grid and is a heuristic a loose board
1682
+ defeats. `edges` follows the arrows from the cards nothing points to, which
1683
+ on a board that is a flow is the order its author meant.
1684
+
1685
+ Absent is spatial, a resting value being an attribute's absence: a default
1686
+ that reflected would write a choice onto every host that no server sent. */
1687
+ order?: (HelixCanvas["order"]) | undefined;
1688
+ /** How every connection travels, where it does not say: `straight`, or `step`
1689
+ for right angles.
1690
+
1691
+ Absent is a curve. A flowchart wants `step` on all of its edges, and
1692
+ writing it once here rather than on each is the reason this exists; an
1693
+ edge's own `path` still wins. */
1694
+ path?: (HelixCanvas["path"]) | undefined;
1695
+ /** Keeps every card where its author put it.
1696
+
1697
+ **The attribute is `readonly`, which is the platform's spelling**, and the
1698
+ reverse of an `editable` switch on purpose: a form control takes input
1699
+ unless it is told not to, and a board a reader can rearrange is the same
1700
+ kind of thing. A drag on a card pans the board instead, and the keys still
1701
+ walk the cards. */
1702
+ readonly?: (HelixCanvas["readOnly"]) | undefined;
1703
+ /** Keeps every card where its author put it.
1704
+
1705
+ **The attribute is `readonly`, which is the platform's spelling**, and the
1706
+ reverse of an `editable` switch on purpose: a form control takes input
1707
+ unless it is told not to, and a board a reader can rearrange is the same
1708
+ kind of thing. A drag on a card pans the board instead, and the keys still
1709
+ walk the cards. */
1710
+ readOnly?: (HelixCanvas["readOnly"]) | undefined;
1711
+ /** What the live region says when a reader picks up a connection's end, with
1712
+ `{from}` and `{to}`. */
1713
+ "reconnecting-label"?: (HelixCanvas["reconnectingLabel"]) | undefined;
1714
+ /** What the live region says when a reader picks up a connection's end, with
1715
+ `{from}` and `{to}`. */
1716
+ reconnectingLabel?: (HelixCanvas["reconnectingLabel"]) | undefined;
1717
+ /** The cards and connections the reader selected, by name, comma separated,
1718
+ and empty for none.
1719
+
1720
+ **Comma separated, the way `Listbox` writes a multiple value**, so a page
1721
+ reads one selection the same way wherever it comes from. A click, or a key
1722
+ that lands on one, selects it alone; Shift, Command or Control with a click
1723
+ adds or takes one away, and so does Space; Command or Control with A
1724
+ selects everything; Shift and a drag across the empty board selects the
1725
+ cards the box touches. A click on the empty board, or Escape, selects
1726
+ nothing. Dragging, Shift with an arrow, and Delete act on the whole
1727
+ selection.
1728
+
1729
+ **Kept apart from focus**, so it stays when focus leaves: a reader who
1730
+ selects cards and clicks a button beside the board to act on them has not
1731
+ cleared what the button acts on by clicking. A connection with no name is
1732
+ called by its ends, `from->to`, which is also why a name has to be unique
1733
+ on its board across cards and connections both, and may not hold a comma.
1734
+
1735
+ Written to select from outside, and read to act on the selection. */
1736
+ selected?: (HelixCanvas["selected"]) | undefined;
1737
+ /** What it says when a reader stops connecting without asking. */
1738
+ "stopped-label"?: (HelixCanvas["stoppedLabel"]) | undefined;
1739
+ /** What it says when a reader stops connecting without asking. */
1740
+ stoppedLabel?: (HelixCanvas["stoppedLabel"]) | undefined;
1741
+ /** Where the board is looking: the document's point at the middle of the view,
1742
+ and the zoom.
1743
+
1744
+ **Read to save a view and written to restore one**, which a consumer keeping
1745
+ a minimap in step, or putting a reader back where they were, had no way to
1746
+ do: where the board sat was private, and the events said only which way a
1747
+ control had moved it. The middle rather than a corner, so a view saved in
1748
+ one box shows the same thing in the middle of a box of another size.
1749
+ Writing one counts as the reader choosing a view, so a later resize keeps
1750
+ it rather than fitting the board again. */
1751
+ view?: (HelixCanvas["view"]) | undefined;
1752
+ };
1753
+
1754
+ export type HelixCanvasVueEvents = {
1755
+ /** Cards are about to move. Refuse it to keep the positions in your own state. */
1756
+ "helix-before-move": HelixCanvasHelixBeforeMoveElementEvent;
1757
+ /** A connection's end is about to move to another card or side. Refuse it to keep connections in your own state. */
1758
+ "helix-before-reconnect": HelixCanvasHelixBeforeReconnectElementEvent;
1759
+ /** A connection's label or a group's name is about to change. Refuse it to keep labels in your own state. */
1760
+ "helix-before-relabel": HelixCanvasHelixBeforeRelabelElementEvent;
1761
+ /** The reader asked to edit a card: a double-click, or Enter or F2. Open your own editor for it. */
1762
+ "helix-canvas-edit": HelixCanvasHelixCanvasEditElementEvent;
1763
+ /** The board was moved a step, by its controls or the arrow keys: a fact rather than a request. A drag says so through `helix-canvas-view`. */
1764
+ "helix-canvas-pan": HelixCanvasHelixCanvasPanElementEvent;
1765
+ /** Where the board is looking changed, however it changed. The detail is the new view. */
1766
+ "helix-canvas-view": HelixCanvasHelixCanvasViewElementEvent;
1767
+ /** The board zoomed a step, by its controls or the keys. A wheel or a pinch says so through `helix-canvas-view`. */
1768
+ "helix-canvas-zoom": HelixCanvasHelixCanvasZoomElementEvent;
1769
+ /** A reader asked for two cards to be joined. Add the `helix-canvas-edge` to do it. */
1770
+ "helix-connect": HelixCanvasHelixConnectElementEvent;
1771
+ /** Cards moved and the move is finished: a drag let go, a click that put a card down, or a key pressed. */
1772
+ "helix-move": HelixCanvasHelixMoveElementEvent;
1773
+ /** A connection's end moved, and the move is finished. */
1774
+ "helix-reconnect": HelixCanvasHelixReconnectElementEvent;
1775
+ /** A connection's label or a group's name changed. */
1776
+ "helix-relabel": HelixCanvasHelixRelabelElementEvent;
1777
+ /** A reader asked for cards or connections to go. Remove the elements it names. */
1778
+ "helix-remove": HelixCanvasHelixRemoveElementEvent;
1779
+ /** The selection changed. The detail's `value` is the names, comma separated, empty for none. Cancelable: refusing it keeps the selection where it was. */
1780
+ "helix-select": HelixCanvasHelixSelectElementEvent;
1781
+ };
1782
+
1272
1783
  export type HelixCardVueProps = {
1273
1784
  /** What the card is made of.
1274
1785
 
@@ -1548,19 +2059,6 @@ one leaves the other alone. */
1548
2059
  indicatorPlacement?: (HelixCarousel["indicatorPlacement"]) | undefined;
1549
2060
  /** Whether the carousel advances on its own. */
1550
2061
  autoplay?: (HelixCarousel["autoplay"]) | undefined;
1551
- /** The slide in view, counted from zero.
1552
-
1553
- Reading gives the real slide. Writing always applies, the way a script
1554
- assigning to a native control does, and is a seed and a correction rather
1555
- than a claim of ownership: a consumer who wants the decision refuses the
1556
- `helix-select`. `default-index` is where the carousel starts until
1557
- something moves it.
1558
-
1559
- The same contract the four mixins carry, written out here rather than
1560
- extracted, because a slide is addressed by position and every one of those
1561
- mixins is keyed by a name. One consumer is not a mixin: if a second numeric
1562
- state turns up, this is what it is extracted from. */
1563
- index?: (HelixCarousel["index"]) | undefined;
1564
2062
  /** Whether the previous and next controls are shown.
1565
2063
 
1566
2064
  `auto`, which is the resting behavior and what an absent attribute means,
@@ -1589,12 +2087,45 @@ touch device exactly as it does on a desktop. */
1589
2087
  "default-index"?: (HelixCarousel["defaultIndex"] | `${number}`) | undefined;
1590
2088
  /** Slide to start on, where nothing declared one. */
1591
2089
  defaultIndex?: (HelixCarousel["defaultIndex"]) | undefined;
2090
+ /** The slide in view, counted from zero.
2091
+
2092
+ Reading gives the real slide. Writing always applies, the way a script
2093
+ assigning to a native control does, and is a seed and a correction rather
2094
+ than a claim of ownership: a consumer who wants the decision refuses the
2095
+ `helix-select`. `default-index` is where the carousel starts until
2096
+ something moves it.
2097
+
2098
+ The same contract the four mixins carry, written out here rather than
2099
+ extracted, because a slide is addressed by position and every one of those
2100
+ mixins is keyed by a name. One consumer is not a mixin: if a second numeric
2101
+ state turns up, this is what it is extracted from. */
2102
+ index?: (HelixCarousel["index"]) | undefined;
2103
+ /** What one indicator is called, with `{index}` filled in.
2104
+
2105
+ **Every word the carousel speaks is a property**, so a page in another
2106
+ language hears its own: only `label` was, and the controls around it
2107
+ read out in English. */
2108
+ "indicator-label"?: (HelixCarousel["indicatorLabel"]) | undefined;
2109
+ /** What one indicator is called, with `{index}` filled in.
2110
+
2111
+ **Every word the carousel speaks is a property**, so a page in another
2112
+ language hears its own: only `label` was, and the controls around it
2113
+ read out in English. */
2114
+ indicatorLabel?: (HelixCarousel["indicatorLabel"]) | undefined;
2115
+ /** What the row of indicators is called, with the carousel's `{label}` filled in. */
2116
+ "indicators-label"?: (HelixCarousel["indicatorsLabel"]) | undefined;
2117
+ /** What the row of indicators is called, with the carousel's `{label}` filled in. */
2118
+ indicatorsLabel?: (HelixCarousel["indicatorsLabel"]) | undefined;
1592
2119
  /** How long each slide is held, in milliseconds. */
1593
2120
  interval?: (HelixCarousel["interval"]) | undefined;
1594
2121
  /** Accessible name for the carousel. */
1595
2122
  label?: (HelixCarousel["label"]) | undefined;
1596
2123
  /** Whether moving past either end wraps to the other. */
1597
2124
  loop?: (HelixCarousel["loop"]) | undefined;
2125
+ /** What the control that moves forward is called. */
2126
+ "next-label"?: (HelixCarousel["nextLabel"]) | undefined;
2127
+ /** What the control that moves forward is called. */
2128
+ nextLabel?: (HelixCarousel["nextLabel"]) | undefined;
1598
2129
  /** Which way the track runs.
1599
2130
 
1600
2131
  Behavior rather than presentation, which is why it is here: the scroll
@@ -1728,6 +2259,28 @@ its attribute on upgrade, and the host then carries something a consumer's
1728
2259
  server markup never had, which React reports as a mismatch. The one-across
1729
2260
  case is the absent attribute, and the styles read it that way. */
1730
2261
  perView?: (HelixCarousel["perView"]) | undefined;
2262
+ /** What the control that moves back is called. */
2263
+ "previous-label"?: (HelixCarousel["previousLabel"]) | undefined;
2264
+ /** What the control that moves back is called. */
2265
+ previousLabel?: (HelixCarousel["previousLabel"]) | undefined;
2266
+ /** What each slide is called, with `{index}` and `{count}` filled in. */
2267
+ "slide-label"?: (HelixCarousel["slideLabel"]) | undefined;
2268
+ /** What each slide is called, with `{index}` and `{count}` filled in. */
2269
+ slideLabel?: (HelixCarousel["slideLabel"]) | undefined;
2270
+ /** What a slide is, read out in place of its role: `aria-roledescription`,
2271
+ which is a word a reader hears and so a word to translate. */
2272
+ "slide-role-label"?: (HelixCarousel["slideRoleLabel"]) | undefined;
2273
+ /** What a slide is, read out in place of its role: `aria-roledescription`,
2274
+ which is a word a reader hears and so a word to translate. */
2275
+ slideRoleLabel?: (HelixCarousel["slideRoleLabel"]) | undefined;
2276
+ /** What the rotation control is called while it would start rotation. */
2277
+ "start-label"?: (HelixCarousel["startLabel"]) | undefined;
2278
+ /** What the rotation control is called while it would start rotation. */
2279
+ startLabel?: (HelixCarousel["startLabel"]) | undefined;
2280
+ /** And while it would stop it. */
2281
+ "stop-label"?: (HelixCarousel["stopLabel"]) | undefined;
2282
+ /** And while it would stop it. */
2283
+ stopLabel?: (HelixCarousel["stopLabel"]) | undefined;
1731
2284
  };
1732
2285
 
1733
2286
  export type HelixCarouselVueEvents = {
@@ -1882,9 +2435,17 @@ say that without the component knowing what a row looks like. */
1882
2435
  "loading-text"?: (HelixChat["loadingText"]) | undefined;
1883
2436
  /** What is said while they are on their way. */
1884
2437
  loadingText?: (HelixChat["loadingText"]) | undefined;
1885
- /** Whether to open pinned, where nothing declared it. */
2438
+ /** Whether to open pinned, where nothing declared it.
2439
+
2440
+ `default-pinned="false"` opens away from the bottom. A plain boolean
2441
+ attribute could not say that: it is true by being there, whatever it holds,
2442
+ so a default of true had no attribute that turned it off. */
1886
2443
  "default-pinned"?: (HelixChat["defaultPinned"]) | undefined;
1887
- /** Whether to open pinned, where nothing declared it. */
2444
+ /** Whether to open pinned, where nothing declared it.
2445
+
2446
+ `default-pinned="false"` opens away from the bottom. A plain boolean
2447
+ attribute could not say that: it is true by being there, whatever it holds,
2448
+ so a default of true had no attribute that turned it off. */
1888
2449
  defaultPinned?: (HelixChat["defaultPinned"]) | undefined;
1889
2450
  /** Whether there are older turns than the ones here, and whether they are coming.
1890
2451
 
@@ -1964,6 +2525,26 @@ export type HelixCheckboxGroupVueProps = {
1964
2525
  label?: (HelixCheckboxGroup["label"]) | undefined;
1965
2526
  /** Whether the form refuses to submit without it. */
1966
2527
  required?: (HelixCheckboxGroup["required"]) | undefined;
2528
+ /** What a reader is told when the field is required and empty, where the
2529
+ page says.
2530
+
2531
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2532
+ set and the browser's own on a text field, which the browser writes in
2533
+ the reader's language. Every other word a control speaks is a property,
2534
+ and this one was the English a form in another language still spoke in
2535
+ the bubble it raises on submit: `feedback` replaces the message under
2536
+ the field and does not reach that one. */
2537
+ "value-missing-message"?: (HelixCheckboxGroup["valueMissingMessage"]) | undefined;
2538
+ /** What a reader is told when the field is required and empty, where the
2539
+ page says.
2540
+
2541
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2542
+ set and the browser's own on a text field, which the browser writes in
2543
+ the reader's language. Every other word a control speaks is a property,
2544
+ and this one was the English a form in another language still spoke in
2545
+ the bubble it raises on submit: `feedback` replaces the message under
2546
+ the field and does not reach that one. */
2547
+ valueMissingMessage?: (HelixCheckboxGroup["valueMissingMessage"]) | undefined;
1967
2548
  /** The checked values, comma separated. */
1968
2549
  value?: (HelixCheckboxGroup["value"]) | undefined;
1969
2550
  /** Whether the control is non-interactive.
@@ -2056,6 +2637,26 @@ stylesheets. */
2056
2637
  label?: (HelixCheckbox["label"]) | undefined;
2057
2638
  /** Whether the form refuses to submit without it. */
2058
2639
  required?: (HelixCheckbox["required"]) | undefined;
2640
+ /** What a reader is told when the field is required and empty, where the
2641
+ page says.
2642
+
2643
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2644
+ set and the browser's own on a text field, which the browser writes in
2645
+ the reader's language. Every other word a control speaks is a property,
2646
+ and this one was the English a form in another language still spoke in
2647
+ the bubble it raises on submit: `feedback` replaces the message under
2648
+ the field and does not reach that one. */
2649
+ "value-missing-message"?: (HelixCheckbox["valueMissingMessage"]) | undefined;
2650
+ /** What a reader is told when the field is required and empty, where the
2651
+ page says.
2652
+
2653
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2654
+ set and the browser's own on a text field, which the browser writes in
2655
+ the reader's language. Every other word a control speaks is a property,
2656
+ and this one was the English a form in another language still spoke in
2657
+ the bubble it raises on submit: `feedback` replaces the message under
2658
+ the field and does not reach that one. */
2659
+ valueMissingMessage?: (HelixCheckbox["valueMissingMessage"]) | undefined;
2059
2660
  /** Whether the box shows as neither checked nor unchecked.
2060
2661
 
2061
2662
  Presentation only. It never submits, and the first change resolves it. */
@@ -2180,6 +2781,26 @@ export type HelixColorInputHelixBeforeOpenElementEvent =
2180
2781
  HelixColorInputElementEvent<HelixBeforeOpenEvent>;
2181
2782
 
2182
2783
  export type HelixColorInputVueProps = {
2784
+ /** What a reader is told when the field holds something the picker cannot
2785
+ read: a date that is not one, a time, a color.
2786
+
2787
+ **Every sentence a control raises in the browser's bubble is a
2788
+ property**, named for the validity flag it reports, so a form in another
2789
+ language speaks it. Absent is the family's own sentence, in English,
2790
+ which says what the value should look like. */
2791
+ "bad-input-message"?: (HelixColorInput["badInputMessage"]) | undefined;
2792
+ /** What a reader is told when the field holds something the picker cannot
2793
+ read: a date that is not one, a time, a color.
2794
+
2795
+ **Every sentence a control raises in the browser's bubble is a
2796
+ property**, named for the validity flag it reports, so a form in another
2797
+ language speaks it. Absent is the family's own sentence, in English,
2798
+ which says what the value should look like. */
2799
+ badInputMessage?: (HelixColorInput["badInputMessage"]) | undefined;
2800
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2801
+ "default-open"?: (HelixColorInput["defaultOpen"]) | undefined;
2802
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2803
+ defaultOpen?: (HelixColorInput["defaultOpen"]) | undefined;
2183
2804
  /** Whether the element is open.
2184
2805
 
2185
2806
  One property, not two, so `dialog.open` answers the question anyone
@@ -2193,10 +2814,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
2193
2814
  last reader did rather than what the author wrote. `:state(open)` carries
2194
2815
  the resolved state for stylesheets, which is what the mirror is for. */
2195
2816
  open?: (HelixColorInput["open"]) | undefined;
2196
- /** Whether the markup declared it open. Ignored once `open` is written. */
2197
- "default-open"?: (HelixColorInput["defaultOpen"]) | undefined;
2198
- /** Whether the markup declared it open. Ignored once `open` is written. */
2199
- defaultOpen?: (HelixColorInput["defaultOpen"]) | undefined;
2200
2817
  /** The value the markup declared, which is where a reset returns to. */
2201
2818
  "default-value"?: (HelixColorInput["defaultValue"]) | undefined;
2202
2819
  /** The value the markup declared, which is where a reset returns to. */
@@ -2216,6 +2833,26 @@ a reset should return to. */
2216
2833
  label?: (HelixColorInput["label"]) | undefined;
2217
2834
  /** Whether the form refuses to submit without it. */
2218
2835
  required?: (HelixColorInput["required"]) | undefined;
2836
+ /** What a reader is told when the field is required and empty, where the
2837
+ page says.
2838
+
2839
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2840
+ set and the browser's own on a text field, which the browser writes in
2841
+ the reader's language. Every other word a control speaks is a property,
2842
+ and this one was the English a form in another language still spoke in
2843
+ the bubble it raises on submit: `feedback` replaces the message under
2844
+ the field and does not reach that one. */
2845
+ "value-missing-message"?: (HelixColorInput["valueMissingMessage"]) | undefined;
2846
+ /** What a reader is told when the field is required and empty, where the
2847
+ page says.
2848
+
2849
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2850
+ set and the browser's own on a text field, which the browser writes in
2851
+ the reader's language. Every other word a control speaks is a property,
2852
+ and this one was the English a form in another language still spoke in
2853
+ the bubble it raises on submit: `feedback` replaces the message under
2854
+ the field and does not reach that one. */
2855
+ valueMissingMessage?: (HelixColorInput["valueMissingMessage"]) | undefined;
2219
2856
  /** Whether the color carries an alpha channel. */
2220
2857
  alpha?: (HelixColorInput["alpha"]) | undefined;
2221
2858
  /** What the browser may autofill in the text field, as a platform token.
@@ -2348,11 +2985,41 @@ point.** The field holds a color, so a browser offering to fill it with a
2348
2985
  saved address is competing for the same keystrokes as the square and the
2349
2986
  ramps. A consumer who wants autofill can still ask. */
2350
2987
  autocomplete?: (HelixColorPicker["autocomplete"]) | undefined;
2988
+ /** What the square's vertical ramp is called.
2989
+
2990
+ **Every word the picker speaks is a property**, so a page in another
2991
+ language hears its own rather than English between its own labels. */
2992
+ "brightness-label"?: (HelixColorPicker["brightnessLabel"]) | undefined;
2993
+ /** What the square's vertical ramp is called.
2994
+
2995
+ **Every word the picker speaks is a property**, so a page in another
2996
+ language hears its own rather than English between its own labels. */
2997
+ brightnessLabel?: (HelixColorPicker["brightnessLabel"]) | undefined;
2998
+ /** What the sample says for a moment after it copied the value. */
2999
+ "copied-label"?: (HelixColorPicker["copiedLabel"]) | undefined;
3000
+ /** What the sample says for a moment after it copied the value. */
3001
+ copiedLabel?: (HelixColorPicker["copiedLabel"]) | undefined;
3002
+ /** What the sample is called, which copies the value, with `{value}` filled in. */
3003
+ "copy-label"?: (HelixColorPicker["copyLabel"]) | undefined;
3004
+ /** What the sample is called, which copies the value, with `{value}` filled in. */
3005
+ copyLabel?: (HelixColorPicker["copyLabel"]) | undefined;
3006
+ /** What the eyedropper is called. */
3007
+ "eyedropper-label"?: (HelixColorPicker["eyedropperLabel"]) | undefined;
3008
+ /** What the eyedropper is called. */
3009
+ eyedropperLabel?: (HelixColorPicker["eyedropperLabel"]) | undefined;
2351
3010
  /** The syntax the value is written in: `hex`, `rgb` or `hsl`.
2352
3011
 
2353
3012
  Only what is written. Everything is read whatever this says, so a picker on
2354
3013
  `hex` still takes an `rgb()` handed to it and stores the hex for it. */
2355
3014
  format?: (HelixColorPicker["format"]) | undefined;
3015
+ /** What the syntax toggle is called, with `{format}` filled in. */
3016
+ "format-label"?: (HelixColorPicker["formatLabel"]) | undefined;
3017
+ /** What the syntax toggle is called, with `{format}` filled in. */
3018
+ formatLabel?: (HelixColorPicker["formatLabel"]) | undefined;
3019
+ /** What the hue channel is called. */
3020
+ "hue-label"?: (HelixColorPicker["hueLabel"]) | undefined;
3021
+ /** What the hue channel is called. */
3022
+ hueLabel?: (HelixColorPicker["hueLabel"]) | undefined;
2356
3023
  /** Whether the current selection fails validation.
2357
3024
 
2358
3025
  A flag rather than a message, the split Date Picker also draws. A flat
@@ -2395,6 +3062,14 @@ answer to which one is authoritative or which has the caret. Do not close it
2395
3062
  the other way round, with Color Input dropping its own field: the value
2396
3063
  would then be unreadable and unpasteable without opening a panel. */
2397
3064
  noValue?: (HelixColorPicker["noValue"]) | undefined;
3065
+ /** What the opacity channel is called, where `alpha` offers one. */
3066
+ "opacity-label"?: (HelixColorPicker["opacityLabel"]) | undefined;
3067
+ /** What the opacity channel is called, where `alpha` offers one. */
3068
+ opacityLabel?: (HelixColorPicker["opacityLabel"]) | undefined;
3069
+ /** What the row of `swatches` is called. */
3070
+ "presets-label"?: (HelixColorPicker["presetsLabel"]) | undefined;
3071
+ /** What the row of `swatches` is called. */
3072
+ presetsLabel?: (HelixColorPicker["presetsLabel"]) | undefined;
2398
3073
  /** Whether the control refuses changes while still submitting its value.
2399
3074
 
2400
3075
  **Enforced by refusing every request in one place**, which is the seam this
@@ -2468,8 +3143,32 @@ report bad input because their value moves only on a commit. Color Input
2468
3143
  reports it for this family instead, once, against the field the reader
2469
3144
  typed into. */
2470
3145
  required?: (HelixColorPicker["required"]) | undefined;
3146
+ /** What the square's horizontal ramp is called. */
3147
+ "saturation-label"?: (HelixColorPicker["saturationLabel"]) | undefined;
3148
+ /** What the square's horizontal ramp is called. */
3149
+ saturationLabel?: (HelixColorPicker["saturationLabel"]) | undefined;
2471
3150
  /** Colors offered under the picker, as a comma-separated list. */
2472
3151
  swatches?: (HelixColorPicker["swatches"]) | undefined;
3152
+ /** What the group holding the eyedropper and the syntax toggle is called. */
3153
+ "tools-label"?: (HelixColorPicker["toolsLabel"]) | undefined;
3154
+ /** What the group holding the eyedropper and the syntax toggle is called. */
3155
+ toolsLabel?: (HelixColorPicker["toolsLabel"]) | undefined;
3156
+ /** What the text field holding the value is called. */
3157
+ "value-label"?: (HelixColorPicker["valueLabel"]) | undefined;
3158
+ /** What the text field holding the value is called. */
3159
+ valueLabel?: (HelixColorPicker["valueLabel"]) | undefined;
3160
+ /** What a reader is told when a color is required and none is chosen.
3161
+
3162
+ **Every sentence a control raises in the browser's bubble is a property**,
3163
+ named for the validity flag it reports, so a form in another language
3164
+ speaks it. Absent is the control's own sentence, in English. */
3165
+ "value-missing-message"?: (HelixColorPicker["valueMissingMessage"]) | undefined;
3166
+ /** What a reader is told when a color is required and none is chosen.
3167
+
3168
+ **Every sentence a control raises in the browser's bubble is a property**,
3169
+ named for the validity flag it reports, so a form in another language
3170
+ speaks it. Absent is the control's own sentence, in English. */
3171
+ valueMissingMessage?: (HelixColorPicker["valueMissingMessage"]) | undefined;
2473
3172
  /** Whether the control is non-interactive.
2474
3173
 
2475
3174
  Reflected, because the styled tier selects on it, and mirrored to
@@ -2532,6 +3231,10 @@ export type HelixComboboxHelixFilterElementEvent =
2532
3231
  HelixComboboxElementEvent<HelixFilterEvent>;
2533
3232
 
2534
3233
  export type HelixComboboxVueProps = {
3234
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3235
+ "default-open"?: (HelixCombobox["defaultOpen"]) | undefined;
3236
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3237
+ defaultOpen?: (HelixCombobox["defaultOpen"]) | undefined;
2535
3238
  /** Whether the element is open.
2536
3239
 
2537
3240
  One property, not two, so `dialog.open` answers the question anyone
@@ -2545,10 +3248,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
2545
3248
  last reader did rather than what the author wrote. `:state(open)` carries
2546
3249
  the resolved state for stylesheets, which is what the mirror is for. */
2547
3250
  open?: (HelixCombobox["open"]) | undefined;
2548
- /** Whether the markup declared it open. Ignored once `open` is written. */
2549
- "default-open"?: (HelixCombobox["defaultOpen"]) | undefined;
2550
- /** Whether the markup declared it open. Ignored once `open` is written. */
2551
- defaultOpen?: (HelixCombobox["defaultOpen"]) | undefined;
2552
3251
  /** What the control is called once everything is showing. */
2553
3252
  "collapse-label"?: (HelixCombobox["collapseLabel"]) | undefined;
2554
3253
  /** What the control is called once everything is showing. */
@@ -2582,6 +3281,26 @@ a reset should return to. */
2582
3281
  label?: (HelixCombobox["label"]) | undefined;
2583
3282
  /** Whether the form refuses to submit without it. */
2584
3283
  required?: (HelixCombobox["required"]) | undefined;
3284
+ /** What a reader is told when the field is required and empty, where the
3285
+ page says.
3286
+
3287
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
3288
+ set and the browser's own on a text field, which the browser writes in
3289
+ the reader's language. Every other word a control speaks is a property,
3290
+ and this one was the English a form in another language still spoke in
3291
+ the bubble it raises on submit: `feedback` replaces the message under
3292
+ the field and does not reach that one. */
3293
+ "value-missing-message"?: (HelixCombobox["valueMissingMessage"]) | undefined;
3294
+ /** What a reader is told when the field is required and empty, where the
3295
+ page says.
3296
+
3297
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
3298
+ set and the browser's own on a text field, which the browser writes in
3299
+ the reader's language. Every other word a control speaks is a property,
3300
+ and this one was the English a form in another language still spoke in
3301
+ the bubble it raises on submit: `feedback` replaces the message under
3302
+ the field and does not reach that one. */
3303
+ valueMissingMessage?: (HelixCombobox["valueMissingMessage"]) | undefined;
2585
3304
  /** What the browser may autofill in the text field, as a platform token.
2586
3305
 
2587
3306
  **Defaults to `off`, which is not the platform's default and is the
@@ -2637,9 +3356,15 @@ element is responsible for. */
2637
3356
  multiple?: (HelixCombobox["multiple"]) | undefined;
2638
3357
  /** Text shown while nothing has been chosen. */
2639
3358
  placeholder?: (HelixCombobox["placeholder"]) | undefined;
2640
- /** What a tag's remove control is called, since the mark has no name. */
3359
+ /** What the control removing one chosen option is called, with `{name}` filled in.
3360
+
3361
+ **The name goes in**, so a row of them is heard as which one each
3362
+ removes rather than as "Remove" said once per chosen option. */
2641
3363
  "remove-label"?: (HelixCombobox["removeLabel"]) | undefined;
2642
- /** What a tag's remove control is called, since the mark has no name. */
3364
+ /** What the control removing one chosen option is called, with `{name}` filled in.
3365
+
3366
+ **The name goes in**, so a row of them is heard as which one each
3367
+ removes rather than as "Remove" said once per chosen option. */
2643
3368
  removeLabel?: (HelixCombobox["removeLabel"]) | undefined;
2644
3369
  /** Whether the field finishes the word as it is typed.
2645
3370
 
@@ -2715,6 +3440,10 @@ export type HelixCommandHelixSelectElementEvent =
2715
3440
  HelixCommandElementEvent<HelixSelectEvent>;
2716
3441
 
2717
3442
  export type HelixCommandVueProps = {
3443
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3444
+ "default-open"?: (HelixCommand["defaultOpen"]) | undefined;
3445
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3446
+ defaultOpen?: (HelixCommand["defaultOpen"]) | undefined;
2718
3447
  /** Whether the element is open.
2719
3448
 
2720
3449
  One property, not two, so `dialog.open` answers the question anyone
@@ -2728,10 +3457,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
2728
3457
  last reader did rather than what the author wrote. `:state(open)` carries
2729
3458
  the resolved state for stylesheets, which is what the mirror is for. */
2730
3459
  open?: (HelixCommand["open"]) | undefined;
2731
- /** Whether the markup declared it open. Ignored once `open` is written. */
2732
- "default-open"?: (HelixCommand["defaultOpen"]) | undefined;
2733
- /** Whether the markup declared it open. Ignored once `open` is written. */
2734
- defaultOpen?: (HelixCommand["defaultOpen"]) | undefined;
2735
3460
  /** Words shown where the filter has matched nothing. */
2736
3461
  "empty-text"?: (HelixCommand["emptyText"]) | undefined;
2737
3462
  /** Words shown where the filter has matched nothing. */
@@ -3030,20 +3755,14 @@ replaces this with what each row came to as it draws. It still has to be
3030
3755
  close, because it is what the scrollbar is built from before anything has
3031
3756
  been measured. */
3032
3757
  estimate?: (HelixDataTable["estimate"]) | undefined;
3033
- /** The order, as `field:direction`.
3034
-
3035
- Set it and this element defers: a reader's click fires `helix-sort` and
3036
- changes nothing until a new value arrives. `default-sort` seeds an order this
3037
- element then owns. */
3038
- sort?: (HelixDataTable["sort"]) | undefined;
3039
- /** Accessible name for the grid. */
3040
- label?: (HelixDataTable["label"]) | undefined;
3041
3758
  /** What the rows are narrowed to, as one query across every column.
3042
3759
 
3043
3760
  One query rather than a predicate per column, which is what a reader means
3044
3761
  by a search box above a table. It matches on each column's ordering value,
3045
3762
  so search and sort cannot disagree about what a column holds. */
3046
3763
  filter?: (HelixDataTable["filter"]) | undefined;
3764
+ /** Accessible name for the grid. */
3765
+ label?: (HelixDataTable["label"]) | undefined;
3047
3766
  /** Whether this element does the work or asks the consumer to.
3048
3767
 
3049
3768
  `client` filters, sorts and pages `rows` itself. `server` applies none of
@@ -3053,25 +3772,48 @@ the client cannot hold the data, so this is not an optimization, it is the
3053
3772
  only mode that works, and it is here from the start because adding it later
3054
3773
  inverts the data flow. */
3055
3774
  mode?: (HelixDataTable["mode"]) | undefined;
3775
+ /** The columns' order, as their fields separated by spaces.
3776
+
3777
+ A reader's move fires `helix-reorder` first, and refusing it leaves the
3778
+ columns where they were, which is how a consumer who stores the order takes
3779
+ the decision. `default-order` seeds an order this element then owns. A field not named
3780
+ keeps its place after the named ones, and a column with no field never
3781
+ moves. */
3782
+ order?: (HelixDataTable["order"]) | undefined;
3056
3783
  /** The page on show, from 1.
3057
3784
 
3058
3785
  Clamped on the way out, so what this reports is the page it drew: a
3059
3786
  bookmarked link to page 99 of a result that has since shrunk reads back as
3060
3787
  the last page rather than as 99. */
3061
3788
  page?: (HelixDataTable["page"]) | undefined;
3789
+ /** How many rows a page holds. Zero is every row, which is what "no paging" means.
3790
+
3791
+ **It announces nothing, and that is not an omission.** Nothing in this
3792
+ element ever asks for a different page size: a size selector is
3793
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
3794
+ themselves. Routing this through `requestChange` would announce an event
3795
+ the element never has cause to fire. */
3796
+ "page-size"?: (HelixDataTable["pageSize"] | `${number}`) | undefined;
3797
+ /** How many rows a page holds. Zero is every row, which is what "no paging" means.
3798
+
3799
+ **It announces nothing, and that is not an omission.** Nothing in this
3800
+ element ever asks for a different page size: a size selector is
3801
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
3802
+ themselves. Routing this through `requestChange` would announce an event
3803
+ the element never has cause to fire. */
3804
+ pageSize?: (HelixDataTable["pageSize"]) | undefined;
3805
+ /** Whether to draw a pagination under the grid.
3806
+
3807
+ On by default once a page size is set, because a paged table with no way to
3808
+ change pages shows a reader the first twenty rows and no way to know there
3809
+ are more. Off for a consumer supplying their own through the `footer` slot,
3810
+ which is why the slot replaces this rather than sitting beside it. */
3811
+ paginated?: (HelixDataTable["paginated"]) | undefined;
3062
3812
  /** Whether a reader may move the columns.
3063
3813
 
3064
3814
  Each heading with a `field` gets a grip, dragged along the header or moved a
3065
3815
  place at a time with the arrow keys once it has focus. */
3066
3816
  reorderable?: (HelixDataTable["reorderable"]) | undefined;
3067
- /** The columns' order, as their fields separated by spaces.
3068
-
3069
- A reader's move fires `helix-reorder` first, and refusing it leaves the
3070
- columns where they were, which is how a consumer who stores the order takes
3071
- the decision. `default-order` seeds an order this element then owns. A field not named
3072
- keeps its place after the named ones, and a column with no field never
3073
- moves. */
3074
- order?: (HelixDataTable["order"]) | undefined;
3075
3817
  /** The field naming a row's stable identity.
3076
3818
 
3077
3819
  **Needed before selection exists, not after.** Lit keys the rendered rows by
@@ -3111,22 +3853,12 @@ A key holding a comma cannot be told apart from two keys, which is the
3111
3853
  price of the shape. A reader's choice fires `helix-select` first, and
3112
3854
  refusing it leaves the selection as it was. */
3113
3855
  selected?: (HelixDataTable["selected"]) | undefined;
3114
- /** How many rows a page holds. Zero is every row, which is what "no paging" means.
3115
-
3116
- **It announces nothing, and that is not an omission.** Nothing in this
3117
- element ever asks for a different page size: a size selector is
3118
- `PaginationSize`, which a consumer puts in the `footer` slot and answers
3119
- themselves. Routing this through `requestChange` would announce an event
3120
- the element never has cause to fire. */
3121
- "page-size"?: (HelixDataTable["pageSize"] | `${number}`) | undefined;
3122
- /** How many rows a page holds. Zero is every row, which is what "no paging" means.
3856
+ /** The order, as `field:direction`.
3123
3857
 
3124
- **It announces nothing, and that is not an omission.** Nothing in this
3125
- element ever asks for a different page size: a size selector is
3126
- `PaginationSize`, which a consumer puts in the `footer` slot and answers
3127
- themselves. Routing this through `requestChange` would announce an event
3128
- the element never has cause to fire. */
3129
- pageSize?: (HelixDataTable["pageSize"]) | undefined;
3858
+ Set it and this element defers: a reader's click fires `helix-sort` and
3859
+ changes nothing until a new value arrives. `default-sort` seeds an order this
3860
+ element then owns. */
3861
+ sort?: (HelixDataTable["sort"]) | undefined;
3130
3862
  /** How many rows the whole result has, where this element cannot count them.
3131
3863
 
3132
3864
  Only read in `server` mode, where `rows` is one page and its length says
@@ -3152,13 +3884,6 @@ Off by default. Windowing costs a scroll listener, a measurement per row
3152
3884
  drawn, and a `block-size` on the scrolling box, and a table of twenty rows
3153
3885
  should pay none of them. */
3154
3886
  windowed?: (HelixDataTable["windowed"]) | undefined;
3155
- /** Whether to draw a pagination under the grid.
3156
-
3157
- On by default once a page size is set, because a paged table with no way to
3158
- change pages shows a reader the first twenty rows and no way to know there
3159
- are more. Off for a consumer supplying their own through the `footer` slot,
3160
- which is why the slot replaces this rather than sitting beside it. */
3161
- paginated?: (HelixDataTable["paginated"]) | undefined;
3162
3887
  /** The whole result, in the order it arrived.
3163
3888
 
3164
3889
  A property and not an attribute: it is an array. Left alone this element
@@ -3224,6 +3949,26 @@ submits nothing and leaves the tab order, and a read-only one submits its
3224
3949
  value and stays reachable, which is what a form showing a value somebody
3225
3950
  else set needs. */
3226
3951
  readOnly?: (HelixDateInput["readOnly"]) | undefined;
3952
+ /** What a reader is told when the field holds something the picker cannot
3953
+ read: a date that is not one, a time, a color.
3954
+
3955
+ **Every sentence a control raises in the browser's bubble is a
3956
+ property**, named for the validity flag it reports, so a form in another
3957
+ language speaks it. Absent is the family's own sentence, in English,
3958
+ which says what the value should look like. */
3959
+ "bad-input-message"?: (HelixDateInput["badInputMessage"]) | undefined;
3960
+ /** What a reader is told when the field holds something the picker cannot
3961
+ read: a date that is not one, a time, a color.
3962
+
3963
+ **Every sentence a control raises in the browser's bubble is a
3964
+ property**, named for the validity flag it reports, so a form in another
3965
+ language speaks it. Absent is the family's own sentence, in English,
3966
+ which says what the value should look like. */
3967
+ badInputMessage?: (HelixDateInput["badInputMessage"]) | undefined;
3968
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3969
+ "default-open"?: (HelixDateInput["defaultOpen"]) | undefined;
3970
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3971
+ defaultOpen?: (HelixDateInput["defaultOpen"]) | undefined;
3227
3972
  /** Whether the element is open.
3228
3973
 
3229
3974
  One property, not two, so `dialog.open` answers the question anyone
@@ -3237,10 +3982,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
3237
3982
  last reader did rather than what the author wrote. `:state(open)` carries
3238
3983
  the resolved state for stylesheets, which is what the mirror is for. */
3239
3984
  open?: (HelixDateInput["open"]) | undefined;
3240
- /** Whether the markup declared it open. Ignored once `open` is written. */
3241
- "default-open"?: (HelixDateInput["defaultOpen"]) | undefined;
3242
- /** Whether the markup declared it open. Ignored once `open` is written. */
3243
- defaultOpen?: (HelixDateInput["defaultOpen"]) | undefined;
3244
3985
  /** What the control is called once everything is showing. */
3245
3986
  "collapse-label"?: (HelixDateInput["collapseLabel"]) | undefined;
3246
3987
  /** What the control is called once everything is showing. */
@@ -3274,6 +4015,26 @@ a reset should return to. */
3274
4015
  label?: (HelixDateInput["label"]) | undefined;
3275
4016
  /** Whether the form refuses to submit without it. */
3276
4017
  required?: (HelixDateInput["required"]) | undefined;
4018
+ /** What a reader is told when the field is required and empty, where the
4019
+ page says.
4020
+
4021
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4022
+ set and the browser's own on a text field, which the browser writes in
4023
+ the reader's language. Every other word a control speaks is a property,
4024
+ and this one was the English a form in another language still spoke in
4025
+ the bubble it raises on submit: `feedback` replaces the message under
4026
+ the field and does not reach that one. */
4027
+ "value-missing-message"?: (HelixDateInput["valueMissingMessage"]) | undefined;
4028
+ /** What a reader is told when the field is required and empty, where the
4029
+ page says.
4030
+
4031
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4032
+ set and the browser's own on a text field, which the browser writes in
4033
+ the reader's language. Every other word a control speaks is a property,
4034
+ and this one was the English a form in another language still spoke in
4035
+ the bubble it raises on submit: `feedback` replaces the message under
4036
+ the field and does not reach that one. */
4037
+ valueMissingMessage?: (HelixDateInput["valueMissingMessage"]) | undefined;
3277
4038
  /** What the browser may autofill here, as one of the platform's own tokens.
3278
4039
 
3279
4040
  Empty leaves the attribute off, which is the browser's default and is what
@@ -3359,6 +4120,40 @@ window has no room for that width it shows one month until there is. */
3359
4120
  months?: (HelixDateInput["months"]) | undefined;
3360
4121
  /** What the field says before a date is in it. */
3361
4122
  placeholder?: (HelixDateInput["placeholder"]) | undefined;
4123
+ /** What a reader is told when a range holds more than two dates.
4124
+
4125
+ **Every sentence a control raises in the browser's bubble is a property**,
4126
+ so a form in another language speaks it. Absent is the control's own
4127
+ sentence, in English. */
4128
+ "range-length-message"?: (HelixDateInput["rangeLengthMessage"]) | undefined;
4129
+ /** What a reader is told when a range holds more than two dates.
4130
+
4131
+ **Every sentence a control raises in the browser's bubble is a property**,
4132
+ so a form in another language speaks it. Absent is the control's own
4133
+ sentence, in English. */
4134
+ rangeLengthMessage?: (HelixDateInput["rangeLengthMessage"]) | undefined;
4135
+ /** What a reader is told when a date is after `max`, with `{max}` filled in
4136
+ as the field writes it. */
4137
+ "range-overflow-message"?: (HelixDateInput["rangeOverflowMessage"]) | undefined;
4138
+ /** What a reader is told when a date is after `max`, with `{max}` filled in
4139
+ as the field writes it. */
4140
+ rangeOverflowMessage?: (HelixDateInput["rangeOverflowMessage"]) | undefined;
4141
+ /** What a reader is told when a date is before `min`, with `{min}` filled
4142
+ in as the field writes it. */
4143
+ "range-underflow-message"?: (HelixDateInput["rangeUnderflowMessage"]) | undefined;
4144
+ /** What a reader is told when a date is before `min`, with `{min}` filled
4145
+ in as the field writes it. */
4146
+ rangeUnderflowMessage?: (HelixDateInput["rangeUnderflowMessage"]) | undefined;
4147
+ /** What the control removing one date is called, with `{name}` filled in.
4148
+
4149
+ **The name goes in**, so a row of them is heard as which one each
4150
+ removes rather than as "Remove" said once per date. */
4151
+ "remove-label"?: (HelixDateInput["removeLabel"]) | undefined;
4152
+ /** What the control removing one date is called, with `{name}` filled in.
4153
+
4154
+ **The name goes in**, so a row of them is heard as which one each
4155
+ removes rather than as "Remove" said once per date. */
4156
+ removeLabel?: (HelixDateInput["removeLabel"]) | undefined;
3362
4157
  /** How far apart the selectable dates are, in days.
3363
4158
 
3364
4159
  `<input type="date" step>`'s own unit, handed to the calendar this renders
@@ -3451,6 +4246,18 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
3451
4246
  same statement in markup, and `default-value` is how markup seeds a value
3452
4247
  a reset should return to. */
3453
4248
  value?: (HelixDatePicker["value"]) | undefined;
4249
+ /** What a reader is told when the value holds something that is not a date.
4250
+
4251
+ **Every sentence a control raises in the browser's bubble is a property**,
4252
+ named for the validity flag it reports, so a form in another language
4253
+ speaks it. Absent is the control's own sentence, in English. */
4254
+ "bad-input-message"?: (HelixDatePicker["badInputMessage"]) | undefined;
4255
+ /** What a reader is told when the value holds something that is not a date.
4256
+
4257
+ **Every sentence a control raises in the browser's bubble is a property**,
4258
+ named for the validity flag it reports, so a form in another language
4259
+ speaks it. Absent is the control's own sentence, in English. */
4260
+ badInputMessage?: (HelixDatePicker["badInputMessage"]) | undefined;
3454
4261
  /** Month to open on, where nothing declared one. */
3455
4262
  "default-month"?: (HelixDatePicker["defaultMonth"]) | undefined;
3456
4263
  /** Month to open on, where nothing declared one. */
@@ -3471,12 +4278,6 @@ a reset should return to. */
3471
4278
  invalid?: (HelixDatePicker["invalid"]) | undefined;
3472
4279
  /** Accessible name for the grid. */
3473
4280
  label?: (HelixDatePicker["label"]) | undefined;
3474
- /** The month on show, as `YYYY-MM`. Follows `value`, then the current month.
3475
-
3476
- Separate from `value` on purpose, so paging selects nothing and a consumer
3477
- can drive the view. Reading gives the month on show; writing sets it, and
3478
- `default-month` seeds one the calendar keeps until somebody does. */
3479
- month?: (HelixDatePicker["month"]) | undefined;
3480
4281
  /** Locale for month and day names.
3481
4282
 
3482
4283
  Absent uses the runtime's own. */
@@ -3487,6 +4288,12 @@ Absent uses the runtime's own. */
3487
4288
  min?: (HelixDatePicker["min"]) | undefined;
3488
4289
  /** How many dates can be held at once. */
3489
4290
  mode?: (HelixDatePicker["mode"]) | undefined;
4291
+ /** The month on show, as `YYYY-MM`. Follows `value`, then the current month.
4292
+
4293
+ Separate from `value` on purpose, so paging selects nothing and a consumer
4294
+ can drive the view. Reading gives the month on show; writing sets it, and
4295
+ `default-month` seeds one the calendar keeps until somebody does. */
4296
+ month?: (HelixDatePicker["month"]) | undefined;
3490
4297
  /** How many months to show, side by side. */
3491
4298
  months?: (HelixDatePicker["months"]) | undefined;
3492
4299
  /** Accessible name for the control that pages forward. */
@@ -3545,6 +4352,10 @@ One is every date and needs no rule, which is why anything below one is
3545
4352
  treated as one rather than as an error: a step of zero would block every
3546
4353
  date including the one already chosen. */
3547
4354
  step?: (HelixDatePicker["step"]) | undefined;
4355
+ /** What a reader is told when a date is required and none is chosen. */
4356
+ "value-missing-message"?: (HelixDatePicker["valueMissingMessage"]) | undefined;
4357
+ /** What a reader is told when a date is required and none is chosen. */
4358
+ valueMissingMessage?: (HelixDatePicker["valueMissingMessage"]) | undefined;
3548
4359
  /** Whether the control is non-interactive.
3549
4360
 
3550
4361
  Reflected, because the styled tier selects on it, and mirrored to
@@ -3720,6 +4531,10 @@ write the same two arrangements, and a fourth way to get one of them wrong.
3720
4531
  Unset is `start` and stays unset, so a reflected default cannot appear on a
3721
4532
  host whose server output never had it. */
3722
4533
  textAlign?: (HelixDialog["textAlign"]) | undefined;
4534
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4535
+ "default-open"?: (HelixDialog["defaultOpen"]) | undefined;
4536
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4537
+ defaultOpen?: (HelixDialog["defaultOpen"]) | undefined;
3723
4538
  /** Whether the element is open.
3724
4539
 
3725
4540
  One property, not two, so `dialog.open` answers the question anyone
@@ -3733,10 +4548,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
3733
4548
  last reader did rather than what the author wrote. `:state(open)` carries
3734
4549
  the resolved state for stylesheets, which is what the mirror is for. */
3735
4550
  open?: (HelixDialog["open"]) | undefined;
3736
- /** Whether the markup declared it open. Ignored once `open` is written. */
3737
- "default-open"?: (HelixDialog["defaultOpen"]) | undefined;
3738
- /** Whether the markup declared it open. Ignored once `open` is written. */
3739
- defaultOpen?: (HelixDialog["defaultOpen"]) | undefined;
3740
4551
  /** Which close requests the browser answers on its own.
3741
4552
 
3742
4553
  `<dialog closedby>`, forwarded, and safe to forward because every path it
@@ -3948,6 +4759,10 @@ content is only readable because it has a ground; dropping it makes an
3948
4759
  unreadable drawer rather than a lighter one. `frosted` and `glass` are the
3949
4760
  two honest points here. */
3950
4761
  material?: (HelixDrawer["material"]) | undefined;
4762
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4763
+ "default-open"?: (HelixDrawer["defaultOpen"]) | undefined;
4764
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4765
+ defaultOpen?: (HelixDrawer["defaultOpen"]) | undefined;
3951
4766
  /** Whether the element is open.
3952
4767
 
3953
4768
  One property, not two, so `dialog.open` answers the question anyone
@@ -3961,10 +4776,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
3961
4776
  last reader did rather than what the author wrote. `:state(open)` carries
3962
4777
  the resolved state for stylesheets, which is what the mirror is for. */
3963
4778
  open?: (HelixDrawer["open"]) | undefined;
3964
- /** Whether the markup declared it open. Ignored once `open` is written. */
3965
- "default-open"?: (HelixDrawer["defaultOpen"]) | undefined;
3966
- /** Whether the markup declared it open. Ignored once `open` is written. */
3967
- defaultOpen?: (HelixDrawer["defaultOpen"]) | undefined;
3968
4779
  /** Which close requests the browser answers on its own.
3969
4780
 
3970
4781
  `<dialog closedby>`, forwarded, and safe to forward because every path it
@@ -4149,6 +4960,26 @@ export type HelixFileInputVueProps = {
4149
4960
  label?: (HelixFileInput["label"]) | undefined;
4150
4961
  /** Whether the form refuses to submit without it. */
4151
4962
  required?: (HelixFileInput["required"]) | undefined;
4963
+ /** What a reader is told when the field is required and empty, where the
4964
+ page says.
4965
+
4966
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4967
+ set and the browser's own on a text field, which the browser writes in
4968
+ the reader's language. Every other word a control speaks is a property,
4969
+ and this one was the English a form in another language still spoke in
4970
+ the bubble it raises on submit: `feedback` replaces the message under
4971
+ the field and does not reach that one. */
4972
+ "value-missing-message"?: (HelixFileInput["valueMissingMessage"]) | undefined;
4973
+ /** What a reader is told when the field is required and empty, where the
4974
+ page says.
4975
+
4976
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4977
+ set and the browser's own on a text field, which the browser writes in
4978
+ the reader's language. Every other word a control speaks is a property,
4979
+ and this one was the English a form in another language still spoke in
4980
+ the bubble it raises on submit: `feedback` replaces the message under
4981
+ the field and does not reach that one. */
4982
+ valueMissingMessage?: (HelixFileInput["valueMissingMessage"]) | undefined;
4152
4983
  /** Which files the picker offers, as a native `accept` list. */
4153
4984
  accept?: (HelixFileInput["accept"]) | undefined;
4154
4985
  /** Which camera or microphone a mobile picker should offer, if any. */
@@ -4159,9 +4990,17 @@ Absent uses the runtime's own. */
4159
4990
  locale?: (HelixFileInput["locale"]) | undefined;
4160
4991
  /** Whether more than one file can be chosen. */
4161
4992
  multiple?: (HelixFileInput["multiple"]) | undefined;
4162
- /** What the control removing one file is called, per file. */
4993
+ /** What the control removing one file is called, with `{name}` filled in.
4994
+
4995
+ **The name goes in**, so a row of them is heard as which one each
4996
+ removes rather than as "Remove" said once per file. A label with no
4997
+ `{name}` has it added after it. */
4163
4998
  "remove-label"?: (HelixFileInput["removeLabel"]) | undefined;
4164
- /** What the control removing one file is called, per file. */
4999
+ /** What the control removing one file is called, with `{name}` filled in.
5000
+
5001
+ **The name goes in**, so a row of them is heard as which one each
5002
+ removes rather than as "Remove" said once per file. A label with no
5003
+ `{name}` has it added after it. */
4165
5004
  removeLabel?: (HelixFileInput["removeLabel"]) | undefined;
4166
5005
  /** What the trigger reads, where nothing is slotted into it. */
4167
5006
  "trigger-label"?: (HelixFileInput["triggerLabel"]) | undefined;
@@ -4394,6 +5233,10 @@ export type HelixFilterInputHelixSelectElementEvent =
4394
5233
  HelixFilterInputElementEvent<HelixSelectEvent>;
4395
5234
 
4396
5235
  export type HelixFilterInputVueProps = {
5236
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5237
+ "default-open"?: (HelixFilterInput["defaultOpen"]) | undefined;
5238
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5239
+ defaultOpen?: (HelixFilterInput["defaultOpen"]) | undefined;
4397
5240
  /** Whether the element is open.
4398
5241
 
4399
5242
  One property, not two, so `dialog.open` answers the question anyone
@@ -4407,10 +5250,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
4407
5250
  last reader did rather than what the author wrote. `:state(open)` carries
4408
5251
  the resolved state for stylesheets, which is what the mirror is for. */
4409
5252
  open?: (HelixFilterInput["open"]) | undefined;
4410
- /** Whether the markup declared it open. Ignored once `open` is written. */
4411
- "default-open"?: (HelixFilterInput["defaultOpen"]) | undefined;
4412
- /** Whether the markup declared it open. Ignored once `open` is written. */
4413
- defaultOpen?: (HelixFilterInput["defaultOpen"]) | undefined;
4414
5253
  /** What the control is called once everything is showing. */
4415
5254
  "collapse-label"?: (HelixFilterInput["collapseLabel"]) | undefined;
4416
5255
  /** What the control is called once everything is showing. */
@@ -4444,6 +5283,26 @@ a reset should return to. */
4444
5283
  label?: (HelixFilterInput["label"]) | undefined;
4445
5284
  /** Whether the form refuses to submit without it. */
4446
5285
  required?: (HelixFilterInput["required"]) | undefined;
5286
+ /** What a reader is told when the field is required and empty, where the
5287
+ page says.
5288
+
5289
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5290
+ set and the browser's own on a text field, which the browser writes in
5291
+ the reader's language. Every other word a control speaks is a property,
5292
+ and this one was the English a form in another language still spoke in
5293
+ the bubble it raises on submit: `feedback` replaces the message under
5294
+ the field and does not reach that one. */
5295
+ "value-missing-message"?: (HelixFilterInput["valueMissingMessage"]) | undefined;
5296
+ /** What a reader is told when the field is required and empty, where the
5297
+ page says.
5298
+
5299
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5300
+ set and the browser's own on a text field, which the browser writes in
5301
+ the reader's language. Every other word a control speaks is a property,
5302
+ and this one was the English a form in another language still spoke in
5303
+ the bubble it raises on submit: `feedback` replaces the message under
5304
+ the field and does not reach that one. */
5305
+ valueMissingMessage?: (HelixFilterInput["valueMissingMessage"]) | undefined;
4447
5306
  /** Whether the field offers a button that empties it.
4448
5307
 
4449
5308
  The text only. The tokens are the consumer's markup and this element is not
@@ -5127,6 +5986,26 @@ a reset should return to. */
5127
5986
  label?: (HelixInput["label"]) | undefined;
5128
5987
  /** Whether the form refuses to submit without it. */
5129
5988
  required?: (HelixInput["required"]) | undefined;
5989
+ /** What a reader is told when the field is required and empty, where the
5990
+ page says.
5991
+
5992
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5993
+ set and the browser's own on a text field, which the browser writes in
5994
+ the reader's language. Every other word a control speaks is a property,
5995
+ and this one was the English a form in another language still spoke in
5996
+ the bubble it raises on submit: `feedback` replaces the message under
5997
+ the field and does not reach that one. */
5998
+ "value-missing-message"?: (HelixInput["valueMissingMessage"]) | undefined;
5999
+ /** What a reader is told when the field is required and empty, where the
6000
+ page says.
6001
+
6002
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
6003
+ set and the browser's own on a text field, which the browser writes in
6004
+ the reader's language. Every other word a control speaks is a property,
6005
+ and this one was the English a form in another language still spoke in
6006
+ the bubble it raises on submit: `feedback` replaces the message under
6007
+ the field and does not reach that one. */
6008
+ valueMissingMessage?: (HelixInput["valueMissingMessage"]) | undefined;
5130
6009
  /** What the browser may autofill here, as one of the platform's own tokens.
5131
6010
 
5132
6011
  Empty leaves the attribute off, which is the browser's default. Set it to
@@ -5434,6 +6313,10 @@ Ignored once `active` is written. */
5434
6313
 
5435
6314
  Ignored once `active` is written. */
5436
6315
  defaultActive?: (HelixLightbox["defaultActive"]) | undefined;
6316
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6317
+ "default-open"?: (HelixLightbox["defaultOpen"]) | undefined;
6318
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6319
+ defaultOpen?: (HelixLightbox["defaultOpen"]) | undefined;
5437
6320
  /** Whether the element is open.
5438
6321
 
5439
6322
  One property, not two, so `dialog.open` answers the question anyone
@@ -5447,10 +6330,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
5447
6330
  last reader did rather than what the author wrote. `:state(open)` carries
5448
6331
  the resolved state for stylesheets, which is what the mirror is for. */
5449
6332
  open?: (HelixLightbox["open"]) | undefined;
5450
- /** Whether the markup declared it open. Ignored once `open` is written. */
5451
- "default-open"?: (HelixLightbox["defaultOpen"]) | undefined;
5452
- /** Whether the markup declared it open. Ignored once `open` is written. */
5453
- defaultOpen?: (HelixLightbox["defaultOpen"]) | undefined;
5454
6333
  /** How long the reader may be still before the chrome hides, in milliseconds.
5455
6334
 
5456
6335
  Zero keeps it up, which is what a viewer with a caption worth reading
@@ -5770,6 +6649,26 @@ a reset should return to. */
5770
6649
  label?: (HelixListbox["label"]) | undefined;
5771
6650
  /** Whether the form refuses to submit without it. */
5772
6651
  required?: (HelixListbox["required"]) | undefined;
6652
+ /** What a reader is told when the field is required and empty, where the
6653
+ page says.
6654
+
6655
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
6656
+ set and the browser's own on a text field, which the browser writes in
6657
+ the reader's language. Every other word a control speaks is a property,
6658
+ and this one was the English a form in another language still spoke in
6659
+ the bubble it raises on submit: `feedback` replaces the message under
6660
+ the field and does not reach that one. */
6661
+ "value-missing-message"?: (HelixListbox["valueMissingMessage"]) | undefined;
6662
+ /** What a reader is told when the field is required and empty, where the
6663
+ page says.
6664
+
6665
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
6666
+ set and the browser's own on a text field, which the browser writes in
6667
+ the reader's language. Every other word a control speaks is a property,
6668
+ and this one was the English a form in another language still spoke in
6669
+ the bubble it raises on submit: `feedback` replaces the message under
6670
+ the field and does not reach that one. */
6671
+ valueMissingMessage?: (HelixListbox["valueMissingMessage"]) | undefined;
5773
6672
  /** What the browser may autofill in the text field, as a platform token.
5774
6673
 
5775
6674
  **Defaults to `off`, which is not the platform's default and is the
@@ -5777,6 +6676,10 @@ point.** The field filters a list rather than collecting a value, so a
5777
6676
  browser offering to fill it with a saved address is competing for the same
5778
6677
  keystrokes as the listbox. A consumer who wants autofill can still ask. */
5779
6678
  autocomplete?: (HelixListbox["autocomplete"]) | undefined;
6679
+ /** What to start narrowed to, where nothing declared it. */
6680
+ "default-filter"?: (HelixListbox["defaultFilter"]) | undefined;
6681
+ /** What to start narrowed to, where nothing declared it. */
6682
+ defaultFilter?: (HelixListbox["defaultFilter"]) | undefined;
5780
6683
  /** What the list is narrowed to, if anything.
5781
6684
 
5782
6685
  Filtering hides rather than removes, so nothing about the value changes and
@@ -5784,10 +6687,6 @@ the list is still the consumer's own elements in their own order. Reading
5784
6687
  gives what is being filtered on; writing declares it theirs, and
5785
6688
  `default-filter` seeds one the list owns. */
5786
6689
  filter?: (HelixListbox["filter"]) | undefined;
5787
- /** What to start narrowed to, where nothing declared it. */
5788
- "default-filter"?: (HelixListbox["defaultFilter"]) | undefined;
5789
- /** What to start narrowed to, where nothing declared it. */
5790
- defaultFilter?: (HelixListbox["defaultFilter"]) | undefined;
5791
6690
  /** Whether the list renders a field for narrowing itself.
5792
6691
 
5793
6692
  The field lives here rather than in whatever frames the list, because the
@@ -5893,12 +6792,27 @@ that *a* findable control exists, never that it is ours. The methods stay
5893
6792
  public either way, so a consumer drawing their own chrome can still drive
5894
6793
  the surface.
5895
6794
 
5896
- Absent is all three, which is this library's rule that a resting value is
5897
- an attribute's absence, and it is what the stylesheet asks about: the
5898
- layout rules are written against `[controls]:not([controls~="zoom"])`
5899
- rather than the bare negation, or a surface that named no list at all
5900
- would be laid out as though it had dropped everything. */
6795
+ Absent is whatever the family rests at, which is this library's rule that
6796
+ a resting value is an attribute's absence: all three for a map, whose
6797
+ reader may have no other way to move it, and zoom and fullscreen for a
6798
+ board, which a reader drags and whose pad took a third of the frame. The
6799
+ stylesheet lays the cluster out by which buttons are in it rather than by
6800
+ this attribute, so the two defaults need no rule each. */
5901
6801
  controls?: (HelixMap["controls"]) | undefined;
6802
+ /** What the group of controls is called, for a reader who meets it.
6803
+
6804
+ Absent is the family's own name for it, "Map controls" or "Board
6805
+ controls", which names what the controls drive rather than the
6806
+ mechanism. Written here to say it in another language, which every other
6807
+ string this surface speaks already allowed and this one did not. */
6808
+ "controls-label"?: (HelixMap["controlsLabel"]) | undefined;
6809
+ /** What the group of controls is called, for a reader who meets it.
6810
+
6811
+ Absent is the family's own name for it, "Map controls" or "Board
6812
+ controls", which names what the controls drive rather than the
6813
+ mechanism. Written here to say it in another language, which every other
6814
+ string this surface speaks already allowed and this one did not. */
6815
+ controlsLabel?: (HelixMap["controlsLabel"]) | undefined;
5902
6816
  /** Which corner the controls sit in.
5903
6817
 
5904
6818
  **Configurable because there is no safe default**, which is a collision
@@ -5941,10 +6855,30 @@ reader operates the surface, and chrome that hid itself by default would
5941
6855
  be the component undoing its own argument. Set it for a display nobody
5942
6856
  drives. */
5943
6857
  idleDelay?: (HelixMap["idleDelay"]) | undefined;
5944
- /** What one pan control is called, with `{way}` filled in. */
5945
- "pan-label"?: (HelixMap["panLabel"]) | undefined;
5946
- /** What one pan control is called, with `{way}` filled in. */
5947
- panLabel?: (HelixMap["panLabel"]) | undefined;
6858
+ /** What the control that pans down is called.
6859
+
6860
+ **A label for each way rather than one with the way filled in**, which is
6861
+ what this was: `Pan {way}` filled in with `left`, so a page that said it
6862
+ in French read out "Déplacer left". The word for a direction is as much
6863
+ the translator's as the word for panning, and a language can put it
6864
+ anywhere in the phrase. */
6865
+ "pan-down-label"?: (HelixMap["panDownLabel"]) | undefined;
6866
+ /** What the control that pans down is called.
6867
+
6868
+ **A label for each way rather than one with the way filled in**, which is
6869
+ what this was: `Pan {way}` filled in with `left`, so a page that said it
6870
+ in French read out "Déplacer left". The word for a direction is as much
6871
+ the translator's as the word for panning, and a language can put it
6872
+ anywhere in the phrase. */
6873
+ panDownLabel?: (HelixMap["panDownLabel"]) | undefined;
6874
+ /** What the control that pans left is called, on screen. */
6875
+ "pan-left-label"?: (HelixMap["panLeftLabel"]) | undefined;
6876
+ /** What the control that pans left is called, on screen. */
6877
+ panLeftLabel?: (HelixMap["panLeftLabel"]) | undefined;
6878
+ /** What the control that pans right is called, on screen. */
6879
+ "pan-right-label"?: (HelixMap["panRightLabel"]) | undefined;
6880
+ /** What the control that pans right is called, on screen. */
6881
+ panRightLabel?: (HelixMap["panRightLabel"]) | undefined;
5948
6882
  /** How far one press moves the view, as a fraction of what is on screen.
5949
6883
 
5950
6884
  A fraction rather than a distance, because this surface does not know the
@@ -5957,6 +6891,10 @@ A fraction rather than a distance, because this surface does not know the
5957
6891
  scale of what is inside it: a quarter of the viewport is the same gesture
5958
6892
  at any zoom, and a consumer who wants their own units multiplies by them. */
5959
6893
  panStep?: (HelixMap["panStep"]) | undefined;
6894
+ /** What the control that pans up is called. */
6895
+ "pan-up-label"?: (HelixMap["panUpLabel"]) | undefined;
6896
+ /** What the control that pans up is called. */
6897
+ panUpLabel?: (HelixMap["panUpLabel"]) | undefined;
5960
6898
  /** What the control that zooms in is called. */
5961
6899
  "zoom-in-label"?: (HelixMap["zoomInLabel"]) | undefined;
5962
6900
  /** What the control that zooms in is called. */
@@ -5997,6 +6935,10 @@ export type HelixMegamenuHelixBeforeOpenElementEvent =
5997
6935
  HelixMegamenuElementEvent<HelixBeforeOpenEvent>;
5998
6936
 
5999
6937
  export type HelixMegamenuVueProps = {
6938
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6939
+ "default-open"?: (HelixMegamenu["defaultOpen"]) | undefined;
6940
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6941
+ defaultOpen?: (HelixMegamenu["defaultOpen"]) | undefined;
6000
6942
  /** Whether the element is open.
6001
6943
 
6002
6944
  One property, not two, so `dialog.open` answers the question anyone
@@ -6010,10 +6952,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
6010
6952
  last reader did rather than what the author wrote. `:state(open)` carries
6011
6953
  the resolved state for stylesheets, which is what the mirror is for. */
6012
6954
  open?: (HelixMegamenu["open"]) | undefined;
6013
- /** Whether the markup declared it open. Ignored once `open` is written. */
6014
- "default-open"?: (HelixMegamenu["defaultOpen"]) | undefined;
6015
- /** Whether the markup declared it open. Ignored once `open` is written. */
6016
- defaultOpen?: (HelixMegamenu["defaultOpen"]) | undefined;
6017
6955
  /** The width, in pixels, under which a card becomes a band. Zero never does.
6018
6956
 
6019
6957
  A card is a panel hung off one word, and there is no room to hang anything
@@ -6222,6 +7160,10 @@ say that without the component knowing what a row looks like. */
6222
7160
  "loading-text"?: (HelixMenu["loadingText"]) | undefined;
6223
7161
  /** What is said while they are on their way. */
6224
7162
  loadingText?: (HelixMenu["loadingText"]) | undefined;
7163
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7164
+ "default-open"?: (HelixMenu["defaultOpen"]) | undefined;
7165
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7166
+ defaultOpen?: (HelixMenu["defaultOpen"]) | undefined;
6225
7167
  /** Whether the element is open.
6226
7168
 
6227
7169
  One property, not two, so `dialog.open` answers the question anyone
@@ -6235,10 +7177,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
6235
7177
  last reader did rather than what the author wrote. `:state(open)` carries
6236
7178
  the resolved state for stylesheets, which is what the mirror is for. */
6237
7179
  open?: (HelixMenu["open"]) | undefined;
6238
- /** Whether the markup declared it open. Ignored once `open` is written. */
6239
- "default-open"?: (HelixMenu["defaultOpen"]) | undefined;
6240
- /** Whether the markup declared it open. Ignored once `open` is written. */
6241
- defaultOpen?: (HelixMenu["defaultOpen"]) | undefined;
6242
7180
  /** What the row returning from a submenu reads. */
6243
7181
  "back-label"?: (HelixMenu["backLabel"]) | undefined;
6244
7182
  /** What the row returning from a submenu reads. */
@@ -6398,6 +7336,10 @@ export type HelixNotificationGroupHelixBeforeOpenElementEvent =
6398
7336
  HelixNotificationGroupElementEvent<HelixBeforeOpenEvent>;
6399
7337
 
6400
7338
  export type HelixNotificationGroupVueProps = {
7339
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7340
+ "default-open"?: (HelixNotificationGroup["defaultOpen"]) | undefined;
7341
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7342
+ defaultOpen?: (HelixNotificationGroup["defaultOpen"]) | undefined;
6401
7343
  /** Whether the element is open.
6402
7344
 
6403
7345
  One property, not two, so `dialog.open` answers the question anyone
@@ -6411,10 +7353,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
6411
7353
  last reader did rather than what the author wrote. `:state(open)` carries
6412
7354
  the resolved state for stylesheets, which is what the mirror is for. */
6413
7355
  open?: (HelixNotificationGroup["open"]) | undefined;
6414
- /** Whether the markup declared it open. Ignored once `open` is written. */
6415
- "default-open"?: (HelixNotificationGroup["defaultOpen"]) | undefined;
6416
- /** Whether the markup declared it open. Ignored once `open` is written. */
6417
- defaultOpen?: (HelixNotificationGroup["defaultOpen"]) | undefined;
6418
7356
  /** Whether the group can be collapsed to its first row.
6419
7357
 
6420
7358
  Off by default, because a group is a heading before it is a control: a feed
@@ -6496,6 +7434,14 @@ is the shape that needs no translation at either end. Left unset the item
6496
7434
  shows no timestamp rather than showing the epoch, which is what parsing an
6497
7435
  empty string would give. */
6498
7436
  at?: (HelixNotification["at"]) | undefined;
7437
+ /** State to open with, where nothing declared one. */
7438
+ "default-read"?: (HelixNotification["defaultRead"]) | undefined;
7439
+ /** State to open with, where nothing declared one. */
7440
+ defaultRead?: (HelixNotification["defaultRead"]) | undefined;
7441
+ /** Locale for the timestamp.
7442
+
7443
+ Empty is the runtime's own. */
7444
+ locale?: (HelixNotification["locale"]) | undefined;
6499
7445
  /** Whether the reader has seen it.
6500
7446
 
6501
7447
  Set it and this element defers: a reader's click fires `helix-read` and
@@ -6510,14 +7456,6 @@ as a hydration mismatch, and which a copy of the serialized element
6510
7456
  re-parses as a declaration. `:state(read)` is what the stylesheet reads.
6511
7457
  `hydration.dom.spec.ts` holds it. */
6512
7458
  read?: (HelixNotification["read"]) | undefined;
6513
- /** State to open with, where nothing declared one. */
6514
- "default-read"?: (HelixNotification["defaultRead"]) | undefined;
6515
- /** State to open with, where nothing declared one. */
6516
- defaultRead?: (HelixNotification["defaultRead"]) | undefined;
6517
- /** Locale for the timestamp.
6518
-
6519
- Empty is the runtime's own. */
6520
- locale?: (HelixNotification["locale"]) | undefined;
6521
7459
  };
6522
7460
 
6523
7461
  export type HelixNotificationVueEvents = {
@@ -6602,6 +7540,26 @@ a reset should return to. */
6602
7540
  label?: (HelixNumberInput["label"]) | undefined;
6603
7541
  /** Whether the form refuses to submit without it. */
6604
7542
  required?: (HelixNumberInput["required"]) | undefined;
7543
+ /** What a reader is told when the field is required and empty, where the
7544
+ page says.
7545
+
7546
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7547
+ set and the browser's own on a text field, which the browser writes in
7548
+ the reader's language. Every other word a control speaks is a property,
7549
+ and this one was the English a form in another language still spoke in
7550
+ the bubble it raises on submit: `feedback` replaces the message under
7551
+ the field and does not reach that one. */
7552
+ "value-missing-message"?: (HelixNumberInput["valueMissingMessage"]) | undefined;
7553
+ /** What a reader is told when the field is required and empty, where the
7554
+ page says.
7555
+
7556
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7557
+ set and the browser's own on a text field, which the browser writes in
7558
+ the reader's language. Every other word a control speaks is a property,
7559
+ and this one was the English a form in another language still spoke in
7560
+ the bubble it raises on submit: `feedback` replaces the message under
7561
+ the field and does not reach that one. */
7562
+ valueMissingMessage?: (HelixNumberInput["valueMissingMessage"]) | undefined;
6605
7563
  /** What the browser may autofill here, as one of the platform's own tokens.
6606
7564
 
6607
7565
  Empty leaves the attribute off, which is the browser's default and is what
@@ -6609,6 +7567,20 @@ lets autofill work at all. Hardcoding `off` here is what stops a reader
6609
7567
  having a birthday or a postal code filled in for them, with no way for a
6610
7568
  consumer to ask for it. */
6611
7569
  autocomplete?: (HelixNumberInput["autocomplete"]) | undefined;
7570
+ /** What a reader is told when the field holds something that is not a number.
7571
+
7572
+ **Every sentence a control raises in the browser's bubble is a property**,
7573
+ named for the validity flag it reports, so a form in another language
7574
+ speaks it: `feedback` replaces the message under the field and does not
7575
+ reach the bubble. Absent is the control's own sentence, in English. */
7576
+ "bad-input-message"?: (HelixNumberInput["badInputMessage"]) | undefined;
7577
+ /** What a reader is told when the field holds something that is not a number.
7578
+
7579
+ **Every sentence a control raises in the browser's bubble is a property**,
7580
+ named for the validity flag it reports, so a form in another language
7581
+ speaks it: `feedback` replaces the message under the field and does not
7582
+ reach the bubble. Absent is the control's own sentence, in English. */
7583
+ badInputMessage?: (HelixNumberInput["badInputMessage"]) | undefined;
6612
7584
  /** Accessible name for the control that steps down. */
6613
7585
  "decrement-label"?: (HelixNumberInput["decrementLabel"]) | undefined;
6614
7586
  /** Accessible name for the control that steps down. */
@@ -6641,6 +7613,14 @@ Absent has no floor. */
6641
7613
 
6642
7614
  Not a label: it goes when typing starts. */
6643
7615
  placeholder?: (HelixNumberInput["placeholder"]) | undefined;
7616
+ /** What a reader is told when the number is above `max`, with `{max}` filled in. */
7617
+ "range-overflow-message"?: (HelixNumberInput["rangeOverflowMessage"]) | undefined;
7618
+ /** What a reader is told when the number is above `max`, with `{max}` filled in. */
7619
+ rangeOverflowMessage?: (HelixNumberInput["rangeOverflowMessage"]) | undefined;
7620
+ /** What a reader is told when the number is below `min`, with `{min}` filled in. */
7621
+ "range-underflow-message"?: (HelixNumberInput["rangeUnderflowMessage"]) | undefined;
7622
+ /** What a reader is told when the number is below `min`, with `{min}` filled in. */
7623
+ rangeUnderflowMessage?: (HelixNumberInput["rangeUnderflowMessage"]) | undefined;
6644
7624
  /** Whether the field refuses input while still submitting its value. */
6645
7625
  readonly?: (HelixNumberInput["readOnly"]) | undefined;
6646
7626
  /** Whether the field refuses input while still submitting its value. */
@@ -6709,6 +7689,22 @@ export type HelixObjectInspectorHelixCopyElementEvent =
6709
7689
  HelixObjectInspectorElementEvent<HelixCopyEvent>;
6710
7690
 
6711
7691
  export type HelixObjectInspectorVueProps = {
7692
+ /** What the copy control is called on a row with a key, with the key as
7693
+ `{name}`.
7694
+
7695
+ **Every word the inspector speaks is a property**, so a page in another
7696
+ language hears its own rather than English around its own keys. */
7697
+ "copy-label"?: (HelixObjectInspector["copyLabel"]) | undefined;
7698
+ /** What the copy control is called on a row with a key, with the key as
7699
+ `{name}`.
7700
+
7701
+ **Every word the inspector speaks is a property**, so a page in another
7702
+ language hears its own rather than English around its own keys. */
7703
+ copyLabel?: (HelixObjectInspector["copyLabel"]) | undefined;
7704
+ /** What the copy control is called where there is no key, on the value itself. */
7705
+ "copy-value-label"?: (HelixObjectInspector["copyValueLabel"]) | undefined;
7706
+ /** What the copy control is called where there is no key, on the value itself. */
7707
+ copyValueLabel?: (HelixObjectInspector["copyValueLabel"]) | undefined;
6712
7708
  /** How many levels start open.
6713
7709
 
6714
7710
  One by default: the root is open and everything under it closed, so a
@@ -7010,21 +8006,6 @@ look, so no rule selects on it, and the house rule is that reflection
7010
8006
  exists for selectors: an unread reflected attribute is one more thing
7011
8007
  written onto a host at upgrade that a server's output never had. */
7012
8008
  ends?: (HelixPagination["ends"]) | undefined;
7013
- /** The page on show, one-based.
7014
-
7015
- An accessor pair, the same shape as the calendar's `month`. Reading gives
7016
- the page on show; writing sets it, and `default-page` seeds one the element
7017
- keeps until somebody does.
7018
-
7019
- **Clamped on the way out, because "the page on show" is what it says it
7020
- gives.** Returning whatever was written means `default-page="99"` on a
7021
- ten-page result renders page 10, marks page 10 with `aria-current`, and
7022
- reports 99, so a consumer syncing their query from this reads a page that
7023
- does not exist while the control in front of them says otherwise. Not a
7024
- far-fetched value: it is a bookmarked link after the result shrank.
7025
-
7026
- Rounded here too, so `2.7` reads as the 2 it renders. */
7027
- page?: (HelixPagination["page"]) | undefined;
7028
8009
  /** Accessible name for the control that jumps to the first page. */
7029
8010
  "first-label"?: (HelixPagination["firstLabel"]) | undefined;
7030
8011
  /** Accessible name for the control that jumps to the first page. */
@@ -7061,6 +8042,21 @@ different address from `?page=1234`. */
7061
8042
  "next-label"?: (HelixPagination["nextLabel"]) | undefined;
7062
8043
  /** Accessible name for the control that moves forward. */
7063
8044
  nextLabel?: (HelixPagination["nextLabel"]) | undefined;
8045
+ /** The page on show, one-based.
8046
+
8047
+ An accessor pair, the same shape as the calendar's `month`. Reading gives
8048
+ the page on show; writing sets it, and `default-page` seeds one the element
8049
+ keeps until somebody does.
8050
+
8051
+ **Clamped on the way out, because "the page on show" is what it says it
8052
+ gives.** Returning whatever was written means `default-page="99"` on a
8053
+ ten-page result renders page 10, marks page 10 with `aria-current`, and
8054
+ reports 99, so a consumer syncing their query from this reads a page that
8055
+ does not exist while the control in front of them says otherwise. Not a
8056
+ far-fetched value: it is a bookmarked link after the result shrank.
8057
+
8058
+ Rounded here too, so `2.7` reads as the 2 it renders. */
8059
+ page?: (HelixPagination["page"]) | undefined;
7064
8060
  /** Accessible name for one page, with `{page}` and `{pages}` filled in. */
7065
8061
  "page-label"?: (HelixPagination["pageLabel"]) | undefined;
7066
8062
  /** Accessible name for one page, with `{page}` and `{pages}` filled in. */
@@ -7136,12 +8132,6 @@ export type HelixPaginationSizeVueProps = {
7136
8132
  "default-value"?: (HelixPaginationSize["defaultValue"] | `${number}`) | undefined;
7137
8133
  /** Size to start on, where nothing declared one. */
7138
8134
  defaultValue?: (HelixPaginationSize["defaultValue"]) | undefined;
7139
- /** The size in force.
7140
-
7141
- Reading gives the real one; writing declares it the consumer's, and
7142
- `default-value` seeds one this element owns. Same accessor pair as
7143
- `Pagination.page` and the calendar's `month`. */
7144
- value?: (HelixPaginationSize["value"]) | undefined;
7145
8135
  /** The words beside the control. */
7146
8136
  label?: (HelixPaginationSize["label"]) | undefined;
7147
8137
  /** Locale for the numbers.
@@ -7154,6 +8144,12 @@ A string rather than an array, so the whole control is expressible in
7154
8144
  markup and survives a server render. Anything that is not a positive number
7155
8145
  is dropped rather than rendered as an option that cannot mean anything. */
7156
8146
  sizes?: (HelixPaginationSize["sizes"]) | undefined;
8147
+ /** The size in force.
8148
+
8149
+ Reading gives the real one; writing declares it the consumer's, and
8150
+ `default-value` seeds one this element owns. Same accessor pair as
8151
+ `Pagination.page` and the calendar's `month`. */
8152
+ value?: (HelixPaginationSize["value"]) | undefined;
7157
8153
  };
7158
8154
 
7159
8155
  export type HelixPaginationSizeVueEvents = {
@@ -7221,6 +8217,26 @@ a reset should return to. */
7221
8217
  label?: (HelixPinInput["label"]) | undefined;
7222
8218
  /** Whether the form refuses to submit without it. */
7223
8219
  required?: (HelixPinInput["required"]) | undefined;
8220
+ /** What a reader is told when the field is required and empty, where the
8221
+ page says.
8222
+
8223
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8224
+ set and the browser's own on a text field, which the browser writes in
8225
+ the reader's language. Every other word a control speaks is a property,
8226
+ and this one was the English a form in another language still spoke in
8227
+ the bubble it raises on submit: `feedback` replaces the message under
8228
+ the field and does not reach that one. */
8229
+ "value-missing-message"?: (HelixPinInput["valueMissingMessage"]) | undefined;
8230
+ /** What a reader is told when the field is required and empty, where the
8231
+ page says.
8232
+
8233
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8234
+ set and the browser's own on a text field, which the browser writes in
8235
+ the reader's language. Every other word a control speaks is a property,
8236
+ and this one was the English a form in another language still spoke in
8237
+ the bubble it raises on submit: `feedback` replaces the message under
8238
+ the field and does not reach that one. */
8239
+ valueMissingMessage?: (HelixPinInput["valueMissingMessage"]) | undefined;
7224
8240
  /** What the browser may autofill, reaching the first cell only.
7225
8241
 
7226
8242
  `one-time-code` is why this defaults to anything at all: it is the token
@@ -7250,6 +8266,12 @@ Empty by default, because a row of boxes already reads as a row of boxes. */
7250
8266
  readonly?: (HelixPinInput["readOnly"]) | undefined;
7251
8267
  /** Whether the boxes refuse input while still submitting their value. */
7252
8268
  readOnly?: (HelixPinInput["readOnly"]) | undefined;
8269
+ /** What a reader is told when the code is started and not finished, with
8270
+ `{length}` filled in. Absent is the control's own sentence, in English. */
8271
+ "too-short-message"?: (HelixPinInput["tooShortMessage"]) | undefined;
8272
+ /** What a reader is told when the code is started and not finished, with
8273
+ `{length}` filled in. Absent is the control's own sentence, in English. */
8274
+ tooShortMessage?: (HelixPinInput["tooShortMessage"]) | undefined;
7253
8275
  /** What a box accepts, which decides the keyboard a phone offers.
7254
8276
 
7255
8277
  `numeric` and `alphanumeric` also refuse anything else on the way in,
@@ -7331,6 +8353,10 @@ Unset is a surface with an inset, which is what a panel of content wants.
7331
8353
  `plain` removes both, for a panel holding something that brings its own,
7332
8354
  such as a list whose rows run to the edges. */
7333
8355
  separation?: (HelixPopover["separation"]) | undefined;
8356
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8357
+ "default-open"?: (HelixPopover["defaultOpen"]) | undefined;
8358
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8359
+ defaultOpen?: (HelixPopover["defaultOpen"]) | undefined;
7334
8360
  /** Whether the element is open.
7335
8361
 
7336
8362
  One property, not two, so `dialog.open` answers the question anyone
@@ -7344,10 +8370,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
7344
8370
  last reader did rather than what the author wrote. `:state(open)` carries
7345
8371
  the resolved state for stylesheets, which is what the mirror is for. */
7346
8372
  open?: (HelixPopover["open"]) | undefined;
7347
- /** Whether the markup declared it open. Ignored once `open` is written. */
7348
- "default-open"?: (HelixPopover["defaultOpen"]) | undefined;
7349
- /** Whether the markup declared it open. Ignored once `open` is written. */
7350
- defaultOpen?: (HelixPopover["defaultOpen"]) | undefined;
7351
8373
  /** Accessible name for the panel. */
7352
8374
  label?: (HelixPopover["label"]) | undefined;
7353
8375
  /** Space between the trigger and the panel, in pixels. */
@@ -7532,6 +8554,26 @@ a reset should return to. */
7532
8554
  label?: (HelixRadioGroup["label"]) | undefined;
7533
8555
  /** Whether the form refuses to submit without it. */
7534
8556
  required?: (HelixRadioGroup["required"]) | undefined;
8557
+ /** What a reader is told when the field is required and empty, where the
8558
+ page says.
8559
+
8560
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8561
+ set and the browser's own on a text field, which the browser writes in
8562
+ the reader's language. Every other word a control speaks is a property,
8563
+ and this one was the English a form in another language still spoke in
8564
+ the bubble it raises on submit: `feedback` replaces the message under
8565
+ the field and does not reach that one. */
8566
+ "value-missing-message"?: (HelixRadioGroup["valueMissingMessage"]) | undefined;
8567
+ /** What a reader is told when the field is required and empty, where the
8568
+ page says.
8569
+
8570
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8571
+ set and the browser's own on a text field, which the browser writes in
8572
+ the reader's language. Every other word a control speaks is a property,
8573
+ and this one was the English a form in another language still spoke in
8574
+ the bubble it raises on submit: `feedback` replaces the message under
8575
+ the field and does not reach that one. */
8576
+ valueMissingMessage?: (HelixRadioGroup["valueMissingMessage"]) | undefined;
7535
8577
  /** Which way the choices run. A column reads one line per answer.
7536
8578
 
7537
8579
  **Optional rather than defaulted, which is not a style preference.** A
@@ -7763,6 +8805,26 @@ a reset should return to. */
7763
8805
  label?: (HelixRating["label"]) | undefined;
7764
8806
  /** Whether the form refuses to submit without it. */
7765
8807
  required?: (HelixRating["required"]) | undefined;
8808
+ /** What a reader is told when the field is required and empty, where the
8809
+ page says.
8810
+
8811
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8812
+ set and the browser's own on a text field, which the browser writes in
8813
+ the reader's language. Every other word a control speaks is a property,
8814
+ and this one was the English a form in another language still spoke in
8815
+ the bubble it raises on submit: `feedback` replaces the message under
8816
+ the field and does not reach that one. */
8817
+ "value-missing-message"?: (HelixRating["valueMissingMessage"]) | undefined;
8818
+ /** What a reader is told when the field is required and empty, where the
8819
+ page says.
8820
+
8821
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8822
+ set and the browser's own on a text field, which the browser writes in
8823
+ the reader's language. Every other word a control speaks is a property,
8824
+ and this one was the English a form in another language still spoke in
8825
+ the bubble it raises on submit: `feedback` replaces the message under
8826
+ the field and does not reach that one. */
8827
+ valueMissingMessage?: (HelixRating["valueMissingMessage"]) | undefined;
7766
8828
  /** How many marks there are. */
7767
8829
  max?: (HelixRating["max"]) | undefined;
7768
8830
  /** The lowest score a reader can give, which is what clearing returns to.
@@ -8273,6 +9335,10 @@ are left alone rather than swept, because each has a different thing inside
8273
9335
  the frame and guessing at a set of them is how an axis ends up meaning four
8274
9336
  things, which is the fault `appearance` was retired for. */
8275
9337
  emphasis?: (HelixSelect["emphasis"]) | undefined;
9338
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9339
+ "default-open"?: (HelixSelect["defaultOpen"]) | undefined;
9340
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9341
+ defaultOpen?: (HelixSelect["defaultOpen"]) | undefined;
8276
9342
  /** Whether the element is open.
8277
9343
 
8278
9344
  One property, not two, so `dialog.open` answers the question anyone
@@ -8286,10 +9352,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
8286
9352
  last reader did rather than what the author wrote. `:state(open)` carries
8287
9353
  the resolved state for stylesheets, which is what the mirror is for. */
8288
9354
  open?: (HelixSelect["open"]) | undefined;
8289
- /** Whether the markup declared it open. Ignored once `open` is written. */
8290
- "default-open"?: (HelixSelect["defaultOpen"]) | undefined;
8291
- /** Whether the markup declared it open. Ignored once `open` is written. */
8292
- defaultOpen?: (HelixSelect["defaultOpen"]) | undefined;
8293
9355
  /** The value the markup declared, which is where a reset returns to. */
8294
9356
  "default-value"?: (HelixSelect["defaultValue"]) | undefined;
8295
9357
  /** The value the markup declared, which is where a reset returns to. */
@@ -8309,6 +9371,26 @@ a reset should return to. */
8309
9371
  label?: (HelixSelect["label"]) | undefined;
8310
9372
  /** Whether the form refuses to submit without it. */
8311
9373
  required?: (HelixSelect["required"]) | undefined;
9374
+ /** What a reader is told when the field is required and empty, where the
9375
+ page says.
9376
+
9377
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9378
+ set and the browser's own on a text field, which the browser writes in
9379
+ the reader's language. Every other word a control speaks is a property,
9380
+ and this one was the English a form in another language still spoke in
9381
+ the bubble it raises on submit: `feedback` replaces the message under
9382
+ the field and does not reach that one. */
9383
+ "value-missing-message"?: (HelixSelect["valueMissingMessage"]) | undefined;
9384
+ /** What a reader is told when the field is required and empty, where the
9385
+ page says.
9386
+
9387
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9388
+ set and the browser's own on a text field, which the browser writes in
9389
+ the reader's language. Every other word a control speaks is a property,
9390
+ and this one was the English a form in another language still spoke in
9391
+ the bubble it raises on submit: `feedback` replaces the message under
9392
+ the field and does not reach that one. */
9393
+ valueMissingMessage?: (HelixSelect["valueMissingMessage"]) | undefined;
8312
9394
  /** What it says where there are none. */
8313
9395
  "empty-text"?: (HelixSelect["emptyText"]) | undefined;
8314
9396
  /** What it says where there are none. */
@@ -8434,6 +9516,26 @@ a reset should return to. */
8434
9516
  label?: (HelixSlider["label"]) | undefined;
8435
9517
  /** Whether the form refuses to submit without it. */
8436
9518
  required?: (HelixSlider["required"]) | undefined;
9519
+ /** What a reader is told when the field is required and empty, where the
9520
+ page says.
9521
+
9522
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9523
+ set and the browser's own on a text field, which the browser writes in
9524
+ the reader's language. Every other word a control speaks is a property,
9525
+ and this one was the English a form in another language still spoke in
9526
+ the bubble it raises on submit: `feedback` replaces the message under
9527
+ the field and does not reach that one. */
9528
+ "value-missing-message"?: (HelixSlider["valueMissingMessage"]) | undefined;
9529
+ /** What a reader is told when the field is required and empty, where the
9530
+ page says.
9531
+
9532
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9533
+ set and the browser's own on a text field, which the browser writes in
9534
+ the reader's language. Every other word a control speaks is a property,
9535
+ and this one was the English a form in another language still spoke in
9536
+ the bubble it raises on submit: `feedback` replaces the message under
9537
+ the field and does not reach that one. */
9538
+ valueMissingMessage?: (HelixSlider["valueMissingMessage"]) | undefined;
8437
9539
  /** Whether each mark says which value it stands at. */
8438
9540
  "marker-labels"?: (HelixSlider["markerLabels"]) | undefined;
8439
9541
  /** Whether each mark says which value it stands at. */
@@ -8454,8 +9556,28 @@ is the honest picture of the range being offered. */
8454
9556
  markers?: (HelixSlider["markers"]) | undefined;
8455
9557
  /** The largest value the reader can choose. */
8456
9558
  max?: (HelixSlider["max"]) | undefined;
9559
+ /** What the upper thumb of a range is called, after the slider's own label.
9560
+
9561
+ **Named with the label rather than instead of it.** Each thumb was
9562
+ `aria-label="${label} maximum"`, which overrode the `<label>` and read the
9563
+ `label` string only, so a slider named by a slotted label or `aria-label`
9564
+ had thumbs called "minimum" and "maximum" and nothing else. The word is a
9565
+ property, like every other word a control speaks. */
9566
+ "maximum-label"?: (HelixSlider["maximumLabel"]) | undefined;
9567
+ /** What the upper thumb of a range is called, after the slider's own label.
9568
+
9569
+ **Named with the label rather than instead of it.** Each thumb was
9570
+ `aria-label="${label} maximum"`, which overrode the `<label>` and read the
9571
+ `label` string only, so a slider named by a slotted label or `aria-label`
9572
+ had thumbs called "minimum" and "maximum" and nothing else. The word is a
9573
+ property, like every other word a control speaks. */
9574
+ maximumLabel?: (HelixSlider["maximumLabel"]) | undefined;
8457
9575
  /** The smallest value the reader can choose. */
8458
9576
  min?: (HelixSlider["min"]) | undefined;
9577
+ /** What the lower thumb of a range is called, after the slider's own label. */
9578
+ "minimum-label"?: (HelixSlider["minimumLabel"]) | undefined;
9579
+ /** What the lower thumb of a range is called, after the slider's own label. */
9580
+ minimumLabel?: (HelixSlider["minimumLabel"]) | undefined;
8459
9581
  /** Which way the track runs, `vertical` standing it on end.
8460
9582
 
8461
9583
  For a level rather than a quantity: a fader, a channel, anything a reader
@@ -8694,6 +9816,10 @@ export type HelixSpeedDialHelixSelectElementEvent =
8694
9816
  HelixSpeedDialElementEvent<HelixSelectEvent>;
8695
9817
 
8696
9818
  export type HelixSpeedDialVueProps = {
9819
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9820
+ "default-open"?: (HelixSpeedDial["defaultOpen"]) | undefined;
9821
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9822
+ defaultOpen?: (HelixSpeedDial["defaultOpen"]) | undefined;
8697
9823
  /** Whether the element is open.
8698
9824
 
8699
9825
  One property, not two, so `dialog.open` answers the question anyone
@@ -8707,10 +9833,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
8707
9833
  last reader did rather than what the author wrote. `:state(open)` carries
8708
9834
  the resolved state for stylesheets, which is what the mirror is for. */
8709
9835
  open?: (HelixSpeedDial["open"]) | undefined;
8710
- /** Whether the markup declared it open. Ignored once `open` is written. */
8711
- "default-open"?: (HelixSpeedDial["defaultOpen"]) | undefined;
8712
- /** Whether the markup declared it open. Ignored once `open` is written. */
8713
- defaultOpen?: (HelixSpeedDial["defaultOpen"]) | undefined;
8714
9836
  /** Names the trigger and the set of actions it opens. */
8715
9837
  label?: (HelixSpeedDial["label"]) | undefined;
8716
9838
  /** Space between the trigger and the actions, in pixels. */
@@ -8759,6 +9881,32 @@ line can be grabbed. The grip adds no hit area of its own.
8759
9881
  Both are writable, so a generated page can say which it means rather than
8760
9882
  relying on the absence of an attribute. */
8761
9883
  variant?: (HelixSplitter["variant"]) | undefined;
9884
+ /** Which pane is shut, if either.
9885
+
9886
+ The same accessor pair as `position`, and deliberately a second state
9887
+ rather than a reading of the first. A pane shut by dragging the divider to
9888
+ the edge and a pane shut on purpose look identical in geometry and are not
9889
+ the same thing: only the second knows where to go back to. Kept apart, the
9890
+ open position is simply the one collapsing never overwrote, so restoring
9891
+ needs no memory of its own.
9892
+
9893
+ It overrides `min` and `max`, which is the point of it. Those keep a sliver
9894
+ of a pane during a drag; this is the thing that says the sliver can go. */
9895
+ collapsed?: (HelixSplitter["collapsed"]) | undefined;
9896
+ /** What the divider says while a pane is shut, in place of a number.
9897
+
9898
+ **A shut pane is off the scale the divider reports**, which is `min` to
9899
+ `max`, the sliver a drag keeps. The divider said a value outside its own
9900
+ range, 0 against a minimum of 20, which reads as broken rather than as
9901
+ shut. While shut it reports the whole 0 to 100 it sits on and says this. */
9902
+ "collapsed-label"?: (HelixSplitter["collapsedLabel"]) | undefined;
9903
+ /** What the divider says while a pane is shut, in place of a number.
9904
+
9905
+ **A shut pane is off the scale the divider reports**, which is `min` to
9906
+ `max`, the sliver a drag keeps. The divider said a value outside its own
9907
+ range, 0 against a minimum of 20, which reads as broken rather than as
9908
+ shut. While shut it reports the whole 0 to 100 it sits on and says this. */
9909
+ collapsedLabel?: (HelixSplitter["collapsedLabel"]) | undefined;
8762
9910
  /** How much of a shut pane is still shown, as a percentage.
8763
9911
 
8764
9912
  Zero by default, which is a pane fully gone. A tab strip or a title bar
@@ -8773,28 +9921,10 @@ that should survive its own collapse says how much of itself to keep, and
8773
9921
  only whoever put it there knows that, which is the same reason `min` is a
8774
9922
  consumer's to set. */
8775
9923
  collapsedSize?: (HelixSplitter["collapsedSize"]) | undefined;
8776
- /** Where the divider sits, as a percentage of the whole.
8777
-
8778
- Reading gives where it is; writing declares it the consumer's, and
8779
- `default-position` seeds one this element owns. The same accessor pair
8780
- `Pagination.page` and the calendar's `month` carry. */
8781
- position?: (HelixSplitter["position"]) | undefined;
8782
9924
  /** Accessible name for the handle where two dividers cross. */
8783
9925
  "corner-label"?: (HelixSplitter["cornerLabel"]) | undefined;
8784
9926
  /** Accessible name for the handle where two dividers cross. */
8785
9927
  cornerLabel?: (HelixSplitter["cornerLabel"]) | undefined;
8786
- /** Which pane is shut, if either.
8787
-
8788
- The same accessor pair as `position`, and deliberately a second state
8789
- rather than a reading of the first. A pane shut by dragging the divider to
8790
- the edge and a pane shut on purpose look identical in geometry and are not
8791
- the same thing: only the second knows where to go back to. Kept apart, the
8792
- open position is simply the one collapsing never overwrote, so restoring
8793
- needs no memory of its own.
8794
-
8795
- It overrides `min` and `max`, which is the point of it. Those keep a sliver
8796
- of a pane during a drag; this is the thing that says the sliver can go. */
8797
- collapsed?: (HelixSplitter["collapsed"]) | undefined;
8798
9928
  /** Which pane starts shut, where nothing declared it. */
8799
9929
  "default-collapsed"?: (HelixSplitter["defaultCollapsed"]) | undefined;
8800
9930
  /** Which pane starts shut, where nothing declared it. */
@@ -8850,6 +9980,12 @@ no room for two panes side by side, and a media query would hand it the
8850
9980
  desktop branch. A `ResizeObserver` on the host asks the only question that
8851
9981
  has an honest answer. */
8852
9982
  orientation?: (HelixSplitter["orientation"]) | undefined;
9983
+ /** Where the divider sits, as a percentage of the whole.
9984
+
9985
+ Reading gives where it is; writing declares it the consumer's, and
9986
+ `default-position` seeds one this element owns. The same accessor pair
9987
+ `Pagination.page` and the calendar's `month` carry. */
9988
+ position?: (HelixSplitter["position"]) | undefined;
8853
9989
  /** How far one arrow press moves it, as a percentage. */
8854
9990
  step?: (HelixSplitter["step"]) | undefined;
8855
9991
  };
@@ -9016,6 +10152,26 @@ stylesheets. */
9016
10152
  label?: (HelixSwitch["label"]) | undefined;
9017
10153
  /** Whether the form refuses to submit without it. */
9018
10154
  required?: (HelixSwitch["required"]) | undefined;
10155
+ /** What a reader is told when the field is required and empty, where the
10156
+ page says.
10157
+
10158
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
10159
+ set and the browser's own on a text field, which the browser writes in
10160
+ the reader's language. Every other word a control speaks is a property,
10161
+ and this one was the English a form in another language still spoke in
10162
+ the bubble it raises on submit: `feedback` replaces the message under
10163
+ the field and does not reach that one. */
10164
+ "value-missing-message"?: (HelixSwitch["valueMissingMessage"]) | undefined;
10165
+ /** What a reader is told when the field is required and empty, where the
10166
+ page says.
10167
+
10168
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
10169
+ set and the browser's own on a text field, which the browser writes in
10170
+ the reader's language. Every other word a control speaks is a property,
10171
+ and this one was the English a form in another language still spoke in
10172
+ the bubble it raises on submit: `feedback` replaces the message under
10173
+ the field and does not reach that one. */
10174
+ valueMissingMessage?: (HelixSwitch["valueMissingMessage"]) | undefined;
9019
10175
  /** Value submitted when the switch is on. */
9020
10176
  value?: (HelixSwitch["value"]) | undefined;
9021
10177
  /** Whether the control is non-interactive.
@@ -9086,6 +10242,18 @@ after a column moves is a sort a consumer cannot store in a URL.
9086
10242
  Empty on a column that is purely presentational, an actions column say, and
9087
10243
  such a column is never sortable however it is marked. */
9088
10244
  field?: (HelixTableColumn["field"]) | undefined;
10245
+ /** What the grip that moves the column is called, with the heading's words as
10246
+ `{name}`.
10247
+
10248
+ **Every word a column speaks is a property**, so a table in another
10249
+ language hears its own rather than English around its own headings. */
10250
+ "move-label"?: (HelixTableColumn["moveLabel"]) | undefined;
10251
+ /** What the grip that moves the column is called, with the heading's words as
10252
+ `{name}`.
10253
+
10254
+ **Every word a column speaks is a property**, so a table in another
10255
+ language hears its own rather than English around its own headings. */
10256
+ moveLabel?: (HelixTableColumn["moveLabel"]) | undefined;
9089
10257
  /** Whether a reader may change this column's width.
9090
10258
 
9091
10259
  By dragging the edge at the end of the heading, or with the arrow keys once
@@ -9093,6 +10261,12 @@ it has focus, a step at a time and four with Shift. The width lands in
9093
10261
  `width` as pixels, and `helix-before-resize` asks first, so a consumer who
9094
10262
  stores the widths can take the decision. */
9095
10263
  resizable?: (HelixTableColumn["resizable"]) | undefined;
10264
+ /** What the separator that resizes the column is called, with the heading's
10265
+ words as `{name}`. */
10266
+ "resize-label"?: (HelixTableColumn["resizeLabel"]) | undefined;
10267
+ /** What the separator that resizes the column is called, with the heading's
10268
+ words as `{name}`. */
10269
+ resizeLabel?: (HelixTableColumn["resizeLabel"]) | undefined;
9096
10270
  /** Whether a reader may reorder the set by this column.
9097
10271
 
9098
10272
  Ignored without a `field`, and silently: a column with nothing to sort by
@@ -9187,6 +10361,10 @@ line, so a column holding sentences rather than values wants
9187
10361
  `width="minmax(0, 1fr)"` to opt back into wrapping. A headless consumer owns
9188
10362
  the overflow either way, that being paint, and gets the honest track list. */
9189
10363
  width?: (HelixTableColumn["width"]) | undefined;
10364
+ /** How the separator reads out the column's width, with `{width}` filled in. */
10365
+ "width-label"?: (HelixTableColumn["widthLabel"]) | undefined;
10366
+ /** How the separator reads out the column's width, with `{width}` filled in. */
10367
+ widthLabel?: (HelixTableColumn["widthLabel"]) | undefined;
9190
10368
  /** How to read the cell, where the field alone will not do.
9191
10369
 
9192
10370
  A property and not an attribute, because it is a function. Set it from a Lit
@@ -9503,6 +10681,26 @@ a reset should return to. */
9503
10681
  label?: (HelixTextarea["label"]) | undefined;
9504
10682
  /** Whether the form refuses to submit without it. */
9505
10683
  required?: (HelixTextarea["required"]) | undefined;
10684
+ /** What a reader is told when the field is required and empty, where the
10685
+ page says.
10686
+
10687
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
10688
+ set and the browser's own on a text field, which the browser writes in
10689
+ the reader's language. Every other word a control speaks is a property,
10690
+ and this one was the English a form in another language still spoke in
10691
+ the bubble it raises on submit: `feedback` replaces the message under
10692
+ the field and does not reach that one. */
10693
+ "value-missing-message"?: (HelixTextarea["valueMissingMessage"]) | undefined;
10694
+ /** What a reader is told when the field is required and empty, where the
10695
+ page says.
10696
+
10697
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
10698
+ set and the browser's own on a text field, which the browser writes in
10699
+ the reader's language. Every other word a control speaks is a property,
10700
+ and this one was the English a form in another language still spoke in
10701
+ the bubble it raises on submit: `feedback` replaces the message under
10702
+ the field and does not reach that one. */
10703
+ valueMissingMessage?: (HelixTextarea["valueMissingMessage"]) | undefined;
9506
10704
  /** What the browser may autofill here, as one of the platform's own tokens.
9507
10705
 
9508
10706
  Empty leaves the attribute off, which is the browser's default. Set it to
@@ -9662,6 +10860,26 @@ submits nothing and leaves the tab order, and a read-only one submits its
9662
10860
  value and stays reachable, which is what a form showing a value somebody
9663
10861
  else set needs. */
9664
10862
  readOnly?: (HelixTimeInput["readOnly"]) | undefined;
10863
+ /** What a reader is told when the field holds something the picker cannot
10864
+ read: a date that is not one, a time, a color.
10865
+
10866
+ **Every sentence a control raises in the browser's bubble is a
10867
+ property**, named for the validity flag it reports, so a form in another
10868
+ language speaks it. Absent is the family's own sentence, in English,
10869
+ which says what the value should look like. */
10870
+ "bad-input-message"?: (HelixTimeInput["badInputMessage"]) | undefined;
10871
+ /** What a reader is told when the field holds something the picker cannot
10872
+ read: a date that is not one, a time, a color.
10873
+
10874
+ **Every sentence a control raises in the browser's bubble is a
10875
+ property**, named for the validity flag it reports, so a form in another
10876
+ language speaks it. Absent is the family's own sentence, in English,
10877
+ which says what the value should look like. */
10878
+ badInputMessage?: (HelixTimeInput["badInputMessage"]) | undefined;
10879
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10880
+ "default-open"?: (HelixTimeInput["defaultOpen"]) | undefined;
10881
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10882
+ defaultOpen?: (HelixTimeInput["defaultOpen"]) | undefined;
9665
10883
  /** Whether the element is open.
9666
10884
 
9667
10885
  One property, not two, so `dialog.open` answers the question anyone
@@ -9675,10 +10893,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
9675
10893
  last reader did rather than what the author wrote. `:state(open)` carries
9676
10894
  the resolved state for stylesheets, which is what the mirror is for. */
9677
10895
  open?: (HelixTimeInput["open"]) | undefined;
9678
- /** Whether the markup declared it open. Ignored once `open` is written. */
9679
- "default-open"?: (HelixTimeInput["defaultOpen"]) | undefined;
9680
- /** Whether the markup declared it open. Ignored once `open` is written. */
9681
- defaultOpen?: (HelixTimeInput["defaultOpen"]) | undefined;
9682
10896
  /** What the control is called once everything is showing. */
9683
10897
  "collapse-label"?: (HelixTimeInput["collapseLabel"]) | undefined;
9684
10898
  /** What the control is called once everything is showing. */
@@ -9712,6 +10926,26 @@ a reset should return to. */
9712
10926
  label?: (HelixTimeInput["label"]) | undefined;
9713
10927
  /** Whether the form refuses to submit without it. */
9714
10928
  required?: (HelixTimeInput["required"]) | undefined;
10929
+ /** What a reader is told when the field is required and empty, where the
10930
+ page says.
10931
+
10932
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
10933
+ set and the browser's own on a text field, which the browser writes in
10934
+ the reader's language. Every other word a control speaks is a property,
10935
+ and this one was the English a form in another language still spoke in
10936
+ the bubble it raises on submit: `feedback` replaces the message under
10937
+ the field and does not reach that one. */
10938
+ "value-missing-message"?: (HelixTimeInput["valueMissingMessage"]) | undefined;
10939
+ /** What a reader is told when the field is required and empty, where the
10940
+ page says.
10941
+
10942
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
10943
+ set and the browser's own on a text field, which the browser writes in
10944
+ the reader's language. Every other word a control speaks is a property,
10945
+ and this one was the English a form in another language still spoke in
10946
+ the bubble it raises on submit: `feedback` replaces the message under
10947
+ the field and does not reach that one. */
10948
+ valueMissingMessage?: (HelixTimeInput["valueMissingMessage"]) | undefined;
9715
10949
  /** What the browser may autofill here, as one of the platform's own tokens.
9716
10950
 
9717
10951
  Empty leaves the attribute off, which is the browser's default and is what
@@ -9734,6 +10968,40 @@ on why a wheel cannot do either. */
9734
10968
  mode?: (HelixTimeInput["mode"]) | undefined;
9735
10969
  /** What the field says before a time is in it. */
9736
10970
  placeholder?: (HelixTimeInput["placeholder"]) | undefined;
10971
+ /** What a reader is told when a range holds more than two times.
10972
+
10973
+ **Every sentence a control raises in the browser's bubble is a property**,
10974
+ so a form in another language speaks it. Absent is the control's own
10975
+ sentence, in English. */
10976
+ "range-length-message"?: (HelixTimeInput["rangeLengthMessage"]) | undefined;
10977
+ /** What a reader is told when a range holds more than two times.
10978
+
10979
+ **Every sentence a control raises in the browser's bubble is a property**,
10980
+ so a form in another language speaks it. Absent is the control's own
10981
+ sentence, in English. */
10982
+ rangeLengthMessage?: (HelixTimeInput["rangeLengthMessage"]) | undefined;
10983
+ /** What a reader is told when a time is after `max`, with `{max}` filled in
10984
+ as the field writes it. */
10985
+ "range-overflow-message"?: (HelixTimeInput["rangeOverflowMessage"]) | undefined;
10986
+ /** What a reader is told when a time is after `max`, with `{max}` filled in
10987
+ as the field writes it. */
10988
+ rangeOverflowMessage?: (HelixTimeInput["rangeOverflowMessage"]) | undefined;
10989
+ /** What a reader is told when a time is before `min`, with `{min}` filled
10990
+ in as the field writes it. */
10991
+ "range-underflow-message"?: (HelixTimeInput["rangeUnderflowMessage"]) | undefined;
10992
+ /** What a reader is told when a time is before `min`, with `{min}` filled
10993
+ in as the field writes it. */
10994
+ rangeUnderflowMessage?: (HelixTimeInput["rangeUnderflowMessage"]) | undefined;
10995
+ /** What the control removing one time is called, with `{name}` filled in.
10996
+
10997
+ **The name goes in**, so a row of them is heard as which one each
10998
+ removes rather than as "Remove" said once per time. */
10999
+ "remove-label"?: (HelixTimeInput["removeLabel"]) | undefined;
11000
+ /** What the control removing one time is called, with `{name}` filled in.
11001
+
11002
+ **The name goes in**, so a row of them is heard as which one each
11003
+ removes rather than as "Remove" said once per time. */
11004
+ removeLabel?: (HelixTimeInput["removeLabel"]) | undefined;
9737
11005
  /** How far apart the offered times are, in minutes. */
9738
11006
  step?: (HelixTimeInput["step"]) | undefined;
9739
11007
  /** Whether the field writes the time out, or holds the value as it is.
@@ -9842,6 +11110,18 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
9842
11110
  same statement in markup, and `default-value` is how markup seeds a value
9843
11111
  a reset should return to. */
9844
11112
  value?: (HelixTimePicker["value"]) | undefined;
11113
+ /** What a reader is told when the value holds something that is not a time.
11114
+
11115
+ **Every sentence a control raises in the browser's bubble is a property**,
11116
+ named for the validity flag it reports, so a form in another language
11117
+ speaks it. Absent is the control's own sentence, in English. */
11118
+ "bad-input-message"?: (HelixTimePicker["badInputMessage"]) | undefined;
11119
+ /** What a reader is told when the value holds something that is not a time.
11120
+
11121
+ **Every sentence a control raises in the browser's bubble is a property**,
11122
+ named for the validity flag it reports, so a form in another language
11123
+ speaks it. Absent is the control's own sentence, in English. */
11124
+ badInputMessage?: (HelixTimePicker["badInputMessage"]) | undefined;
9845
11125
  /** Times that cannot be chosen, comma separated, as `HH:mm`.
9846
11126
 
9847
11127
  The counterpart to Date Picker's `disable-dates`, and it exists for the same
@@ -9932,6 +11212,10 @@ Fifteen, which is four rows an hour and ninety-six in a day: enough that a
9932
11212
  reader scrolls rather than hunts, and few enough that the list is a list.
9933
11213
  Anything under five is a thousand rows and wants a field instead. */
9934
11214
  step?: (HelixTimePicker["step"]) | undefined;
11215
+ /** What a reader is told when a time is required and none is chosen. */
11216
+ "value-missing-message"?: (HelixTimePicker["valueMissingMessage"]) | undefined;
11217
+ /** What a reader is told when a time is required and none is chosen. */
11218
+ valueMissingMessage?: (HelixTimePicker["valueMissingMessage"]) | undefined;
9935
11219
  /** Whether the times are one list or a column each.
9936
11220
 
9937
11221
  `list` is the default and offers whole times, which is what a product with
@@ -10055,10 +11339,6 @@ would catch. */
10055
11339
  Read once when the item is first rendered. Changing it afterwards does not
10056
11340
  restart a message the reader is already partway through. */
10057
11341
  duration?: (HelixToastItem["duration"]) | undefined;
10058
- /** What kind of message it is, which picks the mark and its name.
10059
-
10060
- A subset of the tone axis: a toast reports a status and never a brand role. */
10061
- tone?: (HelixToastItem["tone"]) | undefined;
10062
11342
  /** Whether the message is still showing.
10063
11343
 
10064
11344
  The item always applies: it goes when it is asked to, having announced
@@ -10071,6 +11351,10 @@ only one starting state that makes sense: a message that has been rendered
10071
11351
  is showing. An attribute whose only legal value is the default is an
10072
11352
  attribute nobody can use. */
10073
11353
  open?: (HelixToastItem["open"]) | undefined;
11354
+ /** What kind of message it is, which picks the mark and its name.
11355
+
11356
+ A subset of the tone axis: a toast reports a status and never a brand role. */
11357
+ tone?: (HelixToastItem["tone"]) | undefined;
10074
11358
  };
10075
11359
 
10076
11360
  export type HelixToastItemVueEvents = {
@@ -10166,6 +11450,26 @@ a reset should return to. */
10166
11450
  label?: (HelixToggleGroup["label"]) | undefined;
10167
11451
  /** Whether the form refuses to submit without it. */
10168
11452
  required?: (HelixToggleGroup["required"]) | undefined;
11453
+ /** What a reader is told when the field is required and empty, where the
11454
+ page says.
11455
+
11456
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11457
+ set and the browser's own on a text field, which the browser writes in
11458
+ the reader's language. Every other word a control speaks is a property,
11459
+ and this one was the English a form in another language still spoke in
11460
+ the bubble it raises on submit: `feedback` replaces the message under
11461
+ the field and does not reach that one. */
11462
+ "value-missing-message"?: (HelixToggleGroup["valueMissingMessage"]) | undefined;
11463
+ /** What a reader is told when the field is required and empty, where the
11464
+ page says.
11465
+
11466
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11467
+ set and the browser's own on a text field, which the browser writes in
11468
+ the reader's language. Every other word a control speaks is a property,
11469
+ and this one was the English a form in another language still spoke in
11470
+ the bubble it raises on submit: `feedback` replaces the message under
11471
+ the field and does not reach that one. */
11472
+ valueMissingMessage?: (HelixToggleGroup["valueMissingMessage"]) | undefined;
10169
11473
  /** Where the group's label sits, `start` putting it on the track's line.
10170
11474
 
10171
11475
  Absent is above, which is what a field looks like and what almost every
@@ -10340,6 +11644,10 @@ content is only readable because it has a ground; dropping it makes an
10340
11644
  unreadable tooltip rather than a lighter one. `frosted` and `glass` are the
10341
11645
  two honest points here. */
10342
11646
  material?: (HelixTooltip["material"]) | undefined;
11647
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11648
+ "default-open"?: (HelixTooltip["defaultOpen"]) | undefined;
11649
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11650
+ defaultOpen?: (HelixTooltip["defaultOpen"]) | undefined;
10343
11651
  /** Whether the element is open.
10344
11652
 
10345
11653
  One property, not two, so `dialog.open` answers the question anyone
@@ -10353,10 +11661,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
10353
11661
  last reader did rather than what the author wrote. `:state(open)` carries
10354
11662
  the resolved state for stylesheets, which is what the mirror is for. */
10355
11663
  open?: (HelixTooltip["open"]) | undefined;
10356
- /** Whether the markup declared it open. Ignored once `open` is written. */
10357
- "default-open"?: (HelixTooltip["defaultOpen"]) | undefined;
10358
- /** Whether the markup declared it open. Ignored once `open` is written. */
10359
- defaultOpen?: (HelixTooltip["defaultOpen"]) | undefined;
10360
11664
  /** The text shown in the bubble.
10361
11665
 
10362
11666
  The common case, and the fallback for the `content` slot: slot something
@@ -10465,6 +11769,14 @@ export type HelixTourVueProps = {
10465
11769
  "back-label"?: (HelixTour["backLabel"]) | undefined;
10466
11770
  /** Label for the control that goes back, handed to every stop. */
10467
11771
  backLabel?: (HelixTour["backLabel"]) | undefined;
11772
+ /** Stop to start on, where nothing declared one. */
11773
+ "default-index"?: (HelixTour["defaultIndex"] | `${number}`) | undefined;
11774
+ /** Stop to start on, where nothing declared one. */
11775
+ defaultIndex?: (HelixTour["defaultIndex"]) | undefined;
11776
+ /** Label for the control that goes on from the last stop. */
11777
+ "done-label"?: (HelixTour["doneLabel"]) | undefined;
11778
+ /** Label for the control that goes on from the last stop. */
11779
+ doneLabel?: (HelixTour["doneLabel"]) | undefined;
10468
11780
  /** Which stop the reader is on.
10469
11781
 
10470
11782
  **Moved through `requestChange`, never by assignment from `move`.** That
@@ -10476,14 +11788,6 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
10476
11788
  `default-index` for markup that only seeds and a held state that is
10477
11789
  `undefined` until somebody sets one. */
10478
11790
  index?: (HelixTour["index"]) | undefined;
10479
- /** Stop to start on, where nothing declared one. */
10480
- "default-index"?: (HelixTour["defaultIndex"] | `${number}`) | undefined;
10481
- /** Stop to start on, where nothing declared one. */
10482
- defaultIndex?: (HelixTour["defaultIndex"]) | undefined;
10483
- /** Label for the control that goes on from the last stop. */
10484
- "done-label"?: (HelixTour["doneLabel"]) | undefined;
10485
- /** Label for the control that goes on from the last stop. */
10486
- doneLabel?: (HelixTour["doneLabel"]) | undefined;
10487
11791
  /** Accessible name for the run, such as "Getting started". */
10488
11792
  label?: (HelixTour["label"]) | undefined;
10489
11793
  /** Label for the control that goes on. */
@@ -10572,6 +11876,10 @@ export type HelixTreeItemHelixBeforeOpenElementEvent =
10572
11876
  HelixTreeItemElementEvent<HelixBeforeOpenEvent>;
10573
11877
 
10574
11878
  export type HelixTreeItemVueProps = {
11879
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11880
+ "default-open"?: (HelixTreeItem["defaultOpen"]) | undefined;
11881
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11882
+ defaultOpen?: (HelixTreeItem["defaultOpen"]) | undefined;
10575
11883
  /** Whether the element is open.
10576
11884
 
10577
11885
  One property, not two, so `dialog.open` answers the question anyone
@@ -10585,10 +11893,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
10585
11893
  last reader did rather than what the author wrote. `:state(open)` carries
10586
11894
  the resolved state for stylesheets, which is what the mirror is for. */
10587
11895
  open?: (HelixTreeItem["open"]) | undefined;
10588
- /** Whether the markup declared it open. Ignored once `open` is written. */
10589
- "default-open"?: (HelixTreeItem["defaultOpen"]) | undefined;
10590
- /** Whether the markup declared it open. Ignored once `open` is written. */
10591
- defaultOpen?: (HelixTreeItem["defaultOpen"]) | undefined;
10592
11896
  /** Where this node goes, which makes its row a real link.
10593
11897
 
10594
11898
  Unset by default, and unreflected: a tree of choosable nodes is not a tree
@@ -10957,6 +12261,22 @@ the browser's policy and not this element's, and `play()` already swallows
10957
12261
  the refusal: what follows a refused autoplay is a paused player showing its
10958
12262
  start control, which is the correct thing to be looking at. */
10959
12263
  autoplay?: (HelixVideo["autoplay"]) | undefined;
12264
+ /** What the captions control is called where the video has one track, which it switches on and off.
12265
+
12266
+ **Every word this player speaks is a property**, so a page in another
12267
+ language hears its own: the play, pause, loading and error labels were,
12268
+ and the rest of the bar read out in English beside them. */
12269
+ "captions-label"?: (HelixVideo["captionsLabel"]) | undefined;
12270
+ /** What the captions control is called where the video has one track, which it switches on and off.
12271
+
12272
+ **Every word this player speaks is a property**, so a page in another
12273
+ language hears its own: the play, pause, loading and error labels were,
12274
+ and the rest of the bar read out in English beside them. */
12275
+ captionsLabel?: (HelixVideo["captionsLabel"]) | undefined;
12276
+ /** The row that turns captions off, where the video has several tracks to choose from. */
12277
+ "captions-off-label"?: (HelixVideo["captionsOffLabel"]) | undefined;
12278
+ /** The row that turns captions off, where the video has several tracks to choose from. */
12279
+ captionsOffLabel?: (HelixVideo["captionsOffLabel"]) | undefined;
10960
12280
  /** Whether the browser draws the controls instead of this element.
10961
12281
 
10962
12282
  A fallback rather than a default. Two bars over one video is worse than
@@ -10994,6 +12314,10 @@ meaning something else. */
10994
12314
  disableremoteplayback?: (HelixVideo["disableRemotePlayback"]) | undefined;
10995
12315
  /** Whether the browser may offer playback on a remote device. */
10996
12316
  disableRemotePlayback?: (HelixVideo["disableRemotePlayback"]) | undefined;
12317
+ /** What the control that saves the file is called. */
12318
+ "download-label"?: (HelixVideo["downloadLabel"]) | undefined;
12319
+ /** What the control that saves the file is called. */
12320
+ downloadLabel?: (HelixVideo["downloadLabel"]) | undefined;
10997
12321
  /** And what they are told when it will not play at all. */
10998
12322
  "error-label"?: (HelixVideo["errorLabel"]) | undefined;
10999
12323
  /** And what they are told when it will not play at all. */
@@ -11058,6 +12382,22 @@ ours to promise: the attribute is ignored cross-origin, so a file served
11058
12382
  from somewhere else opens rather than saves, which is the browser's rule
11059
12383
  and not something a player can work around. */
11060
12384
  extraControls?: (HelixVideo["extraControls"]) | undefined;
12385
+ /** What the control that skips ahead is called, with `{seconds}` filled in. */
12386
+ "forward-label"?: (HelixVideo["forwardLabel"]) | undefined;
12387
+ /** What the control that skips ahead is called, with `{seconds}` filled in. */
12388
+ forwardLabel?: (HelixVideo["forwardLabel"]) | undefined;
12389
+ /** What the control that fills the screen is called.
12390
+
12391
+ **One name, pressed or not**, since the button says which with
12392
+ `aria-pressed`: a name that changed as well read out "Exit fullscreen,
12393
+ pressed", which is two answers to one question. */
12394
+ "fullscreen-label"?: (HelixVideo["fullscreenLabel"]) | undefined;
12395
+ /** What the control that fills the screen is called.
12396
+
12397
+ **One name, pressed or not**, since the button says which with
12398
+ `aria-pressed`: a name that changed as well read out "Exit fullscreen,
12399
+ pressed", which is two answers to one question. */
12400
+ fullscreenLabel?: (HelixVideo["fullscreenLabel"]) | undefined;
11061
12401
  /** How long the bar waits after the pointer stops before it goes, in ms.
11062
12402
 
11063
12403
  A wait rather than leaving with the pointer, or a reader moving across the
@@ -11086,6 +12426,18 @@ regardless, because a reader who stopped it is deciding what to do next. */
11086
12426
  loadingLabel?: (HelixVideo["loadingLabel"]) | undefined;
11087
12427
  /** Whether it starts again at the end. */
11088
12428
  loop?: (HelixVideo["loop"]) | undefined;
12429
+ /** What the button that opens `overflow-controls` is called. */
12430
+ "more-label"?: (HelixVideo["moreLabel"]) | undefined;
12431
+ /** What the button that opens `overflow-controls` is called. */
12432
+ moreLabel?: (HelixVideo["moreLabel"]) | undefined;
12433
+ /** What the control that silences the video is called, pressed while it is silent. */
12434
+ "mute-label"?: (HelixVideo["muteLabel"]) | undefined;
12435
+ /** What the control that silences the video is called, pressed while it is silent. */
12436
+ muteLabel?: (HelixVideo["muteLabel"]) | undefined;
12437
+ /** What the control that asks for the next video is called. */
12438
+ "next-label"?: (HelixVideo["nextLabel"]) | undefined;
12439
+ /** What the control that asks for the next video is called. */
12440
+ nextLabel?: (HelixVideo["nextLabel"]) | undefined;
11089
12441
  /** Controls that go behind one button instead of onto the bar, named the same
11090
12442
  way.
11091
12443
 
@@ -11122,6 +12474,14 @@ bar: two of the same control is worse than either placement. */
11122
12474
  "pause-label"?: (HelixVideo["pauseLabel"]) | undefined;
11123
12475
  /** And while it would stop it. */
11124
12476
  pauseLabel?: (HelixVideo["pauseLabel"]) | undefined;
12477
+ /** How the volume is read out, with `{percent}` filled in. */
12478
+ "percent-label"?: (HelixVideo["percentLabel"]) | undefined;
12479
+ /** How the volume is read out, with `{percent}` filled in. */
12480
+ percentLabel?: (HelixVideo["percentLabel"]) | undefined;
12481
+ /** What the control that floats the video over other windows is called. */
12482
+ "pip-label"?: (HelixVideo["pipLabel"]) | undefined;
12483
+ /** What the control that floats the video over other windows is called. */
12484
+ pipLabel?: (HelixVideo["pipLabel"]) | undefined;
11125
12485
  /** What the play control is called while it would start the video. */
11126
12486
  "play-label"?: (HelixVideo["playLabel"]) | undefined;
11127
12487
  /** What the play control is called while it would start the video. */
@@ -11134,6 +12494,26 @@ bar: two of the same control is worse than either placement. */
11134
12494
  poster?: (HelixVideo["poster"]) | undefined;
11135
12495
  /** How much to fetch before anything is asked for. */
11136
12496
  preload?: (HelixVideo["preload"]) | undefined;
12497
+ /** What the control that asks for the previous video is called. */
12498
+ "previous-label"?: (HelixVideo["previousLabel"]) | undefined;
12499
+ /** What the control that asks for the previous video is called. */
12500
+ previousLabel?: (HelixVideo["previousLabel"]) | undefined;
12501
+ /** What the control that casts the video to another device is called. */
12502
+ "remote-label"?: (HelixVideo["remoteLabel"]) | undefined;
12503
+ /** What the control that casts the video to another device is called. */
12504
+ remoteLabel?: (HelixVideo["remoteLabel"]) | undefined;
12505
+ /** What the control that skips back is called, with `{seconds}` filled in. */
12506
+ "rewind-label"?: (HelixVideo["rewindLabel"]) | undefined;
12507
+ /** What the control that skips back is called, with `{seconds}` filled in. */
12508
+ rewindLabel?: (HelixVideo["rewindLabel"]) | undefined;
12509
+ /** What the scrubber is called. */
12510
+ "seek-label"?: (HelixVideo["seekLabel"]) | undefined;
12511
+ /** What the scrubber is called. */
12512
+ seekLabel?: (HelixVideo["seekLabel"]) | undefined;
12513
+ /** What the control that changes the speed is called. */
12514
+ "speed-label"?: (HelixVideo["speedLabel"]) | undefined;
12515
+ /** What the control that changes the speed is called. */
12516
+ speedLabel?: (HelixVideo["speedLabel"]) | undefined;
11137
12517
  /** The speeds offered, slowest first, as multipliers of normal. */
11138
12518
  speeds?: (HelixVideo["speeds"]) | undefined;
11139
12519
  /** Where the video is, for the common case of one file. */
@@ -11170,6 +12550,20 @@ A value rather than a boolean, so the resting state is the attribute's
11170
12550
  absence: a boolean defaulting to on would have to be spelled as its own
11171
12551
  negation. */
11172
12552
  startControl?: (HelixVideo["startControl"]) | undefined;
12553
+ /** What the menu of tracks is called, where the video has several. */
12554
+ "subtitles-label"?: (HelixVideo["subtitlesLabel"]) | undefined;
12555
+ /** What the menu of tracks is called, where the video has several. */
12556
+ subtitlesLabel?: (HelixVideo["subtitlesLabel"]) | undefined;
12557
+ /** How the scrubber reads out where the video is, with `{position}` and
12558
+ `{duration}` filled in. */
12559
+ "time-label"?: (HelixVideo["timeLabel"]) | undefined;
12560
+ /** How the scrubber reads out where the video is, with `{position}` and
12561
+ `{duration}` filled in. */
12562
+ timeLabel?: (HelixVideo["timeLabel"]) | undefined;
12563
+ /** What the volume slider is called. */
12564
+ "volume-label"?: (HelixVideo["volumeLabel"]) | undefined;
12565
+ /** What the volume slider is called. */
12566
+ volumeLabel?: (HelixVideo["volumeLabel"]) | undefined;
11173
12567
  /** Where playback has reached, in seconds.
11174
12568
 
11175
12569
  Writing seeks, through the same clamp `seek` uses, because a `currentTime`
@@ -11339,6 +12733,40 @@ export type CustomCssProperties = {
11339
12733
  "--callout-background-color"?: (string) | undefined;
11340
12734
  /** Corner radius of the callout. */
11341
12735
  "--callout-radius"?: (string) | undefined;
12736
+ /** How large the corners a selected card is resized from are. */
12737
+ "--canvas-grip-size"?: (string) | undefined;
12738
+ /** How large the points a connection is drawn from are. */
12739
+ "--canvas-handle-size"?: (string) | undefined;
12740
+ /** How tall the grip a selected card is moved by is. */
12741
+ "--canvas-move-block-size"?: (string) | undefined;
12742
+ /** How wide the grip a selected card is moved by is. */
12743
+ "--canvas-move-inline-size"?: (string) | undefined;
12744
+ /** How far in from the card's corner that grip sits. */
12745
+ "--canvas-move-inset"?: (string) | undefined;
12746
+ /** The ground the card is drawn on. */
12747
+ "--canvas-node-background-color"?: (string) | undefined;
12748
+ /** A color with no meaning, where a tone will not do: a hex a document chose. */
12749
+ "--canvas-node-color"?: (string) | undefined;
12750
+ /** Space between the card's edge and what it holds. */
12751
+ "--canvas-node-padding"?: (string) | undefined;
12752
+ /** The lift under the card, which `separation="elevated"` sets. */
12753
+ "--canvas-node-shadow"?: (string) | undefined;
12754
+ /** The well behind the board. */
12755
+ "--canvas-background-color"?: (string) | undefined;
12756
+ /** How tall the frame is. */
12757
+ "--canvas-block-size"?: (string) | undefined;
12758
+ /** Color of the frame's edge. */
12759
+ "--canvas-border-color"?: (string) | undefined;
12760
+ /** Color of a connector with no tone. Written in an edge's own `style`, it colors that edge alone. */
12761
+ "--canvas-edge-color"?: (string) | undefined;
12762
+ /** How wide a connector is to a pointer, which is wider than it is drawn. */
12763
+ "--canvas-edge-target-width"?: (string) | undefined;
12764
+ /** How far apart the ruling is, in the document's own units, so it scales with the zoom. */
12765
+ "--canvas-grid-size"?: (string) | undefined;
12766
+ /** How wide the field a label is edited in is. */
12767
+ "--canvas-label-editor-inline-size"?: (string) | undefined;
12768
+ /** The ground under the pan and zoom buttons, one name with `Map`. */
12769
+ "--viewport-control-background-color"?: (string) | undefined;
11342
12770
  /** How the regions pack when the card is stretched taller than its content. `start` by default, so the slack is at the bottom; `space-between` puts a footer on the floor. */
11343
12771
  "--card-align"?: (string) | undefined;
11344
12772
  /** Filter applied behind a `frosted` or `glass` card. Follows the theme's material policy; set it to override the strength on one card. */
@@ -11769,8 +13197,6 @@ export type CustomCssProperties = {
11769
13197
  "--map-block-size"?: (string) | undefined;
11770
13198
  /** Color of the frame's edge. */
11771
13199
  "--map-border-color"?: (string) | undefined;
11772
- /** The ground under the pan and zoom buttons. */
11773
- "--map-control-background-color"?: (string) | undefined;
11774
13200
  /** A filter behind the panel, which is `none` until one is asked for: this family carries no `material`, so the pair is two hooks rather than a word. */
11775
13201
  "--megamenu-backdrop"?: (string) | undefined;
11776
13202
  /** The panel's own fill. */
@@ -12381,6 +13807,24 @@ export interface WcToolkitVueGlobalComponents {
12381
13807
  HelixCalloutVueProps,
12382
13808
  HelixCalloutVueEvents
12383
13809
  >;
13810
+ /** Draws nothing and takes no room: the board draws every connector into one layer under the cards, which is the only place a line between two of them can be drawn. What this element carries is which cards and which sides. */
13811
+ "helix-canvas-edge": DefineCustomElement<
13812
+ HelixCanvasEdge,
13813
+ HelixCanvasEdgeVueProps,
13814
+ HelixCanvasEdgeVueEvents
13815
+ >;
13816
+ /** The card is the host, because the board places the host: its coordinates are written onto this element, so a wrapper inside would have to be told the same things twice. **Before it is placed it is a card in the flow**, which is what a page without JavaScript has: the text somebody wrote, in the order they wrote it, rather than a heap at the origin. */
13817
+ "helix-canvas-node": DefineCustomElement<
13818
+ HelixCanvasNode,
13819
+ HelixCanvasNodeVueProps,
13820
+ HelixCanvasNodeVueEvents
13821
+ >;
13822
+ /** **Cards and connections say what they mean with 'tone'**, the word every other family uses, and the tones resolve to semantic tokens, so a board follows the page into dark mode rather than carrying somebody else's hex into it. JSON Canvas's six color presets arrive as tones through 'fromJsonCanvas'. The plane is the one thing that moves: panning and zooming write three custom properties and one transform reads them, so the cards are placed once in the document's own coordinates and never laid out again. */
13823
+ "helix-canvas": DefineCustomElement<
13824
+ HelixCanvas,
13825
+ HelixCanvasVueProps,
13826
+ HelixCanvasVueEvents
13827
+ >;
12384
13828
  /** Regions are bare slots with no wrapper element: 'media', 'header', the default slot for content, and 'footer'. An omitted one occupies no space without the card having to detect that it is missing, so a card with only content needs no wrapper markup at all. Style slotted content directly rather than reaching for a part: a header is whatever element you slotted, not a wrapper around it. 'media' runs edge to edge and clips to the card's corners, so an image needs no inset correction. Set 'orientation="horizontal"' to move it alongside the header, content, and footer stack rather than above it, or 'media-placement="end"' to put it under the content instead of over it, which is what a chart concluding a card wants. */
12385
13829
  "helix-card": DefineCustomElement<
12386
13830
  HelixCard,