@fusion.dev/helix-headless 0.104.1 → 0.106.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 (167) hide show
  1. package/custom-elements.json +10386 -3813
  2. package/dist/accordion/item/accordion-item.d.ts +17 -16
  3. package/dist/accordion/root/accordion-root.d.ts +13 -17
  4. package/dist/announcement/root/announcement-root.d.ts +24 -31
  5. package/dist/app-header/root/app-header-root.d.ts +14 -14
  6. package/dist/area-chart/root/area-chart-root.d.ts +29 -48
  7. package/dist/avatar/group/avatar-group.d.ts +6 -8
  8. package/dist/avatar/root/avatar-root.d.ts +11 -11
  9. package/dist/badge/root/badge-root.d.ts +14 -15
  10. package/dist/bar-chart/root/bar-chart-root.d.ts +40 -44
  11. package/dist/blockquote/root/blockquote-root.d.ts +5 -7
  12. package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +25 -33
  13. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +12 -11
  14. package/dist/button/root/button-root.d.ts +16 -17
  15. package/dist/button-group/root/button-group-root.d.ts +9 -10
  16. package/dist/callout/root/callout-root.d.ts +10 -15
  17. package/dist/canvas/edge/canvas-edge.d.ts +21 -21
  18. package/dist/canvas/node/canvas-node.d.ts +43 -45
  19. package/dist/canvas/root/canvas-root.d.ts +100 -99
  20. package/dist/card/root/card-root.d.ts +10 -12
  21. package/dist/carousel/root/carousel-root.d.ts +32 -33
  22. package/dist/chat/composer/chat-composer.d.ts +24 -26
  23. package/dist/chat/message/chat-message.d.ts +30 -33
  24. package/dist/chat/root/chat-root.d.ts +63 -80
  25. package/dist/checkbox/root/checkbox-root.d.ts +30 -32
  26. package/dist/checkbox-group/root/checkbox-group-root.d.ts +25 -25
  27. package/dist/code/root/code-root.d.ts +6 -10
  28. package/dist/code-block/root/code-block-root.d.ts +35 -48
  29. package/dist/color-input/root/color-input-root.d.ts +62 -56
  30. package/dist/color-input/root/color-input-root.js +3 -0
  31. package/dist/color-picker/root/color-picker-root.d.ts +61 -49
  32. package/dist/color-picker/root/color-picker-root.js +4 -0
  33. package/dist/combobox/root/combobox-root.d.ts +52 -53
  34. package/dist/command/root/command-root.d.ts +40 -40
  35. package/dist/command/root/command-root.js +1 -0
  36. package/dist/copy-button/root/copy-button-root.d.ts +24 -26
  37. package/dist/data-table/root/data-table-root.d.ts +106 -107
  38. package/dist/date-input/root/date-input-root.d.ts +54 -53
  39. package/dist/date-picker/root/date-picker-root.d.ts +25 -21
  40. package/dist/description-list/item/description-list-item.d.ts +7 -7
  41. package/dist/description-list/root/description-list-root.d.ts +10 -15
  42. package/dist/dialog/root/dialog-root.d.ts +22 -19
  43. package/dist/divider/root/divider-root.d.ts +12 -13
  44. package/dist/donut-chart/root/donut-chart-root.d.ts +19 -20
  45. package/dist/drawer/root/drawer-root.d.ts +19 -18
  46. package/dist/drilldown/item/drilldown-item.d.ts +28 -28
  47. package/dist/drilldown/root/drilldown-root.d.ts +22 -28
  48. package/dist/element-events.generated.js +19 -1
  49. package/dist/empty/root/empty-root.d.ts +16 -19
  50. package/dist/file-input/root/file-input-root.d.ts +32 -32
  51. package/dist/filter-input/chip/filter-chip.d.ts +36 -39
  52. package/dist/filter-input/field/filter-field.d.ts +25 -31
  53. package/dist/filter-input/menu/filter-menu.d.ts +50 -47
  54. package/dist/filter-input/operator/filter-operator.d.ts +15 -20
  55. package/dist/filter-input/root/filter-input-root.d.ts +80 -98
  56. package/dist/format-date/root/format-date-root.d.ts +19 -27
  57. package/dist/heatmap/root/heatmap-root.d.ts +40 -41
  58. package/dist/icon/root/icon-root.d.ts +21 -23
  59. package/dist/icon-button/root/icon-button-root.d.ts +12 -14
  60. package/dist/image/root/image-root.d.ts +30 -30
  61. package/dist/input/root/input-root.d.ts +36 -35
  62. package/dist/kbd/root/kbd-root.d.ts +13 -15
  63. package/dist/legend/root/legend-root.d.ts +18 -16
  64. package/dist/lightbox/item/lightbox-item.d.ts +13 -15
  65. package/dist/lightbox/root/lightbox-root.d.ts +40 -41
  66. package/dist/line-chart/root/line-chart-root.d.ts +20 -29
  67. package/dist/list/item/list-item.d.ts +17 -22
  68. package/dist/list/root/list-root.d.ts +6 -7
  69. package/dist/listbox/root/listbox-root.d.ts +42 -41
  70. package/dist/loader/root/loader-root.d.ts +16 -20
  71. package/dist/map/area/map-area.d.ts +48 -0
  72. package/dist/map/area/map-area.js +40 -0
  73. package/dist/map/buildings/map-buildings.d.ts +45 -0
  74. package/dist/map/buildings/map-buildings.js +37 -0
  75. package/dist/map/contours/map-contours.d.ts +61 -0
  76. package/dist/map/contours/map-contours.js +54 -0
  77. package/dist/map/index.d.ts +14 -0
  78. package/dist/map/index.js +10 -0
  79. package/dist/map/landcover/map-landcover.d.ts +47 -0
  80. package/dist/map/landcover/map-landcover.js +37 -0
  81. package/dist/map/marker/map-marker.d.ts +120 -0
  82. package/dist/map/marker/map-marker.js +109 -0
  83. package/dist/map/points/map-points.d.ts +139 -0
  84. package/dist/map/points/map-points.js +161 -0
  85. package/dist/map/position/map-position.d.ts +70 -0
  86. package/dist/map/position/map-position.js +89 -0
  87. package/dist/map/raster/map-raster.d.ts +84 -0
  88. package/dist/map/raster/map-raster.js +96 -0
  89. package/dist/map/root/map-root.d.ts +269 -52
  90. package/dist/map/root/map-root.js +473 -5
  91. package/dist/map/route/map-route.d.ts +73 -0
  92. package/dist/map/route/map-route.js +52 -0
  93. package/dist/map/terrain/map-terrain.d.ts +68 -0
  94. package/dist/map/terrain/map-terrain.js +58 -0
  95. package/dist/megamenu/root/megamenu-root.d.ts +27 -25
  96. package/dist/menu/item/menu-item.d.ts +30 -31
  97. package/dist/menu/root/menu-root.d.ts +25 -29
  98. package/dist/meter/root/meter-root.d.ts +22 -21
  99. package/dist/navigation/root/navigation-root.d.ts +13 -16
  100. package/dist/notifications/group/notification-group.d.ts +27 -28
  101. package/dist/notifications/notification/notification.d.ts +35 -42
  102. package/dist/notifications/root/notifications-root.d.ts +22 -24
  103. package/dist/number-input/root/number-input-root.d.ts +46 -50
  104. package/dist/object-inspector/root/object-inspector-root.d.ts +46 -58
  105. package/dist/option/group/option-group.d.ts +11 -11
  106. package/dist/option/root/option-root.d.ts +28 -33
  107. package/dist/outline/root/outline-root.d.ts +18 -17
  108. package/dist/pagination/root/pagination-root.d.ts +37 -39
  109. package/dist/pagination/size/pagination-size.d.ts +37 -43
  110. package/dist/pagination/summary/pagination-summary.d.ts +12 -14
  111. package/dist/pin-input/root/pin-input-root.d.ts +32 -38
  112. package/dist/popover/root/popover-root.d.ts +16 -21
  113. package/dist/progress/root/progress-root.d.ts +16 -14
  114. package/dist/qr-code/root/qr-code-root.d.ts +22 -25
  115. package/dist/quote/root/quote-root.d.ts +5 -6
  116. package/dist/radio/group/radio-group.d.ts +26 -28
  117. package/dist/radio/root/radio-root.d.ts +24 -28
  118. package/dist/rating/root/rating-root.d.ts +27 -30
  119. package/dist/scatter-chart/root/scatter-chart-root.d.ts +43 -55
  120. package/dist/scroll-area/root/scroll-area-root.d.ts +15 -21
  121. package/dist/select/root/select-root.d.ts +41 -44
  122. package/dist/skeleton/root/skeleton-root.d.ts +7 -8
  123. package/dist/skip-link/root/skip-link-root.d.ts +21 -28
  124. package/dist/slider/root/slider-root.d.ts +36 -39
  125. package/dist/sparkline/root/sparkline-root.d.ts +22 -28
  126. package/dist/speed-dial/item/speed-dial-item.d.ts +21 -21
  127. package/dist/speed-dial/root/speed-dial-root.d.ts +25 -27
  128. package/dist/splitter/root/splitter-root.d.ts +37 -41
  129. package/dist/stat/group/stat-group.d.ts +4 -4
  130. package/dist/stat/root/stat-root.d.ts +8 -9
  131. package/dist/steps/root/steps-root.d.ts +11 -14
  132. package/dist/steps/step/step.d.ts +22 -29
  133. package/dist/switch/root/switch-root.d.ts +20 -24
  134. package/dist/table/cell/table-cell.d.ts +18 -8
  135. package/dist/table/cell/table-cell.js +5 -1
  136. package/dist/table/column/table-column.d.ts +62 -55
  137. package/dist/table/root/table-root.d.ts +16 -17
  138. package/dist/table/row/table-row.d.ts +3 -3
  139. package/dist/tabs/panel/tab-panel.d.ts +3 -3
  140. package/dist/tabs/root/tabs-root.d.ts +19 -17
  141. package/dist/tabs/tab/tab.d.ts +6 -6
  142. package/dist/tag/root/tag-root.d.ts +11 -12
  143. package/dist/textarea/root/textarea-root.d.ts +29 -32
  144. package/dist/time-input/root/time-input-root.d.ts +70 -69
  145. package/dist/time-picker/root/time-picker-root.d.ts +58 -66
  146. package/dist/timeline/item/timeline-item.d.ts +18 -24
  147. package/dist/timeline/root/timeline-root.d.ts +13 -21
  148. package/dist/toast/item/toast-item.d.ts +21 -22
  149. package/dist/toast/root/toast-root.d.ts +18 -23
  150. package/dist/toggle/group/toggle-group.d.ts +23 -25
  151. package/dist/toggle/root/toggle-root.d.ts +8 -8
  152. package/dist/toolbar/root/toolbar-root.d.ts +7 -10
  153. package/dist/tooltip/root/tooltip-root.d.ts +41 -47
  154. package/dist/tour/root/tour-root.d.ts +24 -26
  155. package/dist/tour/stop/tour-stop.d.ts +39 -48
  156. package/dist/tree/item/tree-item.d.ts +23 -25
  157. package/dist/tree/root/tree-root.d.ts +13 -12
  158. package/dist/trend/root/trend-root.d.ts +18 -19
  159. package/dist/video/root/video-root.d.ts +108 -101
  160. package/dist/video-playlist/item/video-playlist-item.d.ts +23 -28
  161. package/dist/video-playlist/menu/video-playlist-menu.d.ts +17 -21
  162. package/dist/video-playlist/root/video-playlist-root.d.ts +21 -25
  163. package/dist/virtual-list/root/virtual-list-root.d.ts +27 -26
  164. package/package.json +5 -5
  165. package/types/jsx.d.ts +14011 -11983
  166. package/types/svelte.d.ts +10 -0
  167. package/types/vue.d.ts +2143 -1497
@@ -3,68 +3,62 @@ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
3
3
  import '../../option/index.js';
4
4
  import '../../select/index.js';
5
5
  /**
6
- * @summary Chooses how many items a page holds.
6
+ * @summary A control for choosing how many items each page shows.
7
7
  *
8
8
  * @description
9
- * Its own element beside `Pagination` rather than a slot inside it, for the
10
- * reason `Pagination.Summary` is: a footer's direction and order are the
11
- * consumer's, and a control that can only sit at one end of one row has taken
12
- * that decision for them.
9
+ * A separate element that you place beside `Pagination`, like
10
+ * `Pagination.Summary`, so you choose the direction and order of your footer.
13
11
  *
14
- * **`Select`, not a native `<select>`.** Two dropdowns identical closed and
15
- * different open meet each other in the same footer as a table's filters. The
16
- * caret is `Select`'s rather than a color literal baked into a data URI,
17
- * because a background image cannot read `currentColor`, and the label is a
18
- * real `<label for>` against the trigger's own id.
12
+ * It uses `Select`, so it matches a table's filter dropdowns in the same
13
+ * footer, both open and closed. The caret is `Select`'s, so it follows
14
+ * `currentColor`, and the label is a real `<label for>` pointing at the
15
+ * trigger's id.
19
16
  *
20
- * **The label sits on the row, not above it.** `Select`'s host is a column, and
21
- * an outer-tree rule beats a `:host` rule, so turning it into a row needs no
22
- * property on `Select` and nothing written into the consumer's markup.
17
+ * The label sits on the same row as the select. `Select`'s host is a column,
18
+ * and an outer-tree rule overrides a `:host` rule, so the row layout needs no
19
+ * property on `Select` and nothing added to your markup.
23
20
  *
24
- * **An empty `sizes` renders nothing**, rather than falling back to the
25
- * built-in list, which would be a component overruling a consumer who said
26
- * "none". Same rule as `Pagination` over a single page, and reported the same
27
- * way, through `ElementInternals.states` rather than an attribute the server
28
- * never wrote.
21
+ * An empty `sizes` renders nothing and does not fall back to the built-in list.
22
+ * `Pagination` does the same with a single page, and both report it through
23
+ * `ElementInternals.states`.
29
24
  *
30
- * `value` is the size the control holds and `default-value` is what the markup
31
- * declared.
32
- * Changing it announces `helix-before-change`; re-querying and moving back to
33
- * page one is the consumer's, because only they know whether the reader's
34
- * position should survive it.
25
+ * `value` is the current size, and `default-value` is the size from the markup.
26
+ * Changing it dispatches `helix-before-change`. Re-querying and returning to
27
+ * page one is up to you, because only you know whether the current position
28
+ * should be kept.
35
29
  *
36
30
  * @since 0.1.0
37
31
  * @status stable
38
32
  * @aliases Page size, Rows per page
39
33
  * @documentation https://fusion.dev/helix/components/pagination
40
34
  *
41
- * @event {HelixBeforeChangeEvent} helix-before-change - Fired before the size changes, and cancelable. The only way to refuse one.
35
+ * @event {HelixBeforeChangeEvent} helix-before-change - Fired before the size changes, and cancelable. Canceling it is the only way to stop a size change.
42
36
  *
43
37
  * @csspart control - The select.
44
- * @csspart control-feedback - What is wrong with it.
38
+ * @csspart control-feedback - The message that says what is wrong with the value.
45
39
  * @csspart control-hint - Help under the trigger.
46
- * @csspart control-indicator - The caret saying the control opens.
47
- * @csspart control-label - The words beside the number.
48
- * @csspart control-listbox - The list inside it.
49
- * @csspart control-listbox-empty - Shown when a filter has hidden everything.
50
- * @csspart control-listbox-feedback - What is wrong with the list.
51
- * @csspart control-listbox-filter-icon - The mark beside the filter field.
52
- * @csspart control-listbox-filter-mark - The glyph beside the filter field, where none is slotted.
40
+ * @csspart control-indicator - The caret that shows the control opens.
41
+ * @csspart control-label - The label beside the number.
42
+ * @csspart control-listbox - The list inside the panel.
43
+ * @csspart control-listbox-empty - The text shown when the filter hides every option.
44
+ * @csspart control-listbox-feedback - The inner list's message that says what is wrong with the value.
45
+ * @csspart control-listbox-filter-icon - The icon beside the filter field.
46
+ * @csspart control-listbox-filter-mark - The default icon beside the filter field, shown when none is slotted.
53
47
  * @csspart control-listbox-hint - Help under the list.
54
- * @csspart control-listbox-items - The list itself.
55
- * @csspart control-listbox-label - The question, over the list.
56
- * @csspart control-listbox-live - The inner listbox's `live`, the region a screen reader hears its empty and loading lines from.
57
- * @csspart control-listbox-loading - Shown while the options are still on their way.
58
- * @csspart control-listbox-search - The region holding the field that narrows the list.
59
- * @csspart control-listbox-search-field - The field itself.
48
+ * @csspart control-listbox-items - The list of options.
49
+ * @csspart control-listbox-label - The label above the list.
50
+ * @csspart control-listbox-live - The inner list's `live` part, the region screen readers announce its empty and loading text from.
51
+ * @csspart control-listbox-loading - The text shown while the options load.
52
+ * @csspart control-listbox-search - The region that holds the filter field.
53
+ * @csspart control-listbox-search-field - The filter field.
60
54
  * @csspart control-surface - The floating panel.
61
- * @csspart control-trigger - The closed control, which says what size is chosen.
55
+ * @csspart control-trigger - The closed control, which shows the chosen size.
62
56
  * @csspart control-value - The chosen size inside the trigger.
63
57
  * @csspart option - One size on offer.
64
58
  * @csspart option-description - The caption under the number, when there is one.
65
59
  * @csspart option-item - The row.
66
60
  * @csspart option-item-active - The row the keyboard is on.
67
- * @csspart option-item-selected - The row of the size chosen.
61
+ * @csspart option-item-selected - The row of the chosen size.
68
62
  * @csspart option-label - The number.
69
63
  * @csspart option-text - The number and the caption, as one column.
70
64
  *
@@ -72,11 +66,11 @@ import '../../select/index.js';
72
66
  */
73
67
  export declare class HelixHeadlessPaginationSize extends HelixElement {
74
68
  /**
75
- * Size to start on, where nothing declared one.
69
+ * The size to start on when `value` is not set.
76
70
  */
77
71
  defaultValue: number;
78
72
  /**
79
- * The words beside the control.
73
+ * The label beside the control.
80
74
  */
81
75
  label: string;
82
76
  /**
@@ -94,7 +88,7 @@ export declare class HelixHeadlessPaginationSize extends HelixElement {
94
88
  */
95
89
  sizes: string;
96
90
  /**
97
- * The size in force.
91
+ * The current page size.
98
92
  *
99
93
  * Reading gives the real one; writing declares it the consumer's, and
100
94
  * `default-value` seeds one this element owns. Same accessor pair as
@@ -1,22 +1,19 @@
1
1
  import { HelixElement } from '@fusion.dev/helix-core';
2
2
  import { type TemplateResult } from 'lit';
3
3
  /**
4
- * @summary Reads out which items of how many are on show.
4
+ * @summary Text that shows which items are on the current page, out of the total.
5
5
  *
6
6
  * @description
7
- * Its own element rather than a part of `Pagination`, so a consumer decides
8
- * where it goes: above, below, in a table's caption, or on the other side of
9
- * the page. Inside the run it could only ever be at one end of one row.
7
+ * A separate element from `Pagination`, so you decide where the count goes:
8
+ * above, below, in a table caption, or elsewhere on the page.
10
9
  *
11
- * **It repeats `page`, `page-size` and `total`, and the cost of that is skew.**
12
- * Those three come from the consumer's own query, so writing them on two
13
- * elements is one variable used twice; what it risks is the two disagreeing.
10
+ * You set `page`, `page-size`, and `total` on both this element and
11
+ * `Pagination`. They come from your own query, so use the same values for both
12
+ * and the two elements agree.
14
13
  *
15
- * **Nothing removes that at this level, and it was measured.** A coordinating
16
- * root can only reach light-DOM children by writing attributes onto them, which
17
- * a framework reports as a hydration error, or through context, which is dead
18
- * on a server: `@lit/context` subscribes from `connectedCallback`, and Lit SSR
19
- * does not call it.
14
+ * A shared parent cannot pass the values down. Writing attributes onto light
15
+ * DOM children causes hydration errors in frameworks, and `@lit/context`
16
+ * subscribes in `connectedCallback`, which Lit SSR does not call.
20
17
  *
21
18
  * @since 0.1.0
22
19
  * @status stable
@@ -25,7 +22,8 @@ import { type TemplateResult } from 'lit';
25
22
  */
26
23
  export declare class HelixHeadlessPaginationSummary extends HelixElement {
27
24
  /**
28
- * The reading, with `{from}`, `{to}` and `{total}` filled in.
25
+ * The text shown. `{from}`, `{to}`, and `{total}` are replaced with the first
26
+ * item, the last item, and the item count.
29
27
  *
30
28
  * A template rather than a prefix and a suffix, because word order is not
31
29
  * universal: `format="{total} 件中 {from}-{to} 件"` is one attribute here and
@@ -47,7 +45,7 @@ export declare class HelixHeadlessPaginationSummary extends HelixElement {
47
45
  */
48
46
  locale: string;
49
47
  /**
50
- * The page on show, one-based.
48
+ * The current page, counting from one.
51
49
  */
52
50
  page: number;
53
51
  /**
@@ -4,34 +4,28 @@ import { type PropertyValues, type TemplateResult } from 'lit';
4
4
  export type PinType = 'alphanumeric' | 'numeric' | 'text';
5
5
  declare const HelixHeadlessPinInput_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
6
6
  /**
7
- * @summary A short code, one character to a box.
7
+ * @summary A field for a short code, with one box for each character.
8
8
  *
9
9
  * @description
10
- * **One `<input>` per cell, rather than one input drawn as cells.** A single
11
- * field autofills perfectly and needs a drawn caret nobody can style well;
12
- * separate fields give every box a real focus ring, a real caret and a real tab
13
- * stop for free. Autofill's gap is closed below rather than lived with.
10
+ * Each cell is its own `<input>`, so every box has a real focus ring, caret,
11
+ * and tab stop.
14
12
  *
15
- * **Anything longer than one character is treated as a paste, wherever it
16
- * lands.** That covers the obvious case and two that are not: a browser
17
- * autofilling an SMS code drops the whole thing into whichever box is focused,
18
- * and a password manager does the same. So a six-character arrival in cell three
19
- * fills from cell three rather than being truncated to its first character,
20
- * which is what a per-cell `maxlength` would have done silently.
13
+ * Input longer than one character is treated as a paste, in any cell. This
14
+ * covers pasting, a browser autofilling an SMS code, and a password manager,
15
+ * which all put the whole code into the focused box. A six-character code that
16
+ * arrives in cell three fills from cell three.
21
17
  *
22
- * **The code is one value to a form.** The cells are inside a shadow root and
23
- * submit nothing on their own; the host is form-associated and reports the
24
- * joined string, which is also what carries validity and answers a reset.
18
+ * The code is one value to a form. The cells are in a shadow root and submit
19
+ * nothing. The host is form-associated and submits the joined string, which
20
+ * also carries validity and responds to a form reset.
25
21
  *
26
- * `autocomplete="one-time-code"` is on the first cell only. It is a hint about
27
- * the field as a whole, and repeating it on six boxes offers a browser six
28
- * places to put one code.
22
+ * Only the first cell has `autocomplete="one-time-code"`, because the hint
23
+ * applies to the whole field.
29
24
  *
30
- * **Left to right on every page.** A code is read the way a phone number is,
31
- * one character after another from the left, in Arabic and Hebrew as in
32
- * English, so the row carries `dir="ltr"`: the first box is the leftmost, a
33
- * paste fills rightward and the right arrow moves on. The label, the hint and
34
- * the feedback are words and keep the page's direction.
25
+ * The row of cells always runs left to right, with `dir="ltr"`, including in
26
+ * Arabic and Hebrew. The first box is the leftmost, a paste fills to the right,
27
+ * and the right arrow moves to the next box. The label, hint, and feedback
28
+ * follow the page's direction.
35
29
  *
36
30
  * @since 0.1.0
37
31
  * @status stable
@@ -39,25 +33,25 @@ declare const HelixHeadlessPinInput_base: (new (...args: any[]) => import("@fusi
39
33
  * @aliases PinField, OTP, One-time code, Verification code, InputPin
40
34
  * @documentation https://fusion.dev/helix/components/pin-input
41
35
  *
42
- * @event {Event} change - Announced with a filled code, and when an edited one loses focus.
43
- * @event {HelixBeforeChangeEvent} helix-before-change - Fired as the code changes, and cancelable.
44
- * @event {HelixCompleteEvent} helix-complete - Fired when the last box is filled.
45
- * @event {Event} input - Announced once the value has moved.
36
+ * @event {Event} change - The code was filled, or an edited code lost focus.
37
+ * @event {HelixBeforeChangeEvent} helix-before-change - The code is about to change. Cancelable.
38
+ * @event {HelixCompleteEvent} helix-complete - The last box was filled.
39
+ * @event {Event} input - The code changed.
46
40
  *
47
41
  * @csspart cell - One box.
48
- * @csspart feedback - What is wrong with it.
49
- * @csspart field - The row of boxes, left to right on every page.
50
- * @csspart hint - Help under the boxes, while nothing is wrong.
51
- * @csspart label - The question, over the boxes.
42
+ * @csspart feedback - The message that says what is wrong with the code.
43
+ * @csspart field - The row of boxes, ordered left to right in every language.
44
+ * @csspart hint - The help under the boxes, shown while there is no feedback.
45
+ * @csspart label - The label above the boxes.
52
46
  *
53
- * @cssstate invalid - While there is feedback to show: the platform's verdict, or the consumer's `feedback`.
47
+ * @cssstate invalid - The control has an error to show, from the browser's validation or from your `feedback`.
54
48
  */
55
49
  export declare class HelixHeadlessPinInput extends HelixHeadlessPinInput_base {
56
50
  protected readonly aria: AriaForwardController;
57
51
  /** Typed or dragged, so every edit is announced. See `announcesInput`. */
58
52
  protected readonly announcesInput = true;
59
53
  /**
60
- * What the browser may autofill, reaching the first cell only.
54
+ * The autofill hint for the browser, set on the first box only.
61
55
  *
62
56
  * `one-time-code` is why this defaults to anything at all: it is the token
63
57
  * that lets a phone offer the code out of a message. Later cells stay `off`
@@ -90,16 +84,16 @@ export declare class HelixHeadlessPinInput extends HelixHeadlessPinInput_base {
90
84
  */
91
85
  placeholder: string;
92
86
  /**
93
- * Whether the boxes refuse input while still submitting their value.
87
+ * Whether the boxes block input. A read-only code still submits its value.
94
88
  */
95
89
  readOnly: boolean;
96
90
  /**
97
- * What a reader is told when the code is started and not finished, with
98
- * `{length}` filled in. Absent is the control's own sentence, in English.
91
+ * The message shown when the code is started and not finished, with
92
+ * `{length}` filled in. When it is unset, an English default is shown.
99
93
  */
100
94
  tooShortMessage?: string;
101
95
  /**
102
- * What a box accepts, which decides the keyboard a phone offers.
96
+ * The characters a box accepts, which also sets the keyboard a phone shows.
103
97
  *
104
98
  * `numeric` and `alphanumeric` also refuse anything else on the way in,
105
99
  * because a code that is digits is digits: letting a letter into a box a
@@ -272,9 +266,9 @@ export declare class HelixHeadlessPinInput extends HelixHeadlessPinInput_base {
272
266
  * reported every case valid because nothing had set that flag.
273
267
  */
274
268
  private sync;
275
- /** Puts the caret in the first empty box, which is where a reader resumes. */
269
+ /** Puts the caret in the first empty box. */
276
270
  focus(options?: FocusOptions): void;
277
- /** Empties every box and returns to the first. */
271
+ /** Empties every box and moves focus to the first. */
278
272
  clear(): void;
279
273
  protected firstUpdated(changed: PropertyValues): void;
280
274
  protected updated(changed: PropertyValues): void;
@@ -2,29 +2,24 @@ import { CommandController, HelixElement, type Placement } from '@fusion.dev/hel
2
2
  import { type PropertyValues, type TemplateResult } from 'lit';
3
3
  declare const HelixHeadlessPopover_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerOpenInterface) & typeof HelixElement;
4
4
  /**
5
- * @summary A panel that opens against a trigger and holds anything.
5
+ * @summary A panel that opens next to its trigger and holds any content.
6
6
  *
7
7
  * @description
8
- * The general case the specific overlays are versions of. `Menu` holds
9
- * commands, `Select` holds options, `Tooltip` holds a description; this holds
10
- * whatever the consumer puts in it, which is why it has no keyboard of its own
11
- * and no opinion about what is inside.
8
+ * Popover is the general overlay that the specific ones build on. `Menu` holds
9
+ * commands, `Select` holds options, and `Tooltip` holds a description. Popover
10
+ * holds any content you put in it, so it has no keyboard handling of its own.
12
11
  *
13
- * **The trigger is slotted and stays the consumer's own element.** Nothing is
14
- * written onto it: no `aria-expanded`, no `id`, no `tabindex`. A component that
15
- * decorates a consumer's markup after upgrading is a component whose output a
16
- * React consumer's hydration disagrees with, and the attribute they would care
17
- * about most is the one that changes on every open.
12
+ * The trigger is slotted and stays your own element. The popover writes nothing
13
+ * onto it, including `aria-expanded`, `id`, and `tabindex`, because changing
14
+ * your markup after upgrade causes a React hydration mismatch.
18
15
  *
19
- * **The panel is in the top layer**, through the popover API, so it clears any
20
- * ancestor with `overflow: hidden` without a `z-index` fight. `position: fixed`
21
- * does not do that: it is still clipped by `overflow`, and re-anchored entirely
22
- * by an ancestor carrying `transform`, `filter` or `contain`.
16
+ * The panel is in the top layer through the popover API, so it needs no
17
+ * `z-index`, and an ancestor with `overflow: hidden`, `transform`, `filter`, or
18
+ * `contain` does not clip or move it.
23
19
  *
24
- * **It opens on click, and from a command.** `command="--show"` and its
25
- * siblings work here the way they do on `Dialog` and `Drawer`, so a trigger
26
- * elsewhere on the page can open it without a line of script and without being
27
- * slotted into it.
20
+ * It opens on click and from a command. `command="--show"` and the related
21
+ * commands work as they do on `Dialog` and `Drawer`, so a button anywhere on
22
+ * the page can open the popover with no script.
28
23
  *
29
24
  * @since 0.1.0
30
25
  * @status stable
@@ -33,11 +28,11 @@ declare const HelixHeadlessPopover_base: (new (...args: any[]) => import("@fusio
33
28
  * @documentation https://fusion.dev/helix/components/popover
34
29
  *
35
30
  * @slot - The contents of the panel.
36
- * @slot trigger - What opens it.
31
+ * @slot trigger - The element that opens the panel.
37
32
  *
38
33
  * @event {HelixBeforeCloseEvent} helix-before-close - Fired before it closes, and cancelable.
39
34
  * @event {HelixBeforeOpenEvent} helix-before-open - Fired before it opens, and cancelable.
40
- * @event {Event} toggle - Says the state moved, carrying `newState` and `oldState`.
35
+ * @event {Event} toggle - Fired after the panel opens or closes, with `newState` and `oldState`.
41
36
  *
42
37
  * @csspart content - The scrolling region inside the panel.
43
38
  * @csspart popover - The panel.
@@ -46,7 +41,7 @@ declare const HelixHeadlessPopover_base: (new (...args: any[]) => import("@fusio
46
41
  */
47
42
  export declare class HelixHeadlessPopover extends HelixHeadlessPopover_base {
48
43
  /**
49
- * Accessible name for the panel.
44
+ * The panel's name, read by screen readers.
50
45
  */
51
46
  label: string;
52
47
  /**
@@ -1,19 +1,19 @@
1
1
  import { HelixElement } from '@fusion.dev/helix-core';
2
2
  import { type PropertyValues, type TemplateResult } from 'lit';
3
3
  /**
4
- * @summary Shows how far along a task is, when that is known.
4
+ * @summary A bar or ring that shows how far along a task is.
5
5
  *
6
6
  * @description
7
- * Determinate by default, and `indeterminate` for a task whose total is not
8
- * known yet. `Loader` is still right where the wait is short or has no place of
9
- * its own on the page.
7
+ * Determinate by default. Set `indeterminate` for a task whose total is not
8
+ * known yet. Use `Loader` for a short wait or one with no place of its own on
9
+ * the page.
10
10
  *
11
- * A bar that fills at a made-up rate would be a bar that lies, so the
12
- * indeterminate one does not fill: it runs a segment across the track, which
13
- * says work is happening and claims no proportion. `aria-valuenow` is omitted
14
- * with it, which is the platform's own signal for the same thing.
11
+ * The indeterminate bar runs a segment across the track and does not fill, so
12
+ * it shows that work is happening without claiming a proportion.
13
+ * `aria-valuenow` is omitted in that state, which is the platform's signal for
14
+ * the same thing.
15
15
  *
16
- * **The fill is a fraction of the track, written as a custom property.**
16
+ * The fill is a fraction of the track, written as a custom property.
17
17
  *
18
18
  * @since 0.1.0
19
19
  * @status stable
@@ -21,16 +21,17 @@ import { type PropertyValues, type TemplateResult } from 'lit';
21
21
  * @aliases Progress bar, Loading bar
22
22
  * @documentation https://fusion.dev/helix/components/progress
23
23
  *
24
- * @csspart groove - The unfilled circle, under the ring's own sweep.
25
- * @csspart indicator - The part of it that is done.
24
+ * @csspart groove - The unfilled circle under the ring's filled arc.
25
+ * @csspart indicator - The filled part that shows the work done.
26
26
  * @csspart track - The full length the work is measured against.
27
- * @csspart value - The reading beside the bar, under `show-value`.
27
+ * @csspart value - The value shown beside the bar when `show-value` is set.
28
28
  *
29
29
  * @cssproperty --progress-fraction - The value as a fraction of the range, 0 to 1. Pinned to 1 while indeterminate.
30
30
  */
31
31
  export declare class HelixHeadlessProgress extends HelixElement {
32
32
  /**
33
- * Whether the work has a knowable end.
33
+ * Whether the length of the task is unknown. The bar then shows activity
34
+ * without a value.
34
35
  *
35
36
  * On the headless tier rather than as a treatment, because it is
36
37
  * semantics before it is a picture: a progressbar with no `aria-valuenow` is
@@ -86,7 +87,8 @@ export declare class HelixHeadlessProgress extends HelixElement {
86
87
  */
87
88
  value: number;
88
89
  /**
89
- * A reading for the value, where the number alone does not say enough.
90
+ * Text that describes the value when the number alone is not enough, such as
91
+ * "3 of 8 files".
90
92
  *
91
93
  * "3 of 8 files" rather than "37". Announced instead of the percentage, and
92
94
  * never instead of the value itself: `aria-valuenow` still carries the
@@ -5,30 +5,26 @@ export type QrCorrection = 'H' | 'L' | 'M' | 'Q';
5
5
  /** How the modules are drawn. */
6
6
  export type QrStyle = 'dots' | 'rounded' | 'square';
7
7
  /**
8
- * @summary Encodes a short piece of text as a scannable square.
8
+ * @summary A scannable QR code for a short piece of text.
9
9
  *
10
10
  * @description
11
- * **The picture is one `<path>`, not a grid of squares.** A code of any useful
12
- * length is a thousand modules, and drawing each as its own rect is a thousand
13
- * nodes for one image. Runs of adjacent dark modules are joined, so a row of
14
- * eight is one horizontal move rather than eight squares.
11
+ * The code is drawn as one `<path>`. Runs of adjacent dark modules are joined,
12
+ * so a row of eight is one horizontal move. A code of useful length has about a
13
+ * thousand modules, and an element for each would be a thousand nodes for one
14
+ * image.
15
15
  *
16
- * **It is an image and says so.** `role="img"` with a name, because what a
17
- * reader with a screen reader needs is what the code is *for*, and no amount of
18
- * describing the pattern gives them that. Where nothing is passed the value
19
- * itself is the name, which is right far more often than it looks: most codes
20
- * hold a URL, and a URL read aloud is the destination.
16
+ * The element has `role="img"` and an accessible name. Set the name to what the
17
+ * code is for. When you pass no name, the value is the name. Most codes hold a
18
+ * URL, and a URL read aloud gives the destination.
21
19
  *
22
- * **The quiet zone is part of the code.** Four modules of margin are required
23
- * by the specification, not a design choice, and a scanner will refuse a code
24
- * that is cropped to its edge. It is drawn inside the `viewBox` so it survives
25
- * any size the component is given, including one set in CSS.
20
+ * The quiet zone of four modules is required by the specification, and a
21
+ * scanner rejects a code cropped to its edge. It is drawn inside the `viewBox`,
22
+ * so it stays at any size, including a size set in CSS.
26
23
  *
27
- * `correction` is what buys the middle slot. A code at `H` can lose thirty
28
- * percent of itself and still read, which is what makes covering the center
29
- * with a mark safe; at `L` the same mark makes the code unscannable. That is
30
- * why the slot exists on the same element as the property, and why the default
31
- * moves when the slot is filled.
24
+ * `correction` sets how much of the code can be lost. At `H` a code can lose
25
+ * thirty percent and still scan, so a mark in the center slot is safe. At `L`
26
+ * the same mark makes the code unscannable. The default is `M`, and `H` when the
27
+ * `logo` slot is filled.
32
28
  *
33
29
  * @since 0.1.0
34
30
  * @status stable
@@ -36,16 +32,17 @@ export type QrStyle = 'dots' | 'rounded' | 'square';
36
32
  * @aliases QR, Barcode, Scan code
37
33
  * @documentation https://fusion.dev/helix/components/qr-code
38
34
  *
39
- * @slot logo - A mark for the center, which only reads at a high correction.
35
+ * @slot logo - A logo for the center. A code with a logo scans only at a high correction level.
40
36
  *
41
- * @csspart code - The square itself.
37
+ * @csspart code - The square code image.
42
38
  * @csspart finders - The three corner squares, which can take their own color.
43
- * @csspart logo - The box holding the center mark.
44
- * @csspart modules - Everything but the three corner squares.
39
+ * @csspart logo - The box that holds the center logo.
40
+ * @csspart modules - Every module except the three corner squares.
45
41
  */
46
42
  export declare class HelixHeadlessQrCode extends HelixElement {
47
43
  /**
48
- * How much of the code can be lost and still read.
44
+ * The error correction level, which sets how much of the code can be lost
45
+ * and still scan.
49
46
  *
50
47
  * `M` by default, which is the level almost every code in the world uses and
51
48
  * costs about fifteen percent redundancy. `H` where a mark covers the center,
@@ -55,7 +52,7 @@ export declare class HelixHeadlessQrCode extends HelixElement {
55
52
  */
56
53
  correction?: QrCorrection;
57
54
  /**
58
- * What the image is called.
55
+ * The image's accessible name.
59
56
  *
60
57
  * Falling back to the value is deliberate: a code almost always holds a URL,
61
58
  * and a URL is a better name than "QR code" for a reader who cannot see it.
@@ -4,13 +4,12 @@ import { type TemplateResult } from 'lit';
4
4
  * @summary A short quotation, set inline with the text around it.
5
5
  *
6
6
  * @description
7
- * Renders a real `<q>`, which is what supplies the quotation marks: the browser
8
- * inserts the right ones for the document's language, and nests them correctly
9
- * when one quotation sits inside another. Typing the marks into the content
10
- * instead gets both of those wrong in every language but one.
7
+ * Renders a real `<q>`, so the browser supplies the quotation marks. It inserts
8
+ * the correct marks for the document's language and nests them correctly when
9
+ * one quotation sits inside another. Do not type quotation marks into the
10
+ * content.
11
11
  *
12
- * A passage set off from the prose rather than run inside it is a blockquote,
13
- * which is a different element for a different job.
12
+ * For a passage set off from the surrounding text, use a blockquote.
14
13
  *
15
14
  * @since 0.1.0
16
15
  * @status stable
@@ -3,27 +3,25 @@ import { type PropertyValues, type TemplateResult } from 'lit';
3
3
  import { HelixHeadlessRadio } from '../root/radio-root.js';
4
4
  declare const HelixHeadlessRadioGroup_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
5
5
  /**
6
- * @summary A set of choices where exactly one is the answer.
6
+ * @summary A set of radios where exactly one can be chosen.
7
7
  *
8
8
  * @description
9
- * **The group is the control, and the radios are its options.** This is the
10
- * asymmetry with checkboxes and it comes from what a form submits: a set of
11
- * checkboxes is several answers and each box submits its own, while a set of
12
- * radios is one answer, so the group owns the `name`, the `value` and the
13
- * validity, and a lone radio outside a group is not a control at all.
9
+ * The group is the form control, and the radios are its options. A set of
10
+ * radios submits one answer, so the group owns the `name`, the `value`, and the
11
+ * validity. A radio outside a group is not a control. Checkboxes work the other
12
+ * way: each checkbox submits its own answer.
14
13
  *
15
- * Which is also why `MixinField` lands here and not on `Radio`: the label, the
16
- * hint and the message are about the question, and the question is the set.
14
+ * `MixinField` applies to the group for the same reason. The label, the hint,
15
+ * and the message describe the question, and the question belongs to the set.
17
16
  *
18
- * Selection travels up and state travels down. An item announces that it was
19
- * chosen, the group decides whether that stands, and the group writes
20
- * `selected` onto every item. Nothing sets itself, so there is one answer to
21
- * "which one is on" rather than one per item.
17
+ * Selection moves up and state moves down. A radio dispatches an event when it
18
+ * is chosen, the group determines whether the choice stands, and the group
19
+ * writes `selected` onto every radio. The group is the one source of which
20
+ * radio is on.
22
21
  *
23
- * `value` and `defaultValue` are separate for the reason `checked` and
24
- * `defaultChecked` are: `value` is the answer now, `defaultValue` is what the
25
- * markup asked for, which is where a reset returns and is gone the moment
26
- * anything is chosen.
22
+ * `value` is the current answer. `defaultValue` is what the markup declared:
23
+ * the value until something is chosen, and where a reset returns. The two work
24
+ * like `checked` and `defaultChecked`.
27
25
  *
28
26
  * @since 0.1.0
29
27
  * @status stable
@@ -31,24 +29,24 @@ declare const HelixHeadlessRadioGroup_base: (new (...args: any[]) => import("@fu
31
29
  * @documentation https://fusion.dev/helix/components/radio
32
30
  *
33
31
  * @slot - The radios.
34
- * @slot hint - Richer than a string.
35
- * @slot label - Richer than a string, where the question is more than one.
32
+ * @slot hint - The help text under the group, for content richer than a string.
33
+ * @slot label - The group's label, for a question that needs more than a string.
36
34
  *
37
- * @event {Event} change - Announced once the value has moved.
38
- * @event {HelixBeforeChangeEvent} helix-before-change - Fired when the answer changes, and cancelable.
39
- * @event {HelixSelectEvent} helix-select - Fired when an answer is chosen. Dispatched by the radio and listened for here, because the group is what a consumer holds. Cancelable: refusing it takes the decision and nothing moves.
40
- * @event {Event} input - Announced once the value has moved.
35
+ * @event {Event} change - Fired after the value changes.
36
+ * @event {HelixBeforeChangeEvent} helix-before-change - Fired when the choice changes. Cancelable: call `preventDefault()` to keep the current choice.
37
+ * @event {HelixSelectEvent} helix-select - Fired when a radio is chosen. The radio sends it, and you listen for it on the group. Cancelable: call `preventDefault()` to keep the current choice.
38
+ * @event {Event} input - Fired after the value changes.
41
39
  *
42
- * @csspart feedback - What is wrong with it.
43
- * @csspart hint - Help under the set.
44
- * @csspart items - The choices, which is what `orientation` lays out.
45
- * @csspart label - The question, over the set.
40
+ * @csspart feedback - The error message under the group.
41
+ * @csspart hint - The help text under the group.
42
+ * @csspart items - The container of the choices, laid out by `orientation`.
43
+ * @csspart label - The label above the group.
46
44
  *
47
- * @cssstate invalid - While there is feedback to show: the platform's verdict, or the consumer's `feedback`.
45
+ * @cssstate invalid - The group has an error to show, from the browser's validation or from your `feedback`.
48
46
  */
49
47
  export declare class HelixHeadlessRadioGroup extends HelixHeadlessRadioGroup_base {
50
48
  /**
51
- * Which way the choices run. A column reads one line per answer.
49
+ * The direction the choices run. `vertical` puts one choice on each line.
52
50
  *
53
51
  * **Optional rather than defaulted, which is not a style preference.** A
54
52
  * reflecting property with a default writes its attribute onto every host the