@fusion.dev/helix 0.54.0 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/custom-elements.json +180 -156
  2. package/dist/avatar/root/avatar-root.css.js +1 -1
  3. package/dist/avatar/root/avatar-root.d.ts +5 -1
  4. package/dist/bar-chart/root/bar-chart-root.css.js +19 -19
  5. package/dist/carousel/root/carousel-root.css.js +18 -18
  6. package/dist/carousel/root/carousel-root.d.ts +22 -15
  7. package/dist/checkbox/root/checkbox-root.css.js +20 -11
  8. package/dist/checkbox/root/checkbox-root.d.ts +19 -7
  9. package/dist/checkbox/root/checkbox-root.js +1 -1
  10. package/dist/description-list/root/description-list-root.d.ts +6 -3
  11. package/dist/dialog/root/dialog-root.css.js +3 -3
  12. package/dist/dialog/root/dialog-root.d.ts +24 -16
  13. package/dist/dialog/root/dialog-root.js +3 -3
  14. package/dist/flex/root/flex-root.css.js +8 -12
  15. package/dist/flex/root/flex-root.d.ts +23 -4
  16. package/dist/flex/root/flex-root.js +4 -4
  17. package/dist/grid/root/grid-root.css.js +3 -7
  18. package/dist/grid/root/grid-root.d.ts +14 -2
  19. package/dist/grid/root/grid-root.js +2 -2
  20. package/dist/image/root/image-root.css.js +1 -1
  21. package/dist/image/root/image-root.d.ts +7 -6
  22. package/dist/image/root/image-root.js +2 -6
  23. package/dist/megamenu/root/megamenu-root.css.js +6 -6
  24. package/dist/orb/root/orb-root.d.ts +8 -1
  25. package/dist/progress/root/progress-root.d.ts +2 -2
  26. package/dist/radio/root/radio-root.css.js +22 -12
  27. package/dist/radio/root/radio-root.d.ts +36 -14
  28. package/dist/radio/root/radio-root.js +3 -0
  29. package/dist/rating/root/rating-root.css.js +2 -2
  30. package/dist/rating/root/rating-root.d.ts +17 -12
  31. package/dist/rating/root/rating-root.js +1 -1
  32. package/dist/select/root/select-root.d.ts +5 -5
  33. package/dist/table/column/table-column.css.js +4 -4
  34. package/package.json +6 -6
  35. package/types/jsx.d.ts +1139 -487
  36. package/types/vue.d.ts +347 -136
package/types/vue.d.ts CHANGED
@@ -680,7 +680,11 @@ export type HelixAvatarGroupVueEvents = {};
680
680
  export type HelixAvatarElementEvent<E = Event> = TypedEvent<HelixAvatar, E>;
681
681
 
682
682
  export type HelixAvatarVueProps = {
683
- /** Whether the avatar is a circle or a rounded square. */
683
+ /** Whether the avatar is a circle or a rounded square.
684
+
685
+ `rounded` and not `square`, which is the sharp-cornered pole of the same
686
+ axis and what `QrCode` draws with it. This corner is `radii-md`, so the word
687
+ for it is the one the registry already has. */
684
688
  shape?: (HelixAvatar["shape"]) | undefined;
685
689
  /** Edge length of the avatar. */
686
690
  size?: (HelixAvatar["size"]) | undefined;
@@ -871,19 +875,12 @@ shadow root names a table in that root rather than in the document. A
871
875
  Absent falls back to the table's own caption, which is usually the right
872
876
  words and is already written. */
873
877
  label?: (HelixBarChart["label"]) | undefined;
874
- /** Whether the categories run down the side rather than along the bottom.
875
-
876
- Absent is columns. `horizontal` is the one to reach for when the category
877
- names are words rather than dates: a row of long names either overlaps or
878
- turns on its side, and neither is as readable as putting them down the left
879
- where they read normally. */
880
- direction?: (HelixBarChart["direction"]) | undefined;
881
878
  /** Which rules are drawn across the plot, if any.
882
879
 
883
880
  Absent draws none. `value` rules the axis the columns are *measured* on,
884
881
  `category` rules the axis they are *arranged* on with one through each
885
882
  group, and `both` draws both. Which of those is horizontal turns with
886
- `direction`, because a rule belongs to an axis and not to a screen edge.
883
+ `orientation`, because a rule belongs to an axis and not to a screen edge.
887
884
 
888
885
  **A bare `gridlines` means `value`**, and so does anything unrecognized: an
889
886
  unrecognized value that draws nothing is indistinguishable from the
@@ -919,6 +916,16 @@ A line among columns measures from zero, because the columns do and they
919
916
  share the axis. So does a line on the second scale, which is that scale's
920
917
  own rule rather than this one's. */
921
918
  lines?: (HelixBarChart["lines"]) | undefined;
919
+ /** Whether the categories run down the side rather than along the bottom.
920
+
921
+ Absent is columns. `horizontal` is the one to reach for when the category
922
+ names are words rather than dates: a row of long names either overlaps or
923
+ turns on its side, and neither is as readable as putting them down the left
924
+ where they read normally.
925
+
926
+ `orientation` and not `orientation`, which `Trend` uses in the same group for
927
+ which way a number moved. */
928
+ orientation?: (HelixBarChart["orientation"]) | undefined;
922
929
  /** Which series are measured against a scale of their own, by name.
923
930
 
924
931
  Separated and matched the way `lines` is, against the column headings the
@@ -1359,9 +1366,9 @@ where an arrow over a photograph belongs. */
1359
1366
  /** Which side of the slides the arrows sit on.
1360
1367
 
1361
1368
  The same four sides as `indicatorPlacement` and the same default, so a
1362
- carousel that moves only one of them keeps the other where it was.
1363
- `inline-start` or `inline-end` stacks the arrows into a column, which is
1364
- what a vertical track usually wants.
1369
+ carousel that moves only one of them keeps the other where it was. `start`
1370
+ or `end` stacks the arrows into a column, which is what a vertical track
1371
+ usually wants.
1365
1372
 
1366
1373
  `overlay` puts them on the slides, at the track's own edges, which is what a
1367
1374
  full-bleed carousel wants: the slide is the page and the controls are on it
@@ -1378,9 +1385,9 @@ chrome can go. */
1378
1385
  /** Which side of the slides the arrows sit on.
1379
1386
 
1380
1387
  The same four sides as `indicatorPlacement` and the same default, so a
1381
- carousel that moves only one of them keeps the other where it was.
1382
- `inline-start` or `inline-end` stacks the arrows into a column, which is
1383
- what a vertical track usually wants.
1388
+ carousel that moves only one of them keeps the other where it was. `start`
1389
+ or `end` stacks the arrows into a column, which is what a vertical track
1390
+ usually wants.
1384
1391
 
1385
1392
  `overlay` puts them on the slides, at the track's own edges, which is what a
1386
1393
  full-bleed carousel wants: the slide is the page and the controls are on it
@@ -1408,8 +1415,9 @@ block edge the run is a row and this is `justify-self`; on an inline edge it
1408
1415
  is a column and the same question is `align-self`. A consumer should not
1409
1416
  have to know which of those two words their edge wanted.
1410
1417
 
1411
- Logical, like the placement: `start` is the left in English and the right in
1412
- Arabic on a horizontal run, and the top on a vertical one.
1418
+ Logical, like the placement's own `start` and `end`: `start` is the left in
1419
+ English and the right in Arabic on a horizontal run, and the top on a
1420
+ vertical one.
1413
1421
 
1414
1422
  Unset splits the row, dots to the start and arrows to the end, which is
1415
1423
  what keeps two items in one grid cell from landing on each other. Beside the
@@ -1432,8 +1440,9 @@ block edge the run is a row and this is `justify-self`; on an inline edge it
1432
1440
  is a column and the same question is `align-self`. A consumer should not
1433
1441
  have to know which of those two words their edge wanted.
1434
1442
 
1435
- Logical, like the placement: `start` is the left in English and the right in
1436
- Arabic on a horizontal run, and the top on a vertical one.
1443
+ Logical, like the placement's own `start` and `end`: `start` is the left in
1444
+ English and the right in Arabic on a horizontal run, and the top on a
1445
+ vertical one.
1437
1446
 
1438
1447
  Unset splits the row, dots to the start and arrows to the end, which is
1439
1448
  what keeps two items in one grid cell from landing on each other. Beside the
@@ -1444,31 +1453,43 @@ exist to avoid. */
1444
1453
  indicatorAlign?: (HelixCarousel["indicatorAlign"]) | undefined;
1445
1454
  /** Which side of the slides the dots sit on.
1446
1455
 
1447
- Unset is `block-end`, under them. `block-start` puts them above,
1448
- `inline-start` and `inline-end` beside, where a run of dots becomes a
1449
- column.
1456
+ Unset is `bottom`, under them. `top` puts them above, `start` and `end`
1457
+ beside, where a run of dots becomes a column.
1458
+
1459
+ **The sides of the content, not positions along a bar.** `start` and `end`
1460
+ are the logical ones and they are logical because that axis flips: a
1461
+ carousel with its dots at the start should put them on the right in Arabic
1462
+ without being told. `top` and `bottom` are the block edges, which flip in
1463
+ no writing mode this library draws for, so the plain word is the honest one
1464
+ and `block-start` would be jargon standing in for it.
1450
1465
 
1451
- **The sides of the content, not positions along a bar**, and logical names
1452
- rather than `top`/`left`: an `inline-start` carousel should put its dots on
1453
- the right in Arabic without being told.
1466
+ **`Drawer` and `Toast` say it in exactly these four words**, and one
1467
+ vocabulary across the three is worth more than each family's own: a
1468
+ consumer who has placed a drawer knows where a carousel's dots go.
1454
1469
 
1455
- Independent of `controlsPlacement`. Both default to the block end, where
1456
- they share the row and split it, dots to the start and arrows to the end,
1470
+ Independent of `controlsPlacement`. Both default to the bottom, where they
1471
+ share the row and split it, dots to the start and arrows to the end,
1457
1472
  arrived at by two defaults rather than by a rule about the pair, so moving
1458
1473
  one leaves the other alone. */
1459
1474
  "indicator-placement"?: (HelixCarousel["indicatorPlacement"]) | undefined;
1460
1475
  /** Which side of the slides the dots sit on.
1461
1476
 
1462
- Unset is `block-end`, under them. `block-start` puts them above,
1463
- `inline-start` and `inline-end` beside, where a run of dots becomes a
1464
- column.
1477
+ Unset is `bottom`, under them. `top` puts them above, `start` and `end`
1478
+ beside, where a run of dots becomes a column.
1479
+
1480
+ **The sides of the content, not positions along a bar.** `start` and `end`
1481
+ are the logical ones and they are logical because that axis flips: a
1482
+ carousel with its dots at the start should put them on the right in Arabic
1483
+ without being told. `top` and `bottom` are the block edges, which flip in
1484
+ no writing mode this library draws for, so the plain word is the honest one
1485
+ and `block-start` would be jargon standing in for it.
1465
1486
 
1466
- **The sides of the content, not positions along a bar**, and logical names
1467
- rather than `top`/`left`: an `inline-start` carousel should put its dots on
1468
- the right in Arabic without being told.
1487
+ **`Drawer` and `Toast` say it in exactly these four words**, and one
1488
+ vocabulary across the three is worth more than each family's own: a
1489
+ consumer who has placed a drawer knows where a carousel's dots go.
1469
1490
 
1470
- Independent of `controlsPlacement`. Both default to the block end, where
1471
- they share the row and split it, dots to the start and arrows to the end,
1491
+ Independent of `controlsPlacement`. Both default to the bottom, where they
1492
+ share the row and split it, dots to the start and arrows to the end,
1472
1493
  arrived at by two defaults rather than by a rule about the pair, so moving
1473
1494
  one leaves the other alone. */
1474
1495
  indicatorPlacement?: (HelixCarousel["indicatorPlacement"]) | undefined;
@@ -1936,19 +1957,31 @@ export type HelixCheckboxHelixBeforeToggleElementEvent =
1936
1957
  HelixCheckboxElementEvent<HelixBeforeToggleEvent>;
1937
1958
 
1938
1959
  export type HelixCheckboxVueProps = {
1939
- /** How the choice presents itself.
1960
+ /** Where the choice's own surface ends.
1940
1961
 
1941
- - `plain` is the default and is never written: a box beside its words,
1962
+ The question `separation` asks everywhere else, asked of one option, so it
1963
+ is that word: what these values pick is a surface, and `plain` is already
1964
+ the registry's own word for the answer this family used it for. `Radio`
1965
+ takes the same three for the same reason.
1966
+
1967
+ - `plain` is the resting one and is never written: a box beside its words,
1942
1968
  which is what a list of choices should be almost always.
1943
- - `card` puts it in a bounded surface, for options that need room to
1969
+ - `outlined` puts it in a bounded surface, for options that need room to
1944
1970
  explain themselves: a description, an icon, a price. It is the half a
1945
1971
  `data-card` link cannot do, because a link reports no value and belongs
1946
1972
  to no group, so a card that is genuinely an answer has to be this.
1947
-
1948
- The box stays in both. A card whose only marker was its own border would
1949
- ask a reader to compare surfaces across a row to find the answer, and would
1950
- leave nothing for a high-contrast display. */
1951
- variant?: (HelixCheckbox["variant"]) | undefined;
1973
+ - `filled` is that same card on a ground of its own with no edge, which is
1974
+ what a column of options wants where a hairline around every one of them
1975
+ is a grid of lines rather than a set of answers.
1976
+
1977
+ **`elevated` is the one value of the axis this family does not take.** A
1978
+ raised choice competes with a dialog: the top layer is where a thing that
1979
+ interrupts you lives, and an option in a form is not one of those.
1980
+
1981
+ The box stays in all of them. A card whose only marker was its own border
1982
+ would ask a reader to compare surfaces across a row to find the answer, and
1983
+ would leave nothing for a high-contrast display. */
1984
+ separation?: (HelixCheckbox["separation"]) | undefined;
1952
1985
  /** Whether the control is checked.
1953
1986
 
1954
1987
  One property rather than two. Writing always applies;
@@ -3531,9 +3564,12 @@ the end edge instead, with the label on the start one, and in figures of one
3531
3564
  width so a column of numbers lines up by its digits. Only with
3532
3565
  `direction="row"`: stacked, a label and its value share one edge already.
3533
3566
 
3534
- Flex's word for the same thing, and a grid rather than a flex row
3535
- underneath, so the labels still share one column while the values share an
3536
- end. */
3567
+ Flex's value for the same idea, under a shorter name than Flex's own:
3568
+ there it is `justify-content`, the CSS property it sets, and here the
3569
+ underlying layout is a grid handing an edge down to each item as a custom
3570
+ property, so the labels still share one column while the values share an
3571
+ end. Naming a property this does not set after it would be the wrong kind
3572
+ of precision. */
3537
3573
  justify?: (HelixDescriptionList["justify"]) | undefined;
3538
3574
  /** How wide the list is.
3539
3575
 
@@ -3573,17 +3609,6 @@ export type HelixDialogHelixBeforeOpenElementEvent =
3573
3609
  HelixDialogElementEvent<HelixBeforeOpenEvent>;
3574
3610
 
3575
3611
  export type HelixDialogVueProps = {
3576
- /** Which way the panel's contents read.
3577
-
3578
- One property for the whole panel rather than one per region. The regions are
3579
- never mixed in practice: a dialog that asks a short question centers its
3580
- mark, its title, its sentence and its buttons together, and a dialog holding
3581
- a form runs all four from the start. Three properties would be three ways to
3582
- write the same two arrangements, and a fourth way to get one of them wrong.
3583
-
3584
- Unset is `start` and stays unset, so a reflected default cannot appear on a
3585
- host whose server output never had it. */
3586
- align?: (HelixDialog["align"]) | undefined;
3587
3612
  /** How wide the panel is allowed to be.
3588
3613
 
3589
3614
  Steps rather than a number, because a dialog's width is a fact about what is
@@ -3600,10 +3625,48 @@ reflects, and a default would put `size="md"` into markup no consumer wrote.
3600
3625
  rule's own test is whether two of them sitting together could legitimately
3601
3626
  differ, and it is answering "a ragged row is unwritable". Two dialogs never
3602
3627
  sit together. One is on screen at a time, in the top layer, and it is the
3603
- region rather than a control in one, which is the same reason `Avatar` and
3604
- `Spinner` keep theirs. Not `appearance`, which says how a thing reads
3605
- rather than how wide it is. */
3628
+ region rather than a control in one, which is the other half of the axis's
3629
+ domain: the rest of it is pictures, which are not controls either. Not
3630
+ `appearance`, which says how a thing reads rather than how wide it is. */
3606
3631
  size?: (HelixDialog["size"]) | undefined;
3632
+ /** Which way the panel's contents read.
3633
+
3634
+ **Text alignment, and the name says so.** `Flex` and `Grid` ask the CSS
3635
+ box-alignment question, where things sit in a container, and they are named
3636
+ for the properties they mirror; this one is `text-align` on a panel of
3637
+ prose, and `Table.Column` answers the same question under the same name.
3638
+ One word for both questions is how a consumer who learned it on a layout
3639
+ writes it here and gets no error, a value a component does not have leaving
3640
+ the default in place and looking deliberate.
3641
+
3642
+ One property for the whole panel rather than one per region. The regions are
3643
+ never mixed in practice: a dialog that asks a short question centers its
3644
+ mark, its title, its sentence and its buttons together, and a dialog holding
3645
+ a form runs all four from the start. Three properties would be three ways to
3646
+ write the same two arrangements, and a fourth way to get one of them wrong.
3647
+
3648
+ Unset is `start` and stays unset, so a reflected default cannot appear on a
3649
+ host whose server output never had it. */
3650
+ "text-align"?: (HelixDialog["textAlign"]) | undefined;
3651
+ /** Which way the panel's contents read.
3652
+
3653
+ **Text alignment, and the name says so.** `Flex` and `Grid` ask the CSS
3654
+ box-alignment question, where things sit in a container, and they are named
3655
+ for the properties they mirror; this one is `text-align` on a panel of
3656
+ prose, and `Table.Column` answers the same question under the same name.
3657
+ One word for both questions is how a consumer who learned it on a layout
3658
+ writes it here and gets no error, a value a component does not have leaving
3659
+ the default in place and looking deliberate.
3660
+
3661
+ One property for the whole panel rather than one per region. The regions are
3662
+ never mixed in practice: a dialog that asks a short question centers its
3663
+ mark, its title, its sentence and its buttons together, and a dialog holding
3664
+ a form runs all four from the start. Three properties would be three ways to
3665
+ write the same two arrangements, and a fourth way to get one of them wrong.
3666
+
3667
+ Unset is `start` and stays unset, so a reflected default cannot appear on a
3668
+ host whose server output never had it. */
3669
+ textAlign?: (HelixDialog["textAlign"]) | undefined;
3607
3670
  /** Whether the element is open.
3608
3671
 
3609
3672
  One property, not two, so `dialog.open` answers the question anyone
@@ -4393,16 +4456,58 @@ export type HelixFilterInputVueEvents = {
4393
4456
  };
4394
4457
 
4395
4458
  export type HelixFlexVueProps = {
4396
- /** Alignment across the direction. */
4397
- align?: (HelixFlex["align"]) | undefined;
4459
+ /** Alignment across the direction, which is `align-items`.
4460
+
4461
+ **Named for the CSS property it sets, because it is that property.** A flex
4462
+ container is the one place where the box-alignment words are already the
4463
+ reader's, so a shorter name would be a second vocabulary for something they
4464
+ can already say, and `align` alone is the word four other families use for
4465
+ four other questions: `Dialog` and `Table.Column` mean `text-align` by it.
4466
+
4467
+ **It also keeps the name out of the browser's way.** `align` is a legacy
4468
+ HTML presentational attribute mapped to `text-align` on any element that
4469
+ carries one, this one included: measured, an invented tag with
4470
+ `align="center"` computes centered text too, so it is nothing to do with
4471
+ being a known element. A row that carried it therefore centered the text
4472
+ inside every field in it, through a hint no rule here declares and none can
4473
+ see, and the fix is a name the platform has no opinion about rather than a
4474
+ guard against the hint. */
4475
+ "align-items"?: (HelixFlex["alignItems"]) | undefined;
4476
+ /** Alignment across the direction, which is `align-items`.
4477
+
4478
+ **Named for the CSS property it sets, because it is that property.** A flex
4479
+ container is the one place where the box-alignment words are already the
4480
+ reader's, so a shorter name would be a second vocabulary for something they
4481
+ can already say, and `align` alone is the word four other families use for
4482
+ four other questions: `Dialog` and `Table.Column` mean `text-align` by it.
4483
+
4484
+ **It also keeps the name out of the browser's way.** `align` is a legacy
4485
+ HTML presentational attribute mapped to `text-align` on any element that
4486
+ carries one, this one included: measured, an invented tag with
4487
+ `align="center"` computes centered text too, so it is nothing to do with
4488
+ being a known element. A row that carried it therefore centered the text
4489
+ inside every field in it, through a hint no rule here declares and none can
4490
+ see, and the fix is a name the platform has no opinion about rather than a
4491
+ guard against the hint. */
4492
+ alignItems?: (HelixFlex["alignItems"]) | undefined;
4398
4493
  /** Whether items run across or down. */
4399
4494
  direction?: (HelixFlex["direction"]) | undefined;
4400
4495
  /** Space between items, named on the space scale. */
4401
4496
  gap?: (HelixFlex["gap"]) | undefined;
4402
4497
  /** Flows with surrounding text instead of taking the full width. */
4403
4498
  inline?: (HelixFlex["inline"]) | undefined;
4404
- /** Distribution along the direction. */
4405
- justify?: (HelixFlex["justify"]) | undefined;
4499
+ /** Distribution along the direction, which is `justify-content`.
4500
+
4501
+ Named for the property it sets, the way `alignItems` is. `between` and
4502
+ `around` drop the `space-` prefix and nothing else does, because those two
4503
+ are the only values whose CSS spelling is two words. */
4504
+ "justify-content"?: (HelixFlex["justifyContent"]) | undefined;
4505
+ /** Distribution along the direction, which is `justify-content`.
4506
+
4507
+ Named for the property it sets, the way `alignItems` is. `between` and
4508
+ `around` drop the `space-` prefix and nothing else does, because those two
4509
+ are the only values whose CSS spelling is two words. */
4510
+ justifyContent?: (HelixFlex["justifyContent"]) | undefined;
4406
4511
  /** Whether items wrap onto more lines. */
4407
4512
  wrap?: (HelixFlex["wrap"]) | undefined;
4408
4513
  };
@@ -4467,8 +4572,34 @@ Empty is the runtime's own. */
4467
4572
  export type HelixFormatDateVueEvents = {};
4468
4573
 
4469
4574
  export type HelixGridVueProps = {
4470
- /** Alignment of each cell within its row. */
4471
- align?: (HelixGrid["align"]) | undefined;
4575
+ /** Alignment of each cell within its row, which is `align-items`.
4576
+
4577
+ **Named for the CSS property it sets**, the way `Flex` is, and the same
4578
+ property on a grid: it places every cell in its row's track rather than
4579
+ placing the tracks. No `baseline`, which `Flex` offers, because cells in a
4580
+ row of a grid are boxes of unrelated content and lining their first lines
4581
+ up is a thing a reader asks for between siblings in a row, not between
4582
+ cells in a table of them.
4583
+
4584
+ There is no `justifyContent` here for the same reason: the tracks are
4585
+ `1fr`, so they already fill the row and there is nothing left over to
4586
+ distribute. `columns`, `min` and `--grid-columns` are how a grid says how
4587
+ wide its tracks are. */
4588
+ "align-items"?: (HelixGrid["alignItems"]) | undefined;
4589
+ /** Alignment of each cell within its row, which is `align-items`.
4590
+
4591
+ **Named for the CSS property it sets**, the way `Flex` is, and the same
4592
+ property on a grid: it places every cell in its row's track rather than
4593
+ placing the tracks. No `baseline`, which `Flex` offers, because cells in a
4594
+ row of a grid are boxes of unrelated content and lining their first lines
4595
+ up is a thing a reader asks for between siblings in a row, not between
4596
+ cells in a table of them.
4597
+
4598
+ There is no `justifyContent` here for the same reason: the tracks are
4599
+ `1fr`, so they already fill the row and there is nothing left over to
4600
+ distribute. `columns`, `min` and `--grid-columns` are how a grid says how
4601
+ wide its tracks are. */
4602
+ alignItems?: (HelixGrid["alignItems"]) | undefined;
4472
4603
  /** Fixed number of equal columns. */
4473
4604
  columns?: (HelixGrid["columns"]) | undefined;
4474
4605
  /** Space between cells, named on the space scale. */
@@ -4814,11 +4945,12 @@ export type HelixImageElementEvent<E = Event> = TypedEvent<HelixImage, E>;
4814
4945
  export type HelixImageVueProps = {
4815
4946
  /** Whether the corners are cut.
4816
4947
 
4817
- A boolean rather than a radius, because the radius is a token and the
4818
- question a consumer is answering is whether this picture is a card's
4819
- surface or a page's. `--image-radius` moves it for the case that is
4820
- neither. */
4821
- rounded?: (HelixImage["rounded"]) | undefined;
4948
+ The axis and not a boolean, because `rounded` is a registered word and a
4949
+ private spelling of a registry question is what `appearance` was retired
4950
+ for. Not a radius either: the radius is a token and the question a consumer
4951
+ is answering is whether this picture is a card's surface or a page's.
4952
+ `--image-radius` moves it for the case that is neither. */
4953
+ shape?: (HelixImage["shape"]) | undefined;
4822
4954
  /** What it shows, for a reader who cannot see it.
4823
4955
 
4824
4956
  Empty is a real answer and means decoration. Omitting the attribute is not
@@ -5605,7 +5737,7 @@ which React reports as a mismatch and answers by rebuilding the subtree. The
5605
5737
  narrow exception the server specs describe covers a mirror that can only
5606
5738
  become true long after hydration, and a viewport measured before the first
5607
5739
  paint is the opposite case. See `MixinControllerOpen` on `open`. */
5608
- "full-below"?: (HelixMegamenu["fullBelow"] | `${number}`) | undefined;
5740
+ "band-below"?: (HelixMegamenu["bandBelow"] | `${number}`) | undefined;
5609
5741
  /** The width, in pixels, under which a card becomes a band. Zero never does.
5610
5742
 
5611
5743
  A card is a panel hung off one word, and there is no room to hang anything
@@ -5629,7 +5761,7 @@ which React reports as a mismatch and answers by rebuilding the subtree. The
5629
5761
  narrow exception the server specs describe covers a mirror that can only
5630
5762
  become true long after hydration, and a viewport measured before the first
5631
5763
  paint is the opposite case. See `MixinControllerOpen` on `open`. */
5632
- fullBelow?: (HelixMegamenu["fullBelow"]) | undefined;
5764
+ bandBelow?: (HelixMegamenu["bandBelow"]) | undefined;
5633
5765
  /** The section's name, which names the default trigger and the panel. */
5634
5766
  label?: (HelixMegamenu["label"]) | undefined;
5635
5767
  /** Whether hovering the trigger opens the panel, or only a press does.
@@ -5649,16 +5781,23 @@ heavy enough that opening it on the way past is rude. */
5649
5781
  /** Whether the panel is a card under the trigger or a band across the page.
5650
5782
 
5651
5783
  The resting one is the card, hanging off the trigger and as wide as it
5652
- needs to be. `full` is the other shape navigations use: a band from edge to
5784
+ needs to be. `band` is the other shape navigations use: a run from edge to
5653
5785
  edge under the header, with its contents held to the page's own measure, so
5654
5786
  a set of destinations too wide to sit under one word gets the whole width
5655
5787
  to lay out in.
5656
5788
 
5657
- It changes where the panel goes as well as how it looks, which is why this
5658
- tier knows about it at all: a band spans the viewport, so there is nothing
5659
- to measure it against and nothing to flip or shift to, and the placing pass
5660
- is told not to run. Everything else the popover gives, the top layer and
5661
- the dismissal, is exactly what such a band needs. */
5789
+ **A band and not a width, which is why the word is not `full`.** It changes
5790
+ where the panel goes as well as how wide it is, which is why this tier
5791
+ knows about it at all: a band spans the viewport, so there is nothing to
5792
+ measure it against and nothing to flip or shift to, and the placing pass is
5793
+ told not to run. Everything else the popover gives, the top layer and the
5794
+ dismissal, is exactly what such a band needs. `full` is the registry's word
5795
+ for a width, and `Button` and `Dialog` are the two families answering that
5796
+ question; borrowing it here would put a third meaning on it.
5797
+
5798
+ `variant` and not an axis, for the reason the registry gives: a card under
5799
+ a word and a band under a header are two arrangements this family has, and
5800
+ no other family is being asked the same question. */
5662
5801
  variant?: (HelixMegamenu["variant"]) | undefined;
5663
5802
  };
5664
5803
 
@@ -6463,6 +6602,13 @@ the name of the tool being run, or the file being read. */
6463
6602
  label?: (HelixOrb["label"]) | undefined;
6464
6603
  /** Diameter relative to the surrounding text.
6465
6604
 
6605
+ **`Loader`'s three steps, because the two are swapped for each other.** An
6606
+ orb and a spinner are the same job drawn differently, a wait a reader is
6607
+ looking at, and a product that replaces one with the other should not find
6608
+ that a step it was writing has stopped existing. `md` is the resting one
6609
+ and selects nothing, landing on the base rule the way a written resting
6610
+ value does everywhere else.
6611
+
6466
6612
  Reflected because the stylesheet selects on it. The mesh is chosen from the
6467
6613
  rendered box rather than from this, so `--orb-size` and a consumer's own
6468
6614
  `inline-size` get the same treatment as the named steps. */
@@ -7146,9 +7292,9 @@ export type HelixRadioVueProps = {
7146
7292
  Unnecessary under `chip`, which has no room for a circle beside its mark
7147
7293
  and hides it already.
7148
7294
 
7149
- `card` only, and it is a graphic that goes rather than a radio: the control
7150
- in the shadow root is untouched, so the row is still focusable, still
7151
- reported to a screen reader, and still the thing a form submits.
7295
+ A separated choice only, and it is a graphic that goes rather than a radio:
7296
+ the control in the shadow root is untouched, so the row is still focusable,
7297
+ still reported to a screen reader, and still the thing a form submits.
7152
7298
 
7153
7299
  Safe because the card already carries the answer in its surface, a raised
7154
7300
  fill inside a primary edge and a three-pixel ring of it. Without that ring
@@ -7163,9 +7309,9 @@ card with no box loses the only thing that says you may pick several. */
7163
7309
  Unnecessary under `chip`, which has no room for a circle beside its mark
7164
7310
  and hides it already.
7165
7311
 
7166
- `card` only, and it is a graphic that goes rather than a radio: the control
7167
- in the shadow root is untouched, so the row is still focusable, still
7168
- reported to a screen reader, and still the thing a form submits.
7312
+ A separated choice only, and it is a graphic that goes rather than a radio:
7313
+ the control in the shadow root is untouched, so the row is still focusable,
7314
+ still reported to a screen reader, and still the thing a form submits.
7169
7315
 
7170
7316
  Safe because the card already carries the answer in its surface, a raised
7171
7317
  fill inside a primary edge and a three-pixel ring of it. Without that ring
@@ -7175,21 +7321,41 @@ Not on `Checkbox`, deliberately. A radio card with no circle is still
7175
7321
  unmistakably one-of-many because its siblings behave that way; a checkbox
7176
7322
  card with no box loses the only thing that says you may pick several. */
7177
7323
  hideControl?: (HelixRadio["hideControl"]) | undefined;
7178
- /** How the choice presents itself.
7324
+ /** Where the choice's own surface ends.
7179
7325
 
7180
- - `plain` is the default and is never written: a circle beside its words,
7181
- which is what a list of choices should be almost always.
7182
- - `card` puts it in a bounded surface, for options that need room to
7326
+ The question `separation` asks everywhere else, asked of one option, so it
7327
+ is that word: what these values pick is a surface, and `plain` is already
7328
+ the registry's own word for the answer this family used it for.
7329
+
7330
+ - `plain` is the resting one and is never written: a circle beside its
7331
+ words, which is what a list of choices should be almost always.
7332
+ - `outlined` puts it in a bounded surface, for options that need room to
7183
7333
  explain themselves: a description, an icon, a price. It is the half a
7184
7334
  `data-card` link cannot do, because a link reports no value and belongs
7185
7335
  to no group, so a card that is genuinely an answer has to be this.
7186
- - `chip` is the answer as its own small surface, for a row of short
7187
- choices read at a glance. It hides the circle, the surface being the
7188
- whole mark, which is why `hide-control` says it is unnecessary here.
7189
-
7190
- The circle stays in both. A card whose only marker was its own border would
7191
- ask a reader to compare surfaces across a row to find the answer, and would
7192
- leave nothing for a high-contrast display. */
7336
+ - `filled` is that same card on a ground of its own with no edge, which is
7337
+ what a column of choices wants where a hairline around every one of them
7338
+ is a grid of lines rather than a set of answers.
7339
+
7340
+ **`elevated` is the one value of the axis this family does not take.** A
7341
+ raised choice competes with a dialog: the top layer is where a thing that
7342
+ interrupts you lives, and an option in a form is not one of those, so a
7343
+ column of lifted cards reads as a stack of floating things none of which is
7344
+ settled.
7345
+
7346
+ The circle stays in all of them. A card whose only marker was its own
7347
+ border would ask a reader to compare surfaces across a row to find the
7348
+ answer, and would leave nothing for a high-contrast display. */
7349
+ separation?: (HelixRadio["separation"]) | undefined;
7350
+ /** The answer as its own small surface, for a row of short choices read at a
7351
+ glance.
7352
+
7353
+ **Not a separation, which is why it is still `variant`.** The other values
7354
+ pick where a surface ends around a row that keeps its circle and its words;
7355
+ a chip has neither. It hides the circle, the surface being the whole mark,
7356
+ which is why `hide-control` says it is unnecessary here, and it takes the
7357
+ words out of the flow to be the accessible name. That removes the
7358
+ distinction `separation` exists to make rather than answering it. */
7193
7359
  variant?: (HelixRadio["variant"]) | undefined;
7194
7360
  /** Whether this one can be chosen. */
7195
7361
  disabled?: (HelixRadio["disabled"]) | undefined;
@@ -7256,23 +7422,28 @@ export type HelixRatingHelixBeforeChangeElementEvent =
7256
7422
  HelixRatingElementEvent<HelixBeforeChangeEvent>;
7257
7423
 
7258
7424
  export type HelixRatingVueProps = {
7259
- /** Which mark the row is drawn with.
7260
-
7261
- `marks` is the star, and is what a rating means to most readers. `dots`
7262
- drops the glyph for a plain circle, which says how much rather than how
7263
- good: a star carries a judgment that a level of spice, a difficulty or a
7264
- confidence has not earned.
7265
-
7266
- Both are one shape repeated and clipped to the score, so halves work in
7267
- either, and both are only a choice of drawing. A scale whose marks are
7425
+ /** The geometry one mark is drawn to.
7426
+
7427
+ The registry's word, because the question is the registry's: `Avatar`,
7428
+ `Skeleton`, `IconButton`, `Meter` and `Progress` each ask what geometry
7429
+ their own thing is cut to under this name, and `dots` is already a value
7430
+ the axis holds. What is picked here is the outline of one mark and nothing
7431
+ else, which is a shape and not a component-specific choice.
7432
+
7433
+ `dots` drops the glyph for a plain circle, which says how much rather than
7434
+ how good: a star carries a judgment that a level of spice, a difficulty or
7435
+ a confidence has not earned. Either way it is one shape repeated and
7436
+ clipped to the score, so halves work in both. A scale whose marks are
7268
7437
  *different* drawings is a set of choices rather than a quantity: that is
7269
7438
  `Radio.Group`, whose options already carry a value and a name each.
7270
7439
 
7271
- **Undefaulted, because it reflects.** A default of `marks` writes
7272
- `variant="marks"` onto every server-rendered rating, which React holds no
7273
- prop for and reports as a hydration mismatch. The stylesheet names only
7274
- `dots`, so an unset one draws marks anyway. */
7275
- variant?: (HelixRating["variant"]) | undefined;
7440
+ **The star is the resting one and has no word**, which is the rule every
7441
+ axis follows and is also what this family needed anyway: it reflects, so a
7442
+ default would write the resting value onto every server-rendered rating,
7443
+ an attribute React holds no prop for and so a hydration mismatch for each
7444
+ one. The stylesheet names only `dots`, so an unset one draws the star by
7445
+ landing on the base rule. */
7446
+ shape?: (HelixRating["shape"]) | undefined;
7276
7447
  /** The value the markup declared, which is where a reset returns to. */
7277
7448
  "default-value"?: (HelixRating["defaultValue"]) | undefined;
7278
7449
  /** The value the markup declared, which is where a reset returns to. */
@@ -7795,11 +7966,11 @@ takes, where a trigger's loudness is its frame rather than its ink.
7795
7966
  `outlined` is what the unset frame already draws, so writing it would be
7796
7967
  writing the resting state out.
7797
7968
 
7798
- **The other three fields want this too and do not have it yet.** `Input`,
7799
- `Textarea` and `Combobox` wear the same frame from the same shared
7800
- stylesheet, and an inline one of each is as reasonable as an inline select.
7801
- They are left alone rather than swept, because each has a different thing
7802
- inside the frame and guessing at three is how an axis ends up meaning four
7969
+ **Every field wearing `field-frame.css` wants this too and does not have it
7970
+ yet**, which this trigger is not one of: it draws its own frame below. An
7971
+ inline number input in a toolbar is as reasonable as an inline select. They
7972
+ are left alone rather than swept, because each has a different thing inside
7973
+ the frame and guessing at a set of them is how an axis ends up meaning four
7803
7974
  things, which is the fault `appearance` was retired for. */
7804
7975
  emphasis?: (HelixSelect["emphasis"]) | undefined;
7805
7976
  /** Whether the element is open.
@@ -8601,26 +8772,6 @@ export type HelixTableColumnHelixBeforeResizeElementEvent =
8601
8772
  HelixTableColumnElementEvent<HelixBeforeResizeEvent>;
8602
8773
 
8603
8774
  export type HelixTableColumnVueProps = {
8604
- /** Which edge the values line up against.
8605
-
8606
- `end` is what a column of numbers wants, so digits of the same magnitude
8607
- sit above each other. Left unset the cell inherits the table's own
8608
- alignment, which is `start` for text in either writing direction.
8609
- `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
8610
- consumer wrote, so the table writes nothing onto them: it publishes the
8611
- edge to each cell under this column as `--table-cell-align`, which
8612
- `@fusion.dev/helix` reads. The heading is this element's own, and
8613
- `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
8614
- inline end, so in a right-to-left table it is the left.
8615
-
8616
- **Reflected, because the heading is drawn by a stylesheet and has no other
8617
- way to learn it.** Set as a property, which is how React sets it, an
8618
- unreflected `align` left no attribute to select on, so the heading stayed at
8619
- the start over a column of digits set to the end. It is the author's
8620
- declaration and nothing moves it afterwards, so an attribute cannot come to
8621
- disagree with the element, which is the reason `open` records a custom
8622
- state instead. No default, so an unset column writes nothing onto its host. */
8623
- align?: (HelixTableColumn["align"]) | undefined;
8624
8775
  /** The key this column reads out of a row.
8625
8776
 
8626
8777
  Dot paths resolve, so `field="owner.name"` reads a nested value: a result
@@ -8655,6 +8806,62 @@ how React sets it, an unreflected `sortable` left no attribute to match.
8655
8806
  `false` reflects as no attribute at all, so an unset column writes nothing
8656
8807
  onto its host. */
8657
8808
  sortable?: (HelixTableColumn["sortable"]) | undefined;
8809
+ /** Which edge the values line up against.
8810
+
8811
+ **Text alignment, and the name says so.** `Flex` and `Grid` ask the CSS
8812
+ box-alignment question, where a thing sits in a container, and they are
8813
+ named for the properties they mirror; this is `text-align` down a column of
8814
+ values, and `Dialog` answers the same question under the same name. One
8815
+ word for both questions is how a consumer who learned it on a layout writes
8816
+ it here and gets no error, a value a component does not have leaving the
8817
+ default in place and looking deliberate.
8818
+
8819
+ `end` is what a column of numbers wants, so digits of the same magnitude
8820
+ sit above each other. Left unset the cell inherits the table's own
8821
+ alignment, which is `start` for text in either writing direction.
8822
+ `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
8823
+ consumer wrote, so the table writes nothing onto them: it publishes the
8824
+ edge to each cell under this column as `--table-cell-align`, which
8825
+ `@fusion.dev/helix` reads. The heading is this element's own, and
8826
+ `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
8827
+ inline end, so in a right-to-left table it is the left.
8828
+
8829
+ **Reflected, because the heading is drawn by a stylesheet and has no other
8830
+ way to learn it.** Set as a property, which is how React sets it, an
8831
+ unreflected edge left no attribute to select on, so the heading stayed at
8832
+ the start over a column of digits set to the end. It is the author's
8833
+ declaration and nothing moves it afterwards, so an attribute cannot come to
8834
+ disagree with the element, which is the reason `open` records a custom
8835
+ state instead. No default, so an unset column writes nothing onto its host. */
8836
+ "text-align"?: (HelixTableColumn["textAlign"]) | undefined;
8837
+ /** Which edge the values line up against.
8838
+
8839
+ **Text alignment, and the name says so.** `Flex` and `Grid` ask the CSS
8840
+ box-alignment question, where a thing sits in a container, and they are
8841
+ named for the properties they mirror; this is `text-align` down a column of
8842
+ values, and `Dialog` answers the same question under the same name. One
8843
+ word for both questions is how a consumer who learned it on a layout writes
8844
+ it here and gets no error, a value a component does not have leaving the
8845
+ default in place and looking deliberate.
8846
+
8847
+ `end` is what a column of numbers wants, so digits of the same magnitude
8848
+ sit above each other. Left unset the cell inherits the table's own
8849
+ alignment, which is `start` for text in either writing direction.
8850
+ `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
8851
+ consumer wrote, so the table writes nothing onto them: it publishes the
8852
+ edge to each cell under this column as `--table-cell-align`, which
8853
+ `@fusion.dev/helix` reads. The heading is this element's own, and
8854
+ `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
8855
+ inline end, so in a right-to-left table it is the left.
8856
+
8857
+ **Reflected, because the heading is drawn by a stylesheet and has no other
8858
+ way to learn it.** Set as a property, which is how React sets it, an
8859
+ unreflected edge left no attribute to select on, so the heading stayed at
8860
+ the start over a column of digits set to the end. It is the author's
8861
+ declaration and nothing moves it afterwards, so an attribute cannot come to
8862
+ disagree with the element, which is the reason `open` records a custom
8863
+ state instead. No default, so an unset column writes nothing onto its host. */
8864
+ textAlign?: (HelixTableColumn["textAlign"]) | undefined;
8658
8865
  /** The track this column takes, as CSS.
8659
8866
 
8660
8867
  A single track value, so anything valid in `grid-template-columns` works:
@@ -11152,7 +11359,7 @@ export type CustomCssProperties = {
11152
11359
  "--image-placeholder-color"?: (string) | undefined;
11153
11360
  /** Which part survives a crop. */
11154
11361
  "--image-position"?: (string) | undefined;
11155
- /** Corner radius, under `rounded`. */
11362
+ /** Corner radius, under `shape="rounded"`. */
11156
11363
  "--image-radius"?: (string) | undefined;
11157
11364
  /** Fill behind the text. */
11158
11365
  "--input-background-color"?: (string) | undefined;
@@ -11370,6 +11577,10 @@ export type CustomCssProperties = {
11370
11577
  "--progress-ring-size"?: (string) | undefined;
11371
11578
  /** Thickness of its stroke. */
11372
11579
  "--progress-ring-width"?: (string) | undefined;
11580
+ /** Thickness of the bar. */
11581
+ "--progress-size"?: (string) | undefined;
11582
+ /** Fill of the part that is not. */
11583
+ "--progress-track-color"?: (string) | undefined;
11373
11584
  /** The value as a fraction of the range, 0 to 1. Pinned to 1 while indeterminate. */
11374
11585
  "--progress-fraction"?: (string) | undefined;
11375
11586
  /** Behind them, including the quiet zone. */