@fusion.dev/helix-core 0.182.1 → 0.182.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +1109 -163
- package/dist/controllers/aria-forward-controller/aria-forward-controller.d.ts +4 -0
- package/dist/helix-element/helix-element.d.ts +11 -1
- package/dist/helix-element/helix-element.js +7 -6
- package/dist/helix-element/mark-rules.d.ts +119 -0
- package/dist/helix-element/mark-rules.js +4 -0
- package/dist/helix-form-element/helix-form-element-base.d.ts +264 -0
- package/dist/helix-form-element/helix-form-element-base.js +173 -0
- package/dist/helix-form-element/helix-form-element.d.ts +8 -226
- package/dist/helix-form-element/helix-form-element.js +2 -157
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/mixins/mixin-chart-source/mixin-chart-source.js +1 -6
- package/dist/mixins/mixin-chart-status/mixin-chart-status.js +1 -6
- package/dist/mixins/mixin-collection/mixin-collection.js +1 -6
- package/dist/mixins/mixin-controller-active/mixin-controller-active.js +1 -6
- package/dist/mixins/mixin-controller-checked/mixin-controller-checked.js +1 -6
- package/dist/mixins/mixin-controller-open/mixin-controller-open.js +1 -6
- package/dist/mixins/mixin-controller-value/mixin-controller-value.js +1 -6
- package/dist/mixins/mixin-dismissible/mixin-dismissible.js +1 -6
- package/dist/mixins/mixin-field/mixin-field.js +1 -6
- package/dist/mixins/mixin-picker-editing/mixin-picker-editing.js +1 -6
- package/dist/mixins/mixin-picker-feedback/mixin-picker-feedback.js +1 -6
- package/dist/mixins/mixin-picker-field/mixin-picker-field.js +1 -6
- package/dist/mixins/mixin-segmented-field/mixin-segmented-field.js +1 -6
- package/dist/mixins/mixin-selectable-item/mixin-selectable-item.js +1 -6
- package/dist/mixins/mixin-tokens/mixin-tokens.js +1 -6
- package/dist/mixins/mixin-viewport/mixin-viewport.js +1 -6
- package/dist/utils/audit-name/audit-name.d.ts +3 -3
- package/dist/utils/audit-name/audit-name.js +7 -2
- package/dist/utils/implicit-submit/implicit-submit.js +4 -4
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -4
package/custom-elements.json
CHANGED
|
@@ -11757,6 +11757,17 @@
|
|
|
11757
11757
|
],
|
|
11758
11758
|
"description": "Re-emits a native event from the host, under its own name.\n\nA native event fired by an inner `<input>` or `<textarea>` is not composed,\nso it stops at the shadow boundary and a consumer listening on\n`<helix-input>` hears nothing. Re-dispatching it from the host is what\nmakes the component behave like the control it wraps.\n\nThe relayed event keeps the native name deliberately. `change` is `change`,\nwhich is what a consumer already knows to listen for, and it is what\nreaches React: its synthetic system claims `onChange` and wires it to that\nname, so a prefixed one would never arrive.\n\n`composed` is not forced. It defaults to the original event's own value, so\na relayed `change` stops at the next shadow boundary exactly as a native\none would. Pass it explicitly only where escaping is the intent, and say so\nwhere you do."
|
|
11759
11759
|
},
|
|
11760
|
+
{
|
|
11761
|
+
"kind": "field",
|
|
11762
|
+
"name": "markRules",
|
|
11763
|
+
"type": {
|
|
11764
|
+
"text": "readonly string[]"
|
|
11765
|
+
},
|
|
11766
|
+
"privacy": "protected",
|
|
11767
|
+
"static": true,
|
|
11768
|
+
"default": "[]",
|
|
11769
|
+
"description": "The rules from `mark-rules.ts` for the marks this element writes in its\nown shadow root: `data-scroller`, `data-virtual`, `data-spoken` and\n`data-mirror`.\n\nA component that writes a mark names its rule here, and a subclass\ninherits the list. One that writes none takes only the three rules every\nshadow root gets, which is what keeps the other four out of a Button."
|
|
11770
|
+
},
|
|
11760
11771
|
{
|
|
11761
11772
|
"kind": "method",
|
|
11762
11773
|
"name": "finalizeStyles",
|
|
@@ -11776,7 +11787,7 @@
|
|
|
11776
11787
|
}
|
|
11777
11788
|
}
|
|
11778
11789
|
],
|
|
11779
|
-
"description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it."
|
|
11790
|
+
"description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it, with the rules for the marks it writes."
|
|
11780
11791
|
},
|
|
11781
11792
|
{
|
|
11782
11793
|
"kind": "method",
|
|
@@ -11854,6 +11865,82 @@
|
|
|
11854
11865
|
}
|
|
11855
11866
|
]
|
|
11856
11867
|
},
|
|
11868
|
+
{
|
|
11869
|
+
"kind": "javascript-module",
|
|
11870
|
+
"path": "src/helix-element/mark-rules.ts",
|
|
11871
|
+
"declarations": [
|
|
11872
|
+
{
|
|
11873
|
+
"kind": "variable",
|
|
11874
|
+
"name": "SCROLLER_RULE",
|
|
11875
|
+
"type": {
|
|
11876
|
+
"text": "string"
|
|
11877
|
+
},
|
|
11878
|
+
"default": "'[data-scroller]{overflow:auto}'",
|
|
11879
|
+
"description": "Makes an element a scroll container, where a component says it is one.\n\n**A box that scrolls is the headless tier's, and the headless tier had no way to say\nso.** `overflow` is what creates a scrollport: without it `scrollTop` is\npermanently zero and every scroll API on the element is inert. So a component\nthat reads `scrollTop` and cannot declare `overflow` is one whose behavior\nlives in somebody else's stylesheet.\n\nMeasured before deciding: `helix-headless-scroll-area`, the component whose\nentire purpose is scrolling, computes `overflow-y: visible` on its viewport\nwith `scrollHeight` equal to `clientHeight`. Standing alone it is a div, and\nthe virtual list is worse because it *acts* on the reading.\n\n**It goes in `core` rather than in a stylesheet**, with `BOX_SIZING`,\n`HIDDEN` and `SETTLED`, which are the token-free structural rules `core`\nships into every shadow root. \"The headless tier has no CSS\" has never meant\n`core` has none; it means `helix/headless` must not depend on\n`@fusion.dev/helix-styles`, and a rule with no token in it does not.\n\n**And a rule rather than an inline style, which was the first idea and is\nwrong.** An inline `style` on a rendered part outranks every author rule\nshort of `!important`, so a consumer wanting `overflow: hidden` on that part\nwould have to fight it and would need `!important` of their own. A shadow rule\nloses to a document rule, so `::part(viewport) { overflow: … }` from a\nconsumer simply wins, which is the right way round.\n\nBoth axes, and nothing else. Which *kind* of scrolling, how much room,\n`overscroll-behavior`, `scroll-snap`, a gutter, a scrollbar treatment: those\nare decisions and stay in `helix/styled`. This is only the mechanism, and the\nstyled sheet is prepended-after so it overrides at equal specificity anyway.\n\n**A component marks a box whose scroll state it reads, and no other**, which\nis narrower than \"every box that ends up scrolling\". `Megamenu`'s panel\nscrolls, and only because the styled tier gives it a `max-block-size`: that is\na decision, the `overflow` that serves it belongs with it, and the headless\ntier never asks the panel where it is scrolled to. Marking it anyway moved a\nheading four pixels, because `overflow` establishes a block formatting context\nand margins that had been collapsing stopped. A mechanism with a layout\nconsequence is one to apply exactly where it is needed.\n\n`ScrollArea`, `VirtualList`, `Carousel`, `ObjectInspector`, `Chat` and a\n`windowed` `DataTable` mark theirs, each reading `scrollTop` or `scrollLeft`\nand acting on the answer. The last two took their `overflow` from their\nstyled sheet until they were marked, so the window each drew was inert on a\npage that loads only `helix/headless`; marking them moved nothing on the\nstyled tier, where both boxes already scrolled."
|
|
11880
|
+
},
|
|
11881
|
+
{
|
|
11882
|
+
"kind": "variable",
|
|
11883
|
+
"name": "VIRTUAL_RULE",
|
|
11884
|
+
"type": {
|
|
11885
|
+
"text": "string"
|
|
11886
|
+
},
|
|
11887
|
+
"default": "'[data-virtual]{overflow-anchor:none}'",
|
|
11888
|
+
"description": "A box whose rows are drawn and taken away as it scrolls, which\n`VirtualizeController` marks `data-virtual` once it watches it.\n\n**The browser's scroll anchoring fights the window.** Chromium keeps the\ncontent a reader was looking at in place when what is above it changes, and\na virtual window changes exactly that on every move: the spacer above grows\nand the rows are swapped. Measured on a 500 row list scrolled to 330, the\noffset went to 138, then 522, then back to 330 before it settled, and the\nlist reported four ranges for one scroll. The window already keeps the rows\nwhere they belong, so anchoring has nothing left to do here but move them."
|
|
11889
|
+
},
|
|
11890
|
+
{
|
|
11891
|
+
"kind": "variable",
|
|
11892
|
+
"name": "SPOKEN_RULE",
|
|
11893
|
+
"type": {
|
|
11894
|
+
"text": "string"
|
|
11895
|
+
},
|
|
11896
|
+
"default": "'[data-spoken]{position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}'",
|
|
11897
|
+
"description": "Words a screen reader reads where the eye reads something else, which a\ncomponent marks `data-spoken`: `⇧⌘P` in Kbd is read as `Shift Command P`.\n\nThe drawn text is `aria-hidden` and the words sit beside it, in no box the\neye sees. The rule takes the words out of the layout and paints none of\nthem, and names no token, so it belongs with the mechanisms here. Without\nit a page that loads only `helix/headless` showed both."
|
|
11898
|
+
},
|
|
11899
|
+
{
|
|
11900
|
+
"kind": "variable",
|
|
11901
|
+
"name": "MIRROR_RULE",
|
|
11902
|
+
"type": {
|
|
11903
|
+
"text": "string"
|
|
11904
|
+
},
|
|
11905
|
+
"default": "':host(:dir(rtl)) [data-mirror]{scale:-1 1}'",
|
|
11906
|
+
"description": "Turns a drawing that runs along the line of text, or a glyph that points\nalong it, round with it on a right-to-left page.\n\n**A chart computes its geometry from the left, because an SVG's coordinates\ndo.** `x` grows rightward whatever `direction` says, while the words around a\ndrawing are HTML written in logical properties and turn on their own. Before\nthis, a bar chart on an Arabic page wrote Q4 to Q1 from the left under\ncolumns still drawn Q1 to Q4, so each name stood under its mirror's column.\n\n**A rule rather than a second set of coordinates, and three things decide\nit.** A server renders the same markup whichever way the page reads, so the\ndrawing it sends is right before a script runs. Everything drawn on a mark\nturns with it: a column rounded at its far end, a gradient toward its base,\nthe hole a ring terminus cuts, each of which arithmetic would have to mirror\nagain in every stylesheet that draws one. And it follows `dir` when it\nchanges, which a render would only do on its next update.\n\n**About the vertical axis, never the horizontal.** Up is more in every\nscript, so a value keeps its height and only the run along the line turns.\nThe numbers are text beside the drawing rather than inside it, so they read\nthe right way round.\n\n**Keyed on `:dir()`, which is what every sheet here mirrors a caret with.**\nThe pointer arithmetic that has to agree with it asks the computed\n`direction`, the question the table and the splitter already ask, and the two\npart only where a sheet sets `direction` without `dir`.\n\nA component marks the drawing with `data-mirror`, and a drawing with no line\nof text to follow is left unmarked: a whole ring's slices run clockwise from\ntwelve, which is a clock's convention and not a script's. `scale` rather than\n`transform`, so a consumer's `transform` on the same part composes with it,\nand a consumer's `scale` there wins, a shadow rule losing to a document one.\n\n**A glyph that points along the line is the same case, marked the same\nway**: a caret meaning next or previous, the one between two crumbs, a shut\ndisclosure. The component drawing it knows what it means, so the headless\ntier points it the right way with no stylesheet at all. Before the mark each\nstyled sheet turned its own and a headless page had to know to, which the\ncarousel's and the pagination's did not. A glyph a *sheet* stands on its side\nis that sheet's to turn: a tree draws its chevron pointing down, and a mark\nwould come out right under a `transform: rotate()`, which applies before\n`scale`, and do nothing under the `rotate` property, which applies after it.\nA glyph for playing media is left unmarked too, a tape running one way\nwhatever the script, and so is a picture of a key."
|
|
11907
|
+
}
|
|
11908
|
+
],
|
|
11909
|
+
"exports": [
|
|
11910
|
+
{
|
|
11911
|
+
"kind": "js",
|
|
11912
|
+
"name": "SCROLLER_RULE",
|
|
11913
|
+
"declaration": {
|
|
11914
|
+
"name": "SCROLLER_RULE",
|
|
11915
|
+
"module": "src/helix-element/mark-rules.ts"
|
|
11916
|
+
}
|
|
11917
|
+
},
|
|
11918
|
+
{
|
|
11919
|
+
"kind": "js",
|
|
11920
|
+
"name": "VIRTUAL_RULE",
|
|
11921
|
+
"declaration": {
|
|
11922
|
+
"name": "VIRTUAL_RULE",
|
|
11923
|
+
"module": "src/helix-element/mark-rules.ts"
|
|
11924
|
+
}
|
|
11925
|
+
},
|
|
11926
|
+
{
|
|
11927
|
+
"kind": "js",
|
|
11928
|
+
"name": "SPOKEN_RULE",
|
|
11929
|
+
"declaration": {
|
|
11930
|
+
"name": "SPOKEN_RULE",
|
|
11931
|
+
"module": "src/helix-element/mark-rules.ts"
|
|
11932
|
+
}
|
|
11933
|
+
},
|
|
11934
|
+
{
|
|
11935
|
+
"kind": "js",
|
|
11936
|
+
"name": "MIRROR_RULE",
|
|
11937
|
+
"declaration": {
|
|
11938
|
+
"name": "MIRROR_RULE",
|
|
11939
|
+
"module": "src/helix-element/mark-rules.ts"
|
|
11940
|
+
}
|
|
11941
|
+
}
|
|
11942
|
+
]
|
|
11943
|
+
},
|
|
11857
11944
|
{
|
|
11858
11945
|
"kind": "javascript-module",
|
|
11859
11946
|
"path": "src/helix-element/react-audit-off.ts",
|
|
@@ -12081,12 +12168,12 @@
|
|
|
12081
12168
|
},
|
|
12082
12169
|
{
|
|
12083
12170
|
"kind": "javascript-module",
|
|
12084
|
-
"path": "src/helix-form-element/helix-form-element.ts",
|
|
12171
|
+
"path": "src/helix-form-element/helix-form-element-base.ts",
|
|
12085
12172
|
"declarations": [
|
|
12086
12173
|
{
|
|
12087
12174
|
"kind": "class",
|
|
12088
|
-
"description": "`
|
|
12089
|
-
"name": "
|
|
12175
|
+
"description": "`HelixFormElementBase` carries form ownership, `disabled` and the fieldset\nthat disables it, `name`, focus, and the validity API with a custom message\nas its only verdict. `HelixFormElement` extends it with what a control that\njudges its own value needs: the wrapped `setValidity`, `feedback` from a\nfield, and the `input` and `change` announcements.\n\n**Two classes, because a button pays for the half it never calls.** Button\nreports nothing through `setValidity` and holds no value, so a message from\n`setCustomValidity` is the whole of its verdict, the same as on a native\n`<button>`. Measured on the styled Button bundled alone, October 7, 2026:\nthe validating half was 347 of its 12,973 bytes brotli.\n\nA family extends this one only where it never calls\n`internals.setValidity` and takes no `MixinField`. Every other control\nextends `HelixFormElement`.",
|
|
12176
|
+
"name": "HelixFormElementBase",
|
|
12090
12177
|
"members": [
|
|
12091
12178
|
{
|
|
12092
12179
|
"kind": "field",
|
|
@@ -12097,7 +12184,841 @@
|
|
|
12097
12184
|
"static": true,
|
|
12098
12185
|
"readonly": true,
|
|
12099
12186
|
"default": "true",
|
|
12100
|
-
"description": "Opts the element into form ownership, labels, and submission."
|
|
12187
|
+
"description": "Opts the element into form ownership, labels, and submission."
|
|
12188
|
+
},
|
|
12189
|
+
{
|
|
12190
|
+
"kind": "field",
|
|
12191
|
+
"name": "disabled",
|
|
12192
|
+
"type": {
|
|
12193
|
+
"text": "boolean"
|
|
12194
|
+
},
|
|
12195
|
+
"default": "false",
|
|
12196
|
+
"description": "Whether the control is disabled and cannot be used.\n\nReflected, because the styled tier selects on it, and mirrored to\n`aria-disabled` rather than removing the element from the accessibility\ntree, so a screen reader can still announce that the control exists.\n\nThe mirror itself is in `willUpdate` below, here rather than in each\ncontrol, because here is where `disabled` is.",
|
|
12197
|
+
"attribute": "disabled",
|
|
12198
|
+
"reflects": true
|
|
12199
|
+
},
|
|
12200
|
+
{
|
|
12201
|
+
"kind": "field",
|
|
12202
|
+
"name": "formDisabled",
|
|
12203
|
+
"type": {
|
|
12204
|
+
"text": "boolean"
|
|
12205
|
+
},
|
|
12206
|
+
"privacy": "protected",
|
|
12207
|
+
"default": "false",
|
|
12208
|
+
"description": "Whether an ancestor `<fieldset disabled>` has switched this control off.\n\nThe platform tells a form-associated element through `formDisabledCallback`\nand nothing else does, so without this a control inside a disabled fieldset\nstays fully typeable and announces itself as enabled.\n\nThe submission half is already the platform's: measured, the fieldset's\ncontrols are absent from the form's entry list and the host matches\n`:disabled`, so the value never goes anywhere. What is missing without this\nis everything a reader can see or touch.\n\nState rather than the `disabled` property. Writing that would reflect an\nattribute the consumer's server markup does not have, which React reports\non hydration and does not patch up, and it would also silently overwrite\nwhat the consumer set."
|
|
12209
|
+
},
|
|
12210
|
+
{
|
|
12211
|
+
"kind": "method",
|
|
12212
|
+
"name": "formDisabledCallback",
|
|
12213
|
+
"return": {
|
|
12214
|
+
"type": {
|
|
12215
|
+
"text": "void"
|
|
12216
|
+
}
|
|
12217
|
+
},
|
|
12218
|
+
"parameters": [
|
|
12219
|
+
{
|
|
12220
|
+
"name": "disabled",
|
|
12221
|
+
"type": {
|
|
12222
|
+
"text": "boolean"
|
|
12223
|
+
}
|
|
12224
|
+
}
|
|
12225
|
+
],
|
|
12226
|
+
"description": "Called by the browser when an ancestor fieldset is disabled or enabled.\n\n**The argument is the effective state, and taking it whole is what latched\nevery control in the library.** The platform calls this for the element's\nown `disabled` as well as for a fieldset, and our own arrives here at the\nworst possible moment: reflecting `disabled` to the attribute happens\ninside Lit's `update()`, the UA fires this synchronously from that write,\nand a reactive write during an update is a change-in-update Lit does not\nre-render for. So `formDisabled` ran exactly one update behind forever.\n\nMeasured on Slider, logging what `render` saw:\n\n```\nset true disabled true formDisabled false isDisabled true\nset false disabled false formDisabled true isDisabled true <- stale\n(no third render)\n```\n\nThe host came out right every time, `disabled` false, `:disabled` not\nmatching, and the inner control kept the attribute, so a control disabled\nonce could never be re-enabled. It only shows when something re-enables,\nwhich is the same shape of bug `inheritDisabled` was written for.\n\nOur own half is already in `this.disabled` and `isDisabled` is an or, so\nthis records only what the fieldset adds. That also removes the write\nentirely on the own-disabled path rather than moving it.\n\nThe one case this cannot see is a control that is disabled itself *and*\ninside a disabled fieldset, whose own `disabled` is then removed: the\neffective state does not change, so the platform does not call again, and\nthe fieldset's hold is not recorded. There is no callback to learn it from\nand reading `:disabled` here would answer about the attribute we are in the\nmiddle of removing."
|
|
12227
|
+
},
|
|
12228
|
+
{
|
|
12229
|
+
"kind": "field",
|
|
12230
|
+
"name": "heldByFieldset",
|
|
12231
|
+
"type": {
|
|
12232
|
+
"text": "boolean"
|
|
12233
|
+
},
|
|
12234
|
+
"privacy": "private",
|
|
12235
|
+
"description": "Whether an ancestor `<fieldset disabled>` holds the control, outside its\nfirst `<legend>`, read from the tree.\n\nFor the one case the callback cannot report: a control disabled itself and\nby a fieldset, whose own `disabled` is then removed. The effective state does\nnot change, so the platform does not call, and the fieldset's hold has to\nbe read.",
|
|
12236
|
+
"readonly": true
|
|
12237
|
+
},
|
|
12238
|
+
{
|
|
12239
|
+
"kind": "method",
|
|
12240
|
+
"name": "formResetCallback",
|
|
12241
|
+
"return": {
|
|
12242
|
+
"type": {
|
|
12243
|
+
"text": "void"
|
|
12244
|
+
}
|
|
12245
|
+
},
|
|
12246
|
+
"description": "Called by the browser when the form is reset. It does nothing here, and\nevery override calls it.\n\n**A chain rather than a leaf**, because more than one layer owes a reset\nsomething: the value mixin its default, and the field mixin beneath it the\nforgetting of a reader's past attempt, whose message otherwise showed over\nthe emptied control the moment the form was reset."
|
|
12247
|
+
},
|
|
12248
|
+
{
|
|
12249
|
+
"kind": "field",
|
|
12250
|
+
"name": "name",
|
|
12251
|
+
"type": {
|
|
12252
|
+
"text": "string"
|
|
12253
|
+
},
|
|
12254
|
+
"default": "''",
|
|
12255
|
+
"description": "The name the control's value is submitted under.\n\n**Reflected, and it is the exception to \"reflect only what CSS selects\non\".** The platform builds a form's entry list from the `name` *content\nattribute*, not from the property, so a control named through the property\nsubmitted under no name at all and was silently dropped. Measured: two\ninputs in one form, one named by attribute and one by property, and the\nform carried a single entry.\n\nSafe for a React consumer, which is what the rule is protecting: React\nrenders a custom element's props as attributes on the server, so the name\nis already in the markup being hydrated and reflecting it writes what is\nthere. It is only a change to the markup when a consumer assigns it\nimperatively later, and nothing is hydrating by then.\n\nHere rather than on each control.",
|
|
12256
|
+
"attribute": "name",
|
|
12257
|
+
"reflects": true
|
|
12258
|
+
},
|
|
12259
|
+
{
|
|
12260
|
+
"kind": "field",
|
|
12261
|
+
"name": "customValidity",
|
|
12262
|
+
"type": {
|
|
12263
|
+
"text": "string"
|
|
12264
|
+
},
|
|
12265
|
+
"privacy": "protected",
|
|
12266
|
+
"default": "''",
|
|
12267
|
+
"description": "The message `setCustomValidity` was given."
|
|
12268
|
+
},
|
|
12269
|
+
{
|
|
12270
|
+
"kind": "method",
|
|
12271
|
+
"name": "applyValidity",
|
|
12272
|
+
"privacy": "protected",
|
|
12273
|
+
"return": {
|
|
12274
|
+
"type": {
|
|
12275
|
+
"text": "void"
|
|
12276
|
+
}
|
|
12277
|
+
},
|
|
12278
|
+
"description": "Hands the platform the control's verdict, anchored where focus can go.\n\nHere the verdict is the custom message alone. `HelixFormElement` lays the\nmessage over what the control itself reported."
|
|
12279
|
+
},
|
|
12280
|
+
{
|
|
12281
|
+
"kind": "field",
|
|
12282
|
+
"name": "validity",
|
|
12283
|
+
"type": {
|
|
12284
|
+
"text": "ValidityState"
|
|
12285
|
+
},
|
|
12286
|
+
"description": "Whether the control meets its constraints, and why not.",
|
|
12287
|
+
"readonly": true,
|
|
12288
|
+
"helix": {
|
|
12289
|
+
"references": [
|
|
12290
|
+
{
|
|
12291
|
+
"label": "ElementInternals.validity",
|
|
12292
|
+
"url": "https://developer.mozilla.org/docs/Web/API/ElementInternals/validity"
|
|
12293
|
+
}
|
|
12294
|
+
]
|
|
12295
|
+
}
|
|
12296
|
+
},
|
|
12297
|
+
{
|
|
12298
|
+
"kind": "field",
|
|
12299
|
+
"name": "validationMessage",
|
|
12300
|
+
"type": {
|
|
12301
|
+
"text": "string"
|
|
12302
|
+
},
|
|
12303
|
+
"description": "The message the browser would show for the control, or an empty string.",
|
|
12304
|
+
"readonly": true
|
|
12305
|
+
},
|
|
12306
|
+
{
|
|
12307
|
+
"kind": "field",
|
|
12308
|
+
"name": "updateRunning",
|
|
12309
|
+
"type": {
|
|
12310
|
+
"text": "boolean"
|
|
12311
|
+
},
|
|
12312
|
+
"privacy": "private",
|
|
12313
|
+
"default": "false",
|
|
12314
|
+
"description": "Whether an update is running, so `runPendingUpdate` never starts one inside another."
|
|
12315
|
+
},
|
|
12316
|
+
{
|
|
12317
|
+
"kind": "method",
|
|
12318
|
+
"name": "performUpdate",
|
|
12319
|
+
"privacy": "protected",
|
|
12320
|
+
"return": {
|
|
12321
|
+
"type": {
|
|
12322
|
+
"text": "void"
|
|
12323
|
+
}
|
|
12324
|
+
},
|
|
12325
|
+
"description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
|
|
12326
|
+
"inheritedFrom": {
|
|
12327
|
+
"name": "HelixElement",
|
|
12328
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12329
|
+
}
|
|
12330
|
+
},
|
|
12331
|
+
{
|
|
12332
|
+
"kind": "method",
|
|
12333
|
+
"name": "runPendingUpdate",
|
|
12334
|
+
"privacy": "protected",
|
|
12335
|
+
"return": {
|
|
12336
|
+
"type": {
|
|
12337
|
+
"text": "void"
|
|
12338
|
+
}
|
|
12339
|
+
},
|
|
12340
|
+
"description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.\n\nProtected for a control that submits on its own, which has to hand the\nform the verdict for what it holds now: Pin Input's `autosubmit`."
|
|
12341
|
+
},
|
|
12342
|
+
{
|
|
12343
|
+
"kind": "field",
|
|
12344
|
+
"name": "willValidate",
|
|
12345
|
+
"type": {
|
|
12346
|
+
"text": "boolean"
|
|
12347
|
+
},
|
|
12348
|
+
"description": "Whether the control is checked when its form is submitted.",
|
|
12349
|
+
"readonly": true
|
|
12350
|
+
},
|
|
12351
|
+
{
|
|
12352
|
+
"kind": "method",
|
|
12353
|
+
"name": "checkValidity",
|
|
12354
|
+
"return": {
|
|
12355
|
+
"type": {
|
|
12356
|
+
"text": "boolean"
|
|
12357
|
+
}
|
|
12358
|
+
},
|
|
12359
|
+
"description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that."
|
|
12360
|
+
},
|
|
12361
|
+
{
|
|
12362
|
+
"kind": "method",
|
|
12363
|
+
"name": "reportValidity",
|
|
12364
|
+
"return": {
|
|
12365
|
+
"type": {
|
|
12366
|
+
"text": "boolean"
|
|
12367
|
+
}
|
|
12368
|
+
},
|
|
12369
|
+
"description": "Returns whether the control is valid, and when it is not, fires `invalid`\nand shows the browser's message at the control."
|
|
12370
|
+
},
|
|
12371
|
+
{
|
|
12372
|
+
"kind": "method",
|
|
12373
|
+
"name": "setCustomValidity",
|
|
12374
|
+
"return": {
|
|
12375
|
+
"type": {
|
|
12376
|
+
"text": "void"
|
|
12377
|
+
}
|
|
12378
|
+
},
|
|
12379
|
+
"parameters": [
|
|
12380
|
+
{
|
|
12381
|
+
"name": "message",
|
|
12382
|
+
"type": {
|
|
12383
|
+
"text": "string"
|
|
12384
|
+
}
|
|
12385
|
+
}
|
|
12386
|
+
],
|
|
12387
|
+
"description": "Marks the control invalid with `message`, or clears that with an empty\nstring, as on a native control. The form does not submit while it is set."
|
|
12388
|
+
},
|
|
12389
|
+
{
|
|
12390
|
+
"kind": "field",
|
|
12391
|
+
"name": "focusTarget",
|
|
12392
|
+
"type": {
|
|
12393
|
+
"text": "HTMLElement | null"
|
|
12394
|
+
},
|
|
12395
|
+
"privacy": "protected",
|
|
12396
|
+
"description": "The element focus goes to: the control's first tab stop, or `null` where\nthere is none.\n\nRead through shadow roots and slots, so a group lands on the member that\nholds its tab stop, which is the chosen radio in a radio group.",
|
|
12397
|
+
"readonly": true
|
|
12398
|
+
},
|
|
12399
|
+
{
|
|
12400
|
+
"kind": "method",
|
|
12401
|
+
"name": "focus",
|
|
12402
|
+
"return": {
|
|
12403
|
+
"type": {
|
|
12404
|
+
"text": "void"
|
|
12405
|
+
}
|
|
12406
|
+
},
|
|
12407
|
+
"parameters": [
|
|
12408
|
+
{
|
|
12409
|
+
"name": "options",
|
|
12410
|
+
"optional": true,
|
|
12411
|
+
"type": {
|
|
12412
|
+
"text": "FocusOptions"
|
|
12413
|
+
}
|
|
12414
|
+
}
|
|
12415
|
+
],
|
|
12416
|
+
"description": "Moves focus to the control, as focusing a native control does."
|
|
12417
|
+
},
|
|
12418
|
+
{
|
|
12419
|
+
"kind": "field",
|
|
12420
|
+
"name": "focusFromLabel",
|
|
12421
|
+
"privacy": "private",
|
|
12422
|
+
"readonly": true,
|
|
12423
|
+
"description": "Focuses the control when its `<label>` is pressed.\n\nThe label sends the host a click of the browser's own after trying to\nfocus it, and a host that is not focusable takes nothing from that try.\nOnly a click that starts at the host and that the browser sent: one from\ninside has landed where it meant to, and `click()` from a script does not\nfocus a native control either."
|
|
12424
|
+
},
|
|
12425
|
+
{
|
|
12426
|
+
"kind": "field",
|
|
12427
|
+
"name": "refreshAnchor",
|
|
12428
|
+
"privacy": "private",
|
|
12429
|
+
"readonly": true,
|
|
12430
|
+
"description": "Re-anchors the verdict as the form checks it, because the control's\nmembers may have rendered since it last reported, and the anchor read then\nwas the best there was."
|
|
12431
|
+
},
|
|
12432
|
+
{
|
|
12433
|
+
"kind": "field",
|
|
12434
|
+
"name": "unwatchLabels",
|
|
12435
|
+
"type": {
|
|
12436
|
+
"text": "(() => void) | undefined"
|
|
12437
|
+
},
|
|
12438
|
+
"privacy": "private",
|
|
12439
|
+
"description": "Stops listening for the labels in this control's tree."
|
|
12440
|
+
},
|
|
12441
|
+
{
|
|
12442
|
+
"kind": "field",
|
|
12443
|
+
"name": "form",
|
|
12444
|
+
"type": {
|
|
12445
|
+
"text": "HTMLFormElement | null"
|
|
12446
|
+
},
|
|
12447
|
+
"description": "The form the control belongs to, or `null`.",
|
|
12448
|
+
"readonly": true,
|
|
12449
|
+
"helix": {
|
|
12450
|
+
"references": [
|
|
12451
|
+
{
|
|
12452
|
+
"label": "form-associated custom elements",
|
|
12453
|
+
"url": "https://html.spec.whatwg.org/multipage/custom-elements.html#form-associated-custom-elements"
|
|
12454
|
+
}
|
|
12455
|
+
]
|
|
12456
|
+
}
|
|
12457
|
+
},
|
|
12458
|
+
{
|
|
12459
|
+
"kind": "field",
|
|
12460
|
+
"name": "labels",
|
|
12461
|
+
"type": {
|
|
12462
|
+
"text": "NodeList"
|
|
12463
|
+
},
|
|
12464
|
+
"description": "The labels associated with the control.",
|
|
12465
|
+
"readonly": true,
|
|
12466
|
+
"helix": {
|
|
12467
|
+
"references": [
|
|
12468
|
+
{
|
|
12469
|
+
"label": "form-associated custom elements",
|
|
12470
|
+
"url": "https://html.spec.whatwg.org/multipage/custom-elements.html#form-associated-custom-elements"
|
|
12471
|
+
}
|
|
12472
|
+
]
|
|
12473
|
+
}
|
|
12474
|
+
},
|
|
12475
|
+
{
|
|
12476
|
+
"kind": "field",
|
|
12477
|
+
"name": "tier",
|
|
12478
|
+
"type": {
|
|
12479
|
+
"text": "string"
|
|
12480
|
+
},
|
|
12481
|
+
"static": true,
|
|
12482
|
+
"default": "'helix-headless-'",
|
|
12483
|
+
"description": "The prefix this tier registers its elements under.\n\n**A component that renders another renders its own tier's version of it**,\nso `helix-headless-pagination-size` composes `helix-headless-select` and\n`helix-pagination-size` composes `helix-select`. One template says\n`${this.tag('select')}` and each tier answers with its own name.\n\n**The public tag may not be the composed one, in either tier.** Using it\ncosts three things: the name means two different things depending on what a\nconsumer imported, the headless tier composes an element it does not ship,\nand the composition cannot be tested there at all, because there is no\n`helix-select` on that tier to test it against.\n\n**A prefix rather than an override per composition**, which was the first\nplan and does not compile. An override re-renders the fragment from the\nsubclass, and the fragment reads members the base keeps private:\n`PaginationSize` alone would have had to widen `options`, `current` and\n`handleChange` to `protected` so a subclass could say the same thing again.\nSixteen families of that is a lot of encapsulation spent on saying one\nword differently.",
|
|
12484
|
+
"inheritedFrom": {
|
|
12485
|
+
"name": "HelixElement",
|
|
12486
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12487
|
+
}
|
|
12488
|
+
},
|
|
12489
|
+
{
|
|
12490
|
+
"kind": "method",
|
|
12491
|
+
"name": "tag",
|
|
12492
|
+
"privacy": "protected",
|
|
12493
|
+
"return": {
|
|
12494
|
+
"type": {
|
|
12495
|
+
"text": "StaticValue"
|
|
12496
|
+
}
|
|
12497
|
+
},
|
|
12498
|
+
"parameters": [
|
|
12499
|
+
{
|
|
12500
|
+
"name": "name",
|
|
12501
|
+
"type": {
|
|
12502
|
+
"text": "string"
|
|
12503
|
+
}
|
|
12504
|
+
}
|
|
12505
|
+
],
|
|
12506
|
+
"description": "One composed tag, as a static value a template can interpolate.\n\nWhat `unsafeStatic` returns, safe by construction: the name is a literal in\nour own source and the prefix is one of two strings this class defines.\nCalled per render and not cached, which costs nothing, because\n`static-html` keys its template cache on the joined string rather than on\nthe object.\n\n**Written out rather than imported, for every element that never renders\none.** `lit/static-html.js` declares no side effects, so importing\n`unsafeStatic` alone kept the module's three `withStatic` calls in every\nbundle: about 210 bytes gzipped on each of the families that compose no\ntag, Divider and Badge among them. The value is lit's cross-copy protocol,\nkeyed by `Symbol.for('')` so that two copies of lit on a page read each\nother's, and a spec holds it equal to `unsafeStatic`'s.",
|
|
12507
|
+
"inheritedFrom": {
|
|
12508
|
+
"name": "HelixElement",
|
|
12509
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12510
|
+
}
|
|
12511
|
+
},
|
|
12512
|
+
{
|
|
12513
|
+
"kind": "method",
|
|
12514
|
+
"name": "partNamed",
|
|
12515
|
+
"privacy": "protected",
|
|
12516
|
+
"return": {
|
|
12517
|
+
"type": {
|
|
12518
|
+
"text": "T | null"
|
|
12519
|
+
}
|
|
12520
|
+
},
|
|
12521
|
+
"parameters": [
|
|
12522
|
+
{
|
|
12523
|
+
"name": "name",
|
|
12524
|
+
"type": {
|
|
12525
|
+
"text": "string"
|
|
12526
|
+
}
|
|
12527
|
+
}
|
|
12528
|
+
],
|
|
12529
|
+
"description": "One of this element's own parts, by name, or null where it is not rendered.\n\nNot `part`, which every element already has: `Element.part` is the\n`DOMTokenList` of the names the element itself carries, and a method under\nthat name is a type error on every subclass.\n\n**One guard for every lookup.** Lit's server shim has no `querySelector`\non the render root, so a lookup reached during a server render, from a\ngetter a template reads or from `willUpdate`, throws there and nowhere\nelse. Four spellings of the same guard had grown across the library, and\na fifth site with none. Null on the server, which is what the rest of the\ncode already treats a part that has not rendered as.\n\n**`~=` and not `=`.** A part drawn in a state carries a second name while\nthe state holds, `part=\"page page-current\"`, and an exact match stops\nfinding it for exactly as long as it is the one that matters.\n\n`helix component`'s `selectors` reads these calls the way it reads a\n`querySelector('[part=\"x\"]')`, so a name nothing renders is a finding\nrather than a null an optional chain swallows.",
|
|
12530
|
+
"inheritedFrom": {
|
|
12531
|
+
"name": "HelixElement",
|
|
12532
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12533
|
+
}
|
|
12534
|
+
},
|
|
12535
|
+
{
|
|
12536
|
+
"kind": "field",
|
|
12537
|
+
"name": "internals",
|
|
12538
|
+
"type": {
|
|
12539
|
+
"text": "ElementInternals"
|
|
12540
|
+
},
|
|
12541
|
+
"privacy": "protected",
|
|
12542
|
+
"readonly": true,
|
|
12543
|
+
"description": "The element's semantics, set without touching the DOM.\n\n`ElementInternals` sets the implicit role, which an author's own `role`\nattribute still overrides, and it writes no attribute. Setting `role` on the\nhost directly would: that is an attribute the element gives itself after it\nupgrades, which a React consumer's server markup never had, and hydration\nreports it as a mismatch.\n\nAvailable during server rendering. Lit's shim implements `attachInternals`,\nso nothing here needs a guard.",
|
|
12544
|
+
"inheritedFrom": {
|
|
12545
|
+
"name": "HelixElement",
|
|
12546
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12547
|
+
}
|
|
12548
|
+
},
|
|
12549
|
+
{
|
|
12550
|
+
"kind": "method",
|
|
12551
|
+
"name": "toggleState",
|
|
12552
|
+
"privacy": "protected",
|
|
12553
|
+
"return": {
|
|
12554
|
+
"type": {
|
|
12555
|
+
"text": "void"
|
|
12556
|
+
}
|
|
12557
|
+
},
|
|
12558
|
+
"parameters": [
|
|
12559
|
+
{
|
|
12560
|
+
"name": "name",
|
|
12561
|
+
"type": {
|
|
12562
|
+
"text": "string"
|
|
12563
|
+
}
|
|
12564
|
+
},
|
|
12565
|
+
{
|
|
12566
|
+
"name": "on",
|
|
12567
|
+
"type": {
|
|
12568
|
+
"text": "boolean"
|
|
12569
|
+
}
|
|
12570
|
+
}
|
|
12571
|
+
],
|
|
12572
|
+
"description": "Records a boolean fact about this element as a custom state.\n\n**The host belongs to whoever rendered it, and a component's own\nbookkeeping may not be kept there.** An attribute written on the first\nupdate is markup a consumer's server never sent, so a React consumer\nhydrates a DOM that has gained attributes since and reports a mismatch it\nwill not patch up. A custom state is not in the DOM at all: it carries the\nfact to a stylesheet through `:state()` and leaves the markup alone, so the\nserver's output and the client's agree by construction.\n\n`SETTLED` carries the long version of that argument; `checked`, `open`,\n`invalid` and `has-label` are recorded the same way, each of them a state a\n`default-*` attribute resolves before React reaches the node.\n\n**Deferring the definitions is not a fix and could not be.** Importing them\nfrom an effect so the upgrades fall the other side of hydration works only\nwhile hydration is one pass: anything that splits it, a streamed segment or\na suspended boundary, puts an upgrade back inside the window. Timing cannot\nbe the guarantee when the fact is kept somewhere React reconciles.\n\nFeature-tested rather than assumed, the way `hostAria` tests element\nreferences. An engine without `CustomStateSet` records nothing and keeps\nwhatever the resting rule draws, which is the safe direction to fail.\n\n**The engines the test is for are browsers**: Safari below 17.4 and Firefox\nbelow 126, where the write is a `TypeError`, so a component bypassing this\nfails to render rather than rendering without whatever the state draws.\nLit's server shim sets `states`, so the guard passes there and records a\nstate nothing reads, which is harmless.",
|
|
12573
|
+
"inheritedFrom": {
|
|
12574
|
+
"name": "HelixElement",
|
|
12575
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12576
|
+
}
|
|
12577
|
+
},
|
|
12578
|
+
{
|
|
12579
|
+
"kind": "field",
|
|
12580
|
+
"name": "whenSettled",
|
|
12581
|
+
"type": {
|
|
12582
|
+
"text": "Promise<void>"
|
|
12583
|
+
},
|
|
12584
|
+
"readonly": true,
|
|
12585
|
+
"description": "Resolves a frame after the first update, when transitions are switched on.\n\n**Named `whenSettled` because `settled` is taken four times over**, by\nImage, Splitter and both color controls, none of them about transitions. A\nbase class takes the name every subclass then cannot use.\n\n**The state it reports cannot be watched, which is why this exists.** A\ncustom state is deliberately not in the DOM, so there is no\n`MutationObserver` equivalent for `ElementInternals.states`. Await this\ninstead.\n\nSeparate from `updateComplete`, which resolves in the microtask checkpoint\nthe suppression is still active in. That is the distinction `readyToMove`\nin `@fusion.dev/helix-testing` is written around.\n\nIt never resolves where `requestAnimationFrame` never fires, which is a\nserver, a hidden tab, and happy-dom. Callers that must not hang there race\nit against a timeout, as the happy-dom harness's `readyToMove` does. The\nbrowser harness's awaits it alone: a browser always runs the frame, and a\ntimer beside it was a bet on how long one takes, which a busy run lost.",
|
|
12586
|
+
"default": "new Promise<void>((resolve) => { this.resolveSettled = resolve })",
|
|
12587
|
+
"inheritedFrom": {
|
|
12588
|
+
"name": "HelixElement",
|
|
12589
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12590
|
+
}
|
|
12591
|
+
},
|
|
12592
|
+
{
|
|
12593
|
+
"kind": "field",
|
|
12594
|
+
"name": "resolveSettled",
|
|
12595
|
+
"type": {
|
|
12596
|
+
"text": "() => void"
|
|
12597
|
+
},
|
|
12598
|
+
"privacy": "private",
|
|
12599
|
+
"description": "Resolves `whenSettled`, once, from the frame that records the state.",
|
|
12600
|
+
"inheritedFrom": {
|
|
12601
|
+
"name": "HelixElement",
|
|
12602
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12603
|
+
}
|
|
12604
|
+
},
|
|
12605
|
+
{
|
|
12606
|
+
"kind": "field",
|
|
12607
|
+
"name": "fromServer",
|
|
12608
|
+
"type": {
|
|
12609
|
+
"text": "boolean"
|
|
12610
|
+
},
|
|
12611
|
+
"privacy": "private",
|
|
12612
|
+
"default": "false",
|
|
12613
|
+
"description": "Whether the shadow root was a server's, parsed from declarative shadow DOM.",
|
|
12614
|
+
"inheritedFrom": {
|
|
12615
|
+
"name": "HelixElement",
|
|
12616
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12617
|
+
}
|
|
12618
|
+
},
|
|
12619
|
+
{
|
|
12620
|
+
"kind": "field",
|
|
12621
|
+
"name": "hydrating",
|
|
12622
|
+
"type": {
|
|
12623
|
+
"text": "boolean"
|
|
12624
|
+
},
|
|
12625
|
+
"privacy": "protected",
|
|
12626
|
+
"description": "Whether this update is hydrating a server's markup, and so has to render\nexactly what the server rendered.\n\n**Lit hydrates by assuming the markup already shows the first render.** A\nvalue that differs is recorded and never written, so the page keeps the\nserver's, and a template that differs throws. The server has no children,\nso anything a component reads from its children waits for the update after\nhydration, which `finishHydration` asks for. Without a server's markup the\nfirst render reads them and there is one render.",
|
|
12627
|
+
"readonly": true,
|
|
12628
|
+
"inheritedFrom": {
|
|
12629
|
+
"name": "HelixElement",
|
|
12630
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12631
|
+
}
|
|
12632
|
+
},
|
|
12633
|
+
{
|
|
12634
|
+
"kind": "field",
|
|
12635
|
+
"name": "serverRendered",
|
|
12636
|
+
"type": {
|
|
12637
|
+
"text": "boolean"
|
|
12638
|
+
},
|
|
12639
|
+
"privacy": "protected",
|
|
12640
|
+
"description": "Whether this element hydrated a server's markup rather than rendering its own.\n\nFor what happened before hydration and cannot be heard after it: an image\nthe parser fetched fires `load` or `error` before any listener exists, so a\ncomponent asks the image instead, once, when this is true.",
|
|
12641
|
+
"readonly": true,
|
|
12642
|
+
"inheritedFrom": {
|
|
12643
|
+
"name": "HelixElement",
|
|
12644
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12645
|
+
}
|
|
12646
|
+
},
|
|
12647
|
+
{
|
|
12648
|
+
"kind": "method",
|
|
12649
|
+
"name": "finishHydration",
|
|
12650
|
+
"privacy": "protected",
|
|
12651
|
+
"return": {
|
|
12652
|
+
"type": {
|
|
12653
|
+
"text": "void"
|
|
12654
|
+
}
|
|
12655
|
+
},
|
|
12656
|
+
"description": "Asks for the update a hydration put off, so the reads it skipped happen.\n\nCalled from `firstUpdated`, the end of the hydrating update. The render it\nschedules can only follow that one, which is the exception Lit's\nchange-in-update warning names, and it happens only on a page a server\nrendered.",
|
|
12657
|
+
"inheritedFrom": {
|
|
12658
|
+
"name": "HelixElement",
|
|
12659
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12660
|
+
}
|
|
12661
|
+
},
|
|
12662
|
+
{
|
|
12663
|
+
"kind": "field",
|
|
12664
|
+
"name": "childrenKnown",
|
|
12665
|
+
"type": {
|
|
12666
|
+
"text": "boolean"
|
|
12667
|
+
},
|
|
12668
|
+
"privacy": "protected",
|
|
12669
|
+
"description": "Whether this render can know the children.\n\nA server cannot: its element shim carries attributes and no tree, so\n`children` is undefined there. A render hydrating what a server sent must\nnot, because it has to be the server's render. Anywhere else it can. A\ncomponent whose render depends on its children reads them through\n`knownChildren`, and treats \"not known\" as its own answer rather than as\n\"none\": a list that renders its empty state because nobody has looked yet is\nthe one thing an empty state must never do.",
|
|
12670
|
+
"readonly": true,
|
|
12671
|
+
"inheritedFrom": {
|
|
12672
|
+
"name": "HelixElement",
|
|
12673
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12674
|
+
}
|
|
12675
|
+
},
|
|
12676
|
+
{
|
|
12677
|
+
"kind": "field",
|
|
12678
|
+
"name": "knownChildren",
|
|
12679
|
+
"type": {
|
|
12680
|
+
"text": "Element[]"
|
|
12681
|
+
},
|
|
12682
|
+
"privacy": "protected",
|
|
12683
|
+
"description": "The children a render may read: all of them where they are known, and none otherwise.",
|
|
12684
|
+
"readonly": true,
|
|
12685
|
+
"inheritedFrom": {
|
|
12686
|
+
"name": "HelixElement",
|
|
12687
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12688
|
+
}
|
|
12689
|
+
},
|
|
12690
|
+
{
|
|
12691
|
+
"kind": "field",
|
|
12692
|
+
"name": "assignsByName",
|
|
12693
|
+
"type": {
|
|
12694
|
+
"text": "boolean"
|
|
12695
|
+
},
|
|
12696
|
+
"privacy": "protected",
|
|
12697
|
+
"description": "Whether this element's slots route by name although it asked to assign them\nby hand.\n\n**A declarative shadow root is always the by-name kind.** HTML has no way to\nask for manual assignment, so a component that assigns by hand and hydrates\na server's root gets one where `slot.assign()` does nothing, and its\nchildren land wherever their `slot` attribute sends them. The way through is\nto write that attribute, which is what `route` does. Only there: on a root\nthis element made, assignment stays manual and the consumer's markup is\nnever touched, which is what a React consumer's hydration requires.",
|
|
12698
|
+
"readonly": true,
|
|
12699
|
+
"inheritedFrom": {
|
|
12700
|
+
"name": "HelixElement",
|
|
12701
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12702
|
+
}
|
|
12703
|
+
},
|
|
12704
|
+
{
|
|
12705
|
+
"kind": "method",
|
|
12706
|
+
"name": "route",
|
|
12707
|
+
"privacy": "protected",
|
|
12708
|
+
"return": {
|
|
12709
|
+
"type": {
|
|
12710
|
+
"text": "void"
|
|
12711
|
+
}
|
|
12712
|
+
},
|
|
12713
|
+
"parameters": [
|
|
12714
|
+
{
|
|
12715
|
+
"name": "child",
|
|
12716
|
+
"type": {
|
|
12717
|
+
"text": "Element"
|
|
12718
|
+
}
|
|
12719
|
+
},
|
|
12720
|
+
{
|
|
12721
|
+
"name": "name",
|
|
12722
|
+
"type": {
|
|
12723
|
+
"text": "string | undefined"
|
|
12724
|
+
}
|
|
12725
|
+
}
|
|
12726
|
+
],
|
|
12727
|
+
"description": "Sends a child to a slot by name, on a root that routes by name.\n\n`undefined` is the default slot. Written only when it differs, so routing\nthe same child again on every update writes nothing.",
|
|
12728
|
+
"inheritedFrom": {
|
|
12729
|
+
"name": "HelixElement",
|
|
12730
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12731
|
+
}
|
|
12732
|
+
},
|
|
12733
|
+
{
|
|
12734
|
+
"kind": "field",
|
|
12735
|
+
"name": "stopInner",
|
|
12736
|
+
"privacy": "protected",
|
|
12737
|
+
"readonly": true,
|
|
12738
|
+
"description": "Stops an inner control's own announcement at this element's boundary.\n\n**A composed control is one control to a consumer, and the natives had no\nequivalent of the stop the prefixed events already get.** `<helix-select>`\nrenders a `<helix-listbox>`, and both announce: the listbox dispatches\n`input` and `change` from its own host, `input` is composed by\nspecification, and a consumer listening on the select therefore heard one\nchoice twice. Measured before this existed, on the styled tier, one choice\non the inner listbox: select `input` twice and `change` three times,\ncombobox, date input, time input and color input twice each. `Command` was\nthe only one that was right, because it happened to reach for\n`stopImmediatePropagation` for a different reason.\n\nBound on the child in the parent's template, so it runs while the event is\nstill at the child and before it can cross. The guard is for the case where\na component binds this on itself: an element must never stop its own\nannouncement, which is the one it exists to make.\n\nThis is the same job the `helix-before-*` handlers do with their own\n`stopPropagation`, and it is separate rather than folded into them because\na consumer may legitimately refuse a request without the notification ever\nhappening: the two travel at different times and one can be absent.",
|
|
12739
|
+
"inheritedFrom": {
|
|
12740
|
+
"name": "HelixElement",
|
|
12741
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12742
|
+
}
|
|
12743
|
+
},
|
|
12744
|
+
{
|
|
12745
|
+
"kind": "method",
|
|
12746
|
+
"name": "relayNativeEvent",
|
|
12747
|
+
"privacy": "protected",
|
|
12748
|
+
"return": {
|
|
12749
|
+
"type": {
|
|
12750
|
+
"text": "void"
|
|
12751
|
+
}
|
|
12752
|
+
},
|
|
12753
|
+
"parameters": [
|
|
12754
|
+
{
|
|
12755
|
+
"name": "event",
|
|
12756
|
+
"type": {
|
|
12757
|
+
"text": "Event"
|
|
12758
|
+
}
|
|
12759
|
+
},
|
|
12760
|
+
{
|
|
12761
|
+
"name": "init",
|
|
12762
|
+
"optional": true,
|
|
12763
|
+
"type": {
|
|
12764
|
+
"text": "EventInit"
|
|
12765
|
+
}
|
|
12766
|
+
}
|
|
12767
|
+
],
|
|
12768
|
+
"description": "Re-emits a native event from the host, under its own name.\n\nA native event fired by an inner `<input>` or `<textarea>` is not composed,\nso it stops at the shadow boundary and a consumer listening on\n`<helix-input>` hears nothing. Re-dispatching it from the host is what\nmakes the component behave like the control it wraps.\n\nThe relayed event keeps the native name deliberately. `change` is `change`,\nwhich is what a consumer already knows to listen for, and it is what\nreaches React: its synthetic system claims `onChange` and wires it to that\nname, so a prefixed one would never arrive.\n\n`composed` is not forced. It defaults to the original event's own value, so\na relayed `change` stops at the next shadow boundary exactly as a native\none would. Pass it explicitly only where escaping is the intent, and say so\nwhere you do.",
|
|
12769
|
+
"inheritedFrom": {
|
|
12770
|
+
"name": "HelixElement",
|
|
12771
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12772
|
+
}
|
|
12773
|
+
},
|
|
12774
|
+
{
|
|
12775
|
+
"kind": "field",
|
|
12776
|
+
"name": "markRules",
|
|
12777
|
+
"type": {
|
|
12778
|
+
"text": "readonly string[]"
|
|
12779
|
+
},
|
|
12780
|
+
"privacy": "protected",
|
|
12781
|
+
"static": true,
|
|
12782
|
+
"default": "[]",
|
|
12783
|
+
"description": "The rules from `mark-rules.ts` for the marks this element writes in its\nown shadow root: `data-scroller`, `data-virtual`, `data-spoken` and\n`data-mirror`.\n\nA component that writes a mark names its rule here, and a subclass\ninherits the list. One that writes none takes only the three rules every\nshadow root gets, which is what keeps the other four out of a Button.",
|
|
12784
|
+
"inheritedFrom": {
|
|
12785
|
+
"name": "HelixElement",
|
|
12786
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12787
|
+
}
|
|
12788
|
+
},
|
|
12789
|
+
{
|
|
12790
|
+
"kind": "method",
|
|
12791
|
+
"name": "finalizeStyles",
|
|
12792
|
+
"privacy": "protected",
|
|
12793
|
+
"static": true,
|
|
12794
|
+
"return": {
|
|
12795
|
+
"type": {
|
|
12796
|
+
"text": "CSSResultOrNative[]"
|
|
12797
|
+
}
|
|
12798
|
+
},
|
|
12799
|
+
"parameters": [
|
|
12800
|
+
{
|
|
12801
|
+
"name": "styles",
|
|
12802
|
+
"optional": true,
|
|
12803
|
+
"type": {
|
|
12804
|
+
"text": "CSSResultOrNative | CSSResultOrNative[]"
|
|
12805
|
+
}
|
|
12806
|
+
}
|
|
12807
|
+
],
|
|
12808
|
+
"description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it, with the rules for the marks it writes.",
|
|
12809
|
+
"inheritedFrom": {
|
|
12810
|
+
"name": "HelixElement",
|
|
12811
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12812
|
+
}
|
|
12813
|
+
}
|
|
12814
|
+
],
|
|
12815
|
+
"attributes": [
|
|
12816
|
+
{
|
|
12817
|
+
"name": "disabled",
|
|
12818
|
+
"type": {
|
|
12819
|
+
"text": "boolean"
|
|
12820
|
+
},
|
|
12821
|
+
"default": "false",
|
|
12822
|
+
"description": "Whether the control is disabled and cannot be used.\n\nReflected, because the styled tier selects on it, and mirrored to\n`aria-disabled` rather than removing the element from the accessibility\ntree, so a screen reader can still announce that the control exists.\n\nThe mirror itself is in `willUpdate` below, here rather than in each\ncontrol, because here is where `disabled` is.",
|
|
12823
|
+
"fieldName": "disabled"
|
|
12824
|
+
},
|
|
12825
|
+
{
|
|
12826
|
+
"name": "name",
|
|
12827
|
+
"type": {
|
|
12828
|
+
"text": "string"
|
|
12829
|
+
},
|
|
12830
|
+
"default": "''",
|
|
12831
|
+
"description": "The name the control's value is submitted under.\n\n**Reflected, and it is the exception to \"reflect only what CSS selects\non\".** The platform builds a form's entry list from the `name` *content\nattribute*, not from the property, so a control named through the property\nsubmitted under no name at all and was silently dropped. Measured: two\ninputs in one form, one named by attribute and one by property, and the\nform carried a single entry.\n\nSafe for a React consumer, which is what the rule is protecting: React\nrenders a custom element's props as attributes on the server, so the name\nis already in the markup being hydrated and reflecting it writes what is\nthere. It is only a change to the markup when a consumer assigns it\nimperatively later, and nothing is hydrating by then.\n\nHere rather than on each control.",
|
|
12832
|
+
"fieldName": "name"
|
|
12833
|
+
}
|
|
12834
|
+
],
|
|
12835
|
+
"superclass": {
|
|
12836
|
+
"name": "HelixElement",
|
|
12837
|
+
"module": "/src/helix-element/helix-element.js"
|
|
12838
|
+
},
|
|
12839
|
+
"summary": "Base for a form element that reports no validity of its own, as a native button does.",
|
|
12840
|
+
"helix": {
|
|
12841
|
+
"since": "0.176.0",
|
|
12842
|
+
"status": "experimental",
|
|
12843
|
+
"documentation": "https://fusion.dev/helix/docs/tiers",
|
|
12844
|
+
"tier": "core"
|
|
12845
|
+
},
|
|
12846
|
+
"cssStates": [
|
|
12847
|
+
{
|
|
12848
|
+
"description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
|
|
12849
|
+
"name": "settled",
|
|
12850
|
+
"inheritedFrom": {
|
|
12851
|
+
"name": "HelixElement",
|
|
12852
|
+
"module": "src/helix-element/helix-element.ts"
|
|
12853
|
+
}
|
|
12854
|
+
}
|
|
12855
|
+
]
|
|
12856
|
+
}
|
|
12857
|
+
],
|
|
12858
|
+
"exports": [
|
|
12859
|
+
{
|
|
12860
|
+
"kind": "js",
|
|
12861
|
+
"name": "HelixFormElementBase",
|
|
12862
|
+
"declaration": {
|
|
12863
|
+
"name": "HelixFormElementBase",
|
|
12864
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
12865
|
+
}
|
|
12866
|
+
}
|
|
12867
|
+
]
|
|
12868
|
+
},
|
|
12869
|
+
{
|
|
12870
|
+
"kind": "javascript-module",
|
|
12871
|
+
"path": "src/helix-form-element/helix-form-element.ts",
|
|
12872
|
+
"declarations": [
|
|
12873
|
+
{
|
|
12874
|
+
"kind": "class",
|
|
12875
|
+
"description": "`HelixFormElement` is a class because the browser reads `formAssociated` from\nthe constructor during element upgrade, and a mixin or controller cannot\nsupply it.\n\n`internals` comes from `HelixElement`, which attaches it for every component.\n`attachInternals()` throws on a second call, so only one class attaches it.\n\nThe class carries only what every form participant needs. `value` and the\nreset and restore callbacks are added with the first input component.\n\n**The validity API is the platform's, read through `internals`**, so\n`checkValidity()`, `reportValidity()` and `setCustomValidity()` work on the\nhost as they do on a native control. A custom message is laid over whatever\nthe control itself reports, which is why `setValidity` is wrapped below.\n\n**Focus goes to the control's first tab stop**, for `focus()` and for a\npress on a `<label>` that names the host. A host is not focusable itself, so\nwithout this a label press focused nothing on half the controls.\n\nOwnership, `disabled`, `name`, focus and the validity API are\n`HelixFormElementBase`'s, which a control that reports no verdict of its\nown, as Button does, extends directly.",
|
|
12876
|
+
"name": "HelixFormElement",
|
|
12877
|
+
"members": [
|
|
12878
|
+
{
|
|
12879
|
+
"kind": "method",
|
|
12880
|
+
"name": "announceInput",
|
|
12881
|
+
"privacy": "protected",
|
|
12882
|
+
"return": {
|
|
12883
|
+
"type": {
|
|
12884
|
+
"text": "void"
|
|
12885
|
+
}
|
|
12886
|
+
},
|
|
12887
|
+
"description": "Announces `input` from the host, the way the control it stands for would.\n\nComposed, as the native one is: `input` crosses shadow boundaries by\nspecification, so a consumer listening above a composition hears it."
|
|
12888
|
+
},
|
|
12889
|
+
{
|
|
12890
|
+
"kind": "method",
|
|
12891
|
+
"name": "announceChange",
|
|
12892
|
+
"privacy": "protected",
|
|
12893
|
+
"return": {
|
|
12894
|
+
"type": {
|
|
12895
|
+
"text": "void"
|
|
12896
|
+
}
|
|
12897
|
+
},
|
|
12898
|
+
"description": "Announces `change` from the host, the way the control it stands for would.\n\n**Not composed, and that is the shape of the native event rather than a\nchoice made here.** `change` stops at a shadow boundary, so a composed\ncontrol hears its inner control's and relays it under the same name from\nits own host, which is what `onChange` binds. Every control here that\ncommits a value announces it through this, whether the commit came from an\ninner control's own `change`, a step, a scrub or a completed code, so the\nevent is one shape in one place."
|
|
12899
|
+
},
|
|
12900
|
+
{
|
|
12901
|
+
"kind": "field",
|
|
12902
|
+
"name": "reportValidityTo",
|
|
12903
|
+
"type": {
|
|
12904
|
+
"text": "ElementInternals['setValidity']"
|
|
12905
|
+
},
|
|
12906
|
+
"privacy": "private",
|
|
12907
|
+
"readonly": true,
|
|
12908
|
+
"description": "The platform's own `setValidity`, which the wrapper above calls.",
|
|
12909
|
+
"default": "report"
|
|
12910
|
+
},
|
|
12911
|
+
{
|
|
12912
|
+
"kind": "field",
|
|
12913
|
+
"name": "reported",
|
|
12914
|
+
"type": {
|
|
12915
|
+
"text": "Reported"
|
|
12916
|
+
},
|
|
12917
|
+
"privacy": "private",
|
|
12918
|
+
"default": "{ anchor: undefined, flags: {}, message: '' }",
|
|
12919
|
+
"description": "What the control last reported, before any custom error is laid over it."
|
|
12920
|
+
},
|
|
12921
|
+
{
|
|
12922
|
+
"kind": "field",
|
|
12923
|
+
"name": "appliedFeedback",
|
|
12924
|
+
"type": {
|
|
12925
|
+
"text": "string"
|
|
12926
|
+
},
|
|
12927
|
+
"privacy": "private",
|
|
12928
|
+
"default": "''",
|
|
12929
|
+
"description": "The `validityFeedback` the platform was last told about."
|
|
12930
|
+
},
|
|
12931
|
+
{
|
|
12932
|
+
"kind": "method",
|
|
12933
|
+
"name": "applyValidity",
|
|
12934
|
+
"privacy": "protected",
|
|
12935
|
+
"return": {
|
|
12936
|
+
"type": {
|
|
12937
|
+
"text": "void"
|
|
12938
|
+
}
|
|
12939
|
+
},
|
|
12940
|
+
"description": "Hands the platform the control's own verdict with any custom error on top,\nanchored where focus can go.",
|
|
12941
|
+
"inheritedFrom": {
|
|
12942
|
+
"name": "HelixFormElementBase",
|
|
12943
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
12944
|
+
}
|
|
12945
|
+
},
|
|
12946
|
+
{
|
|
12947
|
+
"kind": "method",
|
|
12948
|
+
"name": "validationAnchor",
|
|
12949
|
+
"privacy": "protected",
|
|
12950
|
+
"return": {
|
|
12951
|
+
"type": {
|
|
12952
|
+
"text": "HTMLElement | undefined"
|
|
12953
|
+
}
|
|
12954
|
+
},
|
|
12955
|
+
"parameters": [
|
|
12956
|
+
{
|
|
12957
|
+
"name": "anchor",
|
|
12958
|
+
"optional": true,
|
|
12959
|
+
"type": {
|
|
12960
|
+
"text": "HTMLElement"
|
|
12961
|
+
}
|
|
12962
|
+
}
|
|
12963
|
+
],
|
|
12964
|
+
"description": "Where the browser points its bubble: the anchor a control gave if focus\ncan go there, and its first tab stop otherwise.\n\nA group anchors on a part that holds its members and cannot take focus,\nand the platform then refuses the submission, logs that the control is\nnot focusable, and leaves the reader on the submit button."
|
|
12965
|
+
},
|
|
12966
|
+
{
|
|
12967
|
+
"kind": "method",
|
|
12968
|
+
"name": "checkValidity",
|
|
12969
|
+
"return": {
|
|
12970
|
+
"type": {
|
|
12971
|
+
"text": "boolean"
|
|
12972
|
+
}
|
|
12973
|
+
},
|
|
12974
|
+
"description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
|
|
12975
|
+
"inheritedFrom": {
|
|
12976
|
+
"name": "HelixFormElementBase",
|
|
12977
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
12978
|
+
}
|
|
12979
|
+
},
|
|
12980
|
+
{
|
|
12981
|
+
"kind": "field",
|
|
12982
|
+
"name": "checkInProgress",
|
|
12983
|
+
"type": {
|
|
12984
|
+
"text": "boolean"
|
|
12985
|
+
},
|
|
12986
|
+
"privacy": "private",
|
|
12987
|
+
"default": "false",
|
|
12988
|
+
"description": "Whether `checkValidity()` is running, set only for the `invalid` it fires."
|
|
12989
|
+
},
|
|
12990
|
+
{
|
|
12991
|
+
"kind": "method",
|
|
12992
|
+
"name": "formAssociatedCallback",
|
|
12993
|
+
"return": {
|
|
12994
|
+
"type": {
|
|
12995
|
+
"text": "void"
|
|
12996
|
+
}
|
|
12997
|
+
},
|
|
12998
|
+
"parameters": [
|
|
12999
|
+
{
|
|
13000
|
+
"name": "form",
|
|
13001
|
+
"type": {
|
|
13002
|
+
"text": "HTMLFormElement | null"
|
|
13003
|
+
}
|
|
13004
|
+
}
|
|
13005
|
+
],
|
|
13006
|
+
"description": "Called by the browser when the control's form changes: watches the new\nform's `checkValidity()`, as connecting does for the form it starts in."
|
|
13007
|
+
},
|
|
13008
|
+
{
|
|
13009
|
+
"kind": "field",
|
|
13010
|
+
"name": "formAssociated",
|
|
13011
|
+
"type": {
|
|
13012
|
+
"text": "boolean"
|
|
13013
|
+
},
|
|
13014
|
+
"static": true,
|
|
13015
|
+
"readonly": true,
|
|
13016
|
+
"default": "true",
|
|
13017
|
+
"description": "Opts the element into form ownership, labels, and submission.",
|
|
13018
|
+
"inheritedFrom": {
|
|
13019
|
+
"name": "HelixFormElementBase",
|
|
13020
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13021
|
+
}
|
|
12101
13022
|
},
|
|
12102
13023
|
{
|
|
12103
13024
|
"kind": "field",
|
|
@@ -12108,7 +13029,11 @@
|
|
|
12108
13029
|
"default": "false",
|
|
12109
13030
|
"description": "Whether the control is disabled and cannot be used.\n\nReflected, because the styled tier selects on it, and mirrored to\n`aria-disabled` rather than removing the element from the accessibility\ntree, so a screen reader can still announce that the control exists.\n\nThe mirror itself is in `willUpdate` below, here rather than in each\ncontrol, because here is where `disabled` is.",
|
|
12110
13031
|
"attribute": "disabled",
|
|
12111
|
-
"reflects": true
|
|
13032
|
+
"reflects": true,
|
|
13033
|
+
"inheritedFrom": {
|
|
13034
|
+
"name": "HelixFormElementBase",
|
|
13035
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13036
|
+
}
|
|
12112
13037
|
},
|
|
12113
13038
|
{
|
|
12114
13039
|
"kind": "field",
|
|
@@ -12118,7 +13043,11 @@
|
|
|
12118
13043
|
},
|
|
12119
13044
|
"privacy": "protected",
|
|
12120
13045
|
"default": "false",
|
|
12121
|
-
"description": "Whether an ancestor `<fieldset disabled>` has switched this control off.\n\nThe platform tells a form-associated element through `formDisabledCallback`\nand nothing else does, so without this a control inside a disabled fieldset\nstays fully typeable and announces itself as enabled.\n\nThe submission half is already the platform's: measured, the fieldset's\ncontrols are absent from the form's entry list and the host matches\n`:disabled`, so the value never goes anywhere. What is missing without this\nis everything a reader can see or touch.\n\nState rather than the `disabled` property. Writing that would reflect an\nattribute the consumer's server markup does not have, which React reports\non hydration and does not patch up, and it would also silently overwrite\nwhat the consumer set."
|
|
13046
|
+
"description": "Whether an ancestor `<fieldset disabled>` has switched this control off.\n\nThe platform tells a form-associated element through `formDisabledCallback`\nand nothing else does, so without this a control inside a disabled fieldset\nstays fully typeable and announces itself as enabled.\n\nThe submission half is already the platform's: measured, the fieldset's\ncontrols are absent from the form's entry list and the host matches\n`:disabled`, so the value never goes anywhere. What is missing without this\nis everything a reader can see or touch.\n\nState rather than the `disabled` property. Writing that would reflect an\nattribute the consumer's server markup does not have, which React reports\non hydration and does not patch up, and it would also silently overwrite\nwhat the consumer set.",
|
|
13047
|
+
"inheritedFrom": {
|
|
13048
|
+
"name": "HelixFormElementBase",
|
|
13049
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13050
|
+
}
|
|
12122
13051
|
},
|
|
12123
13052
|
{
|
|
12124
13053
|
"kind": "method",
|
|
@@ -12136,7 +13065,11 @@
|
|
|
12136
13065
|
}
|
|
12137
13066
|
}
|
|
12138
13067
|
],
|
|
12139
|
-
"description": "Called by the browser when an ancestor fieldset is disabled or enabled.\n\n**The argument is the effective state, and taking it whole is what latched\nevery control in the library.** The platform calls this for the element's\nown `disabled` as well as for a fieldset, and our own arrives here at the\nworst possible moment: reflecting `disabled` to the attribute happens\ninside Lit's `update()`, the UA fires this synchronously from that write,\nand a reactive write during an update is a change-in-update Lit does not\nre-render for. So `formDisabled` ran exactly one update behind forever.\n\nMeasured on Slider, logging what `render` saw:\n\n```\nset true disabled true formDisabled false isDisabled true\nset false disabled false formDisabled true isDisabled true <- stale\n(no third render)\n```\n\nThe host came out right every time, `disabled` false, `:disabled` not\nmatching, and the inner control kept the attribute, so a control disabled\nonce could never be re-enabled. It only shows when something re-enables,\nwhich is the same shape of bug `inheritDisabled` was written for.\n\nOur own half is already in `this.disabled` and `isDisabled` is an or, so\nthis records only what the fieldset adds. That also removes the write\nentirely on the own-disabled path rather than moving it.\n\nThe one case this cannot see is a control that is disabled itself *and*\ninside a disabled fieldset, whose own `disabled` is then removed: the\neffective state does not change, so the platform does not call again, and\nthe fieldset's hold is not recorded. There is no callback to learn it from\nand reading `:disabled` here would answer about the attribute we are in the\nmiddle of removing."
|
|
13068
|
+
"description": "Called by the browser when an ancestor fieldset is disabled or enabled.\n\n**The argument is the effective state, and taking it whole is what latched\nevery control in the library.** The platform calls this for the element's\nown `disabled` as well as for a fieldset, and our own arrives here at the\nworst possible moment: reflecting `disabled` to the attribute happens\ninside Lit's `update()`, the UA fires this synchronously from that write,\nand a reactive write during an update is a change-in-update Lit does not\nre-render for. So `formDisabled` ran exactly one update behind forever.\n\nMeasured on Slider, logging what `render` saw:\n\n```\nset true disabled true formDisabled false isDisabled true\nset false disabled false formDisabled true isDisabled true <- stale\n(no third render)\n```\n\nThe host came out right every time, `disabled` false, `:disabled` not\nmatching, and the inner control kept the attribute, so a control disabled\nonce could never be re-enabled. It only shows when something re-enables,\nwhich is the same shape of bug `inheritDisabled` was written for.\n\nOur own half is already in `this.disabled` and `isDisabled` is an or, so\nthis records only what the fieldset adds. That also removes the write\nentirely on the own-disabled path rather than moving it.\n\nThe one case this cannot see is a control that is disabled itself *and*\ninside a disabled fieldset, whose own `disabled` is then removed: the\neffective state does not change, so the platform does not call again, and\nthe fieldset's hold is not recorded. There is no callback to learn it from\nand reading `:disabled` here would answer about the attribute we are in the\nmiddle of removing.",
|
|
13069
|
+
"inheritedFrom": {
|
|
13070
|
+
"name": "HelixFormElementBase",
|
|
13071
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13072
|
+
}
|
|
12140
13073
|
},
|
|
12141
13074
|
{
|
|
12142
13075
|
"kind": "field",
|
|
@@ -12146,7 +13079,11 @@
|
|
|
12146
13079
|
},
|
|
12147
13080
|
"privacy": "private",
|
|
12148
13081
|
"description": "Whether an ancestor `<fieldset disabled>` holds the control, outside its\nfirst `<legend>`, read from the tree.\n\nFor the one case the callback cannot report: a control disabled itself and\nby a fieldset, whose own `disabled` is then removed. The effective state does\nnot change, so the platform does not call, and the fieldset's hold has to\nbe read.",
|
|
12149
|
-
"readonly": true
|
|
13082
|
+
"readonly": true,
|
|
13083
|
+
"inheritedFrom": {
|
|
13084
|
+
"name": "HelixFormElementBase",
|
|
13085
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13086
|
+
}
|
|
12150
13087
|
},
|
|
12151
13088
|
{
|
|
12152
13089
|
"kind": "method",
|
|
@@ -12156,29 +13093,11 @@
|
|
|
12156
13093
|
"text": "void"
|
|
12157
13094
|
}
|
|
12158
13095
|
},
|
|
12159
|
-
"description": "Called by the browser when the form is reset. It does nothing here, and\nevery override calls it.\n\n**A chain rather than a leaf**, because more than one layer owes a reset\nsomething: the value mixin its default, and the field mixin beneath it the\nforgetting of a reader's past attempt, whose message otherwise showed over\nthe emptied control the moment the form was reset."
|
|
12160
|
-
|
|
12161
|
-
|
|
12162
|
-
|
|
12163
|
-
|
|
12164
|
-
"privacy": "protected",
|
|
12165
|
-
"return": {
|
|
12166
|
-
"type": {
|
|
12167
|
-
"text": "void"
|
|
12168
|
-
}
|
|
12169
|
-
},
|
|
12170
|
-
"description": "Announces `input` from the host, the way the control it stands for would.\n\nComposed, as the native one is: `input` crosses shadow boundaries by\nspecification, so a consumer listening above a composition hears it."
|
|
12171
|
-
},
|
|
12172
|
-
{
|
|
12173
|
-
"kind": "method",
|
|
12174
|
-
"name": "announceChange",
|
|
12175
|
-
"privacy": "protected",
|
|
12176
|
-
"return": {
|
|
12177
|
-
"type": {
|
|
12178
|
-
"text": "void"
|
|
12179
|
-
}
|
|
12180
|
-
},
|
|
12181
|
-
"description": "Announces `change` from the host, the way the control it stands for would.\n\n**Not composed, and that is the shape of the native event rather than a\nchoice made here.** `change` stops at a shadow boundary, so a composed\ncontrol hears its inner control's and relays it under the same name from\nits own host, which is what `onChange` binds. Every control here that\ncommits a value announces it through this, whether the commit came from an\ninner control's own `change`, a step, a scrub or a completed code, so the\nevent is one shape in one place."
|
|
13096
|
+
"description": "Called by the browser when the form is reset. It does nothing here, and\nevery override calls it.\n\n**A chain rather than a leaf**, because more than one layer owes a reset\nsomething: the value mixin its default, and the field mixin beneath it the\nforgetting of a reader's past attempt, whose message otherwise showed over\nthe emptied control the moment the form was reset.",
|
|
13097
|
+
"inheritedFrom": {
|
|
13098
|
+
"name": "HelixFormElementBase",
|
|
13099
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13100
|
+
}
|
|
12182
13101
|
},
|
|
12183
13102
|
{
|
|
12184
13103
|
"kind": "field",
|
|
@@ -12189,28 +13108,11 @@
|
|
|
12189
13108
|
"default": "''",
|
|
12190
13109
|
"description": "The name the control's value is submitted under.\n\n**Reflected, and it is the exception to \"reflect only what CSS selects\non\".** The platform builds a form's entry list from the `name` *content\nattribute*, not from the property, so a control named through the property\nsubmitted under no name at all and was silently dropped. Measured: two\ninputs in one form, one named by attribute and one by property, and the\nform carried a single entry.\n\nSafe for a React consumer, which is what the rule is protecting: React\nrenders a custom element's props as attributes on the server, so the name\nis already in the markup being hydrated and reflecting it writes what is\nthere. It is only a change to the markup when a consumer assigns it\nimperatively later, and nothing is hydrating by then.\n\nHere rather than on each control.",
|
|
12191
13110
|
"attribute": "name",
|
|
12192
|
-
"reflects": true
|
|
12193
|
-
|
|
12194
|
-
|
|
12195
|
-
|
|
12196
|
-
|
|
12197
|
-
"type": {
|
|
12198
|
-
"text": "ElementInternals['setValidity']"
|
|
12199
|
-
},
|
|
12200
|
-
"privacy": "private",
|
|
12201
|
-
"readonly": true,
|
|
12202
|
-
"description": "The platform's own `setValidity`, which the wrapper above calls.",
|
|
12203
|
-
"default": "report"
|
|
12204
|
-
},
|
|
12205
|
-
{
|
|
12206
|
-
"kind": "field",
|
|
12207
|
-
"name": "reported",
|
|
12208
|
-
"type": {
|
|
12209
|
-
"text": "Reported"
|
|
12210
|
-
},
|
|
12211
|
-
"privacy": "private",
|
|
12212
|
-
"default": "{ anchor: undefined, flags: {}, message: '' }",
|
|
12213
|
-
"description": "What the control last reported, before any custom error is laid over it."
|
|
13111
|
+
"reflects": true,
|
|
13112
|
+
"inheritedFrom": {
|
|
13113
|
+
"name": "HelixFormElementBase",
|
|
13114
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13115
|
+
}
|
|
12214
13116
|
},
|
|
12215
13117
|
{
|
|
12216
13118
|
"kind": "field",
|
|
@@ -12218,50 +13120,13 @@
|
|
|
12218
13120
|
"type": {
|
|
12219
13121
|
"text": "string"
|
|
12220
13122
|
},
|
|
12221
|
-
"privacy": "private",
|
|
12222
|
-
"default": "''",
|
|
12223
|
-
"description": "The message `setCustomValidity` was given."
|
|
12224
|
-
},
|
|
12225
|
-
{
|
|
12226
|
-
"kind": "field",
|
|
12227
|
-
"name": "appliedFeedback",
|
|
12228
|
-
"type": {
|
|
12229
|
-
"text": "string"
|
|
12230
|
-
},
|
|
12231
|
-
"privacy": "private",
|
|
12232
|
-
"default": "''",
|
|
12233
|
-
"description": "The `validityFeedback` the platform was last told about."
|
|
12234
|
-
},
|
|
12235
|
-
{
|
|
12236
|
-
"kind": "method",
|
|
12237
|
-
"name": "applyValidity",
|
|
12238
|
-
"privacy": "private",
|
|
12239
|
-
"return": {
|
|
12240
|
-
"type": {
|
|
12241
|
-
"text": "void"
|
|
12242
|
-
}
|
|
12243
|
-
},
|
|
12244
|
-
"description": "Hands the platform the control's own verdict with any custom error on top,\nanchored where focus can go."
|
|
12245
|
-
},
|
|
12246
|
-
{
|
|
12247
|
-
"kind": "method",
|
|
12248
|
-
"name": "validationAnchor",
|
|
12249
13123
|
"privacy": "protected",
|
|
12250
|
-
"
|
|
12251
|
-
|
|
12252
|
-
|
|
12253
|
-
|
|
12254
|
-
|
|
12255
|
-
|
|
12256
|
-
{
|
|
12257
|
-
"name": "anchor",
|
|
12258
|
-
"optional": true,
|
|
12259
|
-
"type": {
|
|
12260
|
-
"text": "HTMLElement"
|
|
12261
|
-
}
|
|
12262
|
-
}
|
|
12263
|
-
],
|
|
12264
|
-
"description": "Where the browser points its bubble: the anchor a control gave if focus\ncan go there, and its first tab stop otherwise.\n\nA group anchors on a part that holds its members and cannot take focus,\nand the platform then refuses the submission, logs that the control is\nnot focusable, and leaves the reader on the submit button."
|
|
13124
|
+
"default": "''",
|
|
13125
|
+
"description": "The message `setCustomValidity` was given.",
|
|
13126
|
+
"inheritedFrom": {
|
|
13127
|
+
"name": "HelixFormElementBase",
|
|
13128
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13129
|
+
}
|
|
12265
13130
|
},
|
|
12266
13131
|
{
|
|
12267
13132
|
"kind": "field",
|
|
@@ -12278,6 +13143,10 @@
|
|
|
12278
13143
|
"url": "https://developer.mozilla.org/docs/Web/API/ElementInternals/validity"
|
|
12279
13144
|
}
|
|
12280
13145
|
]
|
|
13146
|
+
},
|
|
13147
|
+
"inheritedFrom": {
|
|
13148
|
+
"name": "HelixFormElementBase",
|
|
13149
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
12281
13150
|
}
|
|
12282
13151
|
},
|
|
12283
13152
|
{
|
|
@@ -12287,7 +13156,11 @@
|
|
|
12287
13156
|
"text": "string"
|
|
12288
13157
|
},
|
|
12289
13158
|
"description": "The message the browser would show for the control, or an empty string.",
|
|
12290
|
-
"readonly": true
|
|
13159
|
+
"readonly": true,
|
|
13160
|
+
"inheritedFrom": {
|
|
13161
|
+
"name": "HelixFormElementBase",
|
|
13162
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13163
|
+
}
|
|
12291
13164
|
},
|
|
12292
13165
|
{
|
|
12293
13166
|
"kind": "field",
|
|
@@ -12297,7 +13170,11 @@
|
|
|
12297
13170
|
},
|
|
12298
13171
|
"privacy": "private",
|
|
12299
13172
|
"default": "false",
|
|
12300
|
-
"description": "Whether an update is running, so `runPendingUpdate` never starts one inside another."
|
|
13173
|
+
"description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
|
|
13174
|
+
"inheritedFrom": {
|
|
13175
|
+
"name": "HelixFormElementBase",
|
|
13176
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13177
|
+
}
|
|
12301
13178
|
},
|
|
12302
13179
|
{
|
|
12303
13180
|
"kind": "method",
|
|
@@ -12323,7 +13200,11 @@
|
|
|
12323
13200
|
"text": "void"
|
|
12324
13201
|
}
|
|
12325
13202
|
},
|
|
12326
|
-
"description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.\n\nProtected for a control that submits on its own, which has to hand the\nform the verdict for what it holds now: Pin Input's `autosubmit`."
|
|
13203
|
+
"description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.\n\nProtected for a control that submits on its own, which has to hand the\nform the verdict for what it holds now: Pin Input's `autosubmit`.",
|
|
13204
|
+
"inheritedFrom": {
|
|
13205
|
+
"name": "HelixFormElementBase",
|
|
13206
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13207
|
+
}
|
|
12327
13208
|
},
|
|
12328
13209
|
{
|
|
12329
13210
|
"kind": "field",
|
|
@@ -12332,27 +13213,11 @@
|
|
|
12332
13213
|
"text": "boolean"
|
|
12333
13214
|
},
|
|
12334
13215
|
"description": "Whether the control is checked when its form is submitted.",
|
|
12335
|
-
"readonly": true
|
|
12336
|
-
|
|
12337
|
-
|
|
12338
|
-
|
|
12339
|
-
|
|
12340
|
-
"return": {
|
|
12341
|
-
"type": {
|
|
12342
|
-
"text": "boolean"
|
|
12343
|
-
}
|
|
12344
|
-
},
|
|
12345
|
-
"description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that."
|
|
12346
|
-
},
|
|
12347
|
-
{
|
|
12348
|
-
"kind": "field",
|
|
12349
|
-
"name": "checkInProgress",
|
|
12350
|
-
"type": {
|
|
12351
|
-
"text": "boolean"
|
|
12352
|
-
},
|
|
12353
|
-
"privacy": "private",
|
|
12354
|
-
"default": "false",
|
|
12355
|
-
"description": "Whether `checkValidity()` is running, set only for the `invalid` it fires."
|
|
13216
|
+
"readonly": true,
|
|
13217
|
+
"inheritedFrom": {
|
|
13218
|
+
"name": "HelixFormElementBase",
|
|
13219
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13220
|
+
}
|
|
12356
13221
|
},
|
|
12357
13222
|
{
|
|
12358
13223
|
"kind": "method",
|
|
@@ -12362,7 +13227,11 @@
|
|
|
12362
13227
|
"text": "boolean"
|
|
12363
13228
|
}
|
|
12364
13229
|
},
|
|
12365
|
-
"description": "Returns whether the control is valid, and when it is not, fires `invalid`\nand shows the browser's message at the control."
|
|
13230
|
+
"description": "Returns whether the control is valid, and when it is not, fires `invalid`\nand shows the browser's message at the control.",
|
|
13231
|
+
"inheritedFrom": {
|
|
13232
|
+
"name": "HelixFormElementBase",
|
|
13233
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13234
|
+
}
|
|
12366
13235
|
},
|
|
12367
13236
|
{
|
|
12368
13237
|
"kind": "method",
|
|
@@ -12380,7 +13249,11 @@
|
|
|
12380
13249
|
}
|
|
12381
13250
|
}
|
|
12382
13251
|
],
|
|
12383
|
-
"description": "Marks the control invalid with `message`, or clears that with an empty\nstring, as on a native control. The form does not submit while it is set."
|
|
13252
|
+
"description": "Marks the control invalid with `message`, or clears that with an empty\nstring, as on a native control. The form does not submit while it is set.",
|
|
13253
|
+
"inheritedFrom": {
|
|
13254
|
+
"name": "HelixFormElementBase",
|
|
13255
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13256
|
+
}
|
|
12384
13257
|
},
|
|
12385
13258
|
{
|
|
12386
13259
|
"kind": "field",
|
|
@@ -12390,7 +13263,11 @@
|
|
|
12390
13263
|
},
|
|
12391
13264
|
"privacy": "protected",
|
|
12392
13265
|
"description": "The element focus goes to: the control's first tab stop, or `null` where\nthere is none.\n\nRead through shadow roots and slots, so a group lands on the member that\nholds its tab stop, which is the chosen radio in a radio group.",
|
|
12393
|
-
"readonly": true
|
|
13266
|
+
"readonly": true,
|
|
13267
|
+
"inheritedFrom": {
|
|
13268
|
+
"name": "HelixFormElementBase",
|
|
13269
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13270
|
+
}
|
|
12394
13271
|
},
|
|
12395
13272
|
{
|
|
12396
13273
|
"kind": "method",
|
|
@@ -12409,21 +13286,33 @@
|
|
|
12409
13286
|
}
|
|
12410
13287
|
}
|
|
12411
13288
|
],
|
|
12412
|
-
"description": "Moves focus to the control, as focusing a native control does."
|
|
13289
|
+
"description": "Moves focus to the control, as focusing a native control does.",
|
|
13290
|
+
"inheritedFrom": {
|
|
13291
|
+
"name": "HelixFormElementBase",
|
|
13292
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13293
|
+
}
|
|
12413
13294
|
},
|
|
12414
13295
|
{
|
|
12415
13296
|
"kind": "field",
|
|
12416
13297
|
"name": "focusFromLabel",
|
|
12417
13298
|
"privacy": "private",
|
|
12418
13299
|
"readonly": true,
|
|
12419
|
-
"description": "Focuses the control when its `<label>` is pressed.\n\nThe label sends the host a click of the browser's own after trying to\nfocus it, and a host that is not focusable takes nothing from that try.\nOnly a click that starts at the host and that the browser sent: one from\ninside has landed where it meant to, and `click()` from a script does not\nfocus a native control either."
|
|
13300
|
+
"description": "Focuses the control when its `<label>` is pressed.\n\nThe label sends the host a click of the browser's own after trying to\nfocus it, and a host that is not focusable takes nothing from that try.\nOnly a click that starts at the host and that the browser sent: one from\ninside has landed where it meant to, and `click()` from a script does not\nfocus a native control either.",
|
|
13301
|
+
"inheritedFrom": {
|
|
13302
|
+
"name": "HelixFormElementBase",
|
|
13303
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13304
|
+
}
|
|
12420
13305
|
},
|
|
12421
13306
|
{
|
|
12422
13307
|
"kind": "field",
|
|
12423
13308
|
"name": "refreshAnchor",
|
|
12424
13309
|
"privacy": "private",
|
|
12425
13310
|
"readonly": true,
|
|
12426
|
-
"description": "Re-anchors the verdict as the form checks it, because the control's\nmembers may have rendered since it last reported, and the anchor read then\nwas the best there was."
|
|
13311
|
+
"description": "Re-anchors the verdict as the form checks it, because the control's\nmembers may have rendered since it last reported, and the anchor read then\nwas the best there was.",
|
|
13312
|
+
"inheritedFrom": {
|
|
13313
|
+
"name": "HelixFormElementBase",
|
|
13314
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13315
|
+
}
|
|
12427
13316
|
},
|
|
12428
13317
|
{
|
|
12429
13318
|
"kind": "field",
|
|
@@ -12432,25 +13321,11 @@
|
|
|
12432
13321
|
"text": "(() => void) | undefined"
|
|
12433
13322
|
},
|
|
12434
13323
|
"privacy": "private",
|
|
12435
|
-
"description": "Stops listening for the labels in this control's tree."
|
|
12436
|
-
|
|
12437
|
-
|
|
12438
|
-
|
|
12439
|
-
|
|
12440
|
-
"return": {
|
|
12441
|
-
"type": {
|
|
12442
|
-
"text": "void"
|
|
12443
|
-
}
|
|
12444
|
-
},
|
|
12445
|
-
"parameters": [
|
|
12446
|
-
{
|
|
12447
|
-
"name": "form",
|
|
12448
|
-
"type": {
|
|
12449
|
-
"text": "HTMLFormElement | null"
|
|
12450
|
-
}
|
|
12451
|
-
}
|
|
12452
|
-
],
|
|
12453
|
-
"description": "Called by the browser when the control's form changes: watches the new\nform's `checkValidity()`, as connecting does for the form it starts in."
|
|
13324
|
+
"description": "Stops listening for the labels in this control's tree.",
|
|
13325
|
+
"inheritedFrom": {
|
|
13326
|
+
"name": "HelixFormElementBase",
|
|
13327
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13328
|
+
}
|
|
12454
13329
|
},
|
|
12455
13330
|
{
|
|
12456
13331
|
"kind": "field",
|
|
@@ -12467,6 +13342,10 @@
|
|
|
12467
13342
|
"url": "https://html.spec.whatwg.org/multipage/custom-elements.html#form-associated-custom-elements"
|
|
12468
13343
|
}
|
|
12469
13344
|
]
|
|
13345
|
+
},
|
|
13346
|
+
"inheritedFrom": {
|
|
13347
|
+
"name": "HelixFormElementBase",
|
|
13348
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
12470
13349
|
}
|
|
12471
13350
|
},
|
|
12472
13351
|
{
|
|
@@ -12484,6 +13363,10 @@
|
|
|
12484
13363
|
"url": "https://html.spec.whatwg.org/multipage/custom-elements.html#form-associated-custom-elements"
|
|
12485
13364
|
}
|
|
12486
13365
|
]
|
|
13366
|
+
},
|
|
13367
|
+
"inheritedFrom": {
|
|
13368
|
+
"name": "HelixFormElementBase",
|
|
13369
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
12487
13370
|
}
|
|
12488
13371
|
},
|
|
12489
13372
|
{
|
|
@@ -12785,6 +13668,21 @@
|
|
|
12785
13668
|
"module": "src/helix-element/helix-element.ts"
|
|
12786
13669
|
}
|
|
12787
13670
|
},
|
|
13671
|
+
{
|
|
13672
|
+
"kind": "field",
|
|
13673
|
+
"name": "markRules",
|
|
13674
|
+
"type": {
|
|
13675
|
+
"text": "readonly string[]"
|
|
13676
|
+
},
|
|
13677
|
+
"privacy": "protected",
|
|
13678
|
+
"static": true,
|
|
13679
|
+
"default": "[]",
|
|
13680
|
+
"description": "The rules from `mark-rules.ts` for the marks this element writes in its\nown shadow root: `data-scroller`, `data-virtual`, `data-spoken` and\n`data-mirror`.\n\nA component that writes a mark names its rule here, and a subclass\ninherits the list. One that writes none takes only the three rules every\nshadow root gets, which is what keeps the other four out of a Button.",
|
|
13681
|
+
"inheritedFrom": {
|
|
13682
|
+
"name": "HelixElement",
|
|
13683
|
+
"module": "src/helix-element/helix-element.ts"
|
|
13684
|
+
}
|
|
13685
|
+
},
|
|
12788
13686
|
{
|
|
12789
13687
|
"kind": "method",
|
|
12790
13688
|
"name": "finalizeStyles",
|
|
@@ -12804,7 +13702,7 @@
|
|
|
12804
13702
|
}
|
|
12805
13703
|
}
|
|
12806
13704
|
],
|
|
12807
|
-
"description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it.",
|
|
13705
|
+
"description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it, with the rules for the marks it writes.",
|
|
12808
13706
|
"inheritedFrom": {
|
|
12809
13707
|
"name": "HelixElement",
|
|
12810
13708
|
"module": "src/helix-element/helix-element.ts"
|
|
@@ -12812,6 +13710,17 @@
|
|
|
12812
13710
|
}
|
|
12813
13711
|
],
|
|
12814
13712
|
"events": [],
|
|
13713
|
+
"superclass": {
|
|
13714
|
+
"name": "HelixFormElementBase",
|
|
13715
|
+
"module": "/src/helix-form-element/helix-form-element-base.js"
|
|
13716
|
+
},
|
|
13717
|
+
"summary": "Base for every element that participates in a form and judges what it holds.",
|
|
13718
|
+
"helix": {
|
|
13719
|
+
"since": "0.1.0",
|
|
13720
|
+
"status": "experimental",
|
|
13721
|
+
"documentation": "https://fusion.dev/helix/docs/tiers",
|
|
13722
|
+
"tier": "core"
|
|
13723
|
+
},
|
|
12815
13724
|
"attributes": [
|
|
12816
13725
|
{
|
|
12817
13726
|
"name": "disabled",
|
|
@@ -12820,7 +13729,11 @@
|
|
|
12820
13729
|
},
|
|
12821
13730
|
"default": "false",
|
|
12822
13731
|
"description": "Whether the control is disabled and cannot be used.\n\nReflected, because the styled tier selects on it, and mirrored to\n`aria-disabled` rather than removing the element from the accessibility\ntree, so a screen reader can still announce that the control exists.\n\nThe mirror itself is in `willUpdate` below, here rather than in each\ncontrol, because here is where `disabled` is.",
|
|
12823
|
-
"fieldName": "disabled"
|
|
13732
|
+
"fieldName": "disabled",
|
|
13733
|
+
"inheritedFrom": {
|
|
13734
|
+
"name": "HelixFormElementBase",
|
|
13735
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13736
|
+
}
|
|
12824
13737
|
},
|
|
12825
13738
|
{
|
|
12826
13739
|
"name": "name",
|
|
@@ -12829,20 +13742,13 @@
|
|
|
12829
13742
|
},
|
|
12830
13743
|
"default": "''",
|
|
12831
13744
|
"description": "The name the control's value is submitted under.\n\n**Reflected, and it is the exception to \"reflect only what CSS selects\non\".** The platform builds a form's entry list from the `name` *content\nattribute*, not from the property, so a control named through the property\nsubmitted under no name at all and was silently dropped. Measured: two\ninputs in one form, one named by attribute and one by property, and the\nform carried a single entry.\n\nSafe for a React consumer, which is what the rule is protecting: React\nrenders a custom element's props as attributes on the server, so the name\nis already in the markup being hydrated and reflecting it writes what is\nthere. It is only a change to the markup when a consumer assigns it\nimperatively later, and nothing is hydrating by then.\n\nHere rather than on each control.",
|
|
12832
|
-
"fieldName": "name"
|
|
13745
|
+
"fieldName": "name",
|
|
13746
|
+
"inheritedFrom": {
|
|
13747
|
+
"name": "HelixFormElementBase",
|
|
13748
|
+
"module": "src/helix-form-element/helix-form-element-base.ts"
|
|
13749
|
+
}
|
|
12833
13750
|
}
|
|
12834
13751
|
],
|
|
12835
|
-
"superclass": {
|
|
12836
|
-
"name": "HelixElement",
|
|
12837
|
-
"module": "/src/helix-element/helix-element.js"
|
|
12838
|
-
},
|
|
12839
|
-
"summary": "Base for every element that participates in a form.",
|
|
12840
|
-
"helix": {
|
|
12841
|
-
"since": "0.1.0",
|
|
12842
|
-
"status": "experimental",
|
|
12843
|
-
"documentation": "https://fusion.dev/helix/docs/tiers",
|
|
12844
|
-
"tier": "core"
|
|
12845
|
-
},
|
|
12846
13752
|
"cssStates": [
|
|
12847
13753
|
{
|
|
12848
13754
|
"description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
|
|
@@ -14815,6 +15721,38 @@
|
|
|
14815
15721
|
"module": "./helix-element/helix-element.js"
|
|
14816
15722
|
}
|
|
14817
15723
|
},
|
|
15724
|
+
{
|
|
15725
|
+
"kind": "js",
|
|
15726
|
+
"name": "MIRROR_RULE",
|
|
15727
|
+
"declaration": {
|
|
15728
|
+
"name": "MIRROR_RULE",
|
|
15729
|
+
"module": "./helix-element/mark-rules.js"
|
|
15730
|
+
}
|
|
15731
|
+
},
|
|
15732
|
+
{
|
|
15733
|
+
"kind": "js",
|
|
15734
|
+
"name": "SCROLLER_RULE",
|
|
15735
|
+
"declaration": {
|
|
15736
|
+
"name": "SCROLLER_RULE",
|
|
15737
|
+
"module": "./helix-element/mark-rules.js"
|
|
15738
|
+
}
|
|
15739
|
+
},
|
|
15740
|
+
{
|
|
15741
|
+
"kind": "js",
|
|
15742
|
+
"name": "SPOKEN_RULE",
|
|
15743
|
+
"declaration": {
|
|
15744
|
+
"name": "SPOKEN_RULE",
|
|
15745
|
+
"module": "./helix-element/mark-rules.js"
|
|
15746
|
+
}
|
|
15747
|
+
},
|
|
15748
|
+
{
|
|
15749
|
+
"kind": "js",
|
|
15750
|
+
"name": "VIRTUAL_RULE",
|
|
15751
|
+
"declaration": {
|
|
15752
|
+
"name": "VIRTUAL_RULE",
|
|
15753
|
+
"module": "./helix-element/mark-rules.js"
|
|
15754
|
+
}
|
|
15755
|
+
},
|
|
14818
15756
|
{
|
|
14819
15757
|
"kind": "js",
|
|
14820
15758
|
"name": "HelixFormElement",
|
|
@@ -14823,6 +15761,14 @@
|
|
|
14823
15761
|
"module": "./helix-form-element/helix-form-element.js"
|
|
14824
15762
|
}
|
|
14825
15763
|
},
|
|
15764
|
+
{
|
|
15765
|
+
"kind": "js",
|
|
15766
|
+
"name": "HelixFormElementBase",
|
|
15767
|
+
"declaration": {
|
|
15768
|
+
"name": "HelixFormElementBase",
|
|
15769
|
+
"module": "./helix-form-element/helix-form-element-base.js"
|
|
15770
|
+
}
|
|
15771
|
+
},
|
|
14826
15772
|
{
|
|
14827
15773
|
"kind": "js",
|
|
14828
15774
|
"name": "MixinChartSource",
|
|
@@ -24789,7 +25735,7 @@
|
|
|
24789
25735
|
}
|
|
24790
25736
|
}
|
|
24791
25737
|
],
|
|
24792
|
-
"description": "Warns once, through the runtime channel, when a control has no accessible\nname: none on the host, and none on the control inside it.\n\n**Read a task after the control first renders**, so a label that arrives in\nthe same pass counts: slotted, written by a framework beside the control, or\nforwarded from a `<label for>`. One timer serves every control that asked in\nthat task, and an element is read once in its life, so a name taken away\nlater is not reported.\n\n**In a development build only.** Every field and Button calls it, so in\nproduction it would cost each of them about 450 bytes gzip for a sentence\nmeant for the person writing the page. Core imports it as `#audit-name`,\nwhich `package.json` resolves here under the `development` condition (Vite\nand webpack in development, `bun --conditions development`,\n`node --conditions=development`) and to `audit-name-off.ts`, which does\nnothing, everywhere else. Like every runtime warning it reports through the\none channel, and a project that wants the console quiet tells\n`@fusion.dev/helix-diagnostics` with `core.warnings: false`.\n\n`control` returns the control inside the host, `null` where the host is the\ncontrol, or `undefined` where the control is not drawn at the moment of the\nread: the host is then read again the next time it asks.\n\n`also` answers for a name the component gave through its internals, which no\nattribute shows. `fix` is the sentence that says how to name it
|
|
25738
|
+
"description": "Warns once, through the runtime channel, when a control has no accessible\nname: none on the host, and none on the control inside it.\n\n**Read a task after the control first renders**, so a label that arrives in\nthe same pass counts: slotted, written by a framework beside the control, or\nforwarded from a `<label for>`. One timer serves every control that asked in\nthat task, and an element is read once in its life, so a name taken away\nlater is not reported.\n\n**In a development build only.** Every field and Button calls it, so in\nproduction it would cost each of them about 450 bytes gzip for a sentence\nmeant for the person writing the page. Core imports it as `#audit-name`,\nwhich `package.json` resolves here under the `development` condition (Vite\nand webpack in development, `bun --conditions development`,\n`node --conditions=development`) and to `audit-name-off.ts`, which does\nnothing, everywhere else. Like every runtime warning it reports through the\none channel, and a project that wants the console quiet tells\n`@fusion.dev/helix-diagnostics` with `core.warnings: false`.\n\n`control` returns the control inside the host, `null` where the host is the\ncontrol, or `undefined` where the control is not drawn at the moment of the\nread: the host is then read again the next time it asks.\n\n`also` answers for a name the component gave through its internals, which no\nattribute shows. `fix` is the sentence that says how to name it, or its key\nin `FIXES`. `shown` is the part where the control shows its value or its\nplaceholder, whose words are no name."
|
|
24793
25739
|
}
|
|
24794
25740
|
],
|
|
24795
25741
|
"exports": [
|
|
@@ -34094,7 +35040,7 @@
|
|
|
34094
35040
|
"type": {
|
|
34095
35041
|
"text": "string"
|
|
34096
35042
|
},
|
|
34097
|
-
"default": "'0.182.
|
|
35043
|
+
"default": "'0.182.2'",
|
|
34098
35044
|
"description": "The version of the package this file ships in.\n\n**Written by `fusion/scripts/version.mjs`** wherever it writes the package's\n`package.json`, and stamped back into the repository beside it after a\nrelease, so the two never disagree; a spec beside this holds them to it.\nNothing else in the running code knows which release it is."
|
|
34099
35045
|
}
|
|
34100
35046
|
],
|
|
@@ -34730,6 +35676,6 @@
|
|
|
34730
35676
|
],
|
|
34731
35677
|
"helix": {
|
|
34732
35678
|
"package": "@fusion.dev/helix-core",
|
|
34733
|
-
"version": "0.182.
|
|
35679
|
+
"version": "0.182.2"
|
|
34734
35680
|
}
|
|
34735
35681
|
}
|