@fusion.dev/helix-headless 0.183.0 → 0.185.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/custom-elements.json +546 -80
- package/dist/code-block/root/code-block-root.d.ts +42 -1
- package/dist/code-block/root/code-block-root.js +25 -4
- package/dist/data-table/root/data-table-root.d.ts +25 -6
- package/dist/data-table/root/data-table-root.js +21 -9
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/menu/filter/index.d.ts +1 -0
- package/dist/menu/filter/index.js +4 -0
- package/dist/menu/filter/menu-filter.d.ts +114 -0
- package/dist/menu/filter/menu-filter.js +172 -0
- package/dist/menu/root/menu-root.d.ts +28 -29
- package/dist/menu/root/menu-root.js +32 -107
- package/dist/table/root/table-root.d.ts +4 -6
- package/dist/table/root/table-root.js +2 -28
- package/dist/table/tracks.d.ts +20 -0
- package/dist/table/tracks.js +28 -0
- package/dist/time-input/root/time-input-root.d.ts +11 -0
- package/dist/time-input/root/time-input-root.js +11 -0
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +190 -44
- package/types/vue.d.ts +42 -11
- package/types/words.d.ts +7 -0
package/custom-elements.json
CHANGED
|
@@ -31992,9 +31992,34 @@
|
|
|
31992
31992
|
"kind": "javascript-module",
|
|
31993
31993
|
"path": "src/code-block/root/code-block-root.ts",
|
|
31994
31994
|
"declarations": [
|
|
31995
|
+
{
|
|
31996
|
+
"kind": "function",
|
|
31997
|
+
"name": "registerHighlighter",
|
|
31998
|
+
"return": {
|
|
31999
|
+
"type": {
|
|
32000
|
+
"text": "void"
|
|
32001
|
+
}
|
|
32002
|
+
},
|
|
32003
|
+
"parameters": [
|
|
32004
|
+
{
|
|
32005
|
+
"name": "highlighter",
|
|
32006
|
+
"type": {
|
|
32007
|
+
"text": "CodeBlockHighlighter | undefined"
|
|
32008
|
+
}
|
|
32009
|
+
},
|
|
32010
|
+
{
|
|
32011
|
+
"name": "sheet",
|
|
32012
|
+
"optional": true,
|
|
32013
|
+
"type": {
|
|
32014
|
+
"text": "CSSResult"
|
|
32015
|
+
}
|
|
32016
|
+
}
|
|
32017
|
+
],
|
|
32018
|
+
"description": "Gives every Code Block of both tiers a highlighter, for the blocks that set\nno `highlight` of their own, and the sheet that colors what it returns.\n\n**Opt-in, so a page that shows plain code carries no grammar.** Code Block\nships none: a grammar is the larger part of any highlighter, and a block\nthat registers one for every page makes every page pay for it. A page that\nwants color imports one entry that calls this, such as\n`@fusion.dev/helix-sandbox/code-block`, which reads `css`, `html`, `js`,\n`jsx`, `sh`, `ts` and `tsx` with the sandbox's Lezer grammars and colors\nthem from the `--helix-color-syntax-*` tokens.\n\nA block's own `highlight` wins over this. Blocks already on the page draw\nagain with it, and every block built after has it. `undefined` takes it\naway again."
|
|
32019
|
+
},
|
|
31995
32020
|
{
|
|
31996
32021
|
"kind": "class",
|
|
31997
|
-
"description": "Renders a `<pre><code>` pair: `pre` keeps the whitespace, and `code` marks it\nas code. Long lines scroll inside the block and do not wrap, because a line\nbreak can be significant in code.\n\nA copy button is on by default. Set `no-copy` to remove it. The button copies\nthe slotted text, so there is no second copy of the code to keep in sync.\n\nFor a fragment of code inside a sentence, use `Code`.\n\nSet `line-numbers` to number the lines in a gutter beside the code, hidden\nfrom the accessibility tree and left out of a copy. Set `mark-lines` to\nmark lines a reader should look at, such as `2, 4-6`: the block draws a\nband behind each run, placed where the lines are laid out, so it follows a\nhighlighter's markup and lines that wrap. `added-lines` and\n`removed-lines` mark lines the same way as inserted and deleted, as\nExpressive Code's `ins` and `del` do, in code that is not a diff. The bands\nare drawn and hidden from screen readers, so say in the text around the\nblock what a marked line means. Set `wrap` to wrap long lines\nrather than scroll them; a gutter then numbers each line where it starts.\nSet `wrappable` for a button in the header that turns `wrap` on and off,\npressed while the lines wrap.\n\nThe header holds the name, the `actions` slot, and the copy button. Slot a\ncontrol into `actions`, such as a button that sets `wrap` or one that opens\nthe code in an editor, and the block draws a header for it even with no\nname. `copy-icon` and `copied-icon` replace the copy button's two icons. Set `highlight` to a\nfunction that turns the code into highlighted markup, such as one wrapping\nShiki or Prism, and the block draws what it returns; it is handed the\nblock's `language`, so one function serves every block. The code stays in\nthe slot, so the copy button and the page's own text are the code as\nwritten.\n\nSet `expandable` on a block whose height is capped, such as by\n`--code-block-max-block-size`, and a button under it shows every line and\nthen fewer again, as a docs site's long example does. The button is drawn\nonly while the cap hides something, says whether the block is expanded with\n`aria-expanded`, names the block it opens with `aria-controls`, and the block\ncarries `:state(expanded)` while it is.\n\nSet `diff` to show a change. Put a unified diff, the output of `git diff` or\n`diff -u`, in the same slot, and the block draws the lines it added and\nremoved. The block never computes a diff itself. Line numbers come from the\nhunk headers and are hidden from the accessibility tree. Changed lines are\n`<ins>` and `<del>` with the `+` and `-` kept as text, so the change does not\ndepend on color. Where a removed line is paired with the added line that\nreplaced it, the words each does not share with the other are the `changed`\npart, so the eye goes to what changed within the line. Each file in the patch is its own block under its own name,\nand its copy button copies the new version of the file. `variant=\"split\"`\nshows the old version beside the new, each removal opposite its replacement.\n`context-lines` folds each long run of unchanged lines, keeping that many\nbeside each change, behind a button that shows them and hides them again,\nas a code host draws a diff written with more context than a reader needs.\n\n**A block that scrolls is a tab stop.** While its lines run past its width or\nits cap, the scroller is a region named for the block, such as \"Code,\napp.ts\", that Tab reaches, so a keyboard scrolls it with the arrow keys in\nevery browser. Chromium and Firefox make a scrolling box focusable on their\nown, and Safari does not. A block that fits is no stop at all.\n\n**The code the block draws is marked untranslated**, `translate=\"no\"` on\nits `<pre>`, so a page translator leaves highlighted lines and a diff as\nwritten. Code in the slot takes its translation mode from the element, which\nwrites nothing onto itself, so set `translate=\"no\"` on the element to keep a\ntranslator off plain code too.\n\nOn the server, the slot renders as ordinary code, so a diff first appears as\nthe patch text in a `<pre>`. The client makes the same first render, which\nkeeps hydration clean, and draws the diff once it can read the content. Diff\nmode is experimental. The rest of the family is stable.\n\n**Several blocks are files**, one shown at a time under a row of tabs, as\nSandbox shows its source panes. Put Code Blocks in the default slot of a\nCode Block, and each is a file named on its tab by its `label` or, without\none, its `language`. `file` holds the name of the file shown. The tabs are a\ntab list: the arrow keys move to a tab and show its file, the two swapping\non a right-to-left page, and Home and End go to the first and the last.\nChoosing one sends `helix-before-change` with the file's name, which you can\ncancel, and `change` once `file` holds it. The files not shown carry\n`hidden`, and the one shown draws no name of its own, its tab naming it. One\nblock draws no tabs. A server cannot see the blocks inside, so the client\ndraws the tabs once it upgrades.",
|
|
32022
|
+
"description": "Renders a `<pre><code>` pair: `pre` keeps the whitespace, and `code` marks it\nas code. Long lines scroll inside the block and do not wrap, because a line\nbreak can be significant in code.\n\nA copy button is on by default. Set `no-copy` to remove it. The button copies\nthe slotted text, so there is no second copy of the code to keep in sync.\n\nFor a fragment of code inside a sentence, use `Code`.\n\nSet `line-numbers` to number the lines in a gutter beside the code, hidden\nfrom the accessibility tree and left out of a copy. Set `mark-lines` to\nmark lines a reader should look at, such as `2, 4-6`: the block draws a\nband behind each run, placed where the lines are laid out, so it follows a\nhighlighter's markup and lines that wrap. `added-lines` and\n`removed-lines` mark lines the same way as inserted and deleted, as\nExpressive Code's `ins` and `del` do, in code that is not a diff. The bands\nare drawn and hidden from screen readers, so say in the text around the\nblock what a marked line means. Set `wrap` to wrap long lines\nrather than scroll them; a gutter then numbers each line where it starts.\nSet `wrappable` for a button in the header that turns `wrap` on and off,\npressed while the lines wrap.\n\nThe header holds the name, the `actions` slot, and the copy button. Slot a\ncontrol into `actions`, such as a button that sets `wrap` or one that opens\nthe code in an editor, and the block draws a header for it even with no\nname. `copy-icon` and `copied-icon` replace the copy button's two icons. Set `highlight` to a\nfunction that turns the code into highlighted markup, such as one wrapping\nShiki or Prism, and the block draws what it returns; it is handed the\nblock's `language`, so one function serves every block. The code stays in\nthe slot, so the copy button and the page's own text are the code as\nwritten.\n\n**Code Block ships no grammar**, so plain code costs you no parser. To color\ncode without a highlighter of your own, import one more entry beside the\nblock's. It colors every block by its `language` (`css`, `html`, `js`,\n`jsx`, `sh`, `ts`, or `tsx`) with the Lezer grammars of the sandbox's\neditor, in the editor's colors:\n\n```js\nimport '@fusion.dev/helix/code-block'\nimport '@fusion.dev/helix-sandbox/code-block'\n```\n\nThat entry calls `registerHighlighter`, which you can also call yourself to\ngive every block one highlighter of your own.\n\nSet `expandable` on a block whose height is capped, such as by\n`--code-block-max-block-size`, and a button under it shows every line and\nthen fewer again, as a docs site's long example does. The button is drawn\nonly while the cap hides something, says whether the block is expanded with\n`aria-expanded`, names the block it opens with `aria-controls`, and the block\ncarries `:state(expanded)` while it is.\n\nSet `diff` to show a change. Put a unified diff, the output of `git diff` or\n`diff -u`, in the same slot, and the block draws the lines it added and\nremoved. The block never computes a diff itself. Line numbers come from the\nhunk headers and are hidden from the accessibility tree. Changed lines are\n`<ins>` and `<del>` with the `+` and `-` kept as text, so the change does not\ndepend on color. Where a removed line is paired with the added line that\nreplaced it, the words each does not share with the other are the `changed`\npart, so the eye goes to what changed within the line. Each file in the patch is its own block under its own name,\nand its copy button copies the new version of the file. `variant=\"split\"`\nshows the old version beside the new, each removal opposite its replacement.\n`context-lines` folds each long run of unchanged lines, keeping that many\nbeside each change, behind a button that shows them and hides them again,\nas a code host draws a diff written with more context than a reader needs.\n\n**A block that scrolls is a tab stop.** While its lines run past its width or\nits cap, the scroller is a region named for the block, such as \"Code,\napp.ts\", that Tab reaches, so a keyboard scrolls it with the arrow keys in\nevery browser. Chromium and Firefox make a scrolling box focusable on their\nown, and Safari does not. A block that fits is no stop at all.\n\n**The code the block draws is marked untranslated**, `translate=\"no\"` on\nits `<pre>`, so a page translator leaves highlighted lines and a diff as\nwritten. Code in the slot takes its translation mode from the element, which\nwrites nothing onto itself, so set `translate=\"no\"` on the element to keep a\ntranslator off plain code too.\n\nOn the server, the slot renders as ordinary code, so a diff first appears as\nthe patch text in a `<pre>`. The client makes the same first render, which\nkeeps hydration clean, and draws the diff once it can read the content. Diff\nmode is experimental. The rest of the family is stable.\n\n**Several blocks are files**, one shown at a time under a row of tabs, as\nSandbox shows its source panes. Put Code Blocks in the default slot of a\nCode Block, and each is a file named on its tab by its `label` or, without\none, its `language`. `file` holds the name of the file shown. The tabs are a\ntab list: the arrow keys move to a tab and show its file, the two swapping\non a right-to-left page, and Home and End go to the first and the last.\nChoosing one sends `helix-before-change` with the file's name, which you can\ncancel, and `change` once `file` holds it. The files not shown carry\n`hidden`, and the one shown draws no name of its own, its tab naming it. One\nblock draws no tabs. A server cannot see the blocks inside, so the client\ndraws the tabs once it upgrades.",
|
|
31998
32023
|
"name": "HelixHeadlessCodeBlock",
|
|
31999
32024
|
"cssProperties": [
|
|
32000
32025
|
{
|
|
@@ -32401,7 +32426,7 @@
|
|
|
32401
32426
|
"type": {
|
|
32402
32427
|
"text": "(code: string, language: string) => string | undefined"
|
|
32403
32428
|
},
|
|
32404
|
-
"description": "Turns the code into highlighted markup, which the block draws in place of\nthe plain text.\n\nCalled with the code as written and the block's `language`, and returning\nHTML, such as the output of Shiki's `codeToHtml` or Prism's `highlight`.\nOne function serves every block on a page, each block saying its own\nlanguage:\n\n```js\nfor (const block of document.querySelectorAll('helix-code-block')) {\n block.highlight = (code, lang) => codeToHtml(code, { lang, theme: 'github-light' })\n}\n```\n\n**The markup is drawn as given**, so it has to escape the code it was\nhanded, which those highlighters do. A `<pre>` and `<code>` around the\nwhole of it, which Shiki writes, are taken off, so the lines sit level\nwith the gutter's numbers and the block keeps one tab stop. The code stays\nin the slot, so the copy button copies it as written and a reader without\nthe script still has it. Not called on a server, which has no code to\nread, nor for a diff."
|
|
32429
|
+
"description": "Turns the code into highlighted markup, which the block draws in place of\nthe plain text.\n\nCalled with the code as written and the block's `language`, and returning\nHTML, such as the output of Shiki's `codeToHtml` or Prism's `highlight`.\nOne function serves every block on a page, each block saying its own\nlanguage:\n\n```js\nfor (const block of document.querySelectorAll('helix-code-block')) {\n block.highlight = (code, lang) => codeToHtml(code, { lang, theme: 'github-light' })\n}\n```\n\n**The markup is drawn as given**, so it has to escape the code it was\nhanded, which those highlighters do. A `<pre>` and `<code>` around the\nwhole of it, which Shiki writes, are taken off, so the lines sit level\nwith the gutter's numbers and the block keeps one tab stop. The code stays\nin the slot, so the copy button copies it as written and a reader without\nthe script still has it. Not called on a server, which has no code to\nread, nor for a diff.\n\nAbsent, the block draws with the highlighter `registerHighlighter` gave\nevery block, where an entry such as `@fusion.dev/helix-sandbox/code-block`\nregistered one, and plain otherwise."
|
|
32405
32430
|
},
|
|
32406
32431
|
{
|
|
32407
32432
|
"kind": "field",
|
|
@@ -33792,6 +33817,14 @@
|
|
|
33792
33817
|
}
|
|
33793
33818
|
],
|
|
33794
33819
|
"exports": [
|
|
33820
|
+
{
|
|
33821
|
+
"kind": "js",
|
|
33822
|
+
"name": "registerHighlighter",
|
|
33823
|
+
"declaration": {
|
|
33824
|
+
"name": "registerHighlighter",
|
|
33825
|
+
"module": "src/code-block/root/code-block-root.ts"
|
|
33826
|
+
}
|
|
33827
|
+
},
|
|
33795
33828
|
{
|
|
33796
33829
|
"kind": "js",
|
|
33797
33830
|
"name": "HelixHeadlessCodeBlock",
|
|
@@ -46764,7 +46797,7 @@
|
|
|
46764
46797
|
"declarations": [
|
|
46765
46798
|
{
|
|
46766
46799
|
"kind": "class",
|
|
46767
|
-
"description": "Declare the columns as `TableColumn` children and pass the rows as an array.\nThe schema stays readable in the HTML, and the rows can be windowed, which\nten thousand row elements cannot be.\n\n```html\n<helix-headless-data-table .rows=${rows} sort=\"name:asc\" page-size=\"20\">\n <helix-headless-table-column field=\"name\" sortable>Name</helix-headless-table-column>\n <helix-headless-table-column field=\"size\" text-align=\"end\" sortable .cell=${bytes}>Size</helix-headless-table-column>\n</helix-headless-data-table>\n```\n\nFor a short table written out by hand, use `Table`, which takes rows as\nmarkup.\n\nSort and filter apply to the whole set, including the rows on other pages.\n\n**Write the first page as rows, so the served HTML carries the values.** The\ntable reads each cell from its column, and a server does not pass the column\nchildren to this element, so on its own it serves the headings and no values.\nWrite the first page under the columns as `TableRow` and `TableCell`\nelements, in the table's sort and page size and formatted as its columns draw\nthem. The table shows your rows until `rows` holds a row, then draws its own\nin their place and leaves yours in the page, unshown. A development build\nwarns when the two differ. In React, map the first page of the same array in\nthe same server component.\n\n`selectable` adds a column of checkboxes, keyed on `row-key`:\n\n- A row is selected by its key, so the selection survives a sort, a filter,\n and a page change.\n- `selected` holds the chosen keys, comma separated, the same shape `Listbox`\n uses for a multiple choice. As with `sort`, writing it applies the\n selection, and `default-selected` holds what the markup declared.\n- The checkbox in the heading selects every row in the result, across pages,\n and shows a dash while only some are chosen.\n- Shift with a press on a checkbox selects every row between it and the row\n last chosen.\n- `selection-behavior=\"replace\"` makes a press or a move select the row\n alone, as a file list does. Control or Command with a press adds or takes\n out one row, and Shift with a press selects every row from the one last\n chosen.\n\nTo act on a single row, such as opening it, put a link or a button in a cell.\n\n**Keyboard.** The grid is one tab stop, and the arrow keys move between its\ncells, the headings included.\n\n| Key | What it does |\n|---|---|\n| Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. |\n| Down, Up | Moves one row, the heading row and the `load-more` row included. |\n| Home, End | Moves to the first or the last cell of the row. |\n| Control with Home or End | Moves to the first or the last cell of the grid. |\n| Page Down, Page Up | Moves by the rows that fit in view. |\n| Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. |\n| Enter, Space on a sortable heading | Sorts by the column. |\n| Enter, Space on the `load-more` row | Sends `helix-load-more`. |\n| 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. |\n| 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. |\n| Shift with Down or Up | Selects the rows it moves across, in a `selectable` table. |\n| Shift with Space | Selects every row from the one last chosen, in a `selectable` table. |\n| Control or Command with A | Selects every row, in a `selectable` table. |\n| Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. |\n| Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. |\n| A letter or a word | Moves to the next row whose row header starts with what you typed. |\n\n`selected` and `expanded` hold their keys in the order of the rows, as do\n`helix-select`, `helix-selected` and `helix-expand`.\n\nEach row is named by its row header, the column marked `row-header`, or the\nfirst column with a `field` where none is. A screen reader says it as a reader\nmoves between rows.\n\n**Rows that hold rows.** `child-field` names the field that holds a row's\nchild rows, and the grid becomes a tree grid. The row header column draws a\nmark that a press opens and closes a row by, and `expanded` holds the keys of the open\nrows, which `row-key` names. Right on a closed row's header opens it, Left on\nan open one closes it, and Left on a child moves to its parent. A sort orders\nthe rows under each parent, and a search shows the rows that lead to each\nmatch, open.\n\n`load-more` adds a row after the last one with a button that sends\n`helix-load-more`. A `windowed` table also sends it by itself once a reader\nscrolls within one screen of the end, once for each number of rows. Add the\nnext rows to `rows`, and set `loading` while they are on their way.\n\nWhen a fetch fails, set `error-text`, such as \"The files did not load\", and\nput a button that tries again in the `error` slot. The line shows after the\nrows in place of the empty and loading lines, the live region says it, and\nthe table takes the `error` state. Clear it once you try again.\n\nThe controls inside the cells leave the tab order, so Tab moves past the\nwhole grid. A windowed table keeps the row holding focus drawn while the\nrest scroll away.\n\nPeople can resize and reorder the columns. `resizable` on a column puts a\nseparator on its edge. `reorderable` on the table puts a grip on each heading\nthat has a `field`, moved by dragging or with the arrow keys. The new order\nis written to `order` as a list of fields. Your markup is not rewritten: the\ntable assigns the headings to its header in that order.\n\n**`reorderable-rows` lets people move rows.** A column of grips leads each\nrow, named by `move-row-label`. Drag a grip to move its row, and the table\nscrolls near an edge. Or press Space or Enter on a grip, or click it, to pick\nup its row, move it with Down and Up, Home and End, and press Space or Enter\nagain to drop it. A click on another row drops it there, and Escape puts it\nback. The table says each step in its `live` region. A drop sends\n`helix-before-reorder`, which you can refuse, and then `helix-reorder` with\n`kind` set to `row`, whose `keys` hold every key of `rows` in the new order.\n**You move the rows**: set `rows` to the new order, and the table draws it.\nSet `row-key`, so a row is known by its key once it has moved. The grips do\nnothing while a `sort` is set, since the sort decides the order, and a tree\ngrid draws none.\n\n`csv()` returns the result as text: every row that passes the filter, in the\norder and the columns on screen. Saving the file is up to you.\n\
|
|
46800
|
+
"description": "Declare the columns as `TableColumn` children and pass the rows as an array.\nThe schema stays readable in the HTML, and the rows can be windowed, which\nten thousand row elements cannot be.\n\n```html\n<helix-headless-data-table .rows=${rows} sort=\"name:asc\" page-size=\"20\">\n <helix-headless-table-column field=\"name\" sortable>Name</helix-headless-table-column>\n <helix-headless-table-column field=\"size\" text-align=\"end\" sortable .cell=${bytes}>Size</helix-headless-table-column>\n</helix-headless-data-table>\n```\n\nFor a short table written out by hand, use `Table`, which takes rows as\nmarkup.\n\nSort and filter apply to the whole set, including the rows on other pages.\n\n**Write the first page as rows, so the served HTML carries the values.** The\ntable reads each cell from its column, and a server does not pass the column\nchildren to this element, so on its own it serves the headings and no values.\nWrite the first page under the columns as `TableRow` and `TableCell`\nelements, in the table's sort and page size and formatted as its columns draw\nthem. The table shows your rows until `rows` holds a row, then draws its own\nin their place and leaves yours in the page, unshown. A development build\nwarns when the two differ. In React, map the first page of the same array in\nthe same server component.\n\n`selectable` adds a column of checkboxes, keyed on `row-key`:\n\n- A row is selected by its key, so the selection survives a sort, a filter,\n and a page change.\n- `selected` holds the chosen keys, comma separated, the same shape `Listbox`\n uses for a multiple choice. As with `sort`, writing it applies the\n selection, and `default-selected` holds what the markup declared.\n- The checkbox in the heading selects every row in the result, across pages,\n and shows a dash while only some are chosen.\n- Shift with a press on a checkbox selects every row between it and the row\n last chosen.\n- `selection-behavior=\"replace\"` makes a press or a move select the row\n alone, as a file list does. Control or Command with a press adds or takes\n out one row, and Shift with a press selects every row from the one last\n chosen.\n\nTo act on a single row, such as opening it, put a link or a button in a cell.\n\n**Keyboard.** The grid is one tab stop, and the arrow keys move between its\ncells, the headings included.\n\n| Key | What it does |\n|---|---|\n| Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. |\n| Down, Up | Moves one row, the heading row and the `load-more` row included. |\n| Home, End | Moves to the first or the last cell of the row. |\n| Control with Home or End | Moves to the first or the last cell of the grid. |\n| Page Down, Page Up | Moves by the rows that fit in view. |\n| Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. |\n| Enter, Space on a sortable heading | Sorts by the column. |\n| Enter, Space on the `load-more` row | Sends `helix-load-more`. |\n| 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. |\n| 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. |\n| Shift with Down or Up | Selects the rows it moves across, in a `selectable` table. |\n| Shift with Space | Selects every row from the one last chosen, in a `selectable` table. |\n| Control or Command with A | Selects every row, in a `selectable` table. |\n| Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. |\n| Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. |\n| A letter or a word | Moves to the next row whose row header starts with what you typed. |\n\n`selected` and `expanded` hold their keys in the order of the rows, as do\n`helix-select`, `helix-selected` and `helix-expand`.\n\nEach row is named by its row header, the column marked `row-header`, or the\nfirst column with a `field` where none is. A screen reader says it as a reader\nmoves between rows.\n\n**Rows that hold rows.** `child-field` names the field that holds a row's\nchild rows, and the grid becomes a tree grid. The row header column draws a\nmark that a press opens and closes a row by, and `expanded` holds the keys of the open\nrows, which `row-key` names. Right on a closed row's header opens it, Left on\nan open one closes it, and Left on a child moves to its parent. A sort orders\nthe rows under each parent, and a search shows the rows that lead to each\nmatch, open.\n\n`load-more` adds a row after the last one with a button that sends\n`helix-load-more`. A `windowed` table also sends it by itself once a reader\nscrolls within one screen of the end, once for each number of rows. Add the\nnext rows to `rows`, and set `loading` while they are on their way.\n\nWhen a fetch fails, set `error-text`, such as \"The files did not load\", and\nput a button that tries again in the `error` slot. The line shows after the\nrows in place of the empty and loading lines, the live region says it, and\nthe table takes the `error` state. Clear it once you try again.\n\nThe controls inside the cells leave the tab order, so Tab moves past the\nwhole grid. A windowed table keeps the row holding focus drawn while the\nrest scroll away.\n\nPeople can resize and reorder the columns. `resizable` on a column puts a\nseparator on its edge. `reorderable` on the table puts a grip on each heading\nthat has a `field`, moved by dragging or with the arrow keys. The new order\nis written to `order` as a list of fields. Your markup is not rewritten: the\ntable assigns the headings to its header in that order.\n\n**`reorderable-rows` lets people move rows.** A column of grips leads each\nrow, named by `move-row-label`. Drag a grip to move its row, and the table\nscrolls near an edge. Or press Space or Enter on a grip, or click it, to pick\nup its row, move it with Down and Up, Home and End, and press Space or Enter\nagain to drop it. A click on another row drops it there, and Escape puts it\nback. The table says each step in its `live` region. A drop sends\n`helix-before-reorder`, which you can refuse, and then `helix-reorder` with\n`kind` set to `row`, whose `keys` hold every key of `rows` in the new order.\n**You move the rows**: set `rows` to the new order, and the table draws it.\nSet `row-key`, so a row is known by its key once it has moved. The grips do\nnothing while a `sort` is set, since the sort decides the order, and a tree\ngrid draws none.\n\n`csv()` returns the result as text: every row that passes the filter, in the\norder and the columns on screen. Saving the file is up to you.\n\nSize a column with its own `width`, or every column at once with `columns`,\na track list dealt out one track to a column in the order they are written,\nas `Table` deals it. A column's `width` wins in its place. **A table that\nserves its first page takes its widths from `columns`**: a server and a\nstylesheet can read the table's own attributes and not its columns', so the\nserved rows are laid out at the widths the table draws.\n\n**The columns are an import of their own.** A column is the Table family's\n`TableColumn`, which the data table does not register, so a page that writes\none imports the Table entry beside the data table:\n\n```js\nimport '@fusion.dev/helix/data-table'\nimport '@fusion.dev/helix/table'\n```\n\nIn development, a data table holding a column nobody registered says so once\nthe page has loaded, with the line to add.",
|
|
46768
46801
|
"name": "HelixHeadlessDataTable",
|
|
46769
46802
|
"cssProperties": [
|
|
46770
46803
|
{
|
|
@@ -47118,6 +47151,16 @@
|
|
|
47118
47151
|
"attribute": "child-field",
|
|
47119
47152
|
"reflects": true
|
|
47120
47153
|
},
|
|
47154
|
+
{
|
|
47155
|
+
"kind": "field",
|
|
47156
|
+
"name": "columns",
|
|
47157
|
+
"type": {
|
|
47158
|
+
"text": "string"
|
|
47159
|
+
},
|
|
47160
|
+
"default": "''",
|
|
47161
|
+
"description": "The column tracks, as a grid track list such as `2fr 1fr max-content`,\ndealt out one track to a column in the order the columns are written. A\ncolumn's own `width` wins in its place, and a column it does not reach\ntakes the track a column with no `width` takes.\n\n**The one track list a server can send.** A server rendering this element\nhas no columns to read a `width` from, and neither has a stylesheet laying\nout the rows a page served before the table upgrades, so a table sized here\nlays those rows out at the widths it draws.",
|
|
47162
|
+
"attribute": "columns"
|
|
47163
|
+
},
|
|
47121
47164
|
{
|
|
47122
47165
|
"kind": "field",
|
|
47123
47166
|
"name": "defaultExpanded",
|
|
@@ -48192,7 +48235,7 @@
|
|
|
48192
48235
|
"text": "string"
|
|
48193
48236
|
},
|
|
48194
48237
|
"privacy": "private",
|
|
48195
|
-
"description": "The track list
|
|
48238
|
+
"description": "The track list: each column's `width`, or its track in `columns`, or the\ntrack a column with neither takes.\n\nA render that knows no columns, on a server or hydrating what one sent,\nhas `columns` alone, and sends it as it is.",
|
|
48196
48239
|
"readonly": true
|
|
48197
48240
|
},
|
|
48198
48241
|
{
|
|
@@ -50241,6 +50284,15 @@
|
|
|
50241
50284
|
"description": "The field that holds a row's child rows, as an array. Set it, and `row-key`,\nand the grid becomes a tree grid.\n\nReflected, because the styled tier indents a tree grid's row headers by\nit. No default, so a table that sets none writes nothing onto its host.",
|
|
50242
50285
|
"fieldName": "childField"
|
|
50243
50286
|
},
|
|
50287
|
+
{
|
|
50288
|
+
"name": "columns",
|
|
50289
|
+
"type": {
|
|
50290
|
+
"text": "string"
|
|
50291
|
+
},
|
|
50292
|
+
"default": "''",
|
|
50293
|
+
"description": "The column tracks, as a grid track list such as `2fr 1fr max-content`,\ndealt out one track to a column in the order the columns are written. A\ncolumn's own `width` wins in its place, and a column it does not reach\ntakes the track a column with no `width` takes.\n\n**The one track list a server can send.** A server rendering this element\nhas no columns to read a `width` from, and neither has a stylesheet laying\nout the rows a page served before the table upgrades, so a table sized here\nlays those rows out at the widths it draws.",
|
|
50294
|
+
"fieldName": "columns"
|
|
50295
|
+
},
|
|
50244
50296
|
{
|
|
50245
50297
|
"name": "default-expanded",
|
|
50246
50298
|
"type": {
|
|
@@ -85795,6 +85847,14 @@
|
|
|
85795
85847
|
"module": "src/megamenu/index.js"
|
|
85796
85848
|
}
|
|
85797
85849
|
},
|
|
85850
|
+
{
|
|
85851
|
+
"kind": "js",
|
|
85852
|
+
"name": "*",
|
|
85853
|
+
"declaration": {
|
|
85854
|
+
"name": "*",
|
|
85855
|
+
"module": "src/menu/filter/index.js"
|
|
85856
|
+
}
|
|
85857
|
+
},
|
|
85798
85858
|
{
|
|
85799
85859
|
"kind": "js",
|
|
85800
85860
|
"name": "*",
|
|
@@ -111680,6 +111740,392 @@
|
|
|
111680
111740
|
}
|
|
111681
111741
|
]
|
|
111682
111742
|
},
|
|
111743
|
+
{
|
|
111744
|
+
"kind": "javascript-module",
|
|
111745
|
+
"path": "src/menu/filter/index.ts",
|
|
111746
|
+
"declarations": [],
|
|
111747
|
+
"exports": [
|
|
111748
|
+
{
|
|
111749
|
+
"kind": "js",
|
|
111750
|
+
"name": "filterMenu",
|
|
111751
|
+
"declaration": {
|
|
111752
|
+
"name": "filterMenu",
|
|
111753
|
+
"module": "./menu-filter.js"
|
|
111754
|
+
}
|
|
111755
|
+
},
|
|
111756
|
+
{
|
|
111757
|
+
"kind": "js",
|
|
111758
|
+
"name": "MenuFilterController",
|
|
111759
|
+
"declaration": {
|
|
111760
|
+
"name": "MenuFilterController",
|
|
111761
|
+
"module": "./menu-filter.js"
|
|
111762
|
+
}
|
|
111763
|
+
}
|
|
111764
|
+
]
|
|
111765
|
+
},
|
|
111766
|
+
{
|
|
111767
|
+
"kind": "javascript-module",
|
|
111768
|
+
"path": "src/menu/filter/menu-filter.ts",
|
|
111769
|
+
"declarations": [
|
|
111770
|
+
{
|
|
111771
|
+
"kind": "function",
|
|
111772
|
+
"name": "drawFilter",
|
|
111773
|
+
"return": {
|
|
111774
|
+
"type": {
|
|
111775
|
+
"text": "TemplateResult"
|
|
111776
|
+
}
|
|
111777
|
+
},
|
|
111778
|
+
"parameters": [
|
|
111779
|
+
{
|
|
111780
|
+
"name": "host",
|
|
111781
|
+
"type": {
|
|
111782
|
+
"text": "HelixHeadlessMenu"
|
|
111783
|
+
}
|
|
111784
|
+
},
|
|
111785
|
+
{
|
|
111786
|
+
"name": "rows",
|
|
111787
|
+
"type": {
|
|
111788
|
+
"text": "TemplateResult"
|
|
111789
|
+
}
|
|
111790
|
+
},
|
|
111791
|
+
{
|
|
111792
|
+
"name": "busy",
|
|
111793
|
+
"type": {
|
|
111794
|
+
"text": "string | typeof nothing"
|
|
111795
|
+
}
|
|
111796
|
+
},
|
|
111797
|
+
{
|
|
111798
|
+
"name": "onInput",
|
|
111799
|
+
"type": {
|
|
111800
|
+
"text": "(event: Event) => void"
|
|
111801
|
+
}
|
|
111802
|
+
}
|
|
111803
|
+
],
|
|
111804
|
+
"description": "The field and then the `menu`: a menu holds menu items and nothing else, so\nthe field stands beside it, as React Aria's `Autocomplete` puts its search\nfield beside its menu. The menu calls it through its filter, so the parts it\nwrites are the menu's."
|
|
111805
|
+
},
|
|
111806
|
+
{
|
|
111807
|
+
"kind": "class",
|
|
111808
|
+
"description": "Narrows a `filterable` menu's rows as the reader types in a field above\nthem, with focus staying in the field and the highlight moving through the\nrows that are left.\n\n**Its own entry**, `@fusion.dev/helix-headless/menu/filter`, so a menu that\nnever filters carries none of this. Importing the entry gives every menu of\nthe tier one, and `filterable` turns it on. Menu's description says what a\nreader gets; this is the part of it the menu does not hold:\n\n- the field and the `menu` after it, which the menu draws in its surface\n- which rows the filter keeps, and the words each matched, marked\n- the keys the field answers: Up and Down move the highlight, Enter presses\n the highlighted row, and Escape clears the filter before it closes\n- `helix-filter`, sent as the text changes, which a listener cancels to\n keep every row showing\n- how many rows are kept, or `no-results-text`, said in the live region\n\nThe styled tier's entry hands in the sheet that draws the field, which the\nmenu adopts while it filters.",
|
|
111809
|
+
"name": "MenuFilterController",
|
|
111810
|
+
"members": [
|
|
111811
|
+
{
|
|
111812
|
+
"kind": "field",
|
|
111813
|
+
"name": "host",
|
|
111814
|
+
"type": {
|
|
111815
|
+
"text": "HelixHeadlessMenu"
|
|
111816
|
+
},
|
|
111817
|
+
"privacy": "private",
|
|
111818
|
+
"readonly": true,
|
|
111819
|
+
"default": "host"
|
|
111820
|
+
},
|
|
111821
|
+
{
|
|
111822
|
+
"kind": "field",
|
|
111823
|
+
"name": "inside",
|
|
111824
|
+
"type": {
|
|
111825
|
+
"text": "Inside"
|
|
111826
|
+
},
|
|
111827
|
+
"privacy": "private",
|
|
111828
|
+
"readonly": true,
|
|
111829
|
+
"description": "The same menu, read through what it keeps to itself."
|
|
111830
|
+
},
|
|
111831
|
+
{
|
|
111832
|
+
"kind": "field",
|
|
111833
|
+
"name": "sheet",
|
|
111834
|
+
"type": {
|
|
111835
|
+
"text": "CSSResult | undefined"
|
|
111836
|
+
},
|
|
111837
|
+
"description": "The sheet the menu adopts while it filters, from the styled tier.",
|
|
111838
|
+
"default": "sheet"
|
|
111839
|
+
},
|
|
111840
|
+
{
|
|
111841
|
+
"kind": "field",
|
|
111842
|
+
"name": "highlighted",
|
|
111843
|
+
"type": {
|
|
111844
|
+
"text": "Row | undefined"
|
|
111845
|
+
},
|
|
111846
|
+
"description": "The row the keys reached while focus stays in the field."
|
|
111847
|
+
},
|
|
111848
|
+
{
|
|
111849
|
+
"kind": "field",
|
|
111850
|
+
"name": "page",
|
|
111851
|
+
"type": {
|
|
111852
|
+
"text": "Row | null"
|
|
111853
|
+
},
|
|
111854
|
+
"privacy": "private",
|
|
111855
|
+
"default": "null",
|
|
111856
|
+
"description": "The submenu the filter narrows, or null for the top page."
|
|
111857
|
+
},
|
|
111858
|
+
{
|
|
111859
|
+
"kind": "field",
|
|
111860
|
+
"name": "refused",
|
|
111861
|
+
"type": {
|
|
111862
|
+
"text": "string | undefined"
|
|
111863
|
+
},
|
|
111864
|
+
"privacy": "private",
|
|
111865
|
+
"description": "The filter a listener refused, which narrows nothing."
|
|
111866
|
+
},
|
|
111867
|
+
{
|
|
111868
|
+
"kind": "field",
|
|
111869
|
+
"name": "seen",
|
|
111870
|
+
"type": {
|
|
111871
|
+
"text": "string"
|
|
111872
|
+
},
|
|
111873
|
+
"privacy": "private",
|
|
111874
|
+
"default": "''",
|
|
111875
|
+
"description": "The filter the last update saw, so a change moves a highlight it hid."
|
|
111876
|
+
},
|
|
111877
|
+
{
|
|
111878
|
+
"kind": "method",
|
|
111879
|
+
"name": "hostConnected",
|
|
111880
|
+
"return": {
|
|
111881
|
+
"type": {
|
|
111882
|
+
"text": "void"
|
|
111883
|
+
}
|
|
111884
|
+
}
|
|
111885
|
+
},
|
|
111886
|
+
{
|
|
111887
|
+
"kind": "method",
|
|
111888
|
+
"name": "hostDisconnected",
|
|
111889
|
+
"return": {
|
|
111890
|
+
"type": {
|
|
111891
|
+
"text": "void"
|
|
111892
|
+
}
|
|
111893
|
+
}
|
|
111894
|
+
},
|
|
111895
|
+
{
|
|
111896
|
+
"kind": "field",
|
|
111897
|
+
"name": "field",
|
|
111898
|
+
"type": {
|
|
111899
|
+
"text": "HTMLInputElement | null"
|
|
111900
|
+
},
|
|
111901
|
+
"description": "The field, while it is drawn.",
|
|
111902
|
+
"readonly": true
|
|
111903
|
+
},
|
|
111904
|
+
{
|
|
111905
|
+
"kind": "field",
|
|
111906
|
+
"name": "filtering",
|
|
111907
|
+
"type": {
|
|
111908
|
+
"text": "boolean"
|
|
111909
|
+
},
|
|
111910
|
+
"description": "Whether the filter is narrowing the rows.",
|
|
111911
|
+
"readonly": true
|
|
111912
|
+
},
|
|
111913
|
+
{
|
|
111914
|
+
"kind": "method",
|
|
111915
|
+
"name": "kept",
|
|
111916
|
+
"return": {
|
|
111917
|
+
"type": {
|
|
111918
|
+
"text": "boolean"
|
|
111919
|
+
}
|
|
111920
|
+
},
|
|
111921
|
+
"parameters": [
|
|
111922
|
+
{
|
|
111923
|
+
"name": "row",
|
|
111924
|
+
"type": {
|
|
111925
|
+
"text": "Row"
|
|
111926
|
+
}
|
|
111927
|
+
}
|
|
111928
|
+
],
|
|
111929
|
+
"description": "Whether the filter keeps a row: one of another page, or one whose words it matches."
|
|
111930
|
+
},
|
|
111931
|
+
{
|
|
111932
|
+
"kind": "field",
|
|
111933
|
+
"name": "keptRows",
|
|
111934
|
+
"type": {
|
|
111935
|
+
"text": "Row[]"
|
|
111936
|
+
},
|
|
111937
|
+
"privacy": "private",
|
|
111938
|
+
"description": "The rows of the page the filter narrows that it keeps.",
|
|
111939
|
+
"readonly": true
|
|
111940
|
+
},
|
|
111941
|
+
{
|
|
111942
|
+
"kind": "method",
|
|
111943
|
+
"name": "request",
|
|
111944
|
+
"return": {
|
|
111945
|
+
"type": {
|
|
111946
|
+
"text": "void"
|
|
111947
|
+
}
|
|
111948
|
+
},
|
|
111949
|
+
"parameters": [
|
|
111950
|
+
{
|
|
111951
|
+
"name": "value",
|
|
111952
|
+
"type": {
|
|
111953
|
+
"text": "string"
|
|
111954
|
+
}
|
|
111955
|
+
}
|
|
111956
|
+
],
|
|
111957
|
+
"description": "Asks to filter by new text, which the field and `filter` then hold. A\nrefusal keeps every row showing, for a page that narrows them itself."
|
|
111958
|
+
},
|
|
111959
|
+
{
|
|
111960
|
+
"kind": "method",
|
|
111961
|
+
"name": "by",
|
|
111962
|
+
"privacy": "private",
|
|
111963
|
+
"return": {
|
|
111964
|
+
"type": {
|
|
111965
|
+
"text": "void"
|
|
111966
|
+
}
|
|
111967
|
+
},
|
|
111968
|
+
"parameters": [
|
|
111969
|
+
{
|
|
111970
|
+
"name": "value",
|
|
111971
|
+
"type": {
|
|
111972
|
+
"text": "string"
|
|
111973
|
+
}
|
|
111974
|
+
}
|
|
111975
|
+
],
|
|
111976
|
+
"description": "Filters by what the reader typed, and highlights the first row kept."
|
|
111977
|
+
},
|
|
111978
|
+
{
|
|
111979
|
+
"kind": "method",
|
|
111980
|
+
"name": "highlight",
|
|
111981
|
+
"return": {
|
|
111982
|
+
"type": {
|
|
111983
|
+
"text": "void"
|
|
111984
|
+
}
|
|
111985
|
+
},
|
|
111986
|
+
"parameters": [
|
|
111987
|
+
{
|
|
111988
|
+
"name": "row",
|
|
111989
|
+
"type": {
|
|
111990
|
+
"text": "Row | undefined"
|
|
111991
|
+
}
|
|
111992
|
+
}
|
|
111993
|
+
],
|
|
111994
|
+
"description": "Puts the highlight on a row, which the field names with\n`aria-activedescendant`. An element reference, because the field is in\nthe menu's shadow root and the row in the tree around it, the one\ndirection a reference crosses."
|
|
111995
|
+
},
|
|
111996
|
+
{
|
|
111997
|
+
"kind": "method",
|
|
111998
|
+
"name": "keydown",
|
|
111999
|
+
"return": {
|
|
112000
|
+
"type": {
|
|
112001
|
+
"text": "boolean"
|
|
112002
|
+
}
|
|
112003
|
+
},
|
|
112004
|
+
"parameters": [
|
|
112005
|
+
{
|
|
112006
|
+
"name": "event",
|
|
112007
|
+
"type": {
|
|
112008
|
+
"text": "KeyboardEvent"
|
|
112009
|
+
}
|
|
112010
|
+
},
|
|
112011
|
+
{
|
|
112012
|
+
"name": "items",
|
|
112013
|
+
"type": {
|
|
112014
|
+
"text": "Row[]"
|
|
112015
|
+
}
|
|
112016
|
+
},
|
|
112017
|
+
{
|
|
112018
|
+
"name": "at",
|
|
112019
|
+
"type": {
|
|
112020
|
+
"text": "number"
|
|
112021
|
+
}
|
|
112022
|
+
}
|
|
112023
|
+
],
|
|
112024
|
+
"description": "Answers a key the field takes, and returns whether it did: Up and Down\nmove the highlight through the rows kept, Enter presses the highlighted\nrow, and Escape over text empties the filter, the next one going back or\nclosing."
|
|
112025
|
+
},
|
|
112026
|
+
{
|
|
112027
|
+
"kind": "field",
|
|
112028
|
+
"name": "handleMouseDown",
|
|
112029
|
+
"privacy": "private",
|
|
112030
|
+
"readonly": true,
|
|
112031
|
+
"description": "Keeps focus in the field through a press on a row or the way back, as\nReact Aria's virtual focus does: the press still chooses."
|
|
112032
|
+
},
|
|
112033
|
+
{
|
|
112034
|
+
"kind": "field",
|
|
112035
|
+
"name": "handleInput",
|
|
112036
|
+
"privacy": "private",
|
|
112037
|
+
"readonly": true
|
|
112038
|
+
},
|
|
112039
|
+
{
|
|
112040
|
+
"kind": "method",
|
|
112041
|
+
"name": "status",
|
|
112042
|
+
"return": {
|
|
112043
|
+
"type": {
|
|
112044
|
+
"text": "TemplateResult | undefined"
|
|
112045
|
+
}
|
|
112046
|
+
},
|
|
112047
|
+
"description": "What a filter that keeps no rows shows, or nothing where it keeps some.\n\nIt sets what the live region says as well: `no-results-text` where the\nfilter keeps no rows, and how many it keeps where it keeps some, as React\nAria and Web Awesome say the count. Only \"No matches\" was said before\nthat, so a filter that kept forty rows and one that kept one sounded the\nsame."
|
|
112048
|
+
},
|
|
112049
|
+
{
|
|
112050
|
+
"kind": "method",
|
|
112051
|
+
"name": "drawFilter",
|
|
112052
|
+
"return": {
|
|
112053
|
+
"type": {
|
|
112054
|
+
"text": "TemplateResult"
|
|
112055
|
+
}
|
|
112056
|
+
},
|
|
112057
|
+
"parameters": [
|
|
112058
|
+
{
|
|
112059
|
+
"name": "rows",
|
|
112060
|
+
"type": {
|
|
112061
|
+
"text": "TemplateResult"
|
|
112062
|
+
}
|
|
112063
|
+
},
|
|
112064
|
+
{
|
|
112065
|
+
"name": "busy",
|
|
112066
|
+
"type": {
|
|
112067
|
+
"text": "string | typeof nothing"
|
|
112068
|
+
}
|
|
112069
|
+
}
|
|
112070
|
+
],
|
|
112071
|
+
"description": "The field and then the `menu`, for the menu to draw in its surface. See `drawFilter`."
|
|
112072
|
+
}
|
|
112073
|
+
],
|
|
112074
|
+
"helix": {}
|
|
112075
|
+
},
|
|
112076
|
+
{
|
|
112077
|
+
"kind": "function",
|
|
112078
|
+
"name": "filterMenu",
|
|
112079
|
+
"return": {
|
|
112080
|
+
"type": {
|
|
112081
|
+
"text": "void"
|
|
112082
|
+
}
|
|
112083
|
+
},
|
|
112084
|
+
"parameters": [
|
|
112085
|
+
{
|
|
112086
|
+
"name": "element",
|
|
112087
|
+
"type": {
|
|
112088
|
+
"text": "typeof HelixHeadlessMenu"
|
|
112089
|
+
}
|
|
112090
|
+
},
|
|
112091
|
+
{
|
|
112092
|
+
"name": "sheet",
|
|
112093
|
+
"optional": true,
|
|
112094
|
+
"type": {
|
|
112095
|
+
"text": "CSSResult"
|
|
112096
|
+
}
|
|
112097
|
+
}
|
|
112098
|
+
],
|
|
112099
|
+
"description": "Gives every menu of a class a `MenuFilterController`, which `filterable`\nturns on.\n\nThe entries call it for their own tier's class: the headless entry for\n`HelixHeadlessMenu`, and the styled one for `HelixMenu`, with the sheet that\ndraws the field. **Menus already on the page are given one too**, and drawn\nagain, so a page that imports the menu and then this entry gets the field."
|
|
112100
|
+
}
|
|
112101
|
+
],
|
|
112102
|
+
"exports": [
|
|
112103
|
+
{
|
|
112104
|
+
"kind": "js",
|
|
112105
|
+
"name": "drawFilter",
|
|
112106
|
+
"declaration": {
|
|
112107
|
+
"name": "drawFilter",
|
|
112108
|
+
"module": "src/menu/filter/menu-filter.ts"
|
|
112109
|
+
}
|
|
112110
|
+
},
|
|
112111
|
+
{
|
|
112112
|
+
"kind": "js",
|
|
112113
|
+
"name": "MenuFilterController",
|
|
112114
|
+
"declaration": {
|
|
112115
|
+
"name": "MenuFilterController",
|
|
112116
|
+
"module": "src/menu/filter/menu-filter.ts"
|
|
112117
|
+
}
|
|
112118
|
+
},
|
|
112119
|
+
{
|
|
112120
|
+
"kind": "js",
|
|
112121
|
+
"name": "filterMenu",
|
|
112122
|
+
"declaration": {
|
|
112123
|
+
"name": "filterMenu",
|
|
112124
|
+
"module": "src/menu/filter/menu-filter.ts"
|
|
112125
|
+
}
|
|
112126
|
+
}
|
|
112127
|
+
]
|
|
112128
|
+
},
|
|
111683
112129
|
{
|
|
111684
112130
|
"kind": "javascript-module",
|
|
111685
112131
|
"path": "src/menu/index.ts",
|
|
@@ -112736,7 +113182,7 @@
|
|
|
112736
113182
|
"declarations": [
|
|
112737
113183
|
{
|
|
112738
113184
|
"kind": "class",
|
|
112739
|
-
"description": "The trigger is slotted and stays your own element, as with the tooltip. The\nmenu renders its surface in the top layer with the popover API, so an\nancestor with `overflow: hidden` does not clip it and it needs no `z-index`.\n\nSlot a `helix-button` or `helix-icon-button` as the trigger, and the menu\ntells it that it opens a menu and whether the menu is open, inside its own\nshadow root. On a plain element, such as a `<button>`, the menu writes\n`aria-haspopup=\"menu\"` and `aria-expanded`, from a frame after its own first\nrender, so a server's markup is never changed while a framework hydrates it.\nIt never writes `aria-expanded` where you wrote it yourself.\n\nSubmenus drill down by default. A submenu replaces the panel's content, and a\nback row returns to the previous page. One panel stays inside a narrow\nwindow, and works on touch screens, which have no hover. Focus follows a\nmouse resting on a row in either mode, and a drilled page is a `menu` named\nby the row that opened it.\n\n**`submenus=\"flyout\"` opens each submenu in a panel of its own beside its\nrow**, as React Aria's `SubmenuTrigger` and Radix's `Sub` do. Resting the\npointer on the row opens it, and a pointer crossing toward the open panel\nover the rows between keeps it open, as Radix's grace area does. Right Arrow\nopens a row's submenu on its first row, and Left Arrow or Escape closes it\nand returns focus to the row, the two arrows swapping on a right-to-left\npage. The row says `aria-expanded`, and the panel is a `menu` named by the\nrow.\n\nThe root holds which page is open, because only one page shows at a time. It\nsets this on items as a property, never as an attribute. An attribute written\nonto your element after it upgrades causes a hydration mismatch.\n\nGroup rows under a heading with `Menu.Section`, which is a `group` named by\nits heading. Between runs of rows, a `<helix-divider>` is a separator a\nscreen reader announces.\n\nKeys: Enter, Space or Down Arrow on the trigger opens the menu on its first\nrow, and Up Arrow on its last. In the menu, Up and Down Arrow move between\nrows, Home and End go to the first and the last, a typed letter moves to\nthe next row whose name starts with it, Enter and Space choose (Space on a\nchoice row changes it and leaves the menu open), Right Arrow\nopens a row's submenu and Left Arrow goes back, the two swapping on a\nright-to-left page. Left Arrow on the top page does nothing. Escape closes\nthe menu and returns focus to the trigger. Tab closes it and moves on.\n\nWhile it is open, the surface carries the trigger's width as\n`--floating-anchor-inline-size` and the room left below it as\n`--floating-available-block-size`, as Radix's dropdown menu publishes its\ntrigger's width, for a menu as wide as its trigger:\n`helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }`.\n\n**The choices in one place.** `checkedValues` holds the values of the rows\nthat are checked, anywhere in the menu, and setting it checks exactly\nthose rows, as React Aria's `selectedKeys` does. `change` is sent on the\nmenu when a reader's choice changes it.\n\nWith `context`, the trigger is an area and the menu is its context menu: a\nright-click, a long press, Shift+F10 or the menu key over the area opens it\nat the pointer, or at the area's corner from the keyboard, as Radix's context\nmenu does. A press on the area does not open it, and closing it returns focus\nto where it was. A touch or a pen held still on the area opens it too, on\nevery browser, since iOS sends no `contextmenu` for one.\n\n**A trigger with its own action.** With `open-on=\"long-press\"`, a press on\nthe trigger is the trigger's own, and a press held for half a second opens\nthe menu, as React Aria's `trigger=\"longPress\"` does. Alt+Down or Alt+Up\nopens it from the keyboard, and the trigger is described by\n`long-press-label`, which says so.\n\n**A filter field
|
|
113185
|
+
"description": "The trigger is slotted and stays your own element, as with the tooltip. The\nmenu renders its surface in the top layer with the popover API, so an\nancestor with `overflow: hidden` does not clip it and it needs no `z-index`.\n\nSlot a `helix-button` or `helix-icon-button` as the trigger, and the menu\ntells it that it opens a menu and whether the menu is open, inside its own\nshadow root. On a plain element, such as a `<button>`, the menu writes\n`aria-haspopup=\"menu\"` and `aria-expanded`, from a frame after its own first\nrender, so a server's markup is never changed while a framework hydrates it.\nIt never writes `aria-expanded` where you wrote it yourself.\n\nSubmenus drill down by default. A submenu replaces the panel's content, and a\nback row returns to the previous page. One panel stays inside a narrow\nwindow, and works on touch screens, which have no hover. Focus follows a\nmouse resting on a row in either mode, and a drilled page is a `menu` named\nby the row that opened it.\n\n**`submenus=\"flyout\"` opens each submenu in a panel of its own beside its\nrow**, as React Aria's `SubmenuTrigger` and Radix's `Sub` do. Resting the\npointer on the row opens it, and a pointer crossing toward the open panel\nover the rows between keeps it open, as Radix's grace area does. Right Arrow\nopens a row's submenu on its first row, and Left Arrow or Escape closes it\nand returns focus to the row, the two arrows swapping on a right-to-left\npage. The row says `aria-expanded`, and the panel is a `menu` named by the\nrow.\n\nThe root holds which page is open, because only one page shows at a time. It\nsets this on items as a property, never as an attribute. An attribute written\nonto your element after it upgrades causes a hydration mismatch.\n\nGroup rows under a heading with `Menu.Section`, which is a `group` named by\nits heading. Between runs of rows, a `<helix-divider>` is a separator a\nscreen reader announces.\n\nKeys: Enter, Space or Down Arrow on the trigger opens the menu on its first\nrow, and Up Arrow on its last. In the menu, Up and Down Arrow move between\nrows, Home and End go to the first and the last, a typed letter moves to\nthe next row whose name starts with it, Enter and Space choose (Space on a\nchoice row changes it and leaves the menu open), Right Arrow\nopens a row's submenu and Left Arrow goes back, the two swapping on a\nright-to-left page. Left Arrow on the top page does nothing. Escape closes\nthe menu and returns focus to the trigger. Tab closes it and moves on.\n\nWhile it is open, the surface carries the trigger's width as\n`--floating-anchor-inline-size` and the room left below it as\n`--floating-available-block-size`, as Radix's dropdown menu publishes its\ntrigger's width, for a menu as wide as its trigger:\n`helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }`.\n\n**The choices in one place.** `checkedValues` holds the values of the rows\nthat are checked, anywhere in the menu, and setting it checks exactly\nthose rows, as React Aria's `selectedKeys` does. `change` is sent on the\nmenu when a reader's choice changes it.\n\nWith `context`, the trigger is an area and the menu is its context menu: a\nright-click, a long press, Shift+F10 or the menu key over the area opens it\nat the pointer, or at the area's corner from the keyboard, as Radix's context\nmenu does. A press on the area does not open it, and closing it returns focus\nto where it was. A touch or a pen held still on the area opens it too, on\nevery browser, since iOS sends no `contextmenu` for one.\n\n**A trigger with its own action.** With `open-on=\"long-press\"`, a press on\nthe trigger is the trigger's own, and a press held for half a second opens\nthe menu, as React Aria's `trigger=\"longPress\"` does. Alt+Down or Alt+Up\nopens it from the keyboard, and the trigger is described by\n`long-press-label`, which says so.\n\n**A filter field** is a separate import, `@fusion.dev/helix/menu/filter`, so\na menu that never filters carries none of its code:\n\n```js\nimport '@fusion.dev/helix/menu'\nimport '@fusion.dev/helix/menu/filter'\n```\n\nWith it imported and `filterable` set, the menu opens with focus in a field\nabove its rows, and typing narrows the rows of the page the keys move in,\nas React Aria's `Autocomplete` around a `Menu` does. A row is kept where its\nwords hold the filter, in any case, or where `filterMatch` says so. Each\npage starts unfiltered, and the filter is cleared as the menu closes. Where\ntyping keeps no row, the menu shows `no-results-text`. Focus stays in the\nfield: Up and Down Arrow move the highlight through the rows that are left,\nEnter chooses the highlighted row, Right Arrow opens its submenu, Left Arrow\non a submenu goes back, and Escape clears the filter and then closes the\nmenu. A screen reader hears how many rows the filter keeps\n(`results-label`). Home, End and the other keys move the caret and type. The field names\nthe highlighted row with `aria-activedescendant`, and the rows are a `menu`\nafter the field. Cancel `helix-filter` to keep every row\nshowing and narrow the rows yourself, such as by replacing them with rows\nfrom a server.",
|
|
112740
113186
|
"name": "HelixHeadlessMenu",
|
|
112741
113187
|
"cssProperties": [
|
|
112742
113188
|
{
|
|
@@ -112903,7 +113349,7 @@
|
|
|
112903
113349
|
"text": "boolean"
|
|
112904
113350
|
},
|
|
112905
113351
|
"default": "false",
|
|
112906
|
-
"description": "Whether the menu shows a field above its rows that narrows them as the\nreader types, with focus staying in the field.",
|
|
113352
|
+
"description": "Whether the menu shows a field above its rows that narrows them as the\nreader types, with focus staying in the field, once\n`@fusion.dev/helix/menu/filter` (or `@fusion.dev/helix-headless/menu/filter`)\nis imported. Without that import it does nothing, so a menu that never\nfilters carries none of the filter's code, and a development build says\nwhich import is missing.",
|
|
112907
113353
|
"attribute": "filterable"
|
|
112908
113354
|
},
|
|
112909
113355
|
{
|
|
@@ -113258,41 +113704,21 @@
|
|
|
113258
113704
|
},
|
|
113259
113705
|
{
|
|
113260
113706
|
"kind": "field",
|
|
113261
|
-
"name": "
|
|
113262
|
-
"type": {
|
|
113263
|
-
"text": "HTMLInputElement | null"
|
|
113264
|
-
},
|
|
113265
|
-
"privacy": "private",
|
|
113266
|
-
"description": "The filter field, with `filterable`.",
|
|
113267
|
-
"readonly": true
|
|
113268
|
-
},
|
|
113269
|
-
{
|
|
113270
|
-
"kind": "field",
|
|
113271
|
-
"name": "filterPage",
|
|
113707
|
+
"name": "filterer",
|
|
113272
113708
|
"type": {
|
|
113273
|
-
"text": "
|
|
113709
|
+
"text": "MenuFilterController | undefined"
|
|
113274
113710
|
},
|
|
113275
113711
|
"privacy": "private",
|
|
113276
|
-
"
|
|
113277
|
-
"description": "The submenu the filter narrows, or null for the top page."
|
|
113712
|
+
"description": "The filter `menu/filter` gives this menu, which `filterable` turns on.\n\nDeclared and never initialized, because the entry sets it from the\nconstructor Lit runs initializers in, which is before this class's own\nfields: an initializer here would set it back to `undefined`."
|
|
113278
113713
|
},
|
|
113279
113714
|
{
|
|
113280
113715
|
"kind": "field",
|
|
113281
|
-
"name": "
|
|
113716
|
+
"name": "filters",
|
|
113282
113717
|
"type": {
|
|
113283
|
-
"text": "
|
|
113718
|
+
"text": "MenuFilterController | undefined"
|
|
113284
113719
|
},
|
|
113285
113720
|
"privacy": "private",
|
|
113286
|
-
"description": "The filter
|
|
113287
|
-
},
|
|
113288
|
-
{
|
|
113289
|
-
"kind": "field",
|
|
113290
|
-
"name": "filtering",
|
|
113291
|
-
"type": {
|
|
113292
|
-
"text": "boolean"
|
|
113293
|
-
},
|
|
113294
|
-
"privacy": "private",
|
|
113295
|
-
"description": "Whether the filter is narrowing the rows.",
|
|
113721
|
+
"description": "The filter, while `filterable` is set and `menu/filter` is imported.",
|
|
113296
113722
|
"readonly": true
|
|
113297
113723
|
},
|
|
113298
113724
|
{
|
|
@@ -113312,7 +113738,7 @@
|
|
|
113312
113738
|
}
|
|
113313
113739
|
}
|
|
113314
113740
|
],
|
|
113315
|
-
"description": "Whether the filter keeps a row
|
|
113741
|
+
"description": "Whether the filter keeps a row, which every row is without one."
|
|
113316
113742
|
},
|
|
113317
113743
|
{
|
|
113318
113744
|
"kind": "method",
|
|
@@ -113331,41 +113757,7 @@
|
|
|
113331
113757
|
}
|
|
113332
113758
|
}
|
|
113333
113759
|
],
|
|
113334
|
-
"description": "Asks to filter by new text
|
|
113335
|
-
},
|
|
113336
|
-
{
|
|
113337
|
-
"kind": "field",
|
|
113338
|
-
"name": "handleFilterInput",
|
|
113339
|
-
"privacy": "private",
|
|
113340
|
-
"readonly": true
|
|
113341
|
-
},
|
|
113342
|
-
{
|
|
113343
|
-
"kind": "method",
|
|
113344
|
-
"name": "filterBy",
|
|
113345
|
-
"privacy": "private",
|
|
113346
|
-
"return": {
|
|
113347
|
-
"type": {
|
|
113348
|
-
"text": "void"
|
|
113349
|
-
}
|
|
113350
|
-
},
|
|
113351
|
-
"parameters": [
|
|
113352
|
-
{
|
|
113353
|
-
"name": "value",
|
|
113354
|
-
"type": {
|
|
113355
|
-
"text": "string"
|
|
113356
|
-
}
|
|
113357
|
-
}
|
|
113358
|
-
],
|
|
113359
|
-
"description": "Filters by what the reader typed, and highlights the first row kept."
|
|
113360
|
-
},
|
|
113361
|
-
{
|
|
113362
|
-
"kind": "field",
|
|
113363
|
-
"name": "highlighted",
|
|
113364
|
-
"type": {
|
|
113365
|
-
"text": "HelixHeadlessMenuItem | undefined"
|
|
113366
|
-
},
|
|
113367
|
-
"privacy": "private",
|
|
113368
|
-
"description": "The row the keys reached while focus stays in the filter field."
|
|
113760
|
+
"description": "Asks to filter by new text. See `MenuFilterController.request`."
|
|
113369
113761
|
},
|
|
113370
113762
|
{
|
|
113371
113763
|
"kind": "method",
|
|
@@ -113384,7 +113776,7 @@
|
|
|
113384
113776
|
}
|
|
113385
113777
|
}
|
|
113386
113778
|
],
|
|
113387
|
-
"description": "Moves the reader to a row: focus, or with
|
|
113779
|
+
"description": "Moves the reader to a row: focus, or with a filter the highlight, focus\nstaying in the filter field."
|
|
113388
113780
|
},
|
|
113389
113781
|
{
|
|
113390
113782
|
"kind": "field",
|
|
@@ -113630,13 +114022,6 @@
|
|
|
113630
114022
|
"readonly": true,
|
|
113631
114023
|
"description": "A press on the trigger starting: the start of a held one under\n`open-on=\"long-press\"`, or a touch or a pen held on a context menu's area."
|
|
113632
114024
|
},
|
|
113633
|
-
{
|
|
113634
|
-
"kind": "field",
|
|
113635
|
-
"name": "handleMouseDown",
|
|
113636
|
-
"privacy": "private",
|
|
113637
|
-
"readonly": true,
|
|
113638
|
-
"description": "Keeps focus in the filter field through a press on a row or the way\nback, as React Aria's virtual focus does: the press still chooses."
|
|
113639
|
-
},
|
|
113640
114025
|
{
|
|
113641
114026
|
"kind": "field",
|
|
113642
114027
|
"name": "handlePointerMove",
|
|
@@ -114573,7 +114958,7 @@
|
|
|
114573
114958
|
"text": "boolean"
|
|
114574
114959
|
},
|
|
114575
114960
|
"default": "false",
|
|
114576
|
-
"description": "Whether the menu shows a field above its rows that narrows them as the\nreader types, with focus staying in the field.",
|
|
114961
|
+
"description": "Whether the menu shows a field above its rows that narrows them as the\nreader types, with focus staying in the field, once\n`@fusion.dev/helix/menu/filter` (or `@fusion.dev/helix-headless/menu/filter`)\nis imported. Without that import it does nothing, so a menu that never\nfilters carries none of the filter's code, and a development build says\nwhich import is missing.",
|
|
114577
114962
|
"fieldName": "filterable"
|
|
114578
114963
|
},
|
|
114579
114964
|
{
|
|
@@ -162483,7 +162868,7 @@
|
|
|
162483
162868
|
"text": "string"
|
|
162484
162869
|
},
|
|
162485
162870
|
"default": "''",
|
|
162486
|
-
"description": "The column widths as one track list, written once on the table.\n\nWith `TableColumn` children, each track sizes the column in its place, a\nhidden column counted, so hiding one takes its track with it and the rest\nkeep theirs. The columns decide how many tracks there are and this list\nonly how wide: a track past the last column is dropped, and a column past\nthe last track shares what is left. With no columns declared it is the\nwhole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`\nis one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves\nits column at the default rather than taking the table down to one column.\n\n**A column's own `width` wins over its track here.** The width is written\non the column it sizes, which is the more particular statement, and it is\nwhere a resize lands: a reader dragging a column's edge writes `width`, so\nwere this list to win, the drag would move the separator and leave the\ntrack where the list put it. This is the table's default for its columns,\nand each column may say otherwise.\n\n**It is also the only track list a server can send.** The shim has no tree\nto walk, so a render there knows of no columns and this attribute is the\nwhole answer: a table given one lays its grid out in the first paint, and a\ntable sized only by its columns
|
|
162871
|
+
"description": "The column widths as one track list, written once on the table.\n\nWith `TableColumn` children, each track sizes the column in its place, a\nhidden column counted, so hiding one takes its track with it and the rest\nkeep theirs. The columns decide how many tracks there are and this list\nonly how wide: a track past the last column is dropped, and a column past\nthe last track shares what is left. With no columns declared it is the\nwhole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`\nis one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves\nits column at the default rather than taking the table down to one column.\n\n**A column's own `width` wins over its track here.** The width is written\non the column it sizes, which is the more particular statement, and it is\nwhere a resize lands: a reader dragging a column's edge writes `width`, so\nwere this list to win, the drag would move the separator and leave the\ntrack where the list put it. This is the table's default for its columns,\nand each column may say otherwise.\n\n**It is also the only track list a server can send.** The shim has no tree\nto walk, so a render there knows of no columns and this attribute is the\nwhole answer: a table given one lays its grid out in the first paint, and a\ntable sized only by its columns takes, until it upgrades, a track for each\ncolumn at the width a column with no `width` takes (`helix.css`).\n\nData Table takes the same list, for the same reason: a data table that\nserves its first page as rows is laid out by it before it upgrades.",
|
|
162487
162872
|
"attribute": "columns"
|
|
162488
162873
|
},
|
|
162489
162874
|
{
|
|
@@ -164419,7 +164804,7 @@
|
|
|
164419
164804
|
"text": "string"
|
|
164420
164805
|
},
|
|
164421
164806
|
"default": "''",
|
|
164422
|
-
"description": "The column widths as one track list, written once on the table.\n\nWith `TableColumn` children, each track sizes the column in its place, a\nhidden column counted, so hiding one takes its track with it and the rest\nkeep theirs. The columns decide how many tracks there are and this list\nonly how wide: a track past the last column is dropped, and a column past\nthe last track shares what is left. With no columns declared it is the\nwhole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`\nis one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves\nits column at the default rather than taking the table down to one column.\n\n**A column's own `width` wins over its track here.** The width is written\non the column it sizes, which is the more particular statement, and it is\nwhere a resize lands: a reader dragging a column's edge writes `width`, so\nwere this list to win, the drag would move the separator and leave the\ntrack where the list put it. This is the table's default for its columns,\nand each column may say otherwise.\n\n**It is also the only track list a server can send.** The shim has no tree\nto walk, so a render there knows of no columns and this attribute is the\nwhole answer: a table given one lays its grid out in the first paint, and a\ntable sized only by its columns
|
|
164807
|
+
"description": "The column widths as one track list, written once on the table.\n\nWith `TableColumn` children, each track sizes the column in its place, a\nhidden column counted, so hiding one takes its track with it and the rest\nkeep theirs. The columns decide how many tracks there are and this list\nonly how wide: a track past the last column is dropped, and a column past\nthe last track shares what is left. With no columns declared it is the\nwhole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`\nis one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves\nits column at the default rather than taking the table down to one column.\n\n**A column's own `width` wins over its track here.** The width is written\non the column it sizes, which is the more particular statement, and it is\nwhere a resize lands: a reader dragging a column's edge writes `width`, so\nwere this list to win, the drag would move the separator and leave the\ntrack where the list put it. This is the table's default for its columns,\nand each column may say otherwise.\n\n**It is also the only track list a server can send.** The shim has no tree\nto walk, so a render there knows of no columns and this attribute is the\nwhole answer: a table given one lays its grid out in the first paint, and a\ntable sized only by its columns takes, until it upgrades, a track for each\ncolumn at the width a column with no `width` takes (`helix.css`).\n\nData Table takes the same list, for the same reason: a data table that\nserves its first page as rows is laid out by it before it upgrades.",
|
|
164423
164808
|
"fieldName": "columns"
|
|
164424
164809
|
},
|
|
164425
164810
|
{
|
|
@@ -165527,6 +165912,46 @@
|
|
|
165527
165912
|
}
|
|
165528
165913
|
]
|
|
165529
165914
|
},
|
|
165915
|
+
{
|
|
165916
|
+
"kind": "javascript-module",
|
|
165917
|
+
"path": "src/table/tracks.ts",
|
|
165918
|
+
"declarations": [
|
|
165919
|
+
{
|
|
165920
|
+
"kind": "function",
|
|
165921
|
+
"name": "tracksOf",
|
|
165922
|
+
"return": {
|
|
165923
|
+
"type": {
|
|
165924
|
+
"text": "string[]"
|
|
165925
|
+
}
|
|
165926
|
+
},
|
|
165927
|
+
"parameters": [
|
|
165928
|
+
{
|
|
165929
|
+
"name": "list",
|
|
165930
|
+
"type": {
|
|
165931
|
+
"text": "string"
|
|
165932
|
+
}
|
|
165933
|
+
},
|
|
165934
|
+
{
|
|
165935
|
+
"name": "wanted",
|
|
165936
|
+
"type": {
|
|
165937
|
+
"text": "number"
|
|
165938
|
+
}
|
|
165939
|
+
}
|
|
165940
|
+
],
|
|
165941
|
+
"description": "The first `wanted` tracks of a track list, one entry each, so every declared\ncolumn can take the one in its place.\n\nSplit on the spaces between tracks and never inside a function, so\n`minmax(0, 1fr)` stays one track. A `repeat()` with a count is that many\ntracks, written out; an automatic one names no count and yields none. Line\nnames go with the track after them.\n\nEverything above the split is a fact about a grid track list rather than\nabout a value list, which is why only the split itself is shared.\n\n**A track the grid would refuse yields nothing either**, where the platform\ncan say. One invalid track makes the whole `grid-template-columns` invalid,\nwhich a grid ignores in silence and draws as one column. That is the failure\nthat once had `columns` deprecated, a list of headings handed over as widths,\nand dealt out a track at a time it costs the one column its width and no\nmore."
|
|
165942
|
+
}
|
|
165943
|
+
],
|
|
165944
|
+
"exports": [
|
|
165945
|
+
{
|
|
165946
|
+
"kind": "js",
|
|
165947
|
+
"name": "tracksOf",
|
|
165948
|
+
"declaration": {
|
|
165949
|
+
"name": "tracksOf",
|
|
165950
|
+
"module": "src/table/tracks.ts"
|
|
165951
|
+
}
|
|
165952
|
+
}
|
|
165953
|
+
]
|
|
165954
|
+
},
|
|
165530
165955
|
{
|
|
165531
165956
|
"kind": "javascript-module",
|
|
165532
165957
|
"path": "src/tabs/index.ts",
|
|
@@ -172618,6 +173043,19 @@
|
|
|
172618
173043
|
"attribute": "mode",
|
|
172619
173044
|
"reflects": true
|
|
172620
173045
|
},
|
|
173046
|
+
{
|
|
173047
|
+
"kind": "field",
|
|
173048
|
+
"name": "nowLabel",
|
|
173049
|
+
"type": {
|
|
173050
|
+
"text": "string"
|
|
173051
|
+
},
|
|
173052
|
+
"default": "'Now'",
|
|
173053
|
+
"description": "The words on the list's button that chooses the current time, drawn with\n`show-now`.",
|
|
173054
|
+
"attribute": "now-label",
|
|
173055
|
+
"helix": {
|
|
173056
|
+
"words": true
|
|
173057
|
+
}
|
|
173058
|
+
},
|
|
172621
173059
|
{
|
|
172622
173060
|
"kind": "field",
|
|
172623
173061
|
"name": "placeholder",
|
|
@@ -172693,6 +173131,16 @@
|
|
|
172693
173131
|
"description": "Whether times carry their seconds: the value is `HH:mm:ss`, a typed time\nmay give them, the field writes them, and the list's `step` counts seconds.\nSee Time Picker's `seconds`.",
|
|
172694
173132
|
"attribute": "seconds"
|
|
172695
173133
|
},
|
|
173134
|
+
{
|
|
173135
|
+
"kind": "field",
|
|
173136
|
+
"name": "showNow",
|
|
173137
|
+
"type": {
|
|
173138
|
+
"text": "boolean"
|
|
173139
|
+
},
|
|
173140
|
+
"default": "false",
|
|
173141
|
+
"description": "Draws a button under the times in the list that chooses the current time,\nmoved to the nearest time on offer. See Time Picker's `show-now`. Its words\nare `now-label`.",
|
|
173142
|
+
"attribute": "show-now"
|
|
173143
|
+
},
|
|
172696
173144
|
{
|
|
172697
173145
|
"kind": "field",
|
|
172698
173146
|
"name": "step",
|
|
@@ -175910,6 +176358,15 @@
|
|
|
175910
176358
|
"description": "How many times the field holds at once.\n\nAbsent is one. `range` holds a start and an end, `multiple` holds any\nnumber, and both are carried as one comma-separated value, which is what a\nform submits. `TimePicker` carries the longer note on the interaction and\non why a wheel cannot do either.",
|
|
175911
176359
|
"fieldName": "mode"
|
|
175912
176360
|
},
|
|
176361
|
+
{
|
|
176362
|
+
"name": "now-label",
|
|
176363
|
+
"type": {
|
|
176364
|
+
"text": "string"
|
|
176365
|
+
},
|
|
176366
|
+
"default": "'Now'",
|
|
176367
|
+
"description": "The words on the list's button that chooses the current time, drawn with\n`show-now`.",
|
|
176368
|
+
"fieldName": "nowLabel"
|
|
176369
|
+
},
|
|
175913
176370
|
{
|
|
175914
176371
|
"name": "placeholder",
|
|
175915
176372
|
"type": {
|
|
@@ -175964,6 +176421,15 @@
|
|
|
175964
176421
|
"description": "Whether times carry their seconds: the value is `HH:mm:ss`, a typed time\nmay give them, the field writes them, and the list's `step` counts seconds.\nSee Time Picker's `seconds`.",
|
|
175965
176422
|
"fieldName": "seconds"
|
|
175966
176423
|
},
|
|
176424
|
+
{
|
|
176425
|
+
"name": "show-now",
|
|
176426
|
+
"type": {
|
|
176427
|
+
"text": "boolean"
|
|
176428
|
+
},
|
|
176429
|
+
"default": "false",
|
|
176430
|
+
"description": "Draws a button under the times in the list that chooses the current time,\nmoved to the nearest time on offer. See Time Picker's `show-now`. Its words\nare `now-label`.",
|
|
176431
|
+
"fieldName": "showNow"
|
|
176432
|
+
},
|
|
175967
176433
|
{
|
|
175968
176434
|
"name": "step",
|
|
175969
176435
|
"type": {
|
|
@@ -202148,6 +202614,6 @@
|
|
|
202148
202614
|
],
|
|
202149
202615
|
"helix": {
|
|
202150
202616
|
"package": "@fusion.dev/helix-headless",
|
|
202151
|
-
"version": "0.
|
|
202617
|
+
"version": "0.185.0"
|
|
202152
202618
|
}
|
|
202153
202619
|
}
|