@fusion.dev/helix 0.37.0 → 0.39.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.
@@ -26164,7 +26164,7 @@
26164
26164
  "name": "--combobox-border-width"
26165
26165
  },
26166
26166
  {
26167
- "description": "Smallest the text field shrinks to",
26167
+ "description": "Smallest the text field shrinks to once tags share its line.",
26168
26168
  "name": "--combobox-control-size"
26169
26169
  },
26170
26170
  {
@@ -26986,7 +26986,7 @@
26986
26986
  "text": "boolean"
26987
26987
  },
26988
26988
  "default": "false",
26989
- "description": "Whether more than one option can be chosen.\n\nThe list already does the work: `value` comes apart on commas, a press\ntoggles rather than replaces, and the arrows move without choosing. What\nthis adds is the tags, and keeping the panel open between picks.\n\nA comma is therefore not available inside an option's value, which is the\nlistbox's contract and not this element's to change.",
26989
+ "description": "Whether more than one option can be chosen.\n\nThe list already does the work: `value` comes apart on commas, a press\ntoggles rather than replaces, and the arrows move without choosing. What\nthis adds is the tags, and keeping the panel open between picks.\n\nA comma is therefore not available inside an option's value, which is the\nlistbox's contract and not this element's to change.\n\n**The list is told, and the field is not.** `aria-multiselectable` belongs\nto `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in\nARIA 1.2; the list sets it on itself through `ElementInternals`, where a\nreader on the field hears it through `aria-controls`. This element wrote it\nonto its own `role=\"combobox\"` input as well, which an audit reports as a\nproperty the role does not support and no spec here ever asserted: the one\nthat covers this says in as many words that telling the list is what this\nelement is responsible for.",
26990
26990
  "attribute": "multiple",
26991
26991
  "inheritedFrom": {
26992
26992
  "name": "HelixHeadlessCombobox",
@@ -27882,7 +27882,7 @@
27882
27882
  "helix": {
27883
27883
  "category": "forms",
27884
27884
  "since": "0.1.0",
27885
- "status": "experimental",
27885
+ "status": "stable",
27886
27886
  "documentation": "https://fusion.dev/helix/components/combobox",
27887
27887
  "aliases": [
27888
27888
  "Autocomplete",
@@ -28194,7 +28194,7 @@
28194
28194
  "text": "boolean"
28195
28195
  },
28196
28196
  "default": "false",
28197
- "description": "Whether more than one option can be chosen.\n\nThe list already does the work: `value` comes apart on commas, a press\ntoggles rather than replaces, and the arrows move without choosing. What\nthis adds is the tags, and keeping the panel open between picks.\n\nA comma is therefore not available inside an option's value, which is the\nlistbox's contract and not this element's to change.",
28197
+ "description": "Whether more than one option can be chosen.\n\nThe list already does the work: `value` comes apart on commas, a press\ntoggles rather than replaces, and the arrows move without choosing. What\nthis adds is the tags, and keeping the panel open between picks.\n\nA comma is therefore not available inside an option's value, which is the\nlistbox's contract and not this element's to change.\n\n**The list is told, and the field is not.** `aria-multiselectable` belongs\nto `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in\nARIA 1.2; the list sets it on itself through `ElementInternals`, where a\nreader on the field hears it through `aria-controls`. This element wrote it\nonto its own `role=\"combobox\"` input as well, which an audit reports as a\nproperty the role does not support and no spec here ever asserted: the one\nthat covers this says in as many words that telling the list is what this\nelement is responsible for.",
28198
28198
  "fieldName": "multiple",
28199
28199
  "inheritedFrom": {
28200
28200
  "name": "HelixHeadlessCombobox",
@@ -31127,6 +31127,14 @@
31127
31127
  "description": "Type size, headings and cells alike.",
31128
31128
  "name": "--data-table-text"
31129
31129
  },
31130
+ {
31131
+ "description": "The edge the column a cell sits under is set to, `start`, `center` or `end`, and unset under a column that sets none. Written by the component onto each cell it draws, read by the sheet that paints one; `helix-table` publishes `--table-cell-align` for the same attribute on the cells a consumer wrote, under its own family's name.",
31132
+ "name": "--data-table-cell-align",
31133
+ "inheritedFrom": {
31134
+ "name": "HelixHeadlessDataTable",
31135
+ "module": "src/data-table/root/data-table-root.ts"
31136
+ }
31137
+ },
31130
31138
  {
31131
31139
  "description": "The column track list this element worked out from the columns declared in it. Written by the component, read by the sheet that paints: a stylesheet takes it to lay the grid out, and setting it does nothing, because the component writes it inline on the very element that reads it and an inline declaration beats any sheet. `--data-table-columns` is the one to set.",
31132
31140
  "name": "--data-table-template",
@@ -31258,7 +31266,7 @@
31258
31266
  }
31259
31267
  },
31260
31268
  {
31261
- "description": "Shown when no rows match.",
31269
+ "description": "Shown when the result has nothing in it, whether it arrived empty or a filter emptied it. A result still on its way is `loading` instead, which wins over this.",
31262
31270
  "name": "empty",
31263
31271
  "inheritedFrom": {
31264
31272
  "name": "HelixHeadlessDataTable",
@@ -31577,7 +31585,7 @@
31577
31585
  },
31578
31586
  "privacy": "protected",
31579
31587
  "readonly": true,
31580
- "description": "Emptiness is a fact about the data here, not about slotted children.",
31588
+ "description": "Emptiness is a fact about the data here, not about slotted children.\n\n**The page rather than the window**, which is the difference between the two\ncounts `view` carries and the reason this reads `available`. A windowed\ntable draws a slice, and a slice can be short of the rows that are there:\nasking whether *this* slice has rows says \"nothing matched\" about a result\nthat matched plenty.\n\nThe mixin's own answer counts children with no `slot`, which for this\nelement is the columns. Left in place, a table with columns and no data\nwould call itself full.",
31581
31589
  "inheritedFrom": {
31582
31590
  "name": "MixinCollection",
31583
31591
  "module": "src/mixins/mixin-collection/mixin-collection.ts"
@@ -32780,6 +32788,7 @@
32780
32788
  }
32781
32789
  }
32782
32790
  ],
32791
+ "description": "One cell, carrying its column's edge as a fact rather than as a decision.\n\n**A fact published rather than a property chosen**, which is what\n`helix-table` does with the same attribute: what lining up *means*, a\n`justify-content` for a value that fits or a `text-align` for one that\nwraps, belongs to whoever draws the cell. Written here as an inline\n`text-align` it was this tier choosing, in the tier that ships no CSS, and a\nconsumer could not overrule it either, an inline declaration beating any\n`::part(cell)` rule they wrote.\n\nOnly the three edges reach it, `align` being a string anybody can write and\nthis being a style attribute: `edgeOf` is that guard, and `helix-table`\nholds the same value to the same three.",
32783
32792
  "inheritedFrom": {
32784
32793
  "name": "HelixHeadlessDataTable",
32785
32794
  "module": "src/data-table/root/data-table-root.ts"
@@ -33431,7 +33440,7 @@
33431
33440
  "helix": {
33432
33441
  "category": "data",
33433
33442
  "since": "0.1.0",
33434
- "status": "experimental",
33443
+ "status": "stable",
33435
33444
  "documentation": "https://fusion.dev/helix/components/data-table",
33436
33445
  "tier": "styled",
33437
33446
  "group": "DataTable",
@@ -38601,7 +38610,7 @@
38601
38610
  "text": "string"
38602
38611
  },
38603
38612
  "default": "''",
38604
- "description": "What the value is, for the common case of plain text.\n\nThe fallback of the `label` slot, so slotted content replaces it rather than\nappearing beside it.",
38613
+ "description": "What the value is called, for the common case of plain text.\n\nThe fallback of the `label` slot, so slotted content replaces it rather than\nappearing beside it. The value itself is the default slot: it is the half\nthat varies and is often more than text.",
38605
38614
  "attribute": "label",
38606
38615
  "inheritedFrom": {
38607
38616
  "name": "HelixHeadlessDescriptionListItem",
@@ -38940,7 +38949,7 @@
38940
38949
  "summary": "One label and its value.",
38941
38950
  "helix": {
38942
38951
  "since": "0.1.0",
38943
- "status": "experimental",
38952
+ "status": "stable",
38944
38953
  "documentation": "https://fusion.dev/helix/components/description-list",
38945
38954
  "tier": "styled",
38946
38955
  "group": "DescriptionList",
@@ -38991,7 +39000,7 @@
38991
39000
  "text": "string"
38992
39001
  },
38993
39002
  "default": "''",
38994
- "description": "What the value is, for the common case of plain text.\n\nThe fallback of the `label` slot, so slotted content replaces it rather than\nappearing beside it.",
39003
+ "description": "What the value is called, for the common case of plain text.\n\nThe fallback of the `label` slot, so slotted content replaces it rather than\nappearing beside it. The value itself is the default slot: it is the half\nthat varies and is often more than text.",
38995
39004
  "fieldName": "label",
38996
39005
  "inheritedFrom": {
38997
39006
  "name": "HelixHeadlessDescriptionListItem",
@@ -39062,7 +39071,7 @@
39062
39071
  "name": "HelixDescriptionList",
39063
39072
  "cssProperties": [
39064
39073
  {
39065
- "description": "Space between one pair and the next.",
39074
+ "description": "Space between one pair and the next. Its resting value is tighter with `direction=\"row\"` than stacked, a row of pairs needing less air between them than a column of them does, and setting this takes both.",
39066
39075
  "name": "--description-list-gap"
39067
39076
  }
39068
39077
  ],
@@ -39464,7 +39473,7 @@
39464
39473
  "helix": {
39465
39474
  "category": "data",
39466
39475
  "since": "0.1.0",
39467
- "status": "experimental",
39476
+ "status": "stable",
39468
39477
  "documentation": "https://fusion.dev/helix/components/description-list",
39469
39478
  "aliases": [
39470
39479
  "Data list",
@@ -42247,7 +42256,7 @@
42247
42256
  "name": "HelixDrawer",
42248
42257
  "cssProperties": [
42249
42258
  {
42250
- "description": "Filter applied behind a `material=\"glass\"` drawer. Follows the theme's material policy; set it to override the strength on one drawer.",
42259
+ "description": "Filter applied behind a `frosted` or `glass` drawer. Follows the theme's material policy; set it to override the strength on one drawer.",
42251
42260
  "name": "--drawer-backdrop"
42252
42261
  },
42253
42262
  {
@@ -42267,7 +42276,7 @@
42267
42276
  "name": "--drawer-padding"
42268
42277
  },
42269
42278
  {
42270
- "description": "Padding above the content, which clears the close control.",
42279
+ "description": "Padding above the header, which is a step deeper than the other three so the first line clears the window's own edge. Falls back to `--drawer-padding`, so setting that alone governs all four sides.",
42271
42280
  "name": "--drawer-padding-block-start"
42272
42281
  },
42273
42282
  {
@@ -42913,56 +42922,6 @@
42913
42922
  }
42914
42923
  }
42915
42924
  ],
42916
- "events": [
42917
- {
42918
- "type": {
42919
- "text": "HelixBeforeOpenEvent"
42920
- },
42921
- "description": "Fired before the drawer opens or closes. Cancelable: refusing it takes the decision and nothing moves.",
42922
- "name": "helix-before-open",
42923
- "reactProp": "onhelix-before-open",
42924
- "inheritedFrom": {
42925
- "name": "HelixHeadlessDrawer",
42926
- "module": "src/drawer/root/drawer-root.ts"
42927
- }
42928
- },
42929
- {
42930
- "type": {
42931
- "text": "Event"
42932
- },
42933
- "description": "Relayed, because the platform's own does not escape.",
42934
- "name": "close",
42935
- "reactProp": "onclose",
42936
- "inheritedFrom": {
42937
- "name": "HelixHeadlessDrawer",
42938
- "module": "src/drawer/root/drawer-root.ts"
42939
- }
42940
- },
42941
- {
42942
- "type": {
42943
- "text": "HelixBeforeCloseEvent"
42944
- },
42945
- "description": "Fired before the panel closes, and cancelable.",
42946
- "name": "helix-before-close",
42947
- "reactProp": "onhelix-before-close",
42948
- "inheritedFrom": {
42949
- "name": "HelixHeadlessDrawer",
42950
- "module": "src/drawer/root/drawer-root.ts"
42951
- }
42952
- },
42953
- {
42954
- "type": {
42955
- "text": "Event"
42956
- },
42957
- "description": "Says the state moved, carrying `newState` and `oldState`.",
42958
- "name": "toggle",
42959
- "reactProp": "ontoggle",
42960
- "inheritedFrom": {
42961
- "name": "HelixHeadlessDrawer",
42962
- "module": "src/drawer/root/drawer-root.ts"
42963
- }
42964
- }
42965
- ],
42966
42925
  "attributes": [
42967
42926
  {
42968
42927
  "name": "material",
@@ -43056,7 +43015,7 @@
43056
43015
  "helix": {
43057
43016
  "category": "overlays",
43058
43017
  "since": "0.1.0",
43059
- "status": "experimental",
43018
+ "status": "stable",
43060
43019
  "documentation": "https://fusion.dev/helix/components/drawer",
43061
43020
  "aliases": [
43062
43021
  "Sheet",
@@ -43091,6 +43050,56 @@
43091
43050
  },
43092
43051
  "tagName": "helix-drawer",
43093
43052
  "customElement": true,
43053
+ "events": [
43054
+ {
43055
+ "type": {
43056
+ "text": "Event"
43057
+ },
43058
+ "description": "Relayed, because the platform's own does not escape.",
43059
+ "name": "close",
43060
+ "reactProp": "onclose",
43061
+ "inheritedFrom": {
43062
+ "name": "HelixHeadlessDrawer",
43063
+ "module": "src/drawer/root/drawer-root.ts"
43064
+ }
43065
+ },
43066
+ {
43067
+ "type": {
43068
+ "text": "HelixBeforeCloseEvent"
43069
+ },
43070
+ "description": "Fired before the panel closes, and cancelable.",
43071
+ "name": "helix-before-close",
43072
+ "reactProp": "onhelix-before-close",
43073
+ "inheritedFrom": {
43074
+ "name": "HelixHeadlessDrawer",
43075
+ "module": "src/drawer/root/drawer-root.ts"
43076
+ }
43077
+ },
43078
+ {
43079
+ "type": {
43080
+ "text": "HelixBeforeOpenEvent"
43081
+ },
43082
+ "description": "Fired before the panel opens. Cancelable: refusing it takes the decision and nothing moves.",
43083
+ "name": "helix-before-open",
43084
+ "reactProp": "onhelix-before-open",
43085
+ "inheritedFrom": {
43086
+ "name": "HelixHeadlessDrawer",
43087
+ "module": "src/drawer/root/drawer-root.ts"
43088
+ }
43089
+ },
43090
+ {
43091
+ "type": {
43092
+ "text": "Event"
43093
+ },
43094
+ "description": "Says the state moved, carrying `newState` and `oldState`.",
43095
+ "name": "toggle",
43096
+ "reactProp": "ontoggle",
43097
+ "inheritedFrom": {
43098
+ "name": "HelixHeadlessDrawer",
43099
+ "module": "src/drawer/root/drawer-root.ts"
43100
+ }
43101
+ }
43102
+ ],
43094
43103
  "cssStates": [
43095
43104
  {
43096
43105
  "description": "While the drawer is open.",
@@ -43649,7 +43658,7 @@
43649
43658
  "summary": "One row of a drill-down, which may hold a page of its own.",
43650
43659
  "helix": {
43651
43660
  "since": "0.1.0",
43652
- "status": "experimental",
43661
+ "status": "stable",
43653
43662
  "documentation": "https://fusion.dev/helix/components/drilldown",
43654
43663
  "aliases": [
43655
43664
  "Panel item",
@@ -44498,7 +44507,7 @@
44498
44507
  "helix": {
44499
44508
  "category": "navigation",
44500
44509
  "since": "0.1.0",
44501
- "status": "experimental",
44510
+ "status": "stable",
44502
44511
  "documentation": "https://fusion.dev/helix/components/drilldown",
44503
44512
  "aliases": [
44504
44513
  "Panel",
@@ -44672,6 +44681,14 @@
44672
44681
  }
44673
44682
  ],
44674
44683
  "cssStates": [
44684
+ {
44685
+ "description": "While a row's page is showing rather than the top one, so a frame around this can answer the depth it is at.",
44686
+ "name": "drilled",
44687
+ "inheritedFrom": {
44688
+ "name": "HelixHeadlessDrilldown",
44689
+ "module": "src/drilldown/root/drilldown-root.ts"
44690
+ }
44691
+ },
44675
44692
  {
44676
44693
  "description": "Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.",
44677
44694
  "name": "settled",
@@ -54001,7 +54018,7 @@
54001
54018
  }
54002
54019
  },
54003
54020
  {
54004
- "description": "Shown when the table has no readings in it.",
54021
+ "description": "Shown when the table has no readings in it, and not before the table can be read at all: on a server, and while hydrating what one sent, there is no document to resolve `for` in and nothing is known yet.",
54005
54022
  "name": "empty",
54006
54023
  "inheritedFrom": {
54007
54024
  "name": "HelixHeadlessHeatmap",
@@ -54034,10 +54051,6 @@
54034
54051
  }
54035
54052
  ],
54036
54053
  "slots": [
54037
- {
54038
- "description": "The `<table>` this draws, where it is not named by `for`.",
54039
- "name": ""
54040
- },
54041
54054
  {
54042
54055
  "description": "Below the strip, at the trailing edge.",
54043
54056
  "name": "end",
@@ -54216,7 +54229,7 @@
54216
54229
  "text": "string"
54217
54230
  },
54218
54231
  "default": "'No readings'",
54219
- "description": "Shown when the table has no readings in it.",
54232
+ "description": "Shown when the table has no readings in it.\n\nNever shown while the table cannot be read at all, which is a server render\nand the hydrating one after it: see `sourceKnown`.",
54220
54233
  "attribute": "empty-text",
54221
54234
  "inheritedFrom": {
54222
54235
  "name": "HelixHeadlessHeatmap",
@@ -54360,6 +54373,20 @@
54360
54373
  "module": "src/heatmap/root/heatmap-root.ts"
54361
54374
  }
54362
54375
  },
54376
+ {
54377
+ "kind": "field",
54378
+ "name": "sourceKnown",
54379
+ "type": {
54380
+ "text": "boolean"
54381
+ },
54382
+ "privacy": "private",
54383
+ "description": "Whether this render can tell a table with no readings from one it has not\nresolved yet.\n\n**Unknown is not empty, which is what an empty state must never say.**\n`for` names an id and resolving an id wants a document, so a server has\nnone and a hydrating render must not look either. Without this the server\ndrew \"No readings\" over a table holding ninety days of them, a crawler read\nthat sentence, and the strip flipped to a full one on hydration: the fault\n`MixinCollection` names for a slotted collection, arriving through the one\nchannel that mixin cannot see.\n\nThe same shape as `childrenKnown`, asked of a document rather than of a\ntree. An id that resolves to nothing in a browser is still known, and still\nempty: a `for` naming no table should say so rather than sit blank.",
54384
+ "readonly": true,
54385
+ "inheritedFrom": {
54386
+ "name": "HelixHeadlessHeatmap",
54387
+ "module": "src/heatmap/root/heatmap-root.ts"
54388
+ }
54389
+ },
54363
54390
  {
54364
54391
  "kind": "field",
54365
54392
  "name": "rowCount",
@@ -54851,7 +54878,7 @@
54851
54878
  "helix": {
54852
54879
  "category": "charts",
54853
54880
  "since": "0.1.0",
54854
- "status": "experimental",
54881
+ "status": "stable",
54855
54882
  "documentation": "https://fusion.dev/helix/components/heatmap",
54856
54883
  "tier": "styled",
54857
54884
  "group": "Heatmap",
@@ -54923,7 +54950,7 @@
54923
54950
  "text": "string"
54924
54951
  },
54925
54952
  "default": "'No readings'",
54926
- "description": "Shown when the table has no readings in it.",
54953
+ "description": "Shown when the table has no readings in it.\n\nNever shown while the table cannot be read at all, which is a server render\nand the hydrating one after it: see `sourceKnown`.",
54927
54954
  "fieldName": "emptyText",
54928
54955
  "inheritedFrom": {
54929
54956
  "name": "HelixHeadlessHeatmap",
@@ -66824,7 +66851,7 @@
66824
66851
  "name": "HelixMegamenu",
66825
66852
  "cssProperties": [
66826
66853
  {
66827
- "description": "A filter behind the panel, for glass.",
66854
+ "description": "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.",
66828
66855
  "name": "--megamenu-backdrop"
66829
66856
  },
66830
66857
  {
@@ -66974,7 +67001,7 @@
66974
67001
  "text": "number"
66975
67002
  },
66976
67003
  "default": "640",
66977
- "description": "The width, in pixels, under which a card becomes a band. Zero never does.\n\nA card is a panel hung off one word, and there is no room to hang anything\noff a word on a phone: the columns do not shrink past\n`--megamenu-column-size`, so four of them stay four of them and the panel\nruns off the side of the screen rather than reflowing. Below this it takes\nthe whole width and its columns stack, which is the only arrangement that\nfits.\n\n**In script rather than a media query, and only once.** Whether the panel is\na band is not a question of paint: a band is not placed against the trigger,\nso the controller has to be told not to measure, and that decision is here\nwhatever the stylesheet says. Writing the width in both places would be one\nnumber in two languages, drifting the first time either moved. This sets\n`data-narrow` on the host and the stylesheet arranges itself off that.",
67004
+ "description": "The width, in pixels, under which a card becomes a band. Zero never does.\n\nA card is a panel hung off one word, and there is no room to hang anything\noff a word on a phone: the columns do not shrink past\n`--megamenu-column-size`, so four of them stay four of them and the panel\nruns off the side of the screen rather than reflowing. Below this it takes\nthe whole width and its columns stack, which is the only arrangement that\nfits.\n\n**In script rather than a media query, and only once.** Whether the panel is\na band is not a question of paint: a band is not placed against the trigger,\nso the controller has to be told not to measure, and that decision is here\nwhatever the stylesheet says. Writing the width in both places would be one\nnumber in two languages, drifting the first time either moved. This records\n`:state(narrow)` on the host and the stylesheet arranges itself off that.\n\n**A custom state and never `data-narrow`, which is what it was.** The width\nis read in `connectedCallback`, so on a phone this is true on the very first\nupdate: an attribute written there is markup a consumer's server never sent,\nwhich React reports as a mismatch and answers by rebuilding the subtree. The\nnarrow exception the server specs describe covers a mirror that can only\nbecome true long after hydration, and a viewport measured before the first\npaint is the opposite case. See `MixinControllerOpen` on `open`.",
66978
67005
  "attribute": "full-below",
66979
67006
  "inheritedFrom": {
66980
67007
  "name": "HelixHeadlessMegamenu",
@@ -67692,7 +67719,7 @@
67692
67719
  "helix": {
67693
67720
  "category": "navigation",
67694
67721
  "since": "0.1.0",
67695
- "status": "experimental",
67722
+ "status": "stable",
67696
67723
  "documentation": "https://fusion.dev/helix/components/megamenu",
67697
67724
  "aliases": [
67698
67725
  "Mega menu",
@@ -67765,7 +67792,7 @@
67765
67792
  "text": "number"
67766
67793
  },
67767
67794
  "default": "640",
67768
- "description": "The width, in pixels, under which a card becomes a band. Zero never does.\n\nA card is a panel hung off one word, and there is no room to hang anything\noff a word on a phone: the columns do not shrink past\n`--megamenu-column-size`, so four of them stay four of them and the panel\nruns off the side of the screen rather than reflowing. Below this it takes\nthe whole width and its columns stack, which is the only arrangement that\nfits.\n\n**In script rather than a media query, and only once.** Whether the panel is\na band is not a question of paint: a band is not placed against the trigger,\nso the controller has to be told not to measure, and that decision is here\nwhatever the stylesheet says. Writing the width in both places would be one\nnumber in two languages, drifting the first time either moved. This sets\n`data-narrow` on the host and the stylesheet arranges itself off that.",
67795
+ "description": "The width, in pixels, under which a card becomes a band. Zero never does.\n\nA card is a panel hung off one word, and there is no room to hang anything\noff a word on a phone: the columns do not shrink past\n`--megamenu-column-size`, so four of them stay four of them and the panel\nruns off the side of the screen rather than reflowing. Below this it takes\nthe whole width and its columns stack, which is the only arrangement that\nfits.\n\n**In script rather than a media query, and only once.** Whether the panel is\na band is not a question of paint: a band is not placed against the trigger,\nso the controller has to be told not to measure, and that decision is here\nwhatever the stylesheet says. Writing the width in both places would be one\nnumber in two languages, drifting the first time either moved. This records\n`:state(narrow)` on the host and the stylesheet arranges itself off that.\n\n**A custom state and never `data-narrow`, which is what it was.** The width\nis read in `connectedCallback`, so on a phone this is true on the very first\nupdate: an attribute written there is markup a consumer's server never sent,\nwhich React reports as a mismatch and answers by rebuilding the subtree. The\nnarrow exception the server specs describe covers a mirror that can only\nbecome true long after hydration, and a viewport measured before the first\npaint is the opposite case. See `MixinControllerOpen` on `open`.",
67769
67796
  "fieldName": "fullBelow",
67770
67797
  "inheritedFrom": {
67771
67798
  "name": "HelixHeadlessMegamenu",
@@ -67886,6 +67913,14 @@
67886
67913
  }
67887
67914
  ],
67888
67915
  "cssStates": [
67916
+ {
67917
+ "description": "While the page is under `full-below`, so the panel is a band whether or not one was asked for.",
67918
+ "name": "narrow",
67919
+ "inheritedFrom": {
67920
+ "name": "HelixHeadlessMegamenu",
67921
+ "module": "src/megamenu/root/megamenu-root.ts"
67922
+ }
67923
+ },
67889
67924
  {
67890
67925
  "description": "While the panel is open, which is when the trigger reads as current.",
67891
67926
  "name": "open",
@@ -76563,9 +76598,8 @@
76563
76598
  "text": "boolean"
76564
76599
  },
76565
76600
  "default": "false",
76566
- "description": "Whether to leave the copy button off.\n\nNegative for the reason Code Block's is: a boolean attribute defaulting to\ntrue could never be turned off from markup.",
76601
+ "description": "Whether to leave the copy button off.\n\nNegative for the reason Code Block's is: a boolean attribute defaulting to\ntrue could never be turned off from markup.\n\n**It does not reflect, where Code Block's does**, and the difference is what\nthe two sheets need. Code Block reserves the button's width with\n`:host(:not([no-copy]))`, so the attribute has to be there for a consumer\nwho set the property. This button is positioned out of the flow and takes no\nroom, so nothing selects on it, and reflection exists so that a selector can\nreach a value.",
76567
76602
  "attribute": "no-copy",
76568
- "reflects": true,
76569
76603
  "inheritedFrom": {
76570
76604
  "name": "HelixHeadlessObjectInspector",
76571
76605
  "module": "src/object-inspector/root/object-inspector-root.ts"
@@ -76933,6 +76967,7 @@
76933
76967
  }
76934
76968
  }
76935
76969
  ],
76970
+ "description": "One entry, named for its state where it holds one.\n\n**`row-active` and no attribute beside it.** Which row the keys are on is\ndrawn by a sheet and by nothing else: the accessibility tree hears it from\n`aria-activedescendant` on the tree, which points at this row's id, so an\nattribute would be a second spelling with no reader. The name is the one a\nconsumer can reach, nothing being able to follow `::part()` with an\nattribute selector.",
76936
76971
  "inheritedFrom": {
76937
76972
  "name": "HelixHeadlessObjectInspector",
76938
76973
  "module": "src/object-inspector/root/object-inspector-root.ts"
@@ -77280,7 +77315,7 @@
77280
77315
  "helix": {
77281
77316
  "category": "data",
77282
77317
  "since": "0.1.0",
77283
- "status": "experimental",
77318
+ "status": "stable",
77284
77319
  "documentation": "https://fusion.dev/helix/components/object-inspector",
77285
77320
  "aliases": [
77286
77321
  "JSON viewer",
@@ -77585,7 +77620,7 @@
77585
77620
  "text": "boolean"
77586
77621
  },
77587
77622
  "default": "false",
77588
- "description": "Whether to leave the copy button off.\n\nNegative for the reason Code Block's is: a boolean attribute defaulting to\ntrue could never be turned off from markup.",
77623
+ "description": "Whether to leave the copy button off.\n\nNegative for the reason Code Block's is: a boolean attribute defaulting to\ntrue could never be turned off from markup.\n\n**It does not reflect, where Code Block's does**, and the difference is what\nthe two sheets need. Code Block reserves the button's width with\n`:host(:not([no-copy]))`, so the attribute has to be there for a consumer\nwho set the property. This button is positioned out of the flow and takes no\nroom, so nothing selects on it, and reflection exists so that a selector can\nreach a value.",
77589
77624
  "fieldName": "noCopy",
77590
77625
  "inheritedFrom": {
77591
77626
  "name": "HelixHeadlessObjectInspector",
@@ -80243,7 +80278,7 @@
80243
80278
  "declarations": [
80244
80279
  {
80245
80280
  "kind": "class",
80246
- "description": "A rule down the leading edge with the current section lit along it, which is\nthe shape a table of contents has taken since printed marginalia: the line\nsays the list is one thing, and the lit segment says where in it you are.\n\nNesting is the consumer's, expressed as `data-level` on a link. An outline\nthat read heading levels itself would have to look at the document, and the\ndocument is not always where the headings are.",
80281
+ "description": "A rule down the leading edge with the current section lit along it, which is\nthe shape a table of contents has taken since printed marginalia: the line\nsays the list is one thing, and the lit segment says where in it you are.\n\nNesting is the consumer's, expressed as `data-level` on a link, and the\nlevels are the heading levels: `2` through `6` each take one more step of\n`--outline-indent`, and a link with no `data-level` is the top one. An\noutline that read heading levels itself would have to look at the document,\nand the document is not always where the headings are.",
80247
80282
  "name": "HelixOutline",
80248
80283
  "cssProperties": [
80249
80284
  {
@@ -80992,11 +81027,11 @@
80992
81027
  "events": [
80993
81028
  {
80994
81029
  "type": {
80995
- "text": "HelixBeforeActivateEvent"
81030
+ "text": "HelixActivateEvent"
80996
81031
  },
80997
- "description": "The section being read has changed, carrying its id as the value. Cancelable: refusing it takes the decision and nothing moves.",
80998
- "name": "helix-before-activate",
80999
- "reactProp": "onhelix-before-activate",
81032
+ "description": "The section being read has changed, carrying its id as the value. An announcement: it is read off where the page is scrolled to, so there is no decision here to take.",
81033
+ "name": "helix-activate",
81034
+ "reactProp": "onhelix-activate",
81000
81035
  "inheritedFrom": {
81001
81036
  "name": "HelixHeadlessOutline",
81002
81037
  "module": "src/outline/root/outline-root.ts"
@@ -127168,7 +127203,7 @@
127168
127203
  "name": "--tooltip-arrow-size"
127169
127204
  },
127170
127205
  {
127171
- "description": "Blur behind a `glass` bubble.",
127206
+ "description": "Blur behind a `frosted` or `glass` bubble.",
127172
127207
  "name": "--tooltip-backdrop"
127173
127208
  },
127174
127209
  {
@@ -128243,7 +128278,7 @@
128243
128278
  "helix": {
128244
128279
  "category": "overlays",
128245
128280
  "since": "0.1.0",
128246
- "status": "experimental",
128281
+ "status": "stable",
128247
128282
  "documentation": "https://fusion.dev/helix/components/tooltip",
128248
128283
  "aliases": [
128249
128284
  "Hint",
@@ -11,7 +11,7 @@ import '../../tag/index.js';
11
11
  * Input, Color Input and Date Input all take.
12
12
  *
13
13
  * @since 0.1.0
14
- * @status experimental
14
+ * @status stable
15
15
  * @category forms
16
16
  * @aliases Autocomplete, Typeahead, Search select
17
17
  * @documentation https://fusion.dev/helix/components/combobox
@@ -21,7 +21,7 @@ import '../../tag/index.js';
21
21
  * @cssproperty --combobox-border-width - Width of the panel's edge. Follows
22
22
  * `--helix-border-floating`, which is `0`, so the panel is told apart by its lift unless a
23
23
  * theme says otherwise.
24
- * @cssproperty --combobox-control-size - Smallest the text field shrinks to
24
+ * @cssproperty --combobox-control-size - Smallest the text field shrinks to once tags share its line.
25
25
  * @cssproperty --combobox-panel-size - Width of the panel. Follows the field by default.
26
26
  * @cssproperty --combobox-shadow - Lift under the panel. Follows `--helix-shadow-floating`: a
27
27
  * floating surface sits over content nobody can predict, so it keeps a lift by default.
@@ -66,6 +66,8 @@ font-size: var(--data-table-text, var(--helix-text-sm));
66
66
  padding-block: var(--data-table-padding-block, var(--helix-space-sm));
67
67
 
68
68
  padding-inline: var(--data-table-padding-inline, var(--helix-space-none) var(--helix-space-md));
69
+
70
+ text-align: var(--data-table-cell-align);
69
71
  }
70
72
 
71
73
  [part="row"]:last-of-type [part~="cell"] {
@@ -25,7 +25,7 @@ import '../../table/index.js';
25
25
  * `helix-table` where the content has to be in the served HTML.
26
26
  *
27
27
  * @since 0.1.0
28
- * @status experimental
28
+ * @status stable
29
29
  * @category data
30
30
  * @documentation https://fusion.dev/helix/components/data-table
31
31
  *
@@ -8,7 +8,7 @@ import type { CSSResultGroup } from 'lit';
8
8
  * to a screen reader, while lining up with every other pair in the list.
9
9
  *
10
10
  * @since 0.1.0
11
- * @status experimental
11
+ * @status stable
12
12
  * @documentation https://fusion.dev/helix/components/description-list
13
13
  */
14
14
  export declare class HelixDescriptionListItem extends HelixHeadlessDescriptionListItem {
@@ -20,12 +20,12 @@ import type { CSSResultGroup } from 'lit';
20
20
  * figures of one width, which is how a set of totals is read.
21
21
  *
22
22
  * @since 0.1.0
23
- * @status experimental
23
+ * @status stable
24
24
  * @category data
25
25
  * @aliases Data list, Key-value list, Details, Properties
26
26
  * @documentation https://fusion.dev/helix/components/description-list
27
27
  *
28
- * @cssproperty --description-list-gap - Space between one pair and the next.
28
+ * @cssproperty --description-list-gap - Space between one pair and the next. Its resting value is tighter with `direction="row"` than stacked, a row of pairs needing less air between them than a column of them does, and setting this takes both.
29
29
  */
30
30
  export declare class HelixDescriptionList extends HelixHeadlessDescriptionList {
31
31
  static styles: CSSResultGroup;
@@ -42,7 +42,7 @@ inset: auto;
42
42
  inline-size: auto;
43
43
  block-size: auto;
44
44
 
45
- background-color: var(--helix-color-surface-overlay);
45
+ background-color: var(--drawer-background-color, var(--helix-color-surface-overlay));
46
46
 
47
47
  padding: var(--drawer-padding, var(--helix-space-lg));
48
48
 
@@ -9,7 +9,7 @@ import type { CSSResultGroup } from 'lit';
9
9
  * rest is flat and the movement is what says something happened.
10
10
  *
11
11
  * @since 0.1.0
12
- * @status experimental
12
+ * @status stable
13
13
  * @category overlays
14
14
  * @aliases Sheet, Sidebar, Panel, Off-canvas
15
15
  * @documentation https://fusion.dev/helix/components/drawer
@@ -17,13 +17,11 @@ import type { CSSResultGroup } from 'lit';
17
17
  * @slot - The drawer's content.
18
18
  * @slot header - Content pinned above the scrolling area.
19
19
  *
20
- * @event {HelixBeforeOpenEvent} helix-before-open - Fired before the drawer opens or closes. Cancelable: refusing it takes the decision and nothing moves.
21
- *
22
20
  * @csspart content - The scrolling content region.
23
21
  * @csspart header - The header region.
24
22
  * @csspart panel - The sliding panel.
25
23
  *
26
- * @cssproperty --drawer-backdrop - Filter applied behind a `material="glass"` drawer.
24
+ * @cssproperty --drawer-backdrop - Filter applied behind a `frosted` or `glass` drawer.
27
25
  * Follows the theme's material policy; set it to override the strength on one drawer.
28
26
  * @cssproperty --drawer-background-color - Surface behind the panel.
29
27
  * @cssproperty --drawer-border-color - Color of the panel's edge.
@@ -31,7 +29,9 @@ import type { CSSResultGroup } from 'lit';
31
29
  * `--helix-border-floating`, which is `0`, so the panel is told apart by its lift unless a
32
30
  * theme says otherwise.
33
31
  * @cssproperty --drawer-padding - Padding inside the panel.
34
- * @cssproperty --drawer-padding-block-start - Padding above the content, which clears the close control.
32
+ * @cssproperty --drawer-padding-block-start - Padding above the header, which is a step deeper than
33
+ * the other three so the first line clears the window's own edge. Falls back to
34
+ * `--drawer-padding`, so setting that alone governs all four sides.
35
35
  * @cssproperty --drawer-radius - Corner radius on the edges that face the page.
36
36
  * @cssproperty --drawer-scrim - The wash over the page behind the drawer. Set on the host, where a token still resolves: a `var()` written inside `::backdrop` cannot see one.
37
37
  * @cssproperty --drawer-shadow - Lift under the panel. Follows `--helix-shadow-floating`: a
@@ -9,7 +9,7 @@ import type { CSSResultGroup } from 'lit';
9
9
  * lines up with the edge the eye is already following down the list.
10
10
  *
11
11
  * @since 0.1.0
12
- * @status experimental
12
+ * @status stable
13
13
  * @aliases Panel item, Drill row
14
14
  * @documentation https://fusion.dev/helix/components/drilldown
15
15
  *
@@ -15,7 +15,7 @@ import type { CSSResultGroup } from 'lit';
15
15
  * `prefers-reduced-motion` it becomes the instant swap `Menu` does.
16
16
  *
17
17
  * @since 0.1.0
18
- * @status experimental
18
+ * @status stable
19
19
  * @category navigation
20
20
  * @aliases Panel, Nested list, Drill-in
21
21
  * @documentation https://fusion.dev/helix/components/drilldown