@fusion.dev/helix-headless 0.168.0 → 0.170.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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix-headless",
3
3
  "description": "Headless component tier. Structure, accessibility, state, and form participation. No styling.",
4
- "version": "0.168.0",
4
+ "version": "0.170.0",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -49,13 +49,13 @@
49
49
  },
50
50
  "bugs": "https://github.com/project-fusion/fusion/issues",
51
51
  "dependencies": {
52
- "@fusion.dev/helix-core": "0.168.0",
53
- "@fusion.dev/helix-icons": "0.168.0",
52
+ "@fusion.dev/helix-core": "0.170.0",
53
+ "@fusion.dev/helix-icons": "0.170.0",
54
54
  "uqr": "^0.1.3"
55
55
  },
56
56
  "devDependencies": {
57
- "@fusion.dev/helix-cem": "0.168.0",
58
- "@fusion.dev/helix-testing": "0.168.0",
57
+ "@fusion.dev/helix-cem": "0.170.0",
58
+ "@fusion.dev/helix-testing": "0.170.0",
59
59
  "@fusion.dev/scripts": "0.0.0-dev",
60
60
  "@happy-dom/global-registrator": "^20.14.5",
61
61
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -1601,7 +1601,9 @@ Read-only to a consumer: it is a report rather than a setting, and the same
1601
1601
  report `Image` gives, for the same reason. `load` and `error` fire once, so
1602
1602
  a listener bound after the picture settled hears neither, which is the
1603
1603
  platform on an `<img>` too, and this is what that listener asks instead.
1604
- Mirrored to `data-status` rather than reflected, as `Image` explains. */
1604
+ Mirrored to `data-status` rather than reflected, as `Image` explains, once a
1605
+ picture has loaded or failed. An avatar with no `src` reports `error` here
1606
+ and as `:state(error)`, and writes no `data-status`. */
1605
1607
  status?: (HelixHeadlessAvatar["status"]) | undefined;
1606
1608
 
1607
1609
  /** Relayed from the image when it fails. */
@@ -1659,7 +1661,9 @@ Read-only to a consumer: it is a report rather than a setting, and the same
1659
1661
  report `Image` gives, for the same reason. `load` and `error` fire once, so
1660
1662
  a listener bound after the picture settled hears neither, which is the
1661
1663
  platform on an `<img>` too, and this is what that listener asks instead.
1662
- Mirrored to `data-status` rather than reflected, as `Image` explains. */
1664
+ Mirrored to `data-status` rather than reflected, as `Image` explains, once a
1665
+ picture has loaded or failed. An avatar with no `src` reports `error` here
1666
+ and as `:state(error)`, and writes no `data-status`. */
1663
1667
  "prop:status"?: (HelixHeadlessAvatar["status"]) | undefined;
1664
1668
  /** Relayed from the image when it fails. */
1665
1669
  "on:error"?: ((e: HelixHeadlessAvatarElementEvent) => void) | undefined;
@@ -21590,6 +21594,26 @@ second "Main". */
21590
21594
  for a header or a footer. The marker follows the current destination down
21591
21595
  the column as it does along the row. */
21592
21596
  orientation?: (HelixHeadlessNavigation["orientation"]) | undefined;
21597
+ /** How the destinations are drawn, with `Tabs`' three values and for the same
21598
+ reasons.
21599
+
21600
+ Unset is a pill under the current destination with nothing behind the row,
21601
+ for a bar inside other chrome. `underlined` is a rule under the row and a
21602
+ thicker one under the current destination, for a bar that heads a page, as
21603
+ a repository's or a project's sections do. `segmented` puts the pill in a
21604
+ framed, sunken track, for a short set that reads as one control.
21605
+
21606
+ **The same words as `Tabs`, because a reader cannot tell the two apart.**
21607
+ Navigation moves between pages and tabs between the panels of one page,
21608
+ and the bar looks the same either way. A console whose sections are pages
21609
+ could not draw them the way its underlined tabs were drawn.
21610
+
21611
+ Down a column, `underlined` stands the rule and the mark along the
21612
+ column's inline end.
21613
+
21614
+ Reflected and left unset by default, so the host carries nothing a
21615
+ consumer's server markup does not already have. */
21616
+ variant?: (HelixHeadlessNavigation["variant"]) | undefined;
21593
21617
  };
21594
21618
 
21595
21619
  export type HelixHeadlessNavigationSolidJsProps = {
@@ -21608,6 +21632,26 @@ second "Main". */
21608
21632
  for a header or a footer. The marker follows the current destination down
21609
21633
  the column as it does along the row. */
21610
21634
  "prop:orientation"?: (HelixHeadlessNavigation["orientation"]) | undefined;
21635
+ /** How the destinations are drawn, with `Tabs`' three values and for the same
21636
+ reasons.
21637
+
21638
+ Unset is a pill under the current destination with nothing behind the row,
21639
+ for a bar inside other chrome. `underlined` is a rule under the row and a
21640
+ thicker one under the current destination, for a bar that heads a page, as
21641
+ a repository's or a project's sections do. `segmented` puts the pill in a
21642
+ framed, sunken track, for a short set that reads as one control.
21643
+
21644
+ **The same words as `Tabs`, because a reader cannot tell the two apart.**
21645
+ Navigation moves between pages and tabs between the panels of one page,
21646
+ and the bar looks the same either way. A console whose sections are pages
21647
+ could not draw them the way its underlined tabs were drawn.
21648
+
21649
+ Down a column, `underlined` stands the rule and the mark along the
21650
+ column's inline end.
21651
+
21652
+ Reflected and left unset by default, so the host carries nothing a
21653
+ consumer's server markup does not already have. */
21654
+ "prop:variant"?: (HelixHeadlessNavigation["variant"]) | undefined;
21611
21655
 
21612
21656
  /** Set the innerHTML of the element */
21613
21657
  innerHTML?: (string) | undefined;
@@ -37510,7 +37554,9 @@ export type CustomElements = {
37510
37554
  * report `Image` gives, for the same reason. `load` and `error` fire once, so
37511
37555
  * a listener bound after the picture settled hears neither, which is the
37512
37556
  * platform on an `<img>` too, and this is what that listener asks instead.
37513
- * Mirrored to `data-status` rather than reflected, as `Image` explains. (property only)
37557
+ * Mirrored to `data-status` rather than reflected, as `Image` explains, once a
37558
+ * picture has loaded or failed. An avatar with no `src` reports `error` here
37559
+ * and as `:state(error)`, and writes no `data-status`. (property only)
37514
37560
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
37515
37561
  *
37516
37562
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -43199,10 +43245,15 @@ export type CustomElements = {
43199
43245
  *
43200
43246
  * Sort and filter apply to the whole set, including the rows on other pages.
43201
43247
  *
43202
- * **The cell values do not server-render.** The headings and the row elements
43203
- * do. Reading a cell needs the columns, and Lit SSR does not pass the column
43204
- * children to this element, so a crawler sees an empty table of the right
43205
- * shape. Use `Table` when the served HTML has to carry the values.
43248
+ * **Write the first page as rows, so the served HTML carries the values.** The
43249
+ * table reads each cell from its column, and a server does not pass the column
43250
+ * children to this element, so on its own it serves the headings and no values.
43251
+ * Write the first page under the columns as `TableRow` and `TableCell`
43252
+ * elements, in the table's sort and page size and formatted as its columns draw
43253
+ * them. The table shows your rows until `rows` holds a row, then draws its own
43254
+ * in their place and leaves yours in the page, unshown. A development build
43255
+ * warns when the two differ. In React, map the first page of the same array in
43256
+ * the same server component.
43206
43257
  *
43207
43258
  * `selectable` adds a column of checkboxes, keyed on `row-key`:
43208
43259
  *
@@ -43552,7 +43603,7 @@ export type CustomElements = {
43552
43603
  *
43553
43604
  * Areas where markup can be added to the component.
43554
43605
  *
43555
- * - `(default)`: The columns, as `TableColumn` elements.
43606
+ * - `(default)`: The columns, as `TableColumn` elements, and the first page served as `TableRow` elements, which show until `rows` holds a row.
43556
43607
  * - `empty`: Content shown when there are no rows to show and none are loading, such as a picture and a link. Falls back to `empty-text`, which the live region still says.
43557
43608
  * - `error`: Content shown while `error-text` is set, such as a button that tries again. Falls back to `error-text`, which the live region still says.
43558
43609
  * - `footer`: Content below the grid. It replaces the built-in pagination.
@@ -52832,6 +52883,25 @@ export type CustomElements = {
52832
52883
  * - `orientation`: Stacks the destinations in a column, for a sidebar, where unset is a row
52833
52884
  * for a header or a footer. The marker follows the current destination down
52834
52885
  * the column as it does along the row.
52886
+ * - `variant`: How the destinations are drawn, with `Tabs`' three values and for the same
52887
+ * reasons.
52888
+ *
52889
+ * Unset is a pill under the current destination with nothing behind the row,
52890
+ * for a bar inside other chrome. `underlined` is a rule under the row and a
52891
+ * thicker one under the current destination, for a bar that heads a page, as
52892
+ * a repository's or a project's sections do. `segmented` puts the pill in a
52893
+ * framed, sunken track, for a short set that reads as one control.
52894
+ *
52895
+ * **The same words as `Tabs`, because a reader cannot tell the two apart.**
52896
+ * Navigation moves between pages and tabs between the panels of one page,
52897
+ * and the bar looks the same either way. A console whose sections are pages
52898
+ * could not draw them the way its underlined tabs were drawn.
52899
+ *
52900
+ * Down a column, `underlined` stands the rule and the mark along the
52901
+ * column's inline end.
52902
+ *
52903
+ * Reflected and left unset by default, so the host carries nothing a
52904
+ * consumer's server markup does not already have.
52835
52905
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
52836
52906
  *
52837
52907
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -66458,7 +66528,9 @@ export type CustomElementsSolidJs = {
66458
66528
  * report `Image` gives, for the same reason. `load` and `error` fire once, so
66459
66529
  * a listener bound after the picture settled hears neither, which is the
66460
66530
  * platform on an `<img>` too, and this is what that listener asks instead.
66461
- * Mirrored to `data-status` rather than reflected, as `Image` explains. (property only)
66531
+ * Mirrored to `data-status` rather than reflected, as `Image` explains, once a
66532
+ * picture has loaded or failed. An avatar with no `src` reports `error` here
66533
+ * and as `:state(error)`, and writes no `data-status`. (property only)
66462
66534
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
66463
66535
  *
66464
66536
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -72201,10 +72273,15 @@ export type CustomElementsSolidJs = {
72201
72273
  *
72202
72274
  * Sort and filter apply to the whole set, including the rows on other pages.
72203
72275
  *
72204
- * **The cell values do not server-render.** The headings and the row elements
72205
- * do. Reading a cell needs the columns, and Lit SSR does not pass the column
72206
- * children to this element, so a crawler sees an empty table of the right
72207
- * shape. Use `Table` when the served HTML has to carry the values.
72276
+ * **Write the first page as rows, so the served HTML carries the values.** The
72277
+ * table reads each cell from its column, and a server does not pass the column
72278
+ * children to this element, so on its own it serves the headings and no values.
72279
+ * Write the first page under the columns as `TableRow` and `TableCell`
72280
+ * elements, in the table's sort and page size and formatted as its columns draw
72281
+ * them. The table shows your rows until `rows` holds a row, then draws its own
72282
+ * in their place and leaves yours in the page, unshown. A development build
72283
+ * warns when the two differ. In React, map the first page of the same array in
72284
+ * the same server component.
72208
72285
  *
72209
72286
  * `selectable` adds a column of checkboxes, keyed on `row-key`:
72210
72287
  *
@@ -72554,7 +72631,7 @@ export type CustomElementsSolidJs = {
72554
72631
  *
72555
72632
  * Areas where markup can be added to the component.
72556
72633
  *
72557
- * - `(default)`: The columns, as `TableColumn` elements.
72634
+ * - `(default)`: The columns, as `TableColumn` elements, and the first page served as `TableRow` elements, which show until `rows` holds a row.
72558
72635
  * - `empty`: Content shown when there are no rows to show and none are loading, such as a picture and a link. Falls back to `empty-text`, which the live region still says.
72559
72636
  * - `error`: Content shown while `error-text` is set, such as a button that tries again. Falls back to `error-text`, which the live region still says.
72560
72637
  * - `footer`: Content below the grid. It replaces the built-in pagination.
@@ -81946,6 +82023,25 @@ export type CustomElementsSolidJs = {
81946
82023
  * - `orientation`: Stacks the destinations in a column, for a sidebar, where unset is a row
81947
82024
  * for a header or a footer. The marker follows the current destination down
81948
82025
  * the column as it does along the row.
82026
+ * - `variant`: How the destinations are drawn, with `Tabs`' three values and for the same
82027
+ * reasons.
82028
+ *
82029
+ * Unset is a pill under the current destination with nothing behind the row,
82030
+ * for a bar inside other chrome. `underlined` is a rule under the row and a
82031
+ * thicker one under the current destination, for a bar that heads a page, as
82032
+ * a repository's or a project's sections do. `segmented` puts the pill in a
82033
+ * framed, sunken track, for a short set that reads as one control.
82034
+ *
82035
+ * **The same words as `Tabs`, because a reader cannot tell the two apart.**
82036
+ * Navigation moves between pages and tabs between the panels of one page,
82037
+ * and the bar looks the same either way. A console whose sections are pages
82038
+ * could not draw them the way its underlined tabs were drawn.
82039
+ *
82040
+ * Down a column, `underlined` stands the rule and the mark along the
82041
+ * column's inline end.
82042
+ *
82043
+ * Reflected and left unset by default, so the host carries nothing a
82044
+ * consumer's server markup does not already have.
81949
82045
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
81950
82046
  *
81951
82047
  * **Named `whenSettled` because `settled` is taken four times over**, by
package/types/vue.d.ts CHANGED
@@ -896,7 +896,9 @@ Read-only to a consumer: it is a report rather than a setting, and the same
896
896
  report `Image` gives, for the same reason. `load` and `error` fire once, so
897
897
  a listener bound after the picture settled hears neither, which is the
898
898
  platform on an `<img>` too, and this is what that listener asks instead.
899
- Mirrored to `data-status` rather than reflected, as `Image` explains. */
899
+ Mirrored to `data-status` rather than reflected, as `Image` explains, once a
900
+ picture has loaded or failed. An avatar with no `src` reports `error` here
901
+ and as `:state(error)`, and writes no `data-status`. */
900
902
  status?: (HelixHeadlessAvatar["status"]) | undefined;
901
903
  };
902
904
 
@@ -11065,6 +11067,26 @@ second "Main". */
11065
11067
  for a header or a footer. The marker follows the current destination down
11066
11068
  the column as it does along the row. */
11067
11069
  orientation?: (HelixHeadlessNavigation["orientation"]) | undefined;
11070
+ /** How the destinations are drawn, with `Tabs`' three values and for the same
11071
+ reasons.
11072
+
11073
+ Unset is a pill under the current destination with nothing behind the row,
11074
+ for a bar inside other chrome. `underlined` is a rule under the row and a
11075
+ thicker one under the current destination, for a bar that heads a page, as
11076
+ a repository's or a project's sections do. `segmented` puts the pill in a
11077
+ framed, sunken track, for a short set that reads as one control.
11078
+
11079
+ **The same words as `Tabs`, because a reader cannot tell the two apart.**
11080
+ Navigation moves between pages and tabs between the panels of one page,
11081
+ and the bar looks the same either way. A console whose sections are pages
11082
+ could not draw them the way its underlined tabs were drawn.
11083
+
11084
+ Down a column, `underlined` stands the rule and the mark along the
11085
+ column's inline end.
11086
+
11087
+ Reflected and left unset by default, so the host carries nothing a
11088
+ consumer's server markup does not already have. */
11089
+ variant?: (HelixHeadlessNavigation["variant"]) | undefined;
11068
11090
  };
11069
11091
 
11070
11092
  export type HelixHeadlessNavigationVueEvents = {};
@@ -19034,7 +19056,7 @@ export interface WcToolkitVueGlobalComponents {
19034
19056
  HelixHeadlessCopyButtonVueProps,
19035
19057
  HelixHeadlessCopyButtonVueEvents
19036
19058
  >;
19037
- /** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. - Shift with a press on a checkbox selects every row between it and the row last chosen. - 'selection-behavior="replace"' makes a press or a move select the row alone, as a file list does. Control or Command with a press adds or takes out one row, and Shift with a press selects every row from the one last chosen. To act on a single row, such as opening it, put a link or a button in a cell. **Keyboard.** The grid is one tab stop, and the arrow keys move between its cells, the headings included. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the heading row and the 'load-more' row included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the grid. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. | | Enter, Space on a sortable heading | Sorts by the column. | | Enter, Space on the 'load-more' row | Sends 'helix-load-more'. | | Space on a row | Selects the row, in a 'selectable' table. Under 'selection-behavior="replace"', selects it alone, and Control or Command with Space adds or takes out the row. | | Down, Up, Page Down, Page Up under 'selection-behavior="replace"' | Selects the row it moves to alone. Control or Command with the key moves without selecting. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. | | Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. | | A letter or a word | Moves to the next row whose row header starts with what you typed. | 'selected' and 'expanded' hold their keys in the order of the rows, as do 'helix-select', 'helix-selected' and 'helix-expand'. Each row is named by its row header, the column marked 'row-header', or the first column with a 'field' where none is. A screen reader says it as a reader moves between rows. **Rows that hold rows.** 'child-field' names the field that holds a row's child rows, and the grid becomes a tree grid. The row header column draws a mark that a press opens and closes a row by, and 'expanded' holds the keys of the open rows, which 'row-key' names. Right on a closed row's header opens it, Left on an open one closes it, and Left on a child moves to its parent. A sort orders the rows under each parent, and a search shows the rows that lead to each match, open. 'load-more' adds a row after the last one with a button that sends 'helix-load-more'. A 'windowed' table also sends it by itself once a reader scrolls within one screen of the end, once for each number of rows. Add the next rows to 'rows', and set 'loading' while they are on their way. When a fetch fails, set 'error-text', such as "The files did not load", and put a button that tries again in the 'error' slot. The line shows after the rows in place of the empty and loading lines, the live region says it, and the table takes the 'error' state. Clear it once you try again. The controls inside the cells leave the tab order, so Tab moves past the whole grid. A windowed table keeps the row holding focus drawn while the rest scroll away. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. **'reorderable-rows' lets people move rows.** A column of grips leads each row, named by 'move-row-label'. Drag a grip to move its row, and the table scrolls near an edge. Or press Space or Enter on a grip, or click it, to pick up its row, move it with Down and Up, Home and End, and press Space or Enter again to drop it. A click on another row drops it there, and Escape puts it back. The table says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder' with 'kind' set to 'row', whose 'keys' hold every key of 'rows' in the new order. **You move the rows**: set 'rows' to the new order, and the table draws it. Set 'row-key', so a row is known by its key once it has moved. The grips do nothing while a 'sort' is set, since the sort decides the order, and a tree grid draws none. 'csv()' returns the result as text: every row that passes the filter, in the order and the columns on screen. Saving the file is up to you. 'DataTable' has no 'columns' attribute. Each 'TableColumn' is part of the schema, so you size a column with its own 'width'. 'Table' has 'columns' because its cells are markup you write and it can have no columns at all. Written on 'DataTable', 'columns' has no effect, so watch for it when you move a table from 'Table' to 'DataTable'. */
19059
+ /** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **Write the first page as rows, so the served HTML carries the values.** The table reads each cell from its column, and a server does not pass the column children to this element, so on its own it serves the headings and no values. Write the first page under the columns as 'TableRow' and 'TableCell' elements, in the table's sort and page size and formatted as its columns draw them. The table shows your rows until 'rows' holds a row, then draws its own in their place and leaves yours in the page, unshown. A development build warns when the two differ. In React, map the first page of the same array in the same server component. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. - Shift with a press on a checkbox selects every row between it and the row last chosen. - 'selection-behavior="replace"' makes a press or a move select the row alone, as a file list does. Control or Command with a press adds or takes out one row, and Shift with a press selects every row from the one last chosen. To act on a single row, such as opening it, put a link or a button in a cell. **Keyboard.** The grid is one tab stop, and the arrow keys move between its cells, the headings included. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the heading row and the 'load-more' row included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the grid. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. | | Enter, Space on a sortable heading | Sorts by the column. | | Enter, Space on the 'load-more' row | Sends 'helix-load-more'. | | Space on a row | Selects the row, in a 'selectable' table. Under 'selection-behavior="replace"', selects it alone, and Control or Command with Space adds or takes out the row. | | Down, Up, Page Down, Page Up under 'selection-behavior="replace"' | Selects the row it moves to alone. Control or Command with the key moves without selecting. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. | | Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. | | A letter or a word | Moves to the next row whose row header starts with what you typed. | 'selected' and 'expanded' hold their keys in the order of the rows, as do 'helix-select', 'helix-selected' and 'helix-expand'. Each row is named by its row header, the column marked 'row-header', or the first column with a 'field' where none is. A screen reader says it as a reader moves between rows. **Rows that hold rows.** 'child-field' names the field that holds a row's child rows, and the grid becomes a tree grid. The row header column draws a mark that a press opens and closes a row by, and 'expanded' holds the keys of the open rows, which 'row-key' names. Right on a closed row's header opens it, Left on an open one closes it, and Left on a child moves to its parent. A sort orders the rows under each parent, and a search shows the rows that lead to each match, open. 'load-more' adds a row after the last one with a button that sends 'helix-load-more'. A 'windowed' table also sends it by itself once a reader scrolls within one screen of the end, once for each number of rows. Add the next rows to 'rows', and set 'loading' while they are on their way. When a fetch fails, set 'error-text', such as "The files did not load", and put a button that tries again in the 'error' slot. The line shows after the rows in place of the empty and loading lines, the live region says it, and the table takes the 'error' state. Clear it once you try again. The controls inside the cells leave the tab order, so Tab moves past the whole grid. A windowed table keeps the row holding focus drawn while the rest scroll away. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. **'reorderable-rows' lets people move rows.** A column of grips leads each row, named by 'move-row-label'. Drag a grip to move its row, and the table scrolls near an edge. Or press Space or Enter on a grip, or click it, to pick up its row, move it with Down and Up, Home and End, and press Space or Enter again to drop it. A click on another row drops it there, and Escape puts it back. The table says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder' with 'kind' set to 'row', whose 'keys' hold every key of 'rows' in the new order. **You move the rows**: set 'rows' to the new order, and the table draws it. Set 'row-key', so a row is known by its key once it has moved. The grips do nothing while a 'sort' is set, since the sort decides the order, and a tree grid draws none. 'csv()' returns the result as text: every row that passes the filter, in the order and the columns on screen. Saving the file is up to you. 'DataTable' has no 'columns' attribute. Each 'TableColumn' is part of the schema, so you size a column with its own 'width'. 'Table' has 'columns' because its cells are markup you write and it can have no columns at all. Written on 'DataTable', 'columns' has no effect, so watch for it when you move a table from 'Table' to 'DataTable'. */
19038
19060
  "helix-headless-data-table": DefineCustomElement<
19039
19061
  HelixHeadlessDataTable,
19040
19062
  HelixHeadlessDataTableVueProps,