@fusion.dev/helix-headless 0.53.1 → 0.53.2

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 (66) hide show
  1. package/custom-elements.json +118 -138
  2. package/dist/accordion/item/accordion-item.d.ts +13 -13
  3. package/dist/accordion/root/accordion-root.d.ts +1 -1
  4. package/dist/area-chart/root/area-chart-root.js +1 -1
  5. package/dist/avatar/group/avatar-group.d.ts +11 -11
  6. package/dist/bar-chart/root/bar-chart-root.d.ts +1 -1
  7. package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +6 -6
  8. package/dist/button/root/button-root.d.ts +1 -1
  9. package/dist/card/root/card-root.d.ts +1 -1
  10. package/dist/carousel/root/carousel-root.d.ts +14 -14
  11. package/dist/chat/composer/chat-composer.d.ts +6 -6
  12. package/dist/chat/root/chat-root.d.ts +9 -9
  13. package/dist/checkbox/root/checkbox-root.d.ts +2 -2
  14. package/dist/code-block/root/code-block-root.d.ts +5 -5
  15. package/dist/color-input/root/color-input-root.d.ts +3 -3
  16. package/dist/color-picker/root/color-picker-root.d.ts +14 -14
  17. package/dist/combobox/root/combobox-root.d.ts +9 -5
  18. package/dist/combobox/root/combobox-root.js +2 -3
  19. package/dist/command/root/command-root.d.ts +6 -7
  20. package/dist/data-table/root/data-table-root.d.ts +38 -38
  21. package/dist/data-table/root/order.d.ts +3 -3
  22. package/dist/date-input/root/date-input-root.d.ts +12 -11
  23. package/dist/dialog/root/dialog-root.d.ts +4 -4
  24. package/dist/drawer/root/drawer-root.d.ts +5 -5
  25. package/dist/filter-input/menu/filter-menu.d.ts +7 -1
  26. package/dist/filter-input/menu/filter-menu.js +2 -1
  27. package/dist/filter-input/root/filter-input-root.d.ts +6 -6
  28. package/dist/format-date/root/format-date-root.d.ts +6 -5
  29. package/dist/heatmap/root/heatmap-root.d.ts +11 -16
  30. package/dist/image/root/image-root.d.ts +4 -4
  31. package/dist/input/root/input-root.d.ts +7 -7
  32. package/dist/line-chart/root/line-chart-root.d.ts +1 -2
  33. package/dist/list/item/list-item.d.ts +6 -7
  34. package/dist/list/root/list-root.d.ts +4 -4
  35. package/dist/megamenu/root/megamenu-root.d.ts +4 -4
  36. package/dist/notifications/notification/notification.d.ts +10 -10
  37. package/dist/notifications/root/notifications-root.d.ts +1 -1
  38. package/dist/option/root/option-root.d.ts +3 -3
  39. package/dist/pagination/root/pagination-root.d.ts +2 -2
  40. package/dist/pin-input/root/pin-input-root.d.ts +4 -4
  41. package/dist/popover/root/popover-root.d.ts +7 -6
  42. package/dist/radio/root/radio-root.d.ts +1 -1
  43. package/dist/speed-dial/root/speed-dial-root.d.ts +8 -9
  44. package/dist/stat/root/stat-root.d.ts +3 -3
  45. package/dist/steps/root/steps-root.d.ts +1 -1
  46. package/dist/steps/step/step.d.ts +5 -5
  47. package/dist/table/column/table-column.d.ts +28 -28
  48. package/dist/table/root/table-root.d.ts +14 -17
  49. package/dist/table/row/table-row.d.ts +4 -4
  50. package/dist/tabs/panel/tab-panel.d.ts +2 -2
  51. package/dist/time-input/root/time-input-root.d.ts +13 -13
  52. package/dist/time-picker/root/time-picker-root.d.ts +8 -8
  53. package/dist/toast/root/toast-root.d.ts +2 -2
  54. package/dist/toggle/root/toggle-root.d.ts +5 -5
  55. package/dist/tooltip/root/tooltip-root.d.ts +2 -2
  56. package/dist/tour/stop/tour-stop.d.ts +3 -3
  57. package/dist/tree/item/tree-item.d.ts +2 -2
  58. package/dist/tree/root/tree-root.d.ts +8 -7
  59. package/dist/tree/root/tree-root.js +1 -1
  60. package/dist/video-playlist/menu/video-playlist-menu.d.ts +7 -1
  61. package/dist/video-playlist/menu/video-playlist-menu.js +4 -2
  62. package/dist/video-playlist/root/video-playlist-root.d.ts +5 -5
  63. package/dist/video-playlist/root/video-playlist-root.js +2 -3
  64. package/package.json +5 -5
  65. package/types/jsx.d.ts +754 -780
  66. package/types/vue.d.ts +172 -185
@@ -111,25 +111,25 @@ export declare class HelixHeadlessAccordionItem extends HelixHeadlessAccordionIt
111
111
  * pixel of it on the screen, so a consumer taking this tier gets sections of
112
112
  * text permanently open under a trigger saying `aria-expanded="false"`, and a
113
113
  * sighted reader sees content a screen reader is told is not there. Leaving
114
- * the collapse to the styled tier's `grid-template-rows: 0fr` puts the state
115
- * in a stylesheet, where only one of the two tiers has it.
114
+ * the collapse to a `grid-template-rows: 0fr` puts the state in a stylesheet,
115
+ * where only the consumers who load that sheet have it.
116
116
  *
117
- * **`hidden` costs the styled tier nothing**, which is what makes this the
118
- * cheap fix rather than a trade. The UA sheet hides `[hidden]` from the UA
119
- * origin, and `accordion-item.css` already sets `display: grid` on this part
120
- * unconditionally, so the author rule wins and the 0fr transition runs
121
- * exactly as before. Measured on both tiers.
117
+ * **`hidden` costs a sheet that animates this region nothing**, which is what
118
+ * makes this the cheap fix rather than a trade. The UA sheet hides `[hidden]`
119
+ * from the UA origin, so any author rule already setting `display` on this
120
+ * part outranks it and the transition runs exactly as before. Measured on
121
+ * both tiers.
122
122
  *
123
123
  * **Not `hidden="until-found"`**, which would be the better accordion and is
124
124
  * a different piece of work. It hides through `content-visibility` rather
125
- * than `display`, so the styled tier's `display: grid` would no longer
126
- * override it and a collapsed section would animate open to nothing. It also
127
- * needs a `beforematch` handler to set `open`, or find-in-page reveals text
128
- * while the trigger still reports collapsed.
125
+ * than `display`, which an author `display` does not override, so a collapsed
126
+ * section a sheet animates would open to nothing. It also needs a
127
+ * `beforematch` handler to set `open`, or find-in-page reveals text while the
128
+ * trigger still reports collapsed.
129
129
  *
130
130
  * `inert` stays. `hidden` answers the reader who can see and `inert` answers
131
- * the one tabbing through, and in the styled tier, where `display` is
132
- * overridden, `inert` is the only one of the two still in force.
131
+ * the one tabbing through, and wherever a sheet overrides `display`, `inert`
132
+ * is the only one of the two still in force.
133
133
  */
134
134
  protected render(): TemplateResult;
135
135
  }
@@ -18,7 +18,7 @@ import { HelixHeadlessAccordionItem } from '../item/accordion-item.js';
18
18
  * item added a second after render coordinates on its first click.
19
19
  *
20
20
  * Items are matched with `instanceof HelixHeadlessAccordionItem`, never by tag
21
- * name. Matching `helix-accordion-item` would tie this tier to the styled one.
21
+ * name, so this tier does not learn about the styled one.
22
22
  *
23
23
  * The keyboard listener is the controller's and is attached on connect, so
24
24
  * none of it runs on the server, where there is no tree to walk and no events
@@ -61,7 +61,7 @@ let HelixHeadlessAreaChart = class HelixHeadlessAreaChart extends MixinChartSour
61
61
  console.warn(`<${this.localName}> read a negative number and drew it as none. Its bands are parts of a ` +
62
62
  'total, and a part cannot be less than nothing: a band drawn below its neighbor would say ' +
63
63
  'the part took some of the one beneath it away. A series that crosses zero is a line, so ' +
64
- 'reach for `helix-line-chart`.');
64
+ 'reach for the line chart in this tier instead.');
65
65
  }
66
66
  render() {
67
67
  const rows = this.sourceRows;
@@ -1,13 +1,13 @@
1
1
  import { HelixElement } from '@fusion.dev/helix-core';
2
2
  import { type PropertyValues, type TemplateResult } from 'lit';
3
3
  /**
4
- * The largest `max` the styled tier can hide past.
4
+ * The largest `max` a stylesheet can hide past.
5
5
  *
6
6
  * The fold is `:host([max="N"]) ::slotted(:nth-child(n + N+1))`, one selector
7
7
  * per value, because `An+B` takes a literal and no custom property can be read
8
- * into it. So the range is finite and this is where it is written down, in the
9
- * tier that has to agree with it: a count that folds and a stylesheet that does
10
- * not would put a "+5" beside five avatars that are still on screen.
8
+ * into it. So the range is finite, and it is written down beside the count that
9
+ * has to agree with it: a count that folds and a stylesheet that does not would
10
+ * put a "+5" beside five avatars that are still on screen.
11
11
  */
12
12
  export declare const FOLDS_UP_TO = 12;
13
13
  /**
@@ -45,13 +45,13 @@ export declare class HelixHeadlessAvatarGroup extends HelixElement {
45
45
  * Unset shows all of them, which is what no limit means and is more useful
46
46
  * than refusing to render.
47
47
  *
48
- * **Reflected, because the fold is a stylesheet rule and nothing else.** The
49
- * styled tier hides past the limit with `:host([max="N"]) ::slotted(:nth-child(n + N+1))`,
50
- * so the attribute *is* the mechanism: a `max` that reaches this property and
51
- * never reaches the host matches no rule, and every avatar is drawn beside a
52
- * count claiming some are hidden. Markup is the safe path and hides the fault;
53
- * a script is the broken one, and React takes it for everyone, assigning a
54
- * matching property rather than an attribute.
48
+ * **Reflected, because the fold is a stylesheet rule and nothing else.** A
49
+ * sheet hides past the limit one selector per value, as `FOLDS_UP_TO`
50
+ * describes, so the attribute *is* the mechanism: a `max` that reaches this
51
+ * property and never reaches the host matches no rule, and every avatar is
52
+ * drawn beside a count claiming some are hidden. Markup is the safe path and
53
+ * hides the fault; a script is the broken one, and React takes it for
54
+ * everyone, assigning a matching property rather than an attribute.
55
55
  *
56
56
  * **Optional rather than defaulted, per the rule that a reflected property
57
57
  * takes no default**: `max = 0` would stamp `max="0"` onto every host that
@@ -66,7 +66,7 @@ declare const HelixHeadlessBarChart_base: typeof HelixElement & (new (...args: a
66
66
  * @csspart tooltip-value - A column's value inside the tooltip.
67
67
  *
68
68
  * @cssproperty --bar-chart-axis - How wide an axis column is drawn, in `ch`, from the widest number on it. Written on the axis itself, and only where the categories run along the bottom: turned sideways an axis is a row and takes a line's height instead.
69
- * @cssproperty --bar-chart-secondary - The color of the secondary axis when one series owns it. It resolves a `--helix-color-series-*` token, so on the headless tier alone it names something that is not there. #138.
69
+ * @cssproperty --bar-chart-secondary - The color of the secondary axis, where one series owns it. Written by the component from that series' `--chart-series-*`, so it promises the series color and nothing more: whatever that hook resolves to is what the axis is drawn in.
70
70
  * @cssproperty --chart-bar-wash - The gradient a bar would take, named per bar so the
71
71
  * styled tier can point `fill` at it. Drawn whatever the treatment and used only where
72
72
  * `wash="gradient"` asks for it.
@@ -55,12 +55,12 @@ export declare class HelixHeadlessBreadcrumb extends HelixElement {
55
55
  /**
56
56
  * Where the crumb goes, and nothing where it is the current page.
57
57
  *
58
- * **Optional and reflected, because a stylesheet does select on it.**
59
- * `breadcrumb.css` writes `:host(:not([href])) [part="link"]` to take the
60
- * block padding off a crumb that is not a link, so the attribute is what
61
- * decides how tall a crumb is. Unreflected, an `href` set from script reached
62
- * the property, rendered the anchor, and left the host looking unlinked: the
63
- * crumb drew at 20px where a markup twin drew at 28.
58
+ * **Optional and reflected, because a stylesheet does select on it.** A sheet
59
+ * writes `:host(:not([href])) [part="link"]` to take the block padding off a
60
+ * crumb that is not a link, so the attribute is what decides how tall a crumb
61
+ * is. Unreflected, an `href` set from script reached the property, rendered
62
+ * the anchor, and left the host looking unlinked: the crumb drew at 20px
63
+ * where a markup twin drew at 28.
64
64
  *
65
65
  * Optional rather than defaulted, which is the general rule that a reflected
66
66
  * property takes no default: an `href` written onto every host would be a link
@@ -47,7 +47,7 @@ export declare class HelixHeadlessButton extends HelixFormElement {
47
47
  * the same way `label` becomes `aria-label` in there.
48
48
  *
49
49
  * ```html
50
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
50
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
51
51
  * ```
52
52
  *
53
53
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -11,7 +11,7 @@ import { type PropertyValues, type TemplateResult } from 'lit';
11
11
  *
12
12
  * The host is the surface. A wrapper `<div part="container">` would be a second
13
13
  * box doing nothing the host cannot: the element itself takes the border, the
14
- * radius, and the grid, and a consumer styles `helix-card` rather than reaching
14
+ * radius, and the grid, and a consumer styles `Card` rather than reaching
15
15
  * through `::part`. One node instead of two, on every card on the page.
16
16
  *
17
17
  * Name the card with `aria-label` or `aria-labelledby`. That is the only
@@ -166,13 +166,13 @@ export declare class HelixHeadlessCarousel extends HelixElement {
166
166
  * **The number is published to the styles rather than enumerated by them**,
167
167
  * as `--carousel-per-view` on the track, which is what keeps a width and a
168
168
  * count from disagreeing. A sheet can only name a value it wrote a rule for,
169
- * so the styled tier enumerated `per-view="2"` through `5` and called five a
170
- * judgment; above it the pane fell back to one across while this file went on
171
- * counting positions. Measured in Chromium over eight slides, six across gave
172
- * three dots, a pane taking the whole track and five slides reachable only by
173
- * dragging. Written from here there is no ceiling to exceed, and a consumer's
174
- * own sheet reads the same declaration the styled one does. `runEnd` publishes
175
- * its correction the same way and for the same reason.
169
+ * so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
170
+ * above it the pane falls back to one across while this file goes on counting
171
+ * positions. Measured in Chromium over eight slides against such a sheet, six
172
+ * across gave three dots, a pane taking the whole track and five slides
173
+ * reachable only by dragging. Published from here there is no ceiling to
174
+ * exceed, and every sheet reads the same declaration. `runEnd` publishes its
175
+ * correction the same way and for the same reason.
176
176
  *
177
177
  * **On the track and not on the host.** A custom property on the host is a
178
178
  * reflected attribute by another name: it would arrive on upgrade, and a
@@ -197,8 +197,8 @@ export declare class HelixHeadlessCarousel extends HelixElement {
197
197
  * `auto` track is handed nothing. A count stays for the design that calls for
198
198
  * exactly three.
199
199
  *
200
- * The styled sheet says how it divides, and the headless `auto` example
201
- * carries the same three lines for a consumer writing their own.
200
+ * A sheet says how it divides, and the `auto` example here carries the same
201
+ * three lines for a consumer writing their own.
202
202
  *
203
203
  * **A value rather than the resting behavior**, which is what the
204
204
  * responsiveness policy asks of every axis that a box decides: a splitter
@@ -599,11 +599,11 @@ export declare class HelixHeadlessCarousel extends HelixElement {
599
599
  * The arithmetic wants how many slides there are, and CSS can only ask
600
600
  * `sibling-count()`, which is Chromium-only, evaluates to 0 through
601
601
  * `::part()`, and needs a `:last-child` that `::part()` cannot carry either.
602
- * So the styled tier could correct its run and a consumer writing their own
603
- * several-across sheet could not: measured in Chromium at three across, the
604
- * headless tier rested at 451 against -450 while the styled tier rested at
605
- * one number both ways. Published from here, one declaration reading this
606
- * gets both tiers and any consumer to the same place.
602
+ * So a sheet shipped beside the component could correct its own run and a
603
+ * consumer writing their own several-across sheet could not: measured in
604
+ * Chromium at three across, an uncorrected track rested at 451 against -450
605
+ * where a corrected one rested on one number both ways. Published from here,
606
+ * one declaration reading this gets every sheet to the same place.
607
607
  *
608
608
  * **WebKit takes the margin and does not need it**, which is the reason a
609
609
  * correction written in CSS looked like enough. It has no `sibling-count()`
@@ -133,12 +133,12 @@ export declare class HelixHeadlessChatComposer extends HelixElement {
133
133
  /**
134
134
  * Records the draft, and stops the textarea speaking in this element's name.
135
135
  *
136
- * **The stop is not incidental.** `input` is composed by specification, so the
137
- * `<textarea>` in this shadow root sent its own past this host and on through
138
- * whatever `<helix-chat>` it is slotted into, and neither element declares an
139
- * `input`: a consumer binding one on either received an undeclared event whose
140
- * target was a control they cannot reach. What a composer offers is
141
- * `helix-send`, once, when the reader is done.
136
+ * **The stop is not incidental.** `input` is composed by specification, so
137
+ * the `<textarea>` in this shadow root sent its own past this host and on
138
+ * through whatever `<helix-headless-chat>` it is slotted into, and neither
139
+ * element declares an `input`: a consumer binding one on either received an
140
+ * undeclared event whose target was a control they cannot reach. What a
141
+ * composer offers is `helix-send`, once, when the reader is done.
142
142
  */
143
143
  private readonly handleInput;
144
144
  private readonly handleSend;
@@ -15,7 +15,7 @@ export interface ChatTurn {
15
15
  * response: history then loads under the reader rather than above them.
16
16
  */
17
17
  key?: string;
18
- /** What has happened to it, as on `helix-chat-message`. */
18
+ /** What has happened to it, as on `ChatMessage`. */
19
19
  state?: 'failed' | 'sending' | 'sent' | 'streaming';
20
20
  /** What was said, as text. */
21
21
  text: string;
@@ -74,7 +74,7 @@ declare const HelixHeadlessChat_base: (new (...args: any[]) => import("@fusion.d
74
74
  * @aliases Conversation, Transcript, Thread, Messages
75
75
  * @documentation https://fusion.dev/helix/components/chat
76
76
  *
77
- * @slot - The turns, as `helix-chat-message` children.
77
+ * @slot - The turns.
78
78
  * @slot actions - Beside the header: what can be done to the conversation itself.
79
79
  * @slot composer - Below the transcript, where the reader writes.
80
80
  * @slot header - Above the transcript: what this conversation is.
@@ -163,13 +163,13 @@ export declare class HelixHeadlessChat extends HelixHeadlessChat_base {
163
163
  *
164
164
  * **Not reflected, and the default is why.** A reflected property that
165
165
  * defaults to true writes its attribute on upgrade whether or not the
166
- * consumer wrote one, so the server serves `<helix-chat label="x">` and the
167
- * client turns it into `<helix-chat label="x" pinned>`: a hydration mismatch a
168
- * React consumer reports and does not patch up. Nothing needs the attribute
169
- * either, because the one thing that changes with the pin is the way back, and
170
- * that is a part inside the shadow tree where a stylesheet can already reach
171
- * it. Measured rather than assumed: `label, pinned` after upgrade against
172
- * `label` from the server.
166
+ * consumer wrote one, so the server serves `<helix-headless-chat label="x">`
167
+ * and the client turns it into `<helix-headless-chat label="x" pinned>`: a
168
+ * hydration mismatch a React consumer reports and does not patch up. Nothing
169
+ * needs the attribute either, because the one thing that changes with the pin
170
+ * is the way back, and that is a part inside the shadow tree where a
171
+ * stylesheet can already reach it. Measured rather than assumed: `label,
172
+ * pinned` after upgrade against `label` from the server.
173
173
  */
174
174
  get pinned(): boolean;
175
175
  set pinned(next: boolean);
@@ -78,8 +78,8 @@ export declare class HelixHeadlessCheckbox extends HelixHeadlessCheckbox_base {
78
78
  * pixels of nothing after it. The input answers this by not rendering the
79
79
  * element, which cannot work here, because a checkbox is named by its own
80
80
  * content and the property is only that slot's fallback. Gating on the
81
- * property would unlabel every `<helix-checkbox>Text</helix-checkbox>` ever
82
- * written.
81
+ * property would unlabel every
82
+ * `<helix-headless-checkbox>Text</helix-headless-checkbox>` ever written.
83
83
  *
84
84
  * So the slot is asked instead, the same way `Tooltip` asks its own: with
85
85
  * `flatten`, because here the fallback counts, being where the property
@@ -105,11 +105,11 @@ export declare class HelixHeadlessCodeBlock extends HelixElement {
105
105
  * round. The platform already writes booleans like this for the same reason,
106
106
  * `novalidate` and `nomodule` and `noreferrer` among them.
107
107
  *
108
- * **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
109
- * reserves the copy button's width with `:host(:not([no-copy]))`, so the
110
- * attribute is what decides whether the block pays for a control. Unreflected,
111
- * setting it from script takes the button away (`render` reads the property)
112
- * and leaves the 40px it stood in reserved.
108
+ * **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
109
+ * the copy button's width with `:host(:not([no-copy]))`, so the attribute is
110
+ * what decides whether the block pays for a control. Unreflected, setting it
111
+ * from script takes the button away (`render` reads the property) and leaves
112
+ * the 40px it stood in reserved.
113
113
  *
114
114
  * A false boolean reflects as the attribute's absence, so this costs no
115
115
  * `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -7,11 +7,11 @@ declare const HelixHeadlessColorInput_base: (new (...args: any[]) => import("@fu
7
7
  * @summary A color, typed in any syntax or picked from a panel.
8
8
  *
9
9
  * @description
10
- * **The picker is `helix-color-picker`, not a second one written here.** It owns the
10
+ * **The picker is `ColorPicker`, not a second one written here.** It owns the
11
11
  * square, the ramps, the eyedropper and the syntax toggle, and it is worth
12
12
  * having on its own: a settings pane wants a picker flat on the page with
13
13
  * nothing to open. This element is the field, the overlay, and the form.
14
- * Exactly the arrangement Date Input has with `helix-date-picker`.
14
+ * Exactly the arrangement Date Input has with `DatePicker`.
15
15
  *
16
16
  * **Typed as well as picked, and the typing is the reason this is not
17
17
  * `<input type="color">`.** The native control gives a free picker and takes
@@ -190,7 +190,7 @@ export declare class HelixHeadlessColorInput extends HelixHeadlessColorInput_bas
190
190
  * The picker is about to take the pointer over, so the panel gets out of the
191
191
  * way and comes back after.
192
192
  *
193
- * `helix-color-picker` says what it is doing rather than reaching for a panel it
193
+ * `ColorPicker` says what it is doing rather than reaching for a panel it
194
194
  * cannot know it is in. A floating panel left up during an eyedropper is one
195
195
  * the reader cannot dismiss and may well be trying to sample from underneath.
196
196
  */
@@ -160,10 +160,10 @@ export declare class HelixHeadlessColorPicker extends HelixHeadlessColorPicker_b
160
160
  *
161
161
  * **A color is exactly as requirable as a date**, which is the comparison
162
162
  * that settles it: this element extends `HelixFormElement`, carries `name`
163
- * and reports its value, so a consumer writing
164
- * `<helix-color-picker name="brand" required>` inside a form has every reason
165
- * to expect the form to refuse an empty one. Its two siblings in the same
166
- * composition position, Date Picker and Time Picker, both check it.
163
+ * and reports its value, so a consumer writing `<helix-headless-color-picker
164
+ * name="brand" required>` inside a form has every reason to expect the form
165
+ * to refuse an empty one. Its two siblings in the same composition position,
166
+ * Date Picker and Time Picker, both check it.
167
167
  *
168
168
  * Written out rather than taken from `MixinField`, for the reason those two
169
169
  * record: the mixin brings a label, a hint and a feedback region, and this is
@@ -283,11 +283,11 @@ export declare class HelixHeadlessColorPicker extends HelixHeadlessColorPicker_b
283
283
  * **The one thing a form-associated element owes, and this element owed it
284
284
  * from the start without paying.** It extends `HelixFormElement`, takes
285
285
  * `MixinControllerValue` and carries `name`, so a consumer writing
286
- * `<helix-color-picker name="brand">` inside a form has every reason to
287
- * expect an entry, and the form carried none: no error, nothing in the
286
+ * `<helix-headless-color-picker name="brand">` inside a form has every reason
287
+ * to expect an entry, and the form carried none: no error, nothing in the
288
288
  * markup to look at, and a field silently missing from the submission. Its
289
- * two siblings in the same composition position, Color Input and Slider,
290
- * both report.
289
+ * two siblings in the same composition position, Color Input and Slider, both
290
+ * report.
291
291
  *
292
292
  * `null` rather than an empty string where there is no color, which is the
293
293
  * difference between a control that submits nothing and one that submits a
@@ -352,12 +352,12 @@ export declare class HelixHeadlessColorPicker extends HelixHeadlessColorPicker_b
352
352
  * ends. Listening only for the commit leaves the picker deaf while a handle
353
353
  * moves, and the hue and alpha handles do not move at all.
354
354
  *
355
- * **Read off the target rather than out of a detail.** Do not bind
356
- * `helix-input` and `helix-change` and take the proposed value out of the
357
- * event: those are requests, announcing what the slider is *about* to do,
358
- * before anything has moved and while a listener may still refuse it. The
359
- * native pair fires after the slider applied, so the value is on the element
360
- * and cannot disagree with it.
355
+ * **Read off the target rather than out of a detail.** Do not bind `Input`
356
+ * and `helix-change` and take the proposed value out of the event: those are
357
+ * requests, announcing what the slider is *about* to do, before anything has
358
+ * moved and while a listener may still refuse it. The native pair fires after
359
+ * the slider applied, so the value is on the element and cannot disagree with
360
+ * it.
361
361
  *
362
362
  * Idempotent, so taking both costs nothing: the same value applied twice is
363
363
  * the same color.
@@ -7,10 +7,10 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
7
7
  * @summary A field that filters a list as it is typed into.
8
8
  *
9
9
  * @description
10
- * **The list is `helix-listbox`, and the filtering is its own.** It owns
11
- * narrowing, the empty state, the highlight, `aria-activedescendant` and
12
- * scrolling an option into view. What is left for this element is the field,
13
- * the panel and the traffic between them.
10
+ * **The list is `Listbox`, and the filtering is its own.** It owns narrowing,
11
+ * the empty state, the highlight, `aria-activedescendant` and scrolling an
12
+ * option into view. What is left for this element is the field, the panel and
13
+ * the traffic between them.
14
14
  *
15
15
  * **The text and the value are two things.** What a reader types is a filter:
16
16
  * it narrows the list and is thrown away. The value is whichever option they
@@ -39,7 +39,7 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
39
39
  * @aliases Autocomplete, Typeahead, Search select
40
40
  * @documentation https://fusion.dev/helix/components/combobox
41
41
  *
42
- * @slot - The options, which are `helix-option` elements.
42
+ * @slot - The options.
43
43
  * @slot end - After it, for a unit or a clear button.
44
44
  * @slot indicator - Replaces the caret saying the field opens.
45
45
  * @slot start - Before the text, for an icon.
@@ -307,6 +307,10 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
307
307
  * It only ever opens. Closing is Escape, a choice, or leaving, which is what
308
308
  * the input already did and what a text field wants: a control that closed
309
309
  * when you clicked into the middle of your own typing would be unusable.
310
+ *
311
+ * The tag is found by identity rather than by tag name. A name matches one
312
+ * tier's element and leaves the other's press falling through to the open,
313
+ * and a subclass under a third name is missed by both.
310
314
  */
311
315
  private readonly handleFieldClick;
312
316
  /**
@@ -11,6 +11,7 @@ import { property, state } from 'lit/decorators.js';
11
11
  import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
12
12
  import { html } from 'lit/static-html.js';
13
13
  import { optionsAmong } from '../../option/root/option-root.js';
14
+ import { HelixHeadlessTag } from '../../tag/root/tag-root.js';
14
15
  import '../../listbox/index.js';
15
16
  import '../../tag/index.js';
16
17
  const isInsertion = (event) => !event.inputType?.startsWith('delete');
@@ -105,9 +106,7 @@ let HelixHeadlessCombobox = class HelixHeadlessCombobox extends MixinControllerO
105
106
  if (this.isDisabled) {
106
107
  return;
107
108
  }
108
- if (event
109
- .composedPath()
110
- .some((node) => node instanceof HTMLElement && node.localName === 'helix-tag')) {
109
+ if (event.composedPath().some((node) => node instanceof HelixHeadlessTag)) {
111
110
  return;
112
111
  }
113
112
  this.partNamed('control')?.focus();
@@ -7,12 +7,11 @@ declare const HelixHeadlessCommand_base: (new (...args: any[]) => import("@fusio
7
7
  * @summary A list of commands, opened from anywhere and filtered by typing.
8
8
  *
9
9
  * @description
10
- * **The list is `helix-listbox`, filtering and all.** Listbox already owns
11
- * narrowing, the empty state, the highlight over what matched,
12
- * `aria-activedescendant`, scrolling an option into view and the keyboard that
13
- * moves between them. Its own note says a command palette is that list again
14
- * with something different opening it, and this is that something: a dialog,
15
- * and a key that summons it.
10
+ * **The list is `Listbox`, filtering and all.** Listbox already owns narrowing,
11
+ * the empty state, the highlight over what matched, `aria-activedescendant`,
12
+ * scrolling an option into view and the keyboard that moves between them. Its
13
+ * own note says a command palette is that list again with something different
14
+ * opening it, and this is that something: a dialog, and a key that summons it.
16
15
  *
17
16
  * **The value is not kept.** A palette runs a command and forgets it: nothing
18
17
  * here is a form control and nothing is submitted, so what it reports is that
@@ -36,7 +35,7 @@ declare const HelixHeadlessCommand_base: (new (...args: any[]) => import("@fusio
36
35
  * @aliases Command palette, Quick open, Spotlight
37
36
  * @documentation https://fusion.dev/helix/components/command
38
37
  *
39
- * @slot - The commands, which are `helix-option` elements and their groups.
38
+ * @slot - The commands, and any groups of them.
40
39
  * @slot footer - Under the list, for the keys a reader can press.
41
40
  *
42
41
  * @event {HelixBeforeCloseEvent} helix-before-close - Fired before it closes. Cancelable: refusing it takes the decision and nothing moves.
@@ -10,19 +10,19 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
10
10
  *
11
11
  * @description
12
12
  * **The schema is markup and the data is a property.** Columns are declared as
13
- * `helix-table-column` children, because a schema is small and something a
14
- * reader should see in the HTML; rows are handed over as an array, because a
15
- * table that draws ten thousand elements cannot window them.
13
+ * `TableColumn` children, because a schema is small and something a reader
14
+ * should see in the HTML; rows are handed over as an array, because a table
15
+ * that draws ten thousand elements cannot window them.
16
16
  *
17
17
  * ```html
18
- * <helix-data-table .rows=${rows} sort="name:asc" page-size="20">
19
- * <helix-table-column field="name" sortable>Name</helix-table-column>
20
- * <helix-table-column field="size" align="end" sortable .cell=${bytes}>Size</helix-table-column>
21
- * </helix-data-table>
18
+ * <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20">
19
+ * <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column>
20
+ * <helix-headless-table-column field="size" align="end" sortable .cell=${bytes}>Size</helix-headless-table-column>
21
+ * </helix-headless-data-table>
22
22
  * ```
23
23
  *
24
- * `helix-table` takes rows as markup and is the right component for a table of
25
- * twelve things a person wrote out.
24
+ * `Table` takes rows as markup and is the right component for a table of twelve
25
+ * things a person wrote out.
26
26
  *
27
27
  * **Sort and filter apply to the whole set, never the page.** Sorting the drawn
28
28
  * window is correct on the first screen and wrong on every other one.
@@ -31,7 +31,7 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
31
31
  * elements do, but reading a cell needs the columns, and the columns are markup
32
32
  * children Lit SSR does not hand this element. So a crawler sees a table of the
33
33
  * right shape with nothing in it. That is the cost of the first paragraph: use
34
- * `helix-table` where the served HTML has to carry the values.
34
+ * `Table` where the served HTML has to carry the values.
35
35
  *
36
36
  * **`selectable` adds a column of checkboxes, keyed on `row-key`.** A row is
37
37
  * selected by its identity rather than its position, so a selection survives a
@@ -52,14 +52,13 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
52
52
  * in the order on screen, in the columns on screen. Saving it is the page's
53
53
  * business, the same as any other file.
54
54
  *
55
- * **There is no `columns` attribute here, and `helix-table` has one.** The
56
- * difference is what a column is in each: here it is the schema, so a table
57
- * without one has nothing to read a row with, and every column is a place to
58
- * write a `width`. A `helix-table` holds cells a consumer wrote and can be
59
- * written with no column at all, so its `columns` is where such a table is
60
- * sized from. Written on this element the attribute is inert, which is the trap
61
- * worth knowing when moving between the two. What both take is the CSS hook,
62
- * `--data-table-columns` here and `--table-columns` there.
55
+ * **There is no `columns` attribute here, and Table has one.** The difference
56
+ * is what a column is in each: here it is the schema, so a table without one
57
+ * has nothing to read a row with, and every column is a place to write a
58
+ * `width`. A Table holds cells a consumer wrote and can be written with no
59
+ * column at all, so its `columns` is where such a table is sized from. Written
60
+ * on this element the attribute is inert, which is the trap worth knowing when
61
+ * moving between the two.
63
62
  *
64
63
  * @since 0.1.0
65
64
  * @status stable
@@ -67,7 +66,7 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
67
66
  * @aliases Grid, Result table, Data grid
68
67
  * @documentation https://fusion.dev/helix/components/data-table
69
68
  *
70
- * @slot - The columns, declared as `helix-table-column` children.
69
+ * @slot - The columns, declared rather than drawn.
71
70
  * @slot footer - Below the grid, replacing the pagination this would otherwise draw.
72
71
  * @slot toolbar - Above the grid, for a search field or actions.
73
72
  *
@@ -115,18 +114,19 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
115
114
  * @csspart table - The grid.
116
115
  * @csspart toolbar - The region above the grid.
117
116
  *
118
- * @cssproperty --data-table-cell-align - 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.
119
- * @cssproperty --data-table-template - 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.
117
+ * @cssproperty --data-table-cell-align - 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; Table publishes `--table-cell-align` for the same attribute on the cells a consumer wrote, under its own family's name.
118
+ * @cssproperty --data-table-template - 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. A column's `width` is the one to set.
120
119
  */
121
120
  export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base {
122
121
  /**
123
122
  * Nothing is assigned by name, so the columns can be put in a header row.
124
123
  *
125
- * `role="columnheader"` under `role="grid"` with no owning row is invalid, and
126
- * the columns are ordinary children a consumer writes with no `slot`. Manual
127
- * assignment is the only way to wrap them without editing the consumer's
128
- * markup, which is a change a React consumer's hydration reports and does not
129
- * patch up. The same arrangement `helix-table` arrived at, for the same reason.
124
+ * `role="columnheader"` under `role="grid"` with no owning row is invalid,
125
+ * and the columns are ordinary children a consumer writes with no `slot`.
126
+ * Manual assignment is the only way to wrap them without editing the
127
+ * consumer's markup, which is a change a React consumer's hydration reports
128
+ * and does not patch up. The same arrangement `Table` arrived at, for the
129
+ * same reason.
130
130
  */
131
131
  static shadowRootOptions: ShadowRootInit;
132
132
  /**
@@ -273,9 +273,9 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
273
273
  *
274
274
  * **It announces nothing, and that is not an omission.** Nothing in this
275
275
  * element ever asks for a different page size: a size selector is
276
- * `helix-pagination-size`, which a consumer puts in the `footer` slot and
277
- * answers themselves. Routing this through `requestChange` would announce an
278
- * event the element never has cause to fire.
276
+ * `PaginationSize`, which a consumer puts in the `footer` slot and answers
277
+ * themselves. Routing this through `requestChange` would announce an event
278
+ * the element never has cause to fire.
279
279
  */
280
280
  get pageSize(): number;
281
281
  set pageSize(next: number);
@@ -613,17 +613,17 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
613
613
  /**
614
614
  * One cell, carrying its column's edge as a fact rather than as a decision.
615
615
  *
616
- * **A fact published rather than a property chosen**, which is what
617
- * `helix-table` does with the same attribute: what lining up *means*, a
618
- * `justify-content` for a value that fits or a `text-align` for one that
619
- * wraps, belongs to whoever draws the cell. Written here as an inline
620
- * `text-align` it was this tier choosing, in the tier that ships no CSS, and a
621
- * consumer could not overrule it either, an inline declaration beating any
622
- * `::part(cell)` rule they wrote.
616
+ * **A fact published rather than a property chosen**, which is what `Table`
617
+ * does with the same attribute: what lining up *means*, a `justify-content`
618
+ * for a value that fits or a `text-align` for one that wraps, belongs to
619
+ * whoever draws the cell. Written here as an inline `text-align` it was this
620
+ * tier choosing, in the tier that ships no CSS, and a consumer could not
621
+ * overrule it either, an inline declaration beating any `::part(cell)` rule
622
+ * they wrote.
623
623
  *
624
624
  * Only the three edges reach it, `align` being a string anybody can write and
625
- * this being a style attribute: `edgeOf` is that guard, and `helix-table`
626
- * holds the same value to the same three.
625
+ * this being a style attribute: `edgeOf` is that guard, and `Table` holds the
626
+ * same value to the same three.
627
627
  */
628
628
  private renderCell;
629
629
  /**
@@ -87,9 +87,9 @@ export declare const sort: (rows: readonly DataRow[], spec: Sort | undefined, ax
87
87
  * One page of rows, clamped.
88
88
  *
89
89
  * A page past the end returns the last page rather than nothing, because the
90
- * usual way to be past the end is a bookmarked link after the result shrank, and
91
- * an empty table is a worse answer than the last page of a smaller one. The
92
- * same clamp `helix-pagination` already applies to what it reports.
90
+ * usual way to be past the end is a bookmarked link after the result shrank,
91
+ * and an empty table is a worse answer than the last page of a smaller one. The
92
+ * same clamp `Pagination` already applies to what it reports.
93
93
  */
94
94
  export declare const window_: (rows: readonly DataRow[], page: number, size: number) => DataRow[];
95
95
  /** What arranging produces: the rows in order, with no page or window taken. */