@fusion.dev/helix 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.
@@ -39555,6 +39555,22 @@
39555
39555
  "path": "src/code-block/index.ts",
39556
39556
  "declarations": [],
39557
39557
  "exports": [
39558
+ {
39559
+ "kind": "js",
39560
+ "name": "CodeBlockHighlighter",
39561
+ "declaration": {
39562
+ "name": "CodeBlockHighlighter",
39563
+ "package": "@fusion.dev/helix-headless/code-block"
39564
+ }
39565
+ },
39566
+ {
39567
+ "kind": "js",
39568
+ "name": "registerHighlighter",
39569
+ "declaration": {
39570
+ "name": "registerHighlighter",
39571
+ "package": "@fusion.dev/helix-headless/code-block"
39572
+ }
39573
+ },
39558
39574
  {
39559
39575
  "kind": "js",
39560
39576
  "name": "*",
@@ -39952,7 +39968,7 @@
39952
39968
  "type": {
39953
39969
  "text": "(code: string, language: string) => string | undefined"
39954
39970
  },
39955
- "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.",
39971
+ "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.",
39956
39972
  "inheritedFrom": {
39957
39973
  "name": "HelixHeadlessCodeBlock",
39958
39974
  "module": "src/code-block/root/code-block-root.ts"
@@ -57481,7 +57497,7 @@
57481
57497
  "declarations": [
57482
57498
  {
57483
57499
  "kind": "class",
57484
- "description": "Rows have hairline rules between them and no fill, and the headings are set\napart by weight and color. Helix shows depth with a single border and no\nelevation, and a header band would be elevation.\n\nThe grid scrolls in its own box, and the toolbar and footer sit outside it,\nso the search field stays in place when the columns scroll sideways.\n\n`windowed` draws only the rows in view, for a result too long to lay out at\nonce, and the headings stay in place while the rows scroll. It works with or\nwithout `paginated` and with either `mode`, so a page or a chunk from a\nserver can be windowed.\n\n**Write the first page as rows, so the served HTML carries the values.**\nWrite it under the columns as `helix-table-row` and `helix-table-cell`\nelements. `@fusion.dev/helix-styles/helix.css` lays them out as the table\ndraws them before it upgrades, and the table shows them until `rows` holds a\nrow.",
57500
+ "description": "Rows have hairline rules between them and no fill, and the headings are set\napart by weight and color. Helix shows depth with a single border and no\nelevation, and a header band would be elevation.\n\nThe grid scrolls in its own box, and the toolbar and footer sit outside it,\nso the search field stays in place when the columns scroll sideways.\n\n`windowed` draws only the rows in view, for a result too long to lay out at\nonce, and the headings stay in place while the rows scroll. It works with or\nwithout `paginated` and with either `mode`, so a page or a chunk from a\nserver can be windowed.\n\n**Write the first page as rows, so the served HTML carries the values.**\nWrite it under the columns as `helix-table-row` and `helix-table-cell`\nelements. `@fusion.dev/helix-styles/helix.css` lays them out as the table\ndraws them before it upgrades, and the table shows them until `rows` holds a\nrow. It holds the checkbox column and the pagination's row from the first\npaint, and takes the widths from `columns`, so nothing moves when the table\nupgrades or draws its own rows.",
57485
57501
  "name": "HelixDataTable",
57486
57502
  "cssProperties": [
57487
57503
  {
@@ -58452,6 +58468,20 @@
58452
58468
  "module": "src/data-table/root/data-table-root.ts"
58453
58469
  }
58454
58470
  },
58471
+ {
58472
+ "kind": "field",
58473
+ "name": "columns",
58474
+ "type": {
58475
+ "text": "string"
58476
+ },
58477
+ "default": "''",
58478
+ "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.",
58479
+ "attribute": "columns",
58480
+ "inheritedFrom": {
58481
+ "name": "HelixHeadlessDataTable",
58482
+ "module": "src/data-table/root/data-table-root.ts"
58483
+ }
58484
+ },
58455
58485
  {
58456
58486
  "kind": "field",
58457
58487
  "name": "defaultExpanded",
@@ -59918,7 +59948,7 @@
59918
59948
  "text": "string"
59919
59949
  },
59920
59950
  "privacy": "private",
59921
- "description": "The track list, from the columns if there are any.",
59951
+ "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.",
59922
59952
  "readonly": true,
59923
59953
  "inheritedFrom": {
59924
59954
  "name": "HelixHeadlessDataTable",
@@ -62128,6 +62158,19 @@
62128
62158
  "module": "src/data-table/root/data-table-root.ts"
62129
62159
  }
62130
62160
  },
62161
+ {
62162
+ "name": "columns",
62163
+ "type": {
62164
+ "text": "string"
62165
+ },
62166
+ "default": "''",
62167
+ "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.",
62168
+ "fieldName": "columns",
62169
+ "inheritedFrom": {
62170
+ "name": "HelixHeadlessDataTable",
62171
+ "module": "src/data-table/root/data-table-root.ts"
62172
+ }
62173
+ },
62131
62174
  {
62132
62175
  "name": "default-expanded",
62133
62176
  "type": {
@@ -104909,6 +104952,14 @@
104909
104952
  "module": "src/megamenu/index.js"
104910
104953
  }
104911
104954
  },
104955
+ {
104956
+ "kind": "js",
104957
+ "name": "*",
104958
+ "declaration": {
104959
+ "name": "*",
104960
+ "module": "src/menu/filter/index.js"
104961
+ }
104962
+ },
104912
104963
  {
104913
104964
  "kind": "js",
104914
104965
  "name": "*",
@@ -135521,6 +135572,49 @@
135521
135572
  }
135522
135573
  ]
135523
135574
  },
135575
+ {
135576
+ "kind": "javascript-module",
135577
+ "path": "src/menu/filter/index.ts",
135578
+ "declarations": [],
135579
+ "exports": [
135580
+ {
135581
+ "kind": "js",
135582
+ "name": "filterMenu",
135583
+ "declaration": {
135584
+ "name": "filterMenu",
135585
+ "package": "@fusion.dev/helix-headless/menu/filter"
135586
+ }
135587
+ },
135588
+ {
135589
+ "kind": "js",
135590
+ "name": "MenuFilterController",
135591
+ "declaration": {
135592
+ "name": "MenuFilterController",
135593
+ "package": "@fusion.dev/helix-headless/menu/filter"
135594
+ }
135595
+ }
135596
+ ]
135597
+ },
135598
+ {
135599
+ "kind": "javascript-module",
135600
+ "path": "src/menu/filter/menu-filter.css.ts",
135601
+ "declarations": [
135602
+ {
135603
+ "kind": "variable",
135604
+ "name": "styles"
135605
+ }
135606
+ ],
135607
+ "exports": [
135608
+ {
135609
+ "kind": "js",
135610
+ "name": "styles",
135611
+ "declaration": {
135612
+ "name": "styles",
135613
+ "module": "src/menu/filter/menu-filter.css.ts"
135614
+ }
135615
+ }
135616
+ ]
135617
+ },
135524
135618
  {
135525
135619
  "kind": "javascript-module",
135526
135620
  "path": "src/menu/index.ts",
@@ -137397,7 +137491,7 @@
137397
137491
  "text": "boolean"
137398
137492
  },
137399
137493
  "default": "false",
137400
- "description": "Whether the menu shows a field above its rows that narrows them as the\nreader types, with focus staying in the field.",
137494
+ "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.",
137401
137495
  "attribute": "filterable",
137402
137496
  "inheritedFrom": {
137403
137497
  "name": "HelixHeadlessMenu",
@@ -137888,13 +137982,12 @@
137888
137982
  },
137889
137983
  {
137890
137984
  "kind": "field",
137891
- "name": "field",
137985
+ "name": "filterer",
137892
137986
  "type": {
137893
- "text": "HTMLInputElement | null"
137987
+ "text": "MenuFilterController | undefined"
137894
137988
  },
137895
137989
  "privacy": "private",
137896
- "description": "The filter field, with `filterable`.",
137897
- "readonly": true,
137990
+ "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`.",
137898
137991
  "inheritedFrom": {
137899
137992
  "name": "HelixHeadlessMenu",
137900
137993
  "module": "src/menu/root/menu-root.ts"
@@ -137902,39 +137995,12 @@
137902
137995
  },
137903
137996
  {
137904
137997
  "kind": "field",
137905
- "name": "filterPage",
137998
+ "name": "filters",
137906
137999
  "type": {
137907
- "text": "HelixHeadlessMenuItem | null"
138000
+ "text": "MenuFilterController | undefined"
137908
138001
  },
137909
138002
  "privacy": "private",
137910
- "default": "null",
137911
- "description": "The submenu the filter narrows, or null for the top page.",
137912
- "inheritedFrom": {
137913
- "name": "HelixHeadlessMenu",
137914
- "module": "src/menu/root/menu-root.ts"
137915
- }
137916
- },
137917
- {
137918
- "kind": "field",
137919
- "name": "refused",
137920
- "type": {
137921
- "text": "string | undefined"
137922
- },
137923
- "privacy": "private",
137924
- "description": "The filter a listener refused, which narrows nothing.",
137925
- "inheritedFrom": {
137926
- "name": "HelixHeadlessMenu",
137927
- "module": "src/menu/root/menu-root.ts"
137928
- }
137929
- },
137930
- {
137931
- "kind": "field",
137932
- "name": "filtering",
137933
- "type": {
137934
- "text": "boolean"
137935
- },
137936
- "privacy": "private",
137937
- "description": "Whether the filter is narrowing the rows.",
138003
+ "description": "The filter, while `filterable` is set and `menu/filter` is imported.",
137938
138004
  "readonly": true,
137939
138005
  "inheritedFrom": {
137940
138006
  "name": "HelixHeadlessMenu",
@@ -137958,7 +138024,7 @@
137958
138024
  }
137959
138025
  }
137960
138026
  ],
137961
- "description": "Whether the filter keeps a row: one of another page, or one whose words it matches.",
138027
+ "description": "Whether the filter keeps a row, which every row is without one.",
137962
138028
  "inheritedFrom": {
137963
138029
  "name": "HelixHeadlessMenu",
137964
138030
  "module": "src/menu/root/menu-root.ts"
@@ -137981,53 +138047,7 @@
137981
138047
  }
137982
138048
  }
137983
138049
  ],
137984
- "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.",
137985
- "inheritedFrom": {
137986
- "name": "HelixHeadlessMenu",
137987
- "module": "src/menu/root/menu-root.ts"
137988
- }
137989
- },
137990
- {
137991
- "kind": "field",
137992
- "name": "handleFilterInput",
137993
- "privacy": "private",
137994
- "readonly": true,
137995
- "inheritedFrom": {
137996
- "name": "HelixHeadlessMenu",
137997
- "module": "src/menu/root/menu-root.ts"
137998
- }
137999
- },
138000
- {
138001
- "kind": "method",
138002
- "name": "filterBy",
138003
- "privacy": "private",
138004
- "return": {
138005
- "type": {
138006
- "text": "void"
138007
- }
138008
- },
138009
- "parameters": [
138010
- {
138011
- "name": "value",
138012
- "type": {
138013
- "text": "string"
138014
- }
138015
- }
138016
- ],
138017
- "description": "Filters by what the reader typed, and highlights the first row kept.",
138018
- "inheritedFrom": {
138019
- "name": "HelixHeadlessMenu",
138020
- "module": "src/menu/root/menu-root.ts"
138021
- }
138022
- },
138023
- {
138024
- "kind": "field",
138025
- "name": "highlighted",
138026
- "type": {
138027
- "text": "HelixHeadlessMenuItem | undefined"
138028
- },
138029
- "privacy": "private",
138030
- "description": "The row the keys reached while focus stays in the filter field.",
138050
+ "description": "Asks to filter by new text. See `MenuFilterController.request`.",
138031
138051
  "inheritedFrom": {
138032
138052
  "name": "HelixHeadlessMenu",
138033
138053
  "module": "src/menu/root/menu-root.ts"
@@ -138050,7 +138070,7 @@
138050
138070
  }
138051
138071
  }
138052
138072
  ],
138053
- "description": "Moves the reader to a row: focus, or with `filterable` the highlight,\nwhich the field names with `aria-activedescendant`. An element reference,\nbecause the field is in this shadow root and the row in the tree around\nit, the one direction a reference crosses.",
138073
+ "description": "Moves the reader to a row: focus, or with a filter the highlight, focus\nstaying in the filter field.",
138054
138074
  "inheritedFrom": {
138055
138075
  "name": "HelixHeadlessMenu",
138056
138076
  "module": "src/menu/root/menu-root.ts"
@@ -138384,17 +138404,6 @@
138384
138404
  "module": "src/menu/root/menu-root.ts"
138385
138405
  }
138386
138406
  },
138387
- {
138388
- "kind": "field",
138389
- "name": "handleMouseDown",
138390
- "privacy": "private",
138391
- "readonly": true,
138392
- "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.",
138393
- "inheritedFrom": {
138394
- "name": "HelixHeadlessMenu",
138395
- "module": "src/menu/root/menu-root.ts"
138396
- }
138397
- },
138398
138407
  {
138399
138408
  "kind": "field",
138400
138409
  "name": "handlePointerMove",
@@ -139179,7 +139188,7 @@
139179
139188
  "text": "boolean"
139180
139189
  },
139181
139190
  "default": "false",
139182
- "description": "Whether the menu shows a field above its rows that narrows them as the\nreader types, with focus staying in the field.",
139191
+ "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.",
139183
139192
  "fieldName": "filterable",
139184
139193
  "inheritedFrom": {
139185
139194
  "name": "HelixHeadlessMenu",
@@ -172401,6 +172410,96 @@
172401
172410
  }
172402
172411
  ]
172403
172412
  },
172413
+ {
172414
+ "kind": "javascript-module",
172415
+ "path": "src/sandbox/compile.ts",
172416
+ "declarations": [
172417
+ {
172418
+ "kind": "variable",
172419
+ "name": "COMPILER",
172420
+ "type": {
172421
+ "text": "string"
172422
+ },
172423
+ "default": "'sucrase@3.35.1'",
172424
+ "description": "The compiler a module file in TypeScript or JSX runs through before the\nframe loads it, by its npm name and its pinned version.\n\n**Sucrase, measured against esbuild-wasm on October 8, 2026**, on a TSX\nmodule of 241 lines with the automatic JSX runtime:\n\n| | Sucrase 3.35 | esbuild-wasm 0.28 |\n| --- | --- | --- |\n| Download, gzip | 48 KB, and 9 KB of `buffer` esm.sh adds | 3.2 MB of WebAssembly, and 19 KB |\n| First compile | 14 ms | 188 ms, the WebAssembly starting |\n| Each after | 0.8 ms | 4.6 ms |\n| Automatic JSX runtime | yes | yes |\n| Source map | yes | yes |\n\nBoth compile what a sandbox holds, and neither checks types. esbuild-wasm\ndownloads 56 times as much before the first module runs, which a reader\nwaits through on the first edit of every page. Sucrase also keeps every line\nwhere it was, so a line number in an error in the frame is the line in the\npane even where a browser ignores the source map.\n\n**Loaded the first time a module needs it**, from the preview's `cdn` as a\npackage in `dependencies` is, so the published package carries no compiler\nand a sandbox with no TypeScript loads none.\n\n**In a worker of its own**, which has no access to the page and keeps a\nlong compile off the page's thread. The worker's script is text, so the\n`import()` of an address known only at run time is one no bundler reads:\nwritten in this module, Turbopack refused to build a page that imported\nit, the TypeScript build having dropped the comments that tell bundlers to\nleave it alone. The compiler reads the source as text, and the example\nitself still runs only in the frame."
172425
+ },
172426
+ {
172427
+ "kind": "variable",
172428
+ "name": "COMPILED",
172429
+ "description": "Whether a module file is TypeScript or JSX, which a browser cannot run as written."
172430
+ },
172431
+ {
172432
+ "kind": "variable",
172433
+ "name": "compilers",
172434
+ "default": "new Map<string, Transform>()",
172435
+ "description": "The compiler for each `cdn`, so each is set up once a page. A spec puts a\nstand-in here, for an address of its own."
172436
+ },
172437
+ {
172438
+ "kind": "function",
172439
+ "name": "compile",
172440
+ "return": {
172441
+ "type": {
172442
+ "text": "Promise<string>"
172443
+ }
172444
+ },
172445
+ "parameters": [
172446
+ {
172447
+ "name": "cdn",
172448
+ "type": {
172449
+ "text": "string"
172450
+ }
172451
+ },
172452
+ {
172453
+ "name": "path",
172454
+ "type": {
172455
+ "text": "string"
172456
+ }
172457
+ },
172458
+ {
172459
+ "name": "source",
172460
+ "type": {
172461
+ "text": "string"
172462
+ }
172463
+ }
172464
+ ],
172465
+ "description": "A module file compiled to JavaScript, with its source map inline, for the\nframe to load as its other modules.\n\n`.ts` is read as TypeScript, `.tsx` as TypeScript with JSX, and `.jsx` as\nJSX. JSX compiles to the automatic runtime, `react/jsx-runtime`, which an\nexample lists in `dependencies`, or to the runtime a\n`@jsxImportSource preact` comment in the file names.\n\n**What fails to compile still runs, as a module that throws** what the\ncompiler said, such as `Error transforming app.tsx: Unexpected token (2:1)`.\nThe frame reports it as it reports any error an example does not catch, so\nit shows over the example in the preview's `error` part and in the\nterminal, and only where the example imports the file."
172466
+ }
172467
+ ],
172468
+ "exports": [
172469
+ {
172470
+ "kind": "js",
172471
+ "name": "COMPILER",
172472
+ "declaration": {
172473
+ "name": "COMPILER",
172474
+ "module": "src/sandbox/compile.ts"
172475
+ }
172476
+ },
172477
+ {
172478
+ "kind": "js",
172479
+ "name": "COMPILED",
172480
+ "declaration": {
172481
+ "name": "COMPILED",
172482
+ "module": "src/sandbox/compile.ts"
172483
+ }
172484
+ },
172485
+ {
172486
+ "kind": "js",
172487
+ "name": "compilers",
172488
+ "declaration": {
172489
+ "name": "compilers",
172490
+ "module": "src/sandbox/compile.ts"
172491
+ }
172492
+ },
172493
+ {
172494
+ "kind": "js",
172495
+ "name": "compile",
172496
+ "declaration": {
172497
+ "name": "compile",
172498
+ "module": "src/sandbox/compile.ts"
172499
+ }
172500
+ }
172501
+ ]
172502
+ },
172404
172503
  {
172405
172504
  "kind": "javascript-module",
172406
172505
  "path": "src/sandbox/frame.ts",
@@ -172805,7 +172904,7 @@
172805
172904
  "declarations": [
172806
172905
  {
172807
172906
  "kind": "class",
172808
- "description": "A sandboxed `<iframe>` that loads `src`, a document you provide. That\ndocument imports what the examples need, listens for a render message, and\nwrites the markup into itself.\n\n**Without `src`, the frame loads a built-in document**, so a sandbox renders\nwith nothing to host. It runs HTML, CSS, and scripts, and reports the\nconsole, uncaught errors, its height, and presses as a frame on\n`servePreview` does. It defines no element, so an example that uses Helix\ncomponents needs a `src` that imports them.\n\n**`imports` lets an example import packages by name** in the built-in\ndocument, as an import map: each name maps to the address of an ES module,\nsuch as `{\"canvas-confetti\": \"https://esm.sh/canvas-confetti@1.9.3\"}`, and\n`import confetti from 'canvas-confetti'` in the `js` pane then loads it. A\nCDN that serves npm packages as modules, such as esm.sh or jsDelivr's\n`+esm`, gives every package an address. A new map loads the document again,\nsince a browser reads one only as a document starts. A `src` document\ndeclares its own.\n\n**`dependencies` names packages by version instead**, as a `package.json`\ndoes: `{\"canvas-confetti\": \"^1.9\"}` loads `canvas-confetti` and the paths\nunder it from `cdn`, `https://esm.sh/` by default, at the version or range\ngiven. An address in `imports` wins over a package of the same name.\n\n**`modules` holds files the example imports by a relative path**: each path,\nsuch as `utils.js`, to its source, and `import { add } from './utils.js'`\nin the `js` pane or in another module loads it. A sandbox writes each pane\nnamed for a module file here.\n\n**Examples render in a frame**, so an example's styles and scripts do not\naffect the page around the sandbox, and `position: fixed` stays inside the\npane. The frame starts empty, with its own stylesheets and its own custom\nelement registry, so `src` must load the styles and components the examples\nuse.\n\n**The source is untrusted, and the frame keeps it isolated.** The frame uses\n`sandbox=\"allow-scripts\"` and never `allow-same-origin`. Together, the two\nlet a document on the same origin remove its own sandbox, which is the same\nas having none.\n\n**A preview says where it is.** It is `:state(loading)` from the moment it\nhas a `src` until that document can take the example, and again through\n`reload()`. It is `:state(failed)` once the example throws an error it does\nnot catch, until the next source is sent, which a frame on `servePreview`\nreports. A page draws its own spinner or message from either, such as a\nsibling shown by `helix-sandbox-preview:state(failed) + .message`.\n\n**A failed preview shows the error over the example**, in the `error` part,\nuntil the next source is sent. The terminal says it too, so the part is not\nannounced, and it is the frame's description while it shows, so a screen\nreader reads it with the frame. Hide it with `::part(error) { display: none }`\nwhere the page draws its own.\n\n**`controls` draws two buttons in the preview's corner**: one reloads the\nframe's document, as `reload()` does, and one opens the example in a new\ntab, as `open()` does. The tab runs it in a frame sandboxed as this one is.",
172907
+ "description": "A sandboxed `<iframe>` that loads `src`, a document you provide. That\ndocument imports what the examples need, listens for a render message, and\nwrites the markup into itself.\n\n**Without `src`, the frame loads a built-in document**, so a sandbox renders\nwith nothing to host. It runs HTML, CSS, and scripts, and reports the\nconsole, uncaught errors, its height, and presses as a frame on\n`servePreview` does. It defines no element, so an example that uses Helix\ncomponents needs a `src` that imports them.\n\n**`imports` lets an example import packages by name** in the built-in\ndocument, as an import map: each name maps to the address of an ES module,\nsuch as `{\"canvas-confetti\": \"https://esm.sh/canvas-confetti@1.9.3\"}`, and\n`import confetti from 'canvas-confetti'` in the `js` pane then loads it. A\nCDN that serves npm packages as modules, such as esm.sh or jsDelivr's\n`+esm`, gives every package an address. A new map loads the document again,\nsince a browser reads one only as a document starts. A `src` document\ndeclares its own.\n\n**`dependencies` names packages by version instead**, as a `package.json`\ndoes: `{\"canvas-confetti\": \"^1.9\"}` loads `canvas-confetti` and the paths\nunder it from `cdn`, `https://esm.sh/` by default, at the version or range\ngiven. An address in `imports` wins over a package of the same name.\n\n**`modules` holds files the example imports by a relative path**: each path,\nsuch as `utils.js`, to its source, and `import { add } from './utils.js'`\nin the `js` pane or in another module loads it. A sandbox writes each pane\nnamed for a module file here.\n\n**A module in TypeScript or JSX runs too**: a path ending in `.ts`, `.tsx`\nor `.jsx` is compiled to JavaScript first, and imported by its path or by\nits path without the extension. The compiler, Sucrase, loads from `cdn` the\nfirst time a module needs it, so the package carries none and a preview\nwith no such module loads none. JSX compiles to the automatic runtime,\n`react/jsx-runtime`, from `dependencies`, or to the one a\n`@jsxImportSource` comment names. What fails to compile shows in the\n`error` part as an error the example threw, when the example imports it.\n\n**Examples render in a frame**, so an example's styles and scripts do not\naffect the page around the sandbox, and `position: fixed` stays inside the\npane. The frame starts empty, with its own stylesheets and its own custom\nelement registry, so `src` must load the styles and components the examples\nuse.\n\n**The source is untrusted, and the frame keeps it isolated.** The frame uses\n`sandbox=\"allow-scripts\"` and never `allow-same-origin`. Together, the two\nlet a document on the same origin remove its own sandbox, which is the same\nas having none.\n\n**A preview says where it is.** It is `:state(loading)` from the moment it\nhas a `src` until that document can take the example, and again through\n`reload()`. It is `:state(failed)` once the example throws an error it does\nnot catch, until the next source is sent, which a frame on `servePreview`\nreports. A page draws its own spinner or message from either, such as a\nsibling shown by `helix-sandbox-preview:state(failed) + .message`.\n\n**A failed preview shows the error over the example**, in the `error` part,\nuntil the next source is sent. The terminal says it too, so the part is not\nannounced, and it is the frame's description while it shows, so a screen\nreader reads it with the frame. Hide it with `::part(error) { display: none }`\nwhere the page draws its own.\n\n**`controls` draws two buttons in the preview's corner**: one reloads the\nframe's document, as `reload()` does, and one opens the example in a new\ntab, as `open()` does. The tab runs it in a frame sandboxed as this one is.",
172809
172908
  "name": "HelixSandboxPreview",
172810
172909
  "cssParts": [
172811
172910
  {
@@ -173021,6 +173120,31 @@
173021
173120
  "privacy": "private",
173022
173121
  "description": "What the example threw and did not catch, while the preview is `failed`."
173023
173122
  },
173123
+ {
173124
+ "kind": "field",
173125
+ "name": "compiled",
173126
+ "privacy": "private",
173127
+ "default": "new Map<string, string>()",
173128
+ "description": "Each module file compiled to JavaScript, by its path and source."
173129
+ },
173130
+ {
173131
+ "kind": "field",
173132
+ "name": "compiling",
173133
+ "privacy": "private",
173134
+ "readonly": true,
173135
+ "default": "new Set<string>()",
173136
+ "description": "The module files being compiled, by their path and source."
173137
+ },
173138
+ {
173139
+ "kind": "field",
173140
+ "name": "map",
173141
+ "type": {
173142
+ "text": "Record<string, string>"
173143
+ },
173144
+ "privacy": "private",
173145
+ "default": "{}",
173146
+ "description": "The import map the built-in document loads with: the last one with every\nmodule file compiled, so a frame never loads without one an example\nimports."
173147
+ },
173024
173148
  {
173025
173149
  "kind": "method",
173026
173150
  "name": "fail",
@@ -173064,12 +173188,43 @@
173064
173188
  "kind": "field",
173065
173189
  "name": "importMap",
173066
173190
  "type": {
173067
- "text": "Record<string, string>"
173191
+ "text": "Record<string, string> | undefined"
173068
173192
  },
173069
173193
  "privacy": "private",
173070
173194
  "description": "The import map of the built-in document: each module file, by its path\nand by the address its neighbors import it at, each package in\n`dependencies` and the paths under it, and `imports` over all of them.",
173071
173195
  "readonly": true
173072
173196
  },
173197
+ {
173198
+ "kind": "method",
173199
+ "name": "compileModule",
173200
+ "privacy": "private",
173201
+ "return": {
173202
+ "type": {
173203
+ "text": "void"
173204
+ }
173205
+ },
173206
+ "parameters": [
173207
+ {
173208
+ "name": "key",
173209
+ "type": {
173210
+ "text": "string"
173211
+ }
173212
+ },
173213
+ {
173214
+ "name": "path",
173215
+ "type": {
173216
+ "text": "string"
173217
+ }
173218
+ },
173219
+ {
173220
+ "name": "source",
173221
+ "type": {
173222
+ "text": "string"
173223
+ }
173224
+ }
173225
+ ],
173226
+ "description": "Compiles a module file, once, then draws again with it. Not on a server,\nwhich loads no frame."
173227
+ },
173073
173228
  {
173074
173229
  "kind": "field",
173075
173230
  "name": "handleFrameLoad",
@@ -173134,7 +173289,7 @@
173134
173289
  "text": "void"
173135
173290
  }
173136
173291
  },
173137
- "description": "Sends the current source to the frame, once it is listening."
173292
+ "description": "Sends the current source to the frame, once it is listening and no\nmodule it may import is still compiling."
173138
173293
  },
173139
173294
  {
173140
173295
  "kind": "method",
@@ -173784,7 +173939,7 @@
173784
173939
  "declarations": [
173785
173940
  {
173786
173941
  "kind": "class",
173787
- "description": "A source pane dispatches `helix-before-edit`, which bubbles, and the sandbox\npasses the value to the preview slotted into it. The source pane and the\npreview do not reference each other, so you can replace either one or use it\nalone.\n\nThe preview runs an edit once typing has rested for `preview-delay`, 300\nmilliseconds by default, so a word typed reloads it once. A pane's text when the sandbox starts reaches it at once.\n\nThe event carries the pane's `name`, so one sandbox can hold several panes.\nThe names the sandbox writes into its previews:\n\n- `html` sets the preview's markup.\n- `css` sets its stylesheet.\n- `js` sets a script that runs as a module after the markup.\n- A module file name ending in `.js` or `.mjs`, such as `utils.js`, is a\n module the other scripts import by its path, `./utils.js`.\n- `package.json` sets the npm packages the scripts import by name, from its\n `dependencies`, which load from the preview's `cdn`.\n\nThe sandbox ignores a pane with any other name, so that pane can show\ncontent without changing the preview.\n\n**The sandbox is `:state(modified)` while a source pane holds an edit**, and\nthat pane's file tab is also `file-modified` and described as modified to\na screen reader. `reset()` puts every pane back to the source it was given.\n\n**The dividers are two nested `helix-splitter` elements**, which handle the\npointer, the keyboard, and the corner. The inner splitter holds the panes and\nthe outer one holds the panel, so the panel spans the full width.\n\n**Several source panes are files**, one shown at a time under a row of\ntabs, each named by the pane's `label` or, without one, its `name`. `file`\nholds the `name` of the pane shown. The tabs are a tab list: the arrow keys\nmove between them and show each pane, and `Home` and `End` go to the first\nand the last. Choosing one sends `helix-before-change` with the pane's\n`name`, which you can cancel, and `change` once `file` holds it. The panes\nnot shown carry `hidden`. One pane draws no tabs.\n\n**Any editor can be the source pane**: an element in the `source` slot with\na `name` that dispatches `helix-before-edit` with its text, which bubbles.\nA wrapper around CodeMirror or Monaco sends one on each change and is a pane\nlike `helix-sandbox-source`, and the sandbox reads its `value` to seed the\npreview. Dispatch `helix-caret` from it too for the status bar's position.\n\nSandbox is styled only and has behavior, as `Aura` is. Its behavior is the\nhand-off from a source pane to a preview frame, which works with any pane\nthat sends `helix-before-edit`, and what it draws is the layout around them:\ndividers, file tabs, and a panel. A page that wants another look slots its\nown panes and keeps the hand-off, so there is nothing for a headless version\nto hold.\n\nA development build warns about a source pane with no `label` and no `name`,\nwhose file tab would have no words.\n\nOn a focused divider, the arrow keys move it, and `Home` and `End` move it\nto its ends. `Enter` on the panes divider shuts the lead pane, and pressed\nagain it opens the pane where it was. `Enter` on the panel divider shuts the\npanel to `panel-collapsed-size`, and pressed again it opens the panel to its\nlast height.",
173942
+ "description": "A source pane dispatches `helix-before-edit`, which bubbles, and the sandbox\npasses the value to the preview slotted into it. The source pane and the\npreview do not reference each other, so you can replace either one or use it\nalone.\n\nThe preview runs an edit once typing has rested for `preview-delay`, 300\nmilliseconds by default, so a word typed reloads it once. A pane's text when the sandbox starts reaches it at once.\n\nThe event carries the pane's `name`, so one sandbox can hold several panes.\nThe names the sandbox writes into its previews:\n\n- `html` sets the preview's markup.\n- `css` sets its stylesheet.\n- `js` sets a script that runs as a module after the markup.\n- A module file name ending in `.js` or `.mjs`, such as `utils.js`, is a\n module the other scripts import by its path, `./utils.js`.\n- A module file name ending in `.ts`, `.tsx` or `.jsx`, such as `app.tsx`,\n is one too, which the preview compiles to JavaScript first. The `js` pane\n runs it with `import './app.tsx'`. A file that does not compile shows\n why over the preview, as an error the example threw.\n- `package.json` sets the npm packages the scripts import by name, from its\n `dependencies`, which load from the preview's `cdn`.\n\nThe sandbox ignores a pane with any other name, so that pane can show\ncontent without changing the preview.\n\n**The sandbox is `:state(modified)` while a source pane holds an edit**, and\nthat pane's file tab is also `file-modified` and described as modified to\na screen reader. `reset()` puts every pane back to the source it was given.\n\n**The dividers are two nested `helix-splitter` elements**, which handle the\npointer, the keyboard, and the corner. The inner splitter holds the panes and\nthe outer one holds the panel, so the panel spans the full width.\n\n**Several source panes are files**, one shown at a time under a row of\ntabs, each named by the pane's `label` or, without one, its `name`. `file`\nholds the `name` of the pane shown. The tabs are a tab list: the arrow keys\nmove between them and show each pane, and `Home` and `End` go to the first\nand the last. Choosing one sends `helix-before-change` with the pane's\n`name`, which you can cancel, and `change` once `file` holds it. The panes\nnot shown carry `hidden`. One pane draws no tabs.\n\n**Any editor can be the source pane**: an element in the `source` slot with\na `name` that dispatches `helix-before-edit` with its text, which bubbles.\nA wrapper around CodeMirror or Monaco sends one on each change and is a pane\nlike `helix-sandbox-source`, and the sandbox reads its `value` to seed the\npreview. Dispatch `helix-caret` from it too for the status bar's position.\n\nSandbox is styled only and has behavior, as `Aura` is. Its behavior is the\nhand-off from a source pane to a preview frame, which works with any pane\nthat sends `helix-before-edit`, and what it draws is the layout around them:\ndividers, file tabs, and a panel. A page that wants another look slots its\nown panes and keeps the hand-off, so there is nothing for a headless version\nto hold.\n\nA development build warns about a source pane with no `label` and no `name`,\nwhose file tab would have no words.\n\nOn a focused divider, the arrow keys move it, and `Home` and `End` move it\nto its ends. `Enter` on the panes divider shuts the lead pane, and pressed\nagain it opens the pane where it was. `Enter` on the panel divider shuts the\npanel to `panel-collapsed-size`, and pressed again it opens the panel to its\nlast height.",
173788
173943
  "name": "HelixSandbox",
173789
173944
  "cssProperties": [
173790
173945
  {
@@ -199958,7 +200113,7 @@
199958
200113
  "declarations": [
199959
200114
  {
199960
200115
  "kind": "class",
199961
- "description": "Hundreds of thin strands are drawn as one ribbon, and the light they add\ntogether is bloomed, so where they converge the ribbon burns hot. The ribbon\nmoves on its own all the time: it sways and breathes, its strands wave and\nroll over one another, and light runs along them.\n\nIts palette comes from the tokens. The strands are `--helix-color-primary`,\na few are `--helix-color-accent` for depth, and the page they light is\n`--helix-color-background`. On a light page the light becomes ink, because\nlight added to near-white cannot be seen.\n\n**Four forms, set with `variant`.** `bend` turns bright strands through one\ntight point, with its arms opening to the right. `ribbon`, the default, is a\nbroad, soft ribbon in long curves. `sweep` enters at a top corner, the one\n`at` is nearer, and crosses in one diagonal to the far side. `waves` is sharp\nstrands crossing the full width.\n\n**Quiet behind words.** `quiet` names elements, such as a hero's words, that\nthe light dims behind to a faint glow, so a bright ribbon can cross the page\nunder them and they stay crisp.\n\n**In its own box, by default.** The element fills the box it is given, the\nway an image does, and `at` places the bend's apex or the ribbon's axis across\nit. Content placed inside sits over the ribbon, in the `content` part.\n\n**Down the whole page, with `travel`.** The element fixes itself behind the\npage, on `--helix-layer-beneath`, and lays one ribbon from the top of the page to the\nbottom, so scrolling travels along it. Put `helix-strands-stop` elements\ninside to pin a form to a section: each names an element with `for` and says\nwhich form the ribbon takes there. Between stops the ribbon fills the gap in\nits own `variant`, and between two waves less than a screen and a half\napart it turns off screen so each wave reads alone. Set `z-index` on the\nelement to move it.\n\nThe ribbon stops moving in these cases:\n- `prefers-reduced-motion` is set. The element shows one still frame, and in\n `travel` still follows the scroll, without easing.\n- The element is off screen or in a background tab.\n\nIt shows a gradient from the same tokens in these cases, and matches\n`:state(fallback)` and sends `helix-strands-fallback` with the reason:\n- The renderer draws on the CPU, such as a headless browser or a machine with\n no usable GPU.\n- There is no WebGL, or the browser took the drawing context back.\n\nStrands is styled only and has behavior, as `Aura` does: its behavior is\ndrawing to a canvas, so there is no structure for a headless version to hold.",
200116
+ "description": "Hundreds of thin strands are drawn as one ribbon, and the light they add\ntogether is bloomed, so where they converge the ribbon burns hot. The ribbon\nmoves on its own all the time: it sways and breathes, its strands wave and\nroll over one another, and light runs along them.\n\nIts palette comes from the tokens. The strands are `--helix-color-primary`,\na few are `--helix-color-accent` for depth, and the page they light is\n`--helix-color-background`. On a light page the light becomes ink, because\nlight added to near-white cannot be seen.\n\n**Four forms, set with `variant`.** `bend` turns bright strands through one\ntight point, with its arms opening to the right. `ribbon`, the default, is a\nbroad, soft ribbon in long curves. `sweep` enters at a top corner, the one\n`at` is nearer, and crosses in one diagonal to the far side. `waves` is sharp\nstrands crossing the full width.\n\n**Quiet behind words.** `quiet` names elements, such as a hero's words, that\nthe light dims behind to a faint glow, so a bright ribbon can cross the page\nunder them and they stay crisp.\n\n**In its own box, by default.** The element fills the box it is given, the\nway an image does, and `at` places the bend's apex or the ribbon's axis across\nit. Content placed inside sits over the ribbon, in the `content` part.\n\n**Down the whole page, with `travel`.** The element fixes itself behind the\npage, on `--helix-layer-beneath`, and lays one ribbon from the top of the page to the\nbottom, so scrolling travels along it. Put `helix-strands-stop` elements\ninside to pin a form to a section: each names an element with `for` and says\nwhich form the ribbon takes there. Between stops the ribbon fills the gap in\nits own `variant`, and between two waves less than a screen and a half\napart it turns off screen so each wave reads alone. Set `z-index` on the\nelement to move it.\n\nThe ribbon stops moving in these cases:\n- `prefers-reduced-motion` is set. The element shows one still frame, and in\n `travel` still follows the scroll.\n- The element is off screen or in a background tab.\n\nIt shows a gradient from the same tokens in these cases, and matches\n`:state(fallback)` and sends `helix-strands-fallback` with the reason:\n- The renderer draws on the CPU, such as a headless browser or a machine with\n no usable GPU.\n- There is no WebGL, or the browser took the drawing context back.\n\nStrands is styled only and has behavior, as `Aura` does: its behavior is\ndrawing to a canvas, so there is no structure for a headless version to hold.",
199962
200117
  "name": "HelixStrands",
199963
200118
  "cssProperties": [
199964
200119
  {
@@ -200319,7 +200474,7 @@
200319
200474
  },
200320
200475
  "privacy": "private",
200321
200476
  "default": "0",
200322
- "description": "In `travel`, the scroll position the ribbon is drawn at, easing toward the page's."
200477
+ "description": "In `travel`, the scroll position the ribbon was last drawn at."
200323
200478
  },
200324
200479
  {
200325
200480
  "kind": "field",
@@ -200551,7 +200706,7 @@
200551
200706
  "name": "handleScroll",
200552
200707
  "privacy": "private",
200553
200708
  "readonly": true,
200554
- "description": "The page scrolled. A running loop eases toward it on its own; a stopped\none, for a reader who asked for no motion, jumps there and paints once."
200709
+ "description": "The page scrolled. A running loop draws the new position on its next\nframe; a stopped one, for a reader who asked for no motion, paints once."
200555
200710
  },
200556
200711
  {
200557
200712
  "kind": "method",
@@ -206083,7 +206238,7 @@
206083
206238
  "text": "string"
206084
206239
  },
206085
206240
  "default": "''",
206086
- "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 is one track wide until it upgrades.\n\n**Data Table has none of this, and should not.** Its columns are its schema\nrather than an option, so there is always a column to write a `width` on\nand a list here would be a second way to say what that says. This table's\ncells are markup, and a table written as rows of cells with no column\ndeclared in it has nowhere else to be sized from.",
206241
+ "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.",
206087
206242
  "attribute": "columns",
206088
206243
  "inheritedFrom": {
206089
206244
  "name": "HelixHeadlessTable",
@@ -208172,6 +208327,10 @@
208172
208327
  {
208173
208328
  "description": "A heading that names the table, and a checkbox on each row that selects it.",
208174
208329
  "slug": "selecting"
208330
+ },
208331
+ {
208332
+ "description": "A thousand rows written as markup, with only the rows in view drawn.",
208333
+ "slug": "windowed"
208175
208334
  }
208176
208335
  ],
208177
208336
  "source": "helix/styled/src/table"
@@ -208250,7 +208409,7 @@
208250
208409
  "text": "string"
208251
208410
  },
208252
208411
  "default": "''",
208253
- "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 is one track wide until it upgrades.\n\n**Data Table has none of this, and should not.** Its columns are its schema\nrather than an option, so there is always a column to write a `width` on\nand a list here would be a second way to say what that says. This table's\ncells are markup, and a table written as rows of cells with no column\ndeclared in it has nowhere else to be sized from.",
208412
+ "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.",
208254
208413
  "fieldName": "columns",
208255
208414
  "inheritedFrom": {
208256
208415
  "name": "HelixHeadlessTable",
@@ -220435,6 +220594,23 @@
220435
220594
  "module": "src/time-input/root/time-input-root.ts"
220436
220595
  }
220437
220596
  },
220597
+ {
220598
+ "kind": "field",
220599
+ "name": "nowLabel",
220600
+ "type": {
220601
+ "text": "string"
220602
+ },
220603
+ "default": "'Now'",
220604
+ "description": "The words on the list's button that chooses the current time, drawn with\n`show-now`.",
220605
+ "attribute": "now-label",
220606
+ "helix": {
220607
+ "words": true
220608
+ },
220609
+ "inheritedFrom": {
220610
+ "name": "HelixHeadlessTimeInput",
220611
+ "module": "src/time-input/root/time-input-root.ts"
220612
+ }
220613
+ },
220438
220614
  {
220439
220615
  "kind": "field",
220440
220616
  "name": "placeholder",
@@ -220534,6 +220710,20 @@
220534
220710
  "module": "src/time-input/root/time-input-root.ts"
220535
220711
  }
220536
220712
  },
220713
+ {
220714
+ "kind": "field",
220715
+ "name": "showNow",
220716
+ "type": {
220717
+ "text": "boolean"
220718
+ },
220719
+ "default": "false",
220720
+ "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`.",
220721
+ "attribute": "show-now",
220722
+ "inheritedFrom": {
220723
+ "name": "HelixHeadlessTimeInput",
220724
+ "module": "src/time-input/root/time-input-root.ts"
220725
+ }
220726
+ },
220537
220727
  {
220538
220728
  "kind": "field",
220539
220729
  "name": "step",
@@ -222266,6 +222456,19 @@
222266
222456
  "module": "src/time-input/root/time-input-root.ts"
222267
222457
  }
222268
222458
  },
222459
+ {
222460
+ "name": "now-label",
222461
+ "type": {
222462
+ "text": "string"
222463
+ },
222464
+ "default": "'Now'",
222465
+ "description": "The words on the list's button that chooses the current time, drawn with\n`show-now`.",
222466
+ "fieldName": "nowLabel",
222467
+ "inheritedFrom": {
222468
+ "name": "HelixHeadlessTimeInput",
222469
+ "module": "src/time-input/root/time-input-root.ts"
222470
+ }
222471
+ },
222269
222472
  {
222270
222473
  "name": "placeholder",
222271
222474
  "type": {
@@ -222344,6 +222547,19 @@
222344
222547
  "module": "src/time-input/root/time-input-root.ts"
222345
222548
  }
222346
222549
  },
222550
+ {
222551
+ "name": "show-now",
222552
+ "type": {
222553
+ "text": "boolean"
222554
+ },
222555
+ "default": "false",
222556
+ "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`.",
222557
+ "fieldName": "showNow",
222558
+ "inheritedFrom": {
222559
+ "name": "HelixHeadlessTimeInput",
222560
+ "module": "src/time-input/root/time-input-root.ts"
222561
+ }
222562
+ },
222347
222563
  {
222348
222564
  "name": "step",
222349
222565
  "type": {
@@ -253867,6 +254083,6 @@
253867
254083
  ],
253868
254084
  "helix": {
253869
254085
  "package": "@fusion.dev/helix",
253870
- "version": "0.183.0"
254086
+ "version": "0.185.0"
253871
254087
  }
253872
254088
  }