@fusion.dev/helix-headless 0.99.0 → 0.101.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +1565 -1
- package/dist/dialog/root/dialog-root.d.ts +1 -1
- package/dist/element-events.generated.js +8 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/lightbox/index.d.ts +2 -0
- package/dist/lightbox/index.js +2 -0
- package/dist/lightbox/item/lightbox-item.d.ts +60 -0
- package/dist/lightbox/item/lightbox-item.js +45 -0
- package/dist/lightbox/root/lightbox-root.d.ts +176 -0
- package/dist/lightbox/root/lightbox-root.js +212 -0
- package/package.json +5 -5
- package/types/jsx.d.ts +673 -0
- package/types/svelte.d.ts +2 -0
- package/types/vue.d.ts +129 -2
package/custom-elements.json
CHANGED
|
@@ -32484,7 +32484,6 @@
|
|
|
32484
32484
|
"documentation": "https://fusion.dev/helix/components/dialog",
|
|
32485
32485
|
"aliases": [
|
|
32486
32486
|
"Modal",
|
|
32487
|
-
"Lightbox",
|
|
32488
32487
|
"Sheet"
|
|
32489
32488
|
],
|
|
32490
32489
|
"tier": "headless",
|
|
@@ -46635,6 +46634,14 @@
|
|
|
46635
46634
|
"module": "src/legend/index.js"
|
|
46636
46635
|
}
|
|
46637
46636
|
},
|
|
46637
|
+
{
|
|
46638
|
+
"kind": "js",
|
|
46639
|
+
"name": "*",
|
|
46640
|
+
"declaration": {
|
|
46641
|
+
"name": "*",
|
|
46642
|
+
"module": "src/lightbox/index.js"
|
|
46643
|
+
}
|
|
46644
|
+
},
|
|
46638
46645
|
{
|
|
46639
46646
|
"kind": "js",
|
|
46640
46647
|
"name": "*",
|
|
@@ -49595,6 +49602,1563 @@
|
|
|
49595
49602
|
}
|
|
49596
49603
|
]
|
|
49597
49604
|
},
|
|
49605
|
+
{
|
|
49606
|
+
"kind": "javascript-module",
|
|
49607
|
+
"path": "src/lightbox/index.ts",
|
|
49608
|
+
"declarations": [],
|
|
49609
|
+
"exports": [
|
|
49610
|
+
{
|
|
49611
|
+
"kind": "js",
|
|
49612
|
+
"name": "HelixHeadlessLightboxItem",
|
|
49613
|
+
"declaration": {
|
|
49614
|
+
"name": "HelixHeadlessLightboxItem",
|
|
49615
|
+
"module": "./item/lightbox-item.js"
|
|
49616
|
+
}
|
|
49617
|
+
},
|
|
49618
|
+
{
|
|
49619
|
+
"kind": "js",
|
|
49620
|
+
"name": "HelixHeadlessLightbox",
|
|
49621
|
+
"declaration": {
|
|
49622
|
+
"name": "HelixHeadlessLightbox",
|
|
49623
|
+
"module": "./root/lightbox-root.js"
|
|
49624
|
+
}
|
|
49625
|
+
}
|
|
49626
|
+
]
|
|
49627
|
+
},
|
|
49628
|
+
{
|
|
49629
|
+
"kind": "javascript-module",
|
|
49630
|
+
"path": "src/lightbox/item/lightbox-item.ts",
|
|
49631
|
+
"declarations": [
|
|
49632
|
+
{
|
|
49633
|
+
"kind": "class",
|
|
49634
|
+
"description": "A wrapper around whatever the consumer opened, which is the whole of what it\nis: a picture, a frame of video, a chart. The family shows one at a time and\nthis is how it says which, so the content stays the consumer's and the\narithmetic stays the root's.\n\nHidden rather than unmounted while another item is current, for the reason\n`TabPanel` gives: what is in the markup is what a crawler reads and what a\nserver sent, and an `<img>` that has already decoded does not decode again\nwhen the reader walks back to it.",
|
|
49635
|
+
"name": "HelixHeadlessLightboxItem",
|
|
49636
|
+
"cssParts": [
|
|
49637
|
+
{
|
|
49638
|
+
"description": "The box the content is shown in.",
|
|
49639
|
+
"name": "item"
|
|
49640
|
+
}
|
|
49641
|
+
],
|
|
49642
|
+
"slots": [
|
|
49643
|
+
{
|
|
49644
|
+
"description": "What is being shown.",
|
|
49645
|
+
"name": ""
|
|
49646
|
+
},
|
|
49647
|
+
{
|
|
49648
|
+
"description": "A line under it saying what it is.",
|
|
49649
|
+
"name": "description"
|
|
49650
|
+
}
|
|
49651
|
+
],
|
|
49652
|
+
"members": [
|
|
49653
|
+
{
|
|
49654
|
+
"kind": "field",
|
|
49655
|
+
"name": "current",
|
|
49656
|
+
"type": {
|
|
49657
|
+
"text": "boolean"
|
|
49658
|
+
},
|
|
49659
|
+
"default": "false",
|
|
49660
|
+
"description": "Whether this is the one being shown.\n\nWritten by the root, which is the only thing that sees the set.",
|
|
49661
|
+
"attribute": "current"
|
|
49662
|
+
},
|
|
49663
|
+
{
|
|
49664
|
+
"kind": "field",
|
|
49665
|
+
"name": "label",
|
|
49666
|
+
"type": {
|
|
49667
|
+
"text": "string"
|
|
49668
|
+
},
|
|
49669
|
+
"default": "''",
|
|
49670
|
+
"description": "What this item is called, for the reading that says where the reader is.",
|
|
49671
|
+
"attribute": "label"
|
|
49672
|
+
},
|
|
49673
|
+
{
|
|
49674
|
+
"kind": "field",
|
|
49675
|
+
"name": "value",
|
|
49676
|
+
"type": {
|
|
49677
|
+
"text": "string"
|
|
49678
|
+
},
|
|
49679
|
+
"default": "''",
|
|
49680
|
+
"description": "What names this item, and what `active` on the root is compared against.",
|
|
49681
|
+
"attribute": "value"
|
|
49682
|
+
},
|
|
49683
|
+
{
|
|
49684
|
+
"kind": "field",
|
|
49685
|
+
"name": "tier",
|
|
49686
|
+
"type": {
|
|
49687
|
+
"text": "string"
|
|
49688
|
+
},
|
|
49689
|
+
"static": true,
|
|
49690
|
+
"default": "'helix-headless-'",
|
|
49691
|
+
"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.",
|
|
49692
|
+
"inheritedFrom": {
|
|
49693
|
+
"name": "HelixElement",
|
|
49694
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49695
|
+
}
|
|
49696
|
+
},
|
|
49697
|
+
{
|
|
49698
|
+
"kind": "method",
|
|
49699
|
+
"name": "tag",
|
|
49700
|
+
"privacy": "protected",
|
|
49701
|
+
"return": {
|
|
49702
|
+
"type": {
|
|
49703
|
+
"text": "StaticValue"
|
|
49704
|
+
}
|
|
49705
|
+
},
|
|
49706
|
+
"parameters": [
|
|
49707
|
+
{
|
|
49708
|
+
"name": "name",
|
|
49709
|
+
"type": {
|
|
49710
|
+
"text": "string"
|
|
49711
|
+
}
|
|
49712
|
+
}
|
|
49713
|
+
],
|
|
49714
|
+
"description": "One composed tag, as a static value a template can interpolate.\n\n`unsafeStatic` is safe by construction: the name is a literal in our own\nsource and the prefix is one of two strings this class defines. Called per\nrender and not cached, which costs nothing, because `static-html` keys its\ntemplate cache on the joined string rather than on the object.",
|
|
49715
|
+
"inheritedFrom": {
|
|
49716
|
+
"name": "HelixElement",
|
|
49717
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49718
|
+
}
|
|
49719
|
+
},
|
|
49720
|
+
{
|
|
49721
|
+
"kind": "method",
|
|
49722
|
+
"name": "partNamed",
|
|
49723
|
+
"privacy": "protected",
|
|
49724
|
+
"return": {
|
|
49725
|
+
"type": {
|
|
49726
|
+
"text": "T | null"
|
|
49727
|
+
}
|
|
49728
|
+
},
|
|
49729
|
+
"parameters": [
|
|
49730
|
+
{
|
|
49731
|
+
"name": "name",
|
|
49732
|
+
"type": {
|
|
49733
|
+
"text": "string"
|
|
49734
|
+
}
|
|
49735
|
+
}
|
|
49736
|
+
],
|
|
49737
|
+
"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.",
|
|
49738
|
+
"inheritedFrom": {
|
|
49739
|
+
"name": "HelixElement",
|
|
49740
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49741
|
+
}
|
|
49742
|
+
},
|
|
49743
|
+
{
|
|
49744
|
+
"kind": "field",
|
|
49745
|
+
"name": "internals",
|
|
49746
|
+
"type": {
|
|
49747
|
+
"text": "ElementInternals"
|
|
49748
|
+
},
|
|
49749
|
+
"privacy": "protected",
|
|
49750
|
+
"readonly": true,
|
|
49751
|
+
"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.",
|
|
49752
|
+
"inheritedFrom": {
|
|
49753
|
+
"name": "HelixElement",
|
|
49754
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49755
|
+
}
|
|
49756
|
+
},
|
|
49757
|
+
{
|
|
49758
|
+
"kind": "method",
|
|
49759
|
+
"name": "toggleState",
|
|
49760
|
+
"privacy": "protected",
|
|
49761
|
+
"return": {
|
|
49762
|
+
"type": {
|
|
49763
|
+
"text": "void"
|
|
49764
|
+
}
|
|
49765
|
+
},
|
|
49766
|
+
"parameters": [
|
|
49767
|
+
{
|
|
49768
|
+
"name": "name",
|
|
49769
|
+
"type": {
|
|
49770
|
+
"text": "string"
|
|
49771
|
+
}
|
|
49772
|
+
},
|
|
49773
|
+
{
|
|
49774
|
+
"name": "on",
|
|
49775
|
+
"type": {
|
|
49776
|
+
"text": "boolean"
|
|
49777
|
+
}
|
|
49778
|
+
}
|
|
49779
|
+
],
|
|
49780
|
+
"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.",
|
|
49781
|
+
"inheritedFrom": {
|
|
49782
|
+
"name": "HelixElement",
|
|
49783
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49784
|
+
}
|
|
49785
|
+
},
|
|
49786
|
+
{
|
|
49787
|
+
"kind": "field",
|
|
49788
|
+
"name": "whenSettled",
|
|
49789
|
+
"type": {
|
|
49790
|
+
"text": "Promise<void>"
|
|
49791
|
+
},
|
|
49792
|
+
"readonly": true,
|
|
49793
|
+
"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.",
|
|
49794
|
+
"default": "new Promise<void>((resolve) => { this.resolveSettled = resolve })",
|
|
49795
|
+
"inheritedFrom": {
|
|
49796
|
+
"name": "HelixElement",
|
|
49797
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49798
|
+
}
|
|
49799
|
+
},
|
|
49800
|
+
{
|
|
49801
|
+
"kind": "field",
|
|
49802
|
+
"name": "resolveSettled",
|
|
49803
|
+
"type": {
|
|
49804
|
+
"text": "() => void"
|
|
49805
|
+
},
|
|
49806
|
+
"privacy": "private",
|
|
49807
|
+
"description": "Resolves `whenSettled`, once, from the frame that records the state.",
|
|
49808
|
+
"inheritedFrom": {
|
|
49809
|
+
"name": "HelixElement",
|
|
49810
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49811
|
+
}
|
|
49812
|
+
},
|
|
49813
|
+
{
|
|
49814
|
+
"kind": "field",
|
|
49815
|
+
"name": "fromServer",
|
|
49816
|
+
"type": {
|
|
49817
|
+
"text": "boolean"
|
|
49818
|
+
},
|
|
49819
|
+
"privacy": "private",
|
|
49820
|
+
"default": "false",
|
|
49821
|
+
"description": "Whether the shadow root was a server's, parsed from declarative shadow DOM.",
|
|
49822
|
+
"inheritedFrom": {
|
|
49823
|
+
"name": "HelixElement",
|
|
49824
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49825
|
+
}
|
|
49826
|
+
},
|
|
49827
|
+
{
|
|
49828
|
+
"kind": "field",
|
|
49829
|
+
"name": "hydrating",
|
|
49830
|
+
"type": {
|
|
49831
|
+
"text": "boolean"
|
|
49832
|
+
},
|
|
49833
|
+
"privacy": "protected",
|
|
49834
|
+
"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.",
|
|
49835
|
+
"readonly": true,
|
|
49836
|
+
"inheritedFrom": {
|
|
49837
|
+
"name": "HelixElement",
|
|
49838
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49839
|
+
}
|
|
49840
|
+
},
|
|
49841
|
+
{
|
|
49842
|
+
"kind": "field",
|
|
49843
|
+
"name": "serverRendered",
|
|
49844
|
+
"type": {
|
|
49845
|
+
"text": "boolean"
|
|
49846
|
+
},
|
|
49847
|
+
"privacy": "protected",
|
|
49848
|
+
"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.",
|
|
49849
|
+
"readonly": true,
|
|
49850
|
+
"inheritedFrom": {
|
|
49851
|
+
"name": "HelixElement",
|
|
49852
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49853
|
+
}
|
|
49854
|
+
},
|
|
49855
|
+
{
|
|
49856
|
+
"kind": "method",
|
|
49857
|
+
"name": "finishHydration",
|
|
49858
|
+
"privacy": "protected",
|
|
49859
|
+
"return": {
|
|
49860
|
+
"type": {
|
|
49861
|
+
"text": "void"
|
|
49862
|
+
}
|
|
49863
|
+
},
|
|
49864
|
+
"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.",
|
|
49865
|
+
"inheritedFrom": {
|
|
49866
|
+
"name": "HelixElement",
|
|
49867
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49868
|
+
}
|
|
49869
|
+
},
|
|
49870
|
+
{
|
|
49871
|
+
"kind": "field",
|
|
49872
|
+
"name": "childrenKnown",
|
|
49873
|
+
"type": {
|
|
49874
|
+
"text": "boolean"
|
|
49875
|
+
},
|
|
49876
|
+
"privacy": "protected",
|
|
49877
|
+
"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.",
|
|
49878
|
+
"readonly": true,
|
|
49879
|
+
"inheritedFrom": {
|
|
49880
|
+
"name": "HelixElement",
|
|
49881
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49882
|
+
}
|
|
49883
|
+
},
|
|
49884
|
+
{
|
|
49885
|
+
"kind": "field",
|
|
49886
|
+
"name": "knownChildren",
|
|
49887
|
+
"type": {
|
|
49888
|
+
"text": "Element[]"
|
|
49889
|
+
},
|
|
49890
|
+
"privacy": "protected",
|
|
49891
|
+
"description": "The children a render may read: all of them where they are known, and none otherwise.",
|
|
49892
|
+
"readonly": true,
|
|
49893
|
+
"inheritedFrom": {
|
|
49894
|
+
"name": "HelixElement",
|
|
49895
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49896
|
+
}
|
|
49897
|
+
},
|
|
49898
|
+
{
|
|
49899
|
+
"kind": "field",
|
|
49900
|
+
"name": "assignsByName",
|
|
49901
|
+
"type": {
|
|
49902
|
+
"text": "boolean"
|
|
49903
|
+
},
|
|
49904
|
+
"privacy": "protected",
|
|
49905
|
+
"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.",
|
|
49906
|
+
"readonly": true,
|
|
49907
|
+
"inheritedFrom": {
|
|
49908
|
+
"name": "HelixElement",
|
|
49909
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49910
|
+
}
|
|
49911
|
+
},
|
|
49912
|
+
{
|
|
49913
|
+
"kind": "method",
|
|
49914
|
+
"name": "route",
|
|
49915
|
+
"privacy": "protected",
|
|
49916
|
+
"return": {
|
|
49917
|
+
"type": {
|
|
49918
|
+
"text": "void"
|
|
49919
|
+
}
|
|
49920
|
+
},
|
|
49921
|
+
"parameters": [
|
|
49922
|
+
{
|
|
49923
|
+
"name": "child",
|
|
49924
|
+
"type": {
|
|
49925
|
+
"text": "Element"
|
|
49926
|
+
}
|
|
49927
|
+
},
|
|
49928
|
+
{
|
|
49929
|
+
"name": "name",
|
|
49930
|
+
"type": {
|
|
49931
|
+
"text": "string | undefined"
|
|
49932
|
+
}
|
|
49933
|
+
}
|
|
49934
|
+
],
|
|
49935
|
+
"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.",
|
|
49936
|
+
"inheritedFrom": {
|
|
49937
|
+
"name": "HelixElement",
|
|
49938
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49939
|
+
}
|
|
49940
|
+
},
|
|
49941
|
+
{
|
|
49942
|
+
"kind": "field",
|
|
49943
|
+
"name": "stopInner",
|
|
49944
|
+
"privacy": "protected",
|
|
49945
|
+
"readonly": true,
|
|
49946
|
+
"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.",
|
|
49947
|
+
"inheritedFrom": {
|
|
49948
|
+
"name": "HelixElement",
|
|
49949
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49950
|
+
}
|
|
49951
|
+
},
|
|
49952
|
+
{
|
|
49953
|
+
"kind": "method",
|
|
49954
|
+
"name": "relayNativeEvent",
|
|
49955
|
+
"privacy": "protected",
|
|
49956
|
+
"return": {
|
|
49957
|
+
"type": {
|
|
49958
|
+
"text": "void"
|
|
49959
|
+
}
|
|
49960
|
+
},
|
|
49961
|
+
"parameters": [
|
|
49962
|
+
{
|
|
49963
|
+
"name": "event",
|
|
49964
|
+
"type": {
|
|
49965
|
+
"text": "Event"
|
|
49966
|
+
}
|
|
49967
|
+
},
|
|
49968
|
+
{
|
|
49969
|
+
"name": "init",
|
|
49970
|
+
"optional": true,
|
|
49971
|
+
"type": {
|
|
49972
|
+
"text": "EventInit"
|
|
49973
|
+
}
|
|
49974
|
+
}
|
|
49975
|
+
],
|
|
49976
|
+
"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.",
|
|
49977
|
+
"inheritedFrom": {
|
|
49978
|
+
"name": "HelixElement",
|
|
49979
|
+
"module": "src/helix-element/helix-element.ts"
|
|
49980
|
+
}
|
|
49981
|
+
},
|
|
49982
|
+
{
|
|
49983
|
+
"kind": "method",
|
|
49984
|
+
"name": "finalizeStyles",
|
|
49985
|
+
"privacy": "protected",
|
|
49986
|
+
"static": true,
|
|
49987
|
+
"return": {
|
|
49988
|
+
"type": {
|
|
49989
|
+
"text": "CSSResultOrNative[]"
|
|
49990
|
+
}
|
|
49991
|
+
},
|
|
49992
|
+
"parameters": [
|
|
49993
|
+
{
|
|
49994
|
+
"name": "styles",
|
|
49995
|
+
"optional": true,
|
|
49996
|
+
"type": {
|
|
49997
|
+
"text": "CSSResultOrNative | CSSResultOrNative[]"
|
|
49998
|
+
}
|
|
49999
|
+
}
|
|
50000
|
+
],
|
|
50001
|
+
"description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it.",
|
|
50002
|
+
"inheritedFrom": {
|
|
50003
|
+
"name": "HelixElement",
|
|
50004
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50005
|
+
}
|
|
50006
|
+
}
|
|
50007
|
+
],
|
|
50008
|
+
"attributes": [
|
|
50009
|
+
{
|
|
50010
|
+
"name": "current",
|
|
50011
|
+
"type": {
|
|
50012
|
+
"text": "boolean"
|
|
50013
|
+
},
|
|
50014
|
+
"default": "false",
|
|
50015
|
+
"description": "Whether this is the one being shown.\n\nWritten by the root, which is the only thing that sees the set.",
|
|
50016
|
+
"fieldName": "current"
|
|
50017
|
+
},
|
|
50018
|
+
{
|
|
50019
|
+
"name": "label",
|
|
50020
|
+
"type": {
|
|
50021
|
+
"text": "string"
|
|
50022
|
+
},
|
|
50023
|
+
"default": "''",
|
|
50024
|
+
"description": "What this item is called, for the reading that says where the reader is.",
|
|
50025
|
+
"fieldName": "label"
|
|
50026
|
+
},
|
|
50027
|
+
{
|
|
50028
|
+
"name": "value",
|
|
50029
|
+
"type": {
|
|
50030
|
+
"text": "string"
|
|
50031
|
+
},
|
|
50032
|
+
"default": "''",
|
|
50033
|
+
"description": "What names this item, and what `active` on the root is compared against.",
|
|
50034
|
+
"fieldName": "value"
|
|
50035
|
+
}
|
|
50036
|
+
],
|
|
50037
|
+
"cssStates": [
|
|
50038
|
+
{
|
|
50039
|
+
"description": "While this is the item the lightbox is showing.",
|
|
50040
|
+
"name": "current"
|
|
50041
|
+
},
|
|
50042
|
+
{
|
|
50043
|
+
"description": "Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.",
|
|
50044
|
+
"name": "settled",
|
|
50045
|
+
"inheritedFrom": {
|
|
50046
|
+
"name": "HelixElement",
|
|
50047
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50048
|
+
}
|
|
50049
|
+
}
|
|
50050
|
+
],
|
|
50051
|
+
"superclass": {
|
|
50052
|
+
"name": "HelixElement",
|
|
50053
|
+
"package": "@fusion.dev/helix-core"
|
|
50054
|
+
},
|
|
50055
|
+
"summary": "One thing a lightbox can show.",
|
|
50056
|
+
"helix": {
|
|
50057
|
+
"category": "media",
|
|
50058
|
+
"since": "0.100.0",
|
|
50059
|
+
"status": "stable",
|
|
50060
|
+
"documentation": "https://fusion.dev/helix/components/lightbox",
|
|
50061
|
+
"aliases": [
|
|
50062
|
+
"LightboxSlide",
|
|
50063
|
+
"GalleryItem"
|
|
50064
|
+
],
|
|
50065
|
+
"tier": "headless",
|
|
50066
|
+
"group": "BaseLightbox",
|
|
50067
|
+
"part": "Item"
|
|
50068
|
+
},
|
|
50069
|
+
"tagName": "helix-headless-lightbox-item",
|
|
50070
|
+
"customElement": true,
|
|
50071
|
+
"modulePath": "src/lightbox/item/lightbox-item.ts",
|
|
50072
|
+
"definitionPath": "src/lightbox/item/lightbox-item.ts"
|
|
50073
|
+
}
|
|
50074
|
+
],
|
|
50075
|
+
"exports": [
|
|
50076
|
+
{
|
|
50077
|
+
"kind": "js",
|
|
50078
|
+
"name": "HelixHeadlessLightboxItem",
|
|
50079
|
+
"declaration": {
|
|
50080
|
+
"name": "HelixHeadlessLightboxItem",
|
|
50081
|
+
"module": "src/lightbox/item/lightbox-item.ts"
|
|
50082
|
+
}
|
|
50083
|
+
},
|
|
50084
|
+
{
|
|
50085
|
+
"kind": "custom-element-definition",
|
|
50086
|
+
"name": "helix-headless-lightbox-item",
|
|
50087
|
+
"declaration": {
|
|
50088
|
+
"name": "HelixHeadlessLightboxItem",
|
|
50089
|
+
"module": "src/lightbox/item/lightbox-item.ts"
|
|
50090
|
+
}
|
|
50091
|
+
}
|
|
50092
|
+
]
|
|
50093
|
+
},
|
|
50094
|
+
{
|
|
50095
|
+
"kind": "javascript-module",
|
|
50096
|
+
"path": "src/lightbox/root/lightbox-root.ts",
|
|
50097
|
+
"declarations": [
|
|
50098
|
+
{
|
|
50099
|
+
"kind": "class",
|
|
50100
|
+
"description": "**A lightbox is chrome around a picture rather than a picture.** It draws\nnothing of its own: what it shows is whatever the consumer opened, so this\nearns its place on the frame, the keyboard and the reading that says where in\nthe set the reader is.\n\n**The modal half is the platform's.** A real `<dialog>` opened with\n`showModal()` brings the top layer, a backdrop, Escape and `inert` behind it,\nand this repository has already removed one hand-written focus trap for being\nworse than that: `inert` on the rest of the document is something no\nJavaScript trap can achieve. Every way it can close comes back through\n`requestOpen`, which is what `Dialog` and `Drawer` both do and for the reason\nthey both give.\n\n**The set is this component's own and not `Carousel`'s.** A carousel is a\ntrack: a scroller with snap points, per-view arithmetic and stops it can rest\nbetween. A lightbox shows one thing at a time and has no track, so what it\nneeds is which item is current, which is `active` and the same pair `Tabs`\nuses. The arrow keys move the picture under a reader whose focus stays in the\ndialog, which is also why `KeyboardNavigationController` is not the right\ntool: that one moves focus between focusable items, and these are pictures.\n\n**Chrome hides while the reader is still**, on `IdleController`, and comes\nback on a pointer move or a focus. `fullscreen` is `FullscreenController`, the\nsame pair `Video` holds and the only two it shares.",
|
|
50101
|
+
"name": "HelixHeadlessLightbox",
|
|
50102
|
+
"cssParts": [
|
|
50103
|
+
{
|
|
50104
|
+
"description": "The native dialog element.",
|
|
50105
|
+
"name": "dialog"
|
|
50106
|
+
},
|
|
50107
|
+
{
|
|
50108
|
+
"description": "The region that says which item is shown.",
|
|
50109
|
+
"name": "live"
|
|
50110
|
+
},
|
|
50111
|
+
{
|
|
50112
|
+
"description": "The box the current item is shown in.",
|
|
50113
|
+
"name": "viewport"
|
|
50114
|
+
}
|
|
50115
|
+
],
|
|
50116
|
+
"slots": [
|
|
50117
|
+
{
|
|
50118
|
+
"description": "The items, which are `<helix-headless-lightbox-item>` elements.",
|
|
50119
|
+
"name": ""
|
|
50120
|
+
},
|
|
50121
|
+
{
|
|
50122
|
+
"description": "Chrome below the item, such as a counter or a thumbnail strip.",
|
|
50123
|
+
"name": "footer"
|
|
50124
|
+
},
|
|
50125
|
+
{
|
|
50126
|
+
"description": "Chrome above the item, such as a title and a close button.",
|
|
50127
|
+
"name": "header"
|
|
50128
|
+
}
|
|
50129
|
+
],
|
|
50130
|
+
"members": [
|
|
50131
|
+
{
|
|
50132
|
+
"kind": "field",
|
|
50133
|
+
"name": "idleDelay",
|
|
50134
|
+
"type": {
|
|
50135
|
+
"text": "number"
|
|
50136
|
+
},
|
|
50137
|
+
"default": "0",
|
|
50138
|
+
"description": "How long the reader may be still before the chrome hides, in milliseconds.\n\nZero keeps it up, which is what a viewer with a caption worth reading\nwants. The wait is only ever about idling: whether anything else should\nkeep the chrome up is the consumer's to decide with this.",
|
|
50139
|
+
"attribute": "idle-delay"
|
|
50140
|
+
},
|
|
50141
|
+
{
|
|
50142
|
+
"kind": "field",
|
|
50143
|
+
"name": "label",
|
|
50144
|
+
"type": {
|
|
50145
|
+
"text": "string"
|
|
50146
|
+
},
|
|
50147
|
+
"default": "''",
|
|
50148
|
+
"description": "Accessible name for the viewer.",
|
|
50149
|
+
"attribute": "label"
|
|
50150
|
+
},
|
|
50151
|
+
{
|
|
50152
|
+
"kind": "field",
|
|
50153
|
+
"name": "loop",
|
|
50154
|
+
"type": {
|
|
50155
|
+
"text": "boolean"
|
|
50156
|
+
},
|
|
50157
|
+
"default": "false",
|
|
50158
|
+
"description": "Whether walking past the end comes back to the beginning.",
|
|
50159
|
+
"attribute": "loop",
|
|
50160
|
+
"reflects": true
|
|
50161
|
+
},
|
|
50162
|
+
{
|
|
50163
|
+
"kind": "field",
|
|
50164
|
+
"name": "statusLabel",
|
|
50165
|
+
"type": {
|
|
50166
|
+
"text": "string"
|
|
50167
|
+
},
|
|
50168
|
+
"default": "'{index} of {count}'",
|
|
50169
|
+
"description": "The reading that says where in the set the reader is, with `{index}` and\n`{count}` filled in.\n\nAnnounced rather than only drawn, because the picture changing under a\nreader who cannot see it is otherwise silent. A consumer who has their own\ncounter in the chrome can empty this and say it themselves.",
|
|
50170
|
+
"attribute": "status-label"
|
|
50171
|
+
},
|
|
50172
|
+
{
|
|
50173
|
+
"kind": "field",
|
|
50174
|
+
"name": "resting",
|
|
50175
|
+
"type": {
|
|
50176
|
+
"text": "boolean"
|
|
50177
|
+
},
|
|
50178
|
+
"privacy": "private",
|
|
50179
|
+
"default": "false",
|
|
50180
|
+
"description": "Whether the reader has been still long enough to hide the chrome."
|
|
50181
|
+
},
|
|
50182
|
+
{
|
|
50183
|
+
"kind": "field",
|
|
50184
|
+
"name": "filled",
|
|
50185
|
+
"type": {
|
|
50186
|
+
"text": "boolean"
|
|
50187
|
+
},
|
|
50188
|
+
"privacy": "private",
|
|
50189
|
+
"default": "false",
|
|
50190
|
+
"description": "Whether the viewer is filling the screen."
|
|
50191
|
+
},
|
|
50192
|
+
{
|
|
50193
|
+
"kind": "field",
|
|
50194
|
+
"name": "announcement",
|
|
50195
|
+
"type": {
|
|
50196
|
+
"text": "string"
|
|
50197
|
+
},
|
|
50198
|
+
"privacy": "private",
|
|
50199
|
+
"default": "''",
|
|
50200
|
+
"description": "What the live region is currently saying."
|
|
50201
|
+
},
|
|
50202
|
+
{
|
|
50203
|
+
"kind": "field",
|
|
50204
|
+
"name": "fullscreen",
|
|
50205
|
+
"privacy": "private",
|
|
50206
|
+
"readonly": true,
|
|
50207
|
+
"default": "new FullscreenController(this, (full) => { this.filled = full })"
|
|
50208
|
+
},
|
|
50209
|
+
{
|
|
50210
|
+
"kind": "field",
|
|
50211
|
+
"name": "idle",
|
|
50212
|
+
"privacy": "private",
|
|
50213
|
+
"readonly": true,
|
|
50214
|
+
"default": "new IdleController( this, () => this.idleDelay, (resting) => { this.resting = resting }, )"
|
|
50215
|
+
},
|
|
50216
|
+
{
|
|
50217
|
+
"kind": "field",
|
|
50218
|
+
"name": "commands",
|
|
50219
|
+
"privacy": "protected",
|
|
50220
|
+
"readonly": true,
|
|
50221
|
+
"default": "new CommandController(this, { commands: { '--close': () => this.close(), '--fullscreen': () => this.toggleFullscreen(), '--next': () => this.next(), '--previous': () => this.previous(), '--show': () => this.show(), '--toggle': () => this.toggleOpen(), }, })"
|
|
50222
|
+
},
|
|
50223
|
+
{
|
|
50224
|
+
"kind": "field",
|
|
50225
|
+
"name": "items",
|
|
50226
|
+
"type": {
|
|
50227
|
+
"text": "HelixHeadlessLightboxItem[]"
|
|
50228
|
+
},
|
|
50229
|
+
"privacy": "private",
|
|
50230
|
+
"description": "The items, read from the host so the server has them too.",
|
|
50231
|
+
"readonly": true
|
|
50232
|
+
},
|
|
50233
|
+
{
|
|
50234
|
+
"kind": "field",
|
|
50235
|
+
"name": "dialog",
|
|
50236
|
+
"type": {
|
|
50237
|
+
"text": "HTMLDialogElement | null"
|
|
50238
|
+
},
|
|
50239
|
+
"privacy": "private",
|
|
50240
|
+
"description": "The native dialog, or nothing where there is no DOM to hold one.",
|
|
50241
|
+
"readonly": true
|
|
50242
|
+
},
|
|
50243
|
+
{
|
|
50244
|
+
"kind": "method",
|
|
50245
|
+
"name": "show",
|
|
50246
|
+
"return": {
|
|
50247
|
+
"type": {
|
|
50248
|
+
"text": "void"
|
|
50249
|
+
}
|
|
50250
|
+
},
|
|
50251
|
+
"description": "Opens the viewer, which makes the rest of the page inert.",
|
|
50252
|
+
"type": {
|
|
50253
|
+
"text": "show() => void"
|
|
50254
|
+
}
|
|
50255
|
+
},
|
|
50256
|
+
{
|
|
50257
|
+
"kind": "method",
|
|
50258
|
+
"name": "close",
|
|
50259
|
+
"return": {
|
|
50260
|
+
"type": {
|
|
50261
|
+
"text": "void"
|
|
50262
|
+
}
|
|
50263
|
+
},
|
|
50264
|
+
"description": "Asks to close, which a consumer may refuse.",
|
|
50265
|
+
"type": {
|
|
50266
|
+
"text": "close() => void"
|
|
50267
|
+
}
|
|
50268
|
+
},
|
|
50269
|
+
{
|
|
50270
|
+
"kind": "method",
|
|
50271
|
+
"name": "next",
|
|
50272
|
+
"return": {
|
|
50273
|
+
"type": {
|
|
50274
|
+
"text": "void"
|
|
50275
|
+
}
|
|
50276
|
+
},
|
|
50277
|
+
"description": "Shows the next item, or the first where it is past the end and looping.",
|
|
50278
|
+
"type": {
|
|
50279
|
+
"text": "next() => void"
|
|
50280
|
+
}
|
|
50281
|
+
},
|
|
50282
|
+
{
|
|
50283
|
+
"kind": "method",
|
|
50284
|
+
"name": "previous",
|
|
50285
|
+
"return": {
|
|
50286
|
+
"type": {
|
|
50287
|
+
"text": "void"
|
|
50288
|
+
}
|
|
50289
|
+
},
|
|
50290
|
+
"description": "Shows the previous item, or the last where it is past the start and looping.",
|
|
50291
|
+
"type": {
|
|
50292
|
+
"text": "previous() => void"
|
|
50293
|
+
}
|
|
50294
|
+
},
|
|
50295
|
+
{
|
|
50296
|
+
"kind": "method",
|
|
50297
|
+
"name": "toggleFullscreen",
|
|
50298
|
+
"return": {
|
|
50299
|
+
"type": {
|
|
50300
|
+
"text": "void"
|
|
50301
|
+
}
|
|
50302
|
+
},
|
|
50303
|
+
"description": "Fills the screen with the viewer, or comes back.",
|
|
50304
|
+
"type": {
|
|
50305
|
+
"text": "toggleFullscreen() => void"
|
|
50306
|
+
}
|
|
50307
|
+
},
|
|
50308
|
+
{
|
|
50309
|
+
"kind": "method",
|
|
50310
|
+
"name": "step",
|
|
50311
|
+
"privacy": "private",
|
|
50312
|
+
"return": {
|
|
50313
|
+
"type": {
|
|
50314
|
+
"text": "void"
|
|
50315
|
+
}
|
|
50316
|
+
},
|
|
50317
|
+
"parameters": [
|
|
50318
|
+
{
|
|
50319
|
+
"name": "by",
|
|
50320
|
+
"type": {
|
|
50321
|
+
"text": "number"
|
|
50322
|
+
}
|
|
50323
|
+
}
|
|
50324
|
+
],
|
|
50325
|
+
"description": "Moves the shown item, through `requestActive` so a consumer can refuse.\n\nClamped rather than wrapped by default: a viewer that silently returns to\nthe first picture tells a reader they have seen everything only if they\nwere counting, and `loop` is how a consumer asks for the other reading."
|
|
50326
|
+
},
|
|
50327
|
+
{
|
|
50328
|
+
"kind": "field",
|
|
50329
|
+
"name": "handleCancel",
|
|
50330
|
+
"privacy": "private",
|
|
50331
|
+
"readonly": true,
|
|
50332
|
+
"description": "Escape, intercepted so it is a request rather than an act.\n\nThe native `cancel` fires before the dialog closes, so preventing it leaves\nthe viewer open and lets `requestOpen` decide. Without this a reader\npressing Escape would close a viewer its consumer had said was open, and the\ntwo would disagree until something else moved."
|
|
50333
|
+
},
|
|
50334
|
+
{
|
|
50335
|
+
"kind": "field",
|
|
50336
|
+
"name": "handleClose",
|
|
50337
|
+
"privacy": "private",
|
|
50338
|
+
"readonly": true,
|
|
50339
|
+
"description": "A close that happened anyway, reflected back and relayed.\n\n`close` on a `<dialog>` neither bubbles nor is composed, so the one the\nbrowser fires reaches nobody outside this shadow root."
|
|
50340
|
+
},
|
|
50341
|
+
{
|
|
50342
|
+
"kind": "field",
|
|
50343
|
+
"name": "handleKeydown",
|
|
50344
|
+
"privacy": "private",
|
|
50345
|
+
"readonly": true,
|
|
50346
|
+
"description": "The arrow keys, which move the picture rather than the focus.\n\n`inlineStep` rather than a comparison against `ArrowLeft`, so the reader on\na right-to-left page gets the next picture from the key that points the way\ntheir set runs. Up and down are bound as well, the set having one axis and\na reader having no way to know which one this component thinks it is."
|
|
50347
|
+
},
|
|
50348
|
+
{
|
|
50349
|
+
"kind": "method",
|
|
50350
|
+
"name": "toEnd",
|
|
50351
|
+
"privacy": "private",
|
|
50352
|
+
"return": {
|
|
50353
|
+
"type": {
|
|
50354
|
+
"text": "void"
|
|
50355
|
+
}
|
|
50356
|
+
},
|
|
50357
|
+
"parameters": [
|
|
50358
|
+
{
|
|
50359
|
+
"name": "at",
|
|
50360
|
+
"type": {
|
|
50361
|
+
"text": "number"
|
|
50362
|
+
}
|
|
50363
|
+
}
|
|
50364
|
+
],
|
|
50365
|
+
"description": "Home and End, which are an index rather than a step."
|
|
50366
|
+
},
|
|
50367
|
+
{
|
|
50368
|
+
"kind": "field",
|
|
50369
|
+
"name": "handleBackdrop",
|
|
50370
|
+
"privacy": "private",
|
|
50371
|
+
"readonly": true,
|
|
50372
|
+
"description": "A press on the backdrop, which lands on the dialog element itself.\n\nThe point is compared against the panel's box rather than trusting the\ntarget alone, for the reason `Dialog` gives: a modal `<dialog>` attributes\nbackdrop presses to itself, so any padding the styled tier gives the panel\nis a strip where a press on the panel looks like a press outside it."
|
|
50373
|
+
},
|
|
50374
|
+
{
|
|
50375
|
+
"kind": "method",
|
|
50376
|
+
"name": "mark",
|
|
50377
|
+
"privacy": "private",
|
|
50378
|
+
"return": {
|
|
50379
|
+
"type": {
|
|
50380
|
+
"text": "void"
|
|
50381
|
+
}
|
|
50382
|
+
},
|
|
50383
|
+
"description": "Tells each item whether it is the one being shown.\n\n`resolveActiveItem` rather than a comparison, so a set whose `active` names\nnothing still shows something: every set before its consumer has chosen, and\nevery set whose current item has just been removed."
|
|
50384
|
+
},
|
|
50385
|
+
{
|
|
50386
|
+
"kind": "method",
|
|
50387
|
+
"name": "say",
|
|
50388
|
+
"privacy": "private",
|
|
50389
|
+
"return": {
|
|
50390
|
+
"type": {
|
|
50391
|
+
"text": "void"
|
|
50392
|
+
}
|
|
50393
|
+
},
|
|
50394
|
+
"parameters": [
|
|
50395
|
+
{
|
|
50396
|
+
"name": "changed",
|
|
50397
|
+
"type": {
|
|
50398
|
+
"text": "PropertyValues"
|
|
50399
|
+
}
|
|
50400
|
+
}
|
|
50401
|
+
],
|
|
50402
|
+
"description": "Says where the reader is, once the reader has moved.\n\nEmpty until then, because a live region populated as it enters the document\nannounces itself on arrival, which for a component that upgrades on load is\nevery page load."
|
|
50403
|
+
},
|
|
50404
|
+
{
|
|
50405
|
+
"kind": "field",
|
|
50406
|
+
"name": "active",
|
|
50407
|
+
"type": {
|
|
50408
|
+
"text": "string"
|
|
50409
|
+
},
|
|
50410
|
+
"description": "Which item is current, by its `value`.\n\nNot `option.active`, which is the option the keyboard is on: that is a\ndifferent question from which one is chosen.\n\nWriting always applies, so `<helix-tabs active=\"one\">` starts on that\ntab, and `default-active` is how markup says where to start without\nnaming the current one.",
|
|
50411
|
+
"attribute": "active",
|
|
50412
|
+
"inheritedFrom": {
|
|
50413
|
+
"name": "MixinControllerActive",
|
|
50414
|
+
"module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
|
|
50415
|
+
}
|
|
50416
|
+
},
|
|
50417
|
+
{
|
|
50418
|
+
"kind": "field",
|
|
50419
|
+
"name": "defaultActive",
|
|
50420
|
+
"type": {
|
|
50421
|
+
"text": "string"
|
|
50422
|
+
},
|
|
50423
|
+
"default": "''",
|
|
50424
|
+
"description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
|
|
50425
|
+
"attribute": "default-active",
|
|
50426
|
+
"inheritedFrom": {
|
|
50427
|
+
"name": "MixinControllerActive",
|
|
50428
|
+
"module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
|
|
50429
|
+
}
|
|
50430
|
+
},
|
|
50431
|
+
{
|
|
50432
|
+
"kind": "field",
|
|
50433
|
+
"name": "activeState",
|
|
50434
|
+
"type": {
|
|
50435
|
+
"text": "string | undefined"
|
|
50436
|
+
},
|
|
50437
|
+
"privacy": "private",
|
|
50438
|
+
"default": "undefined",
|
|
50439
|
+
"description": "The state, whoever set it, and `undefined` until somebody has.\n\nOne field and not two. Writing always applies, the way a native control\ndoes when a script assigns to it.",
|
|
50440
|
+
"inheritedFrom": {
|
|
50441
|
+
"name": "MixinControllerActive",
|
|
50442
|
+
"module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
|
|
50443
|
+
}
|
|
50444
|
+
},
|
|
50445
|
+
{
|
|
50446
|
+
"kind": "method",
|
|
50447
|
+
"name": "requestActive",
|
|
50448
|
+
"return": {
|
|
50449
|
+
"type": {
|
|
50450
|
+
"text": "boolean"
|
|
50451
|
+
}
|
|
50452
|
+
},
|
|
50453
|
+
"parameters": [
|
|
50454
|
+
{
|
|
50455
|
+
"name": "next",
|
|
50456
|
+
"type": {
|
|
50457
|
+
"text": "string"
|
|
50458
|
+
}
|
|
50459
|
+
}
|
|
50460
|
+
],
|
|
50461
|
+
"description": "Requests a new current item, and reports whether the request stood.\n\nAnnounces before it acts, so `preventDefault()` on the `helix-before-activate` is\na refusal and nothing moves. Unlike a native control, nothing has moved\nby the time this runs, so refusing is simply not writing: there is\nnothing to put back. Nobody refusing means the set updates itself,\nwhether or not a consumer declared `active`, a declared property being a\nseed and a correction.",
|
|
50462
|
+
"inheritedFrom": {
|
|
50463
|
+
"name": "MixinControllerActive",
|
|
50464
|
+
"module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
|
|
50465
|
+
},
|
|
50466
|
+
"type": {
|
|
50467
|
+
"text": "requestActive(next: string) => boolean"
|
|
50468
|
+
}
|
|
50469
|
+
},
|
|
50470
|
+
{
|
|
50471
|
+
"kind": "method",
|
|
50472
|
+
"name": "announceActivated",
|
|
50473
|
+
"privacy": "private",
|
|
50474
|
+
"return": {
|
|
50475
|
+
"type": {
|
|
50476
|
+
"text": "void"
|
|
50477
|
+
}
|
|
50478
|
+
},
|
|
50479
|
+
"parameters": [
|
|
50480
|
+
{
|
|
50481
|
+
"name": "value",
|
|
50482
|
+
"type": {
|
|
50483
|
+
"text": "string"
|
|
50484
|
+
}
|
|
50485
|
+
}
|
|
50486
|
+
],
|
|
50487
|
+
"description": "Says the current child moved, once it has.\n\n`helix-activate` rather than a native word: nothing on the platform means\n\"a set chose a different member\", and borrowing `change` would be a lie\nabout what moved.\n\nA consumer who only wants to know which child is current cannot use\n`helix-before-activate` for it, that one firing *before* `apply`, so\n`currentTarget.active` is the previous value inside the handler and\n`detail.value` is a proposal another listener may refuse. `helix-select`\nis no substitute either: it fires when an item is *chosen* and not when\n`active` is assigned.\n\n**After `apply`, which is the whole reason it is a second event**, so the\nstate is on the element by the time a handler reads it. Not cancelable:\nthe decision was taken by the event before this one, and two refusable\nevents for one transition are two answers to one question.",
|
|
50488
|
+
"inheritedFrom": {
|
|
50489
|
+
"name": "MixinControllerActive",
|
|
50490
|
+
"module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
|
|
50491
|
+
}
|
|
50492
|
+
},
|
|
50493
|
+
{
|
|
50494
|
+
"kind": "method",
|
|
50495
|
+
"name": "resolveActive",
|
|
50496
|
+
"privacy": "protected",
|
|
50497
|
+
"return": {
|
|
50498
|
+
"type": {
|
|
50499
|
+
"text": "Item | undefined"
|
|
50500
|
+
}
|
|
50501
|
+
},
|
|
50502
|
+
"parameters": [
|
|
50503
|
+
{
|
|
50504
|
+
"name": "items",
|
|
50505
|
+
"type": {
|
|
50506
|
+
"text": "Item[]"
|
|
50507
|
+
}
|
|
50508
|
+
}
|
|
50509
|
+
],
|
|
50510
|
+
"description": "Which item is current, given what there is to choose from.\n\nThe first enabled one when `active` names nothing, which is a set before\nits consumer has chosen and a set whose current item has just been\nremoved. Disabled items are skipped in the fallback but not in the match:\na consumer who names a disabled item meant it, and quietly moving to\nanother would be the component overruling them.",
|
|
50511
|
+
"inheritedFrom": {
|
|
50512
|
+
"name": "MixinControllerActive",
|
|
50513
|
+
"module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
|
|
50514
|
+
}
|
|
50515
|
+
},
|
|
50516
|
+
{
|
|
50517
|
+
"kind": "field",
|
|
50518
|
+
"name": "open",
|
|
50519
|
+
"type": {
|
|
50520
|
+
"text": "boolean"
|
|
50521
|
+
},
|
|
50522
|
+
"description": "Whether the element is open.\n\nOne property, not two, so `dialog.open` answers the question anyone\nasking it meant. Writing always applies; `<helix-dialog open>` is the\nsame statement in markup.\n\n**Not reflected, and that is required rather than tidy.** Reflection\nwrites the resolved state back as an attribute, so an element that opened\nitself would put `open` on its own host: cloned, serialized for\nhydration, or diffed by a framework, it comes back holding whatever the\nlast reader did rather than what the author wrote. `:state(open)` carries\nthe resolved state for stylesheets, which is what the mirror is for.",
|
|
50523
|
+
"attribute": "open",
|
|
50524
|
+
"inheritedFrom": {
|
|
50525
|
+
"name": "MixinControllerOpen",
|
|
50526
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
50527
|
+
}
|
|
50528
|
+
},
|
|
50529
|
+
{
|
|
50530
|
+
"kind": "field",
|
|
50531
|
+
"name": "defaultOpen",
|
|
50532
|
+
"type": {
|
|
50533
|
+
"text": "boolean"
|
|
50534
|
+
},
|
|
50535
|
+
"default": "false",
|
|
50536
|
+
"description": "Whether the markup declared it open. Ignored once `open` is written.",
|
|
50537
|
+
"attribute": "default-open",
|
|
50538
|
+
"inheritedFrom": {
|
|
50539
|
+
"name": "MixinControllerOpen",
|
|
50540
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
50541
|
+
}
|
|
50542
|
+
},
|
|
50543
|
+
{
|
|
50544
|
+
"kind": "field",
|
|
50545
|
+
"name": "openState",
|
|
50546
|
+
"type": {
|
|
50547
|
+
"text": "boolean | undefined"
|
|
50548
|
+
},
|
|
50549
|
+
"privacy": "private",
|
|
50550
|
+
"default": "undefined",
|
|
50551
|
+
"description": "The state, whoever set it, and `undefined` until somebody has.\n\nPrefixed, and it has to be. These mixins compose onto one prototype\nchain, `Select` takes this one and `MixinControllerValue` together, and\nTypeScript's `private` is a compile-time fiction: two mixins with a field\ncalled `state` share one property on the instance, and the second one\nsilently overwrites the first. Measured, as a select whose `value` came\nback holding its `open` boolean.\n\nOne field and not two. Writing always applies, the way a native control\ndoes when a script assigns to it.",
|
|
50552
|
+
"inheritedFrom": {
|
|
50553
|
+
"name": "MixinControllerOpen",
|
|
50554
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
50555
|
+
}
|
|
50556
|
+
},
|
|
50557
|
+
{
|
|
50558
|
+
"kind": "method",
|
|
50559
|
+
"name": "requestOpen",
|
|
50560
|
+
"return": {
|
|
50561
|
+
"type": {
|
|
50562
|
+
"text": "boolean"
|
|
50563
|
+
}
|
|
50564
|
+
},
|
|
50565
|
+
"parameters": [
|
|
50566
|
+
{
|
|
50567
|
+
"name": "next",
|
|
50568
|
+
"type": {
|
|
50569
|
+
"text": "boolean"
|
|
50570
|
+
}
|
|
50571
|
+
}
|
|
50572
|
+
],
|
|
50573
|
+
"description": "Requests an open-state change, and reports whether it was applied.\n\nAnnounces before it acts, so `preventDefault()` on the `helix-before-open` or\n`helix-before-close` is a refusal and nothing moves. Nobody refusing means the\nelement opens or closes itself, whether or not a consumer declared\n`open`: a declared property is a seed and a correction, and a consumer\nwho wants the decision for themselves refuses it and assigns their own.",
|
|
50574
|
+
"inheritedFrom": {
|
|
50575
|
+
"name": "MixinControllerOpen",
|
|
50576
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
50577
|
+
},
|
|
50578
|
+
"type": {
|
|
50579
|
+
"text": "requestOpen(next: boolean) => boolean"
|
|
50580
|
+
}
|
|
50581
|
+
},
|
|
50582
|
+
{
|
|
50583
|
+
"kind": "method",
|
|
50584
|
+
"name": "announceToggle",
|
|
50585
|
+
"privacy": "private",
|
|
50586
|
+
"return": {
|
|
50587
|
+
"type": {
|
|
50588
|
+
"text": "void"
|
|
50589
|
+
}
|
|
50590
|
+
},
|
|
50591
|
+
"parameters": [
|
|
50592
|
+
{
|
|
50593
|
+
"name": "open",
|
|
50594
|
+
"type": {
|
|
50595
|
+
"text": "boolean"
|
|
50596
|
+
}
|
|
50597
|
+
}
|
|
50598
|
+
],
|
|
50599
|
+
"description": "Says the state moved, under the platform's own name and in its shape.\n\n**A native `toggle` from inside a shadow root reaches nobody**, because\nit neither bubbles nor composes, so the ten families showing a\n`popover=\"manual\"` panel and the two rendering a real `<dialog>` announce\nnothing to a consumer. The disclosures have no native element to fire\nanything at all: `AccordionItem` and `TreeItem` are `aria-expanded` and\n`hidden` written by hand, which is `<details>`'s job done manually.\n\n**From here rather than from `PopoverController`.** The controller covers\neleven families and the mixin covers sixteen, so announcing from both\nwould announce twice on the ten they share. What `toggle` reports is the\n*state*, and the state is this mixin's; the controller is a way of\nputting a panel on the screen.\n\n**`newState` and `oldState`, because that is the platform's shape**, so a\nconsumer arriving from `<details>` reads the same two words. Not\ncancelable: the before events are the request, and a second cancelable\nevent for one transition is two answers to one question.",
|
|
50600
|
+
"inheritedFrom": {
|
|
50601
|
+
"name": "MixinControllerOpen",
|
|
50602
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
50603
|
+
}
|
|
50604
|
+
},
|
|
50605
|
+
{
|
|
50606
|
+
"kind": "method",
|
|
50607
|
+
"name": "toggleOpen",
|
|
50608
|
+
"return": {
|
|
50609
|
+
"type": {
|
|
50610
|
+
"text": "boolean"
|
|
50611
|
+
}
|
|
50612
|
+
},
|
|
50613
|
+
"description": "Requests the opposite of the current state.",
|
|
50614
|
+
"inheritedFrom": {
|
|
50615
|
+
"name": "MixinControllerOpen",
|
|
50616
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
50617
|
+
},
|
|
50618
|
+
"type": {
|
|
50619
|
+
"text": "toggleOpen() => boolean"
|
|
50620
|
+
}
|
|
50621
|
+
},
|
|
50622
|
+
{
|
|
50623
|
+
"kind": "field",
|
|
50624
|
+
"name": "tier",
|
|
50625
|
+
"type": {
|
|
50626
|
+
"text": "string"
|
|
50627
|
+
},
|
|
50628
|
+
"static": true,
|
|
50629
|
+
"default": "'helix-headless-'",
|
|
50630
|
+
"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.",
|
|
50631
|
+
"inheritedFrom": {
|
|
50632
|
+
"name": "HelixElement",
|
|
50633
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50634
|
+
}
|
|
50635
|
+
},
|
|
50636
|
+
{
|
|
50637
|
+
"kind": "method",
|
|
50638
|
+
"name": "tag",
|
|
50639
|
+
"privacy": "protected",
|
|
50640
|
+
"return": {
|
|
50641
|
+
"type": {
|
|
50642
|
+
"text": "StaticValue"
|
|
50643
|
+
}
|
|
50644
|
+
},
|
|
50645
|
+
"parameters": [
|
|
50646
|
+
{
|
|
50647
|
+
"name": "name",
|
|
50648
|
+
"type": {
|
|
50649
|
+
"text": "string"
|
|
50650
|
+
}
|
|
50651
|
+
}
|
|
50652
|
+
],
|
|
50653
|
+
"description": "One composed tag, as a static value a template can interpolate.\n\n`unsafeStatic` is safe by construction: the name is a literal in our own\nsource and the prefix is one of two strings this class defines. Called per\nrender and not cached, which costs nothing, because `static-html` keys its\ntemplate cache on the joined string rather than on the object.",
|
|
50654
|
+
"inheritedFrom": {
|
|
50655
|
+
"name": "HelixElement",
|
|
50656
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50657
|
+
}
|
|
50658
|
+
},
|
|
50659
|
+
{
|
|
50660
|
+
"kind": "method",
|
|
50661
|
+
"name": "partNamed",
|
|
50662
|
+
"privacy": "protected",
|
|
50663
|
+
"return": {
|
|
50664
|
+
"type": {
|
|
50665
|
+
"text": "T | null"
|
|
50666
|
+
}
|
|
50667
|
+
},
|
|
50668
|
+
"parameters": [
|
|
50669
|
+
{
|
|
50670
|
+
"name": "name",
|
|
50671
|
+
"type": {
|
|
50672
|
+
"text": "string"
|
|
50673
|
+
}
|
|
50674
|
+
}
|
|
50675
|
+
],
|
|
50676
|
+
"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.",
|
|
50677
|
+
"inheritedFrom": {
|
|
50678
|
+
"name": "HelixElement",
|
|
50679
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50680
|
+
}
|
|
50681
|
+
},
|
|
50682
|
+
{
|
|
50683
|
+
"kind": "field",
|
|
50684
|
+
"name": "internals",
|
|
50685
|
+
"type": {
|
|
50686
|
+
"text": "ElementInternals"
|
|
50687
|
+
},
|
|
50688
|
+
"privacy": "protected",
|
|
50689
|
+
"readonly": true,
|
|
50690
|
+
"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.",
|
|
50691
|
+
"inheritedFrom": {
|
|
50692
|
+
"name": "HelixElement",
|
|
50693
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50694
|
+
}
|
|
50695
|
+
},
|
|
50696
|
+
{
|
|
50697
|
+
"kind": "method",
|
|
50698
|
+
"name": "toggleState",
|
|
50699
|
+
"privacy": "protected",
|
|
50700
|
+
"return": {
|
|
50701
|
+
"type": {
|
|
50702
|
+
"text": "void"
|
|
50703
|
+
}
|
|
50704
|
+
},
|
|
50705
|
+
"parameters": [
|
|
50706
|
+
{
|
|
50707
|
+
"name": "name",
|
|
50708
|
+
"type": {
|
|
50709
|
+
"text": "string"
|
|
50710
|
+
}
|
|
50711
|
+
},
|
|
50712
|
+
{
|
|
50713
|
+
"name": "on",
|
|
50714
|
+
"type": {
|
|
50715
|
+
"text": "boolean"
|
|
50716
|
+
}
|
|
50717
|
+
}
|
|
50718
|
+
],
|
|
50719
|
+
"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.",
|
|
50720
|
+
"inheritedFrom": {
|
|
50721
|
+
"name": "HelixElement",
|
|
50722
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50723
|
+
}
|
|
50724
|
+
},
|
|
50725
|
+
{
|
|
50726
|
+
"kind": "field",
|
|
50727
|
+
"name": "whenSettled",
|
|
50728
|
+
"type": {
|
|
50729
|
+
"text": "Promise<void>"
|
|
50730
|
+
},
|
|
50731
|
+
"readonly": true,
|
|
50732
|
+
"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.",
|
|
50733
|
+
"default": "new Promise<void>((resolve) => { this.resolveSettled = resolve })",
|
|
50734
|
+
"inheritedFrom": {
|
|
50735
|
+
"name": "HelixElement",
|
|
50736
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50737
|
+
}
|
|
50738
|
+
},
|
|
50739
|
+
{
|
|
50740
|
+
"kind": "field",
|
|
50741
|
+
"name": "resolveSettled",
|
|
50742
|
+
"type": {
|
|
50743
|
+
"text": "() => void"
|
|
50744
|
+
},
|
|
50745
|
+
"privacy": "private",
|
|
50746
|
+
"description": "Resolves `whenSettled`, once, from the frame that records the state.",
|
|
50747
|
+
"inheritedFrom": {
|
|
50748
|
+
"name": "HelixElement",
|
|
50749
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50750
|
+
}
|
|
50751
|
+
},
|
|
50752
|
+
{
|
|
50753
|
+
"kind": "field",
|
|
50754
|
+
"name": "fromServer",
|
|
50755
|
+
"type": {
|
|
50756
|
+
"text": "boolean"
|
|
50757
|
+
},
|
|
50758
|
+
"privacy": "private",
|
|
50759
|
+
"default": "false",
|
|
50760
|
+
"description": "Whether the shadow root was a server's, parsed from declarative shadow DOM.",
|
|
50761
|
+
"inheritedFrom": {
|
|
50762
|
+
"name": "HelixElement",
|
|
50763
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50764
|
+
}
|
|
50765
|
+
},
|
|
50766
|
+
{
|
|
50767
|
+
"kind": "field",
|
|
50768
|
+
"name": "hydrating",
|
|
50769
|
+
"type": {
|
|
50770
|
+
"text": "boolean"
|
|
50771
|
+
},
|
|
50772
|
+
"privacy": "protected",
|
|
50773
|
+
"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.",
|
|
50774
|
+
"readonly": true,
|
|
50775
|
+
"inheritedFrom": {
|
|
50776
|
+
"name": "HelixElement",
|
|
50777
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50778
|
+
}
|
|
50779
|
+
},
|
|
50780
|
+
{
|
|
50781
|
+
"kind": "field",
|
|
50782
|
+
"name": "serverRendered",
|
|
50783
|
+
"type": {
|
|
50784
|
+
"text": "boolean"
|
|
50785
|
+
},
|
|
50786
|
+
"privacy": "protected",
|
|
50787
|
+
"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.",
|
|
50788
|
+
"readonly": true,
|
|
50789
|
+
"inheritedFrom": {
|
|
50790
|
+
"name": "HelixElement",
|
|
50791
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50792
|
+
}
|
|
50793
|
+
},
|
|
50794
|
+
{
|
|
50795
|
+
"kind": "method",
|
|
50796
|
+
"name": "finishHydration",
|
|
50797
|
+
"privacy": "protected",
|
|
50798
|
+
"return": {
|
|
50799
|
+
"type": {
|
|
50800
|
+
"text": "void"
|
|
50801
|
+
}
|
|
50802
|
+
},
|
|
50803
|
+
"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.",
|
|
50804
|
+
"inheritedFrom": {
|
|
50805
|
+
"name": "HelixElement",
|
|
50806
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50807
|
+
}
|
|
50808
|
+
},
|
|
50809
|
+
{
|
|
50810
|
+
"kind": "field",
|
|
50811
|
+
"name": "childrenKnown",
|
|
50812
|
+
"type": {
|
|
50813
|
+
"text": "boolean"
|
|
50814
|
+
},
|
|
50815
|
+
"privacy": "protected",
|
|
50816
|
+
"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.",
|
|
50817
|
+
"readonly": true,
|
|
50818
|
+
"inheritedFrom": {
|
|
50819
|
+
"name": "HelixElement",
|
|
50820
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50821
|
+
}
|
|
50822
|
+
},
|
|
50823
|
+
{
|
|
50824
|
+
"kind": "field",
|
|
50825
|
+
"name": "knownChildren",
|
|
50826
|
+
"type": {
|
|
50827
|
+
"text": "Element[]"
|
|
50828
|
+
},
|
|
50829
|
+
"privacy": "protected",
|
|
50830
|
+
"description": "The children a render may read: all of them where they are known, and none otherwise.",
|
|
50831
|
+
"readonly": true,
|
|
50832
|
+
"inheritedFrom": {
|
|
50833
|
+
"name": "HelixElement",
|
|
50834
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50835
|
+
}
|
|
50836
|
+
},
|
|
50837
|
+
{
|
|
50838
|
+
"kind": "field",
|
|
50839
|
+
"name": "assignsByName",
|
|
50840
|
+
"type": {
|
|
50841
|
+
"text": "boolean"
|
|
50842
|
+
},
|
|
50843
|
+
"privacy": "protected",
|
|
50844
|
+
"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.",
|
|
50845
|
+
"readonly": true,
|
|
50846
|
+
"inheritedFrom": {
|
|
50847
|
+
"name": "HelixElement",
|
|
50848
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50849
|
+
}
|
|
50850
|
+
},
|
|
50851
|
+
{
|
|
50852
|
+
"kind": "method",
|
|
50853
|
+
"name": "route",
|
|
50854
|
+
"privacy": "protected",
|
|
50855
|
+
"return": {
|
|
50856
|
+
"type": {
|
|
50857
|
+
"text": "void"
|
|
50858
|
+
}
|
|
50859
|
+
},
|
|
50860
|
+
"parameters": [
|
|
50861
|
+
{
|
|
50862
|
+
"name": "child",
|
|
50863
|
+
"type": {
|
|
50864
|
+
"text": "Element"
|
|
50865
|
+
}
|
|
50866
|
+
},
|
|
50867
|
+
{
|
|
50868
|
+
"name": "name",
|
|
50869
|
+
"type": {
|
|
50870
|
+
"text": "string | undefined"
|
|
50871
|
+
}
|
|
50872
|
+
}
|
|
50873
|
+
],
|
|
50874
|
+
"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.",
|
|
50875
|
+
"inheritedFrom": {
|
|
50876
|
+
"name": "HelixElement",
|
|
50877
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50878
|
+
}
|
|
50879
|
+
},
|
|
50880
|
+
{
|
|
50881
|
+
"kind": "field",
|
|
50882
|
+
"name": "stopInner",
|
|
50883
|
+
"privacy": "protected",
|
|
50884
|
+
"readonly": true,
|
|
50885
|
+
"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.",
|
|
50886
|
+
"inheritedFrom": {
|
|
50887
|
+
"name": "HelixElement",
|
|
50888
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50889
|
+
}
|
|
50890
|
+
},
|
|
50891
|
+
{
|
|
50892
|
+
"kind": "method",
|
|
50893
|
+
"name": "relayNativeEvent",
|
|
50894
|
+
"privacy": "protected",
|
|
50895
|
+
"return": {
|
|
50896
|
+
"type": {
|
|
50897
|
+
"text": "void"
|
|
50898
|
+
}
|
|
50899
|
+
},
|
|
50900
|
+
"parameters": [
|
|
50901
|
+
{
|
|
50902
|
+
"name": "event",
|
|
50903
|
+
"type": {
|
|
50904
|
+
"text": "Event"
|
|
50905
|
+
}
|
|
50906
|
+
},
|
|
50907
|
+
{
|
|
50908
|
+
"name": "init",
|
|
50909
|
+
"optional": true,
|
|
50910
|
+
"type": {
|
|
50911
|
+
"text": "EventInit"
|
|
50912
|
+
}
|
|
50913
|
+
}
|
|
50914
|
+
],
|
|
50915
|
+
"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.",
|
|
50916
|
+
"inheritedFrom": {
|
|
50917
|
+
"name": "HelixElement",
|
|
50918
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50919
|
+
}
|
|
50920
|
+
},
|
|
50921
|
+
{
|
|
50922
|
+
"kind": "method",
|
|
50923
|
+
"name": "finalizeStyles",
|
|
50924
|
+
"privacy": "protected",
|
|
50925
|
+
"static": true,
|
|
50926
|
+
"return": {
|
|
50927
|
+
"type": {
|
|
50928
|
+
"text": "CSSResultOrNative[]"
|
|
50929
|
+
}
|
|
50930
|
+
},
|
|
50931
|
+
"parameters": [
|
|
50932
|
+
{
|
|
50933
|
+
"name": "styles",
|
|
50934
|
+
"optional": true,
|
|
50935
|
+
"type": {
|
|
50936
|
+
"text": "CSSResultOrNative | CSSResultOrNative[]"
|
|
50937
|
+
}
|
|
50938
|
+
}
|
|
50939
|
+
],
|
|
50940
|
+
"description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it.",
|
|
50941
|
+
"inheritedFrom": {
|
|
50942
|
+
"name": "HelixElement",
|
|
50943
|
+
"module": "src/helix-element/helix-element.ts"
|
|
50944
|
+
}
|
|
50945
|
+
}
|
|
50946
|
+
],
|
|
50947
|
+
"events": [
|
|
50948
|
+
{
|
|
50949
|
+
"type": {
|
|
50950
|
+
"text": "Event"
|
|
50951
|
+
},
|
|
50952
|
+
"description": "Relayed, because the platform's own does not escape.",
|
|
50953
|
+
"name": "close",
|
|
50954
|
+
"reactProp": "onclose"
|
|
50955
|
+
},
|
|
50956
|
+
{
|
|
50957
|
+
"type": {
|
|
50958
|
+
"text": "HelixActivateEvent"
|
|
50959
|
+
},
|
|
50960
|
+
"description": "Fired once the shown item has moved, so the element already holds it.",
|
|
50961
|
+
"name": "helix-activate",
|
|
50962
|
+
"reactProp": "onhelix-activate"
|
|
50963
|
+
},
|
|
50964
|
+
{
|
|
50965
|
+
"type": {
|
|
50966
|
+
"text": "HelixBeforeActivateEvent"
|
|
50967
|
+
},
|
|
50968
|
+
"description": "Fired before the shown item changes, and cancelable. The only way to refuse one.",
|
|
50969
|
+
"name": "helix-before-activate",
|
|
50970
|
+
"reactProp": "onhelix-before-activate"
|
|
50971
|
+
},
|
|
50972
|
+
{
|
|
50973
|
+
"type": {
|
|
50974
|
+
"text": "HelixBeforeCloseEvent"
|
|
50975
|
+
},
|
|
50976
|
+
"description": "Fired before it closes, and cancelable.",
|
|
50977
|
+
"name": "helix-before-close",
|
|
50978
|
+
"reactProp": "onhelix-before-close"
|
|
50979
|
+
},
|
|
50980
|
+
{
|
|
50981
|
+
"type": {
|
|
50982
|
+
"text": "HelixBeforeOpenEvent"
|
|
50983
|
+
},
|
|
50984
|
+
"description": "Fired before it opens, and cancelable.",
|
|
50985
|
+
"name": "helix-before-open",
|
|
50986
|
+
"reactProp": "onhelix-before-open"
|
|
50987
|
+
},
|
|
50988
|
+
{
|
|
50989
|
+
"type": {
|
|
50990
|
+
"text": "Event"
|
|
50991
|
+
},
|
|
50992
|
+
"description": "Says the state moved, carrying `newState` and `oldState`.",
|
|
50993
|
+
"name": "toggle",
|
|
50994
|
+
"reactProp": "ontoggle"
|
|
50995
|
+
}
|
|
50996
|
+
],
|
|
50997
|
+
"attributes": [
|
|
50998
|
+
{
|
|
50999
|
+
"name": "idle-delay",
|
|
51000
|
+
"type": {
|
|
51001
|
+
"text": "number"
|
|
51002
|
+
},
|
|
51003
|
+
"default": "0",
|
|
51004
|
+
"description": "How long the reader may be still before the chrome hides, in milliseconds.\n\nZero keeps it up, which is what a viewer with a caption worth reading\nwants. The wait is only ever about idling: whether anything else should\nkeep the chrome up is the consumer's to decide with this.",
|
|
51005
|
+
"fieldName": "idleDelay"
|
|
51006
|
+
},
|
|
51007
|
+
{
|
|
51008
|
+
"name": "label",
|
|
51009
|
+
"type": {
|
|
51010
|
+
"text": "string"
|
|
51011
|
+
},
|
|
51012
|
+
"default": "''",
|
|
51013
|
+
"description": "Accessible name for the viewer.",
|
|
51014
|
+
"fieldName": "label"
|
|
51015
|
+
},
|
|
51016
|
+
{
|
|
51017
|
+
"name": "loop",
|
|
51018
|
+
"type": {
|
|
51019
|
+
"text": "boolean"
|
|
51020
|
+
},
|
|
51021
|
+
"default": "false",
|
|
51022
|
+
"description": "Whether walking past the end comes back to the beginning.",
|
|
51023
|
+
"fieldName": "loop"
|
|
51024
|
+
},
|
|
51025
|
+
{
|
|
51026
|
+
"name": "status-label",
|
|
51027
|
+
"type": {
|
|
51028
|
+
"text": "string"
|
|
51029
|
+
},
|
|
51030
|
+
"default": "'{index} of {count}'",
|
|
51031
|
+
"description": "The reading that says where in the set the reader is, with `{index}` and\n`{count}` filled in.\n\nAnnounced rather than only drawn, because the picture changing under a\nreader who cannot see it is otherwise silent. A consumer who has their own\ncounter in the chrome can empty this and say it themselves.",
|
|
51032
|
+
"fieldName": "statusLabel"
|
|
51033
|
+
},
|
|
51034
|
+
{
|
|
51035
|
+
"name": "active",
|
|
51036
|
+
"type": {
|
|
51037
|
+
"text": "string"
|
|
51038
|
+
},
|
|
51039
|
+
"description": "Which item is current, by its `value`.\n\nNot `option.active`, which is the option the keyboard is on: that is a\ndifferent question from which one is chosen.\n\nWriting always applies, so `<helix-tabs active=\"one\">` starts on that\ntab, and `default-active` is how markup says where to start without\nnaming the current one.",
|
|
51040
|
+
"fieldName": "active",
|
|
51041
|
+
"inheritedFrom": {
|
|
51042
|
+
"name": "MixinControllerActive",
|
|
51043
|
+
"module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
|
|
51044
|
+
}
|
|
51045
|
+
},
|
|
51046
|
+
{
|
|
51047
|
+
"name": "default-active",
|
|
51048
|
+
"type": {
|
|
51049
|
+
"text": "string"
|
|
51050
|
+
},
|
|
51051
|
+
"default": "''",
|
|
51052
|
+
"description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
|
|
51053
|
+
"fieldName": "defaultActive",
|
|
51054
|
+
"inheritedFrom": {
|
|
51055
|
+
"name": "MixinControllerActive",
|
|
51056
|
+
"module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
|
|
51057
|
+
}
|
|
51058
|
+
},
|
|
51059
|
+
{
|
|
51060
|
+
"name": "open",
|
|
51061
|
+
"type": {
|
|
51062
|
+
"text": "boolean"
|
|
51063
|
+
},
|
|
51064
|
+
"description": "Whether the element is open.\n\nOne property, not two, so `dialog.open` answers the question anyone\nasking it meant. Writing always applies; `<helix-dialog open>` is the\nsame statement in markup.\n\n**Not reflected, and that is required rather than tidy.** Reflection\nwrites the resolved state back as an attribute, so an element that opened\nitself would put `open` on its own host: cloned, serialized for\nhydration, or diffed by a framework, it comes back holding whatever the\nlast reader did rather than what the author wrote. `:state(open)` carries\nthe resolved state for stylesheets, which is what the mirror is for.",
|
|
51065
|
+
"fieldName": "open",
|
|
51066
|
+
"inheritedFrom": {
|
|
51067
|
+
"name": "MixinControllerOpen",
|
|
51068
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
51069
|
+
}
|
|
51070
|
+
},
|
|
51071
|
+
{
|
|
51072
|
+
"name": "default-open",
|
|
51073
|
+
"type": {
|
|
51074
|
+
"text": "boolean"
|
|
51075
|
+
},
|
|
51076
|
+
"default": "false",
|
|
51077
|
+
"description": "Whether the markup declared it open. Ignored once `open` is written.",
|
|
51078
|
+
"fieldName": "defaultOpen",
|
|
51079
|
+
"inheritedFrom": {
|
|
51080
|
+
"name": "MixinControllerOpen",
|
|
51081
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
51082
|
+
}
|
|
51083
|
+
}
|
|
51084
|
+
],
|
|
51085
|
+
"cssStates": [
|
|
51086
|
+
{
|
|
51087
|
+
"description": "While the viewer fills the screen.",
|
|
51088
|
+
"name": "fullscreen"
|
|
51089
|
+
},
|
|
51090
|
+
{
|
|
51091
|
+
"description": "While the reader has been still long enough to hide the chrome.",
|
|
51092
|
+
"name": "idle"
|
|
51093
|
+
},
|
|
51094
|
+
{
|
|
51095
|
+
"description": "While the viewer is open.",
|
|
51096
|
+
"name": "open"
|
|
51097
|
+
},
|
|
51098
|
+
{
|
|
51099
|
+
"description": "Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.",
|
|
51100
|
+
"name": "settled",
|
|
51101
|
+
"inheritedFrom": {
|
|
51102
|
+
"name": "HelixElement",
|
|
51103
|
+
"module": "src/helix-element/helix-element.ts"
|
|
51104
|
+
}
|
|
51105
|
+
}
|
|
51106
|
+
],
|
|
51107
|
+
"mixins": [
|
|
51108
|
+
{
|
|
51109
|
+
"name": "MixinControllerActive",
|
|
51110
|
+
"package": "@fusion.dev/helix-core"
|
|
51111
|
+
},
|
|
51112
|
+
{
|
|
51113
|
+
"name": "MixinControllerOpen",
|
|
51114
|
+
"package": "@fusion.dev/helix-core"
|
|
51115
|
+
}
|
|
51116
|
+
],
|
|
51117
|
+
"superclass": {
|
|
51118
|
+
"name": "HelixElement",
|
|
51119
|
+
"package": "@fusion.dev/helix-core"
|
|
51120
|
+
},
|
|
51121
|
+
"summary": "A viewer that opens one thing over the page.",
|
|
51122
|
+
"helix": {
|
|
51123
|
+
"category": "media",
|
|
51124
|
+
"since": "0.100.0",
|
|
51125
|
+
"status": "stable",
|
|
51126
|
+
"documentation": "https://fusion.dev/helix/components/lightbox",
|
|
51127
|
+
"aliases": [
|
|
51128
|
+
"Photo viewer",
|
|
51129
|
+
"Image viewer",
|
|
51130
|
+
"Gallery overlay"
|
|
51131
|
+
],
|
|
51132
|
+
"tier": "headless",
|
|
51133
|
+
"group": "BaseLightbox",
|
|
51134
|
+
"part": "Root",
|
|
51135
|
+
"source": "helix/headless/src/lightbox"
|
|
51136
|
+
},
|
|
51137
|
+
"tagName": "helix-headless-lightbox",
|
|
51138
|
+
"customElement": true,
|
|
51139
|
+
"modulePath": "src/lightbox/root/lightbox-root.ts",
|
|
51140
|
+
"definitionPath": "src/lightbox/root/lightbox-root.ts"
|
|
51141
|
+
}
|
|
51142
|
+
],
|
|
51143
|
+
"exports": [
|
|
51144
|
+
{
|
|
51145
|
+
"kind": "js",
|
|
51146
|
+
"name": "HelixHeadlessLightbox",
|
|
51147
|
+
"declaration": {
|
|
51148
|
+
"name": "HelixHeadlessLightbox",
|
|
51149
|
+
"module": "src/lightbox/root/lightbox-root.ts"
|
|
51150
|
+
}
|
|
51151
|
+
},
|
|
51152
|
+
{
|
|
51153
|
+
"kind": "custom-element-definition",
|
|
51154
|
+
"name": "helix-headless-lightbox",
|
|
51155
|
+
"declaration": {
|
|
51156
|
+
"name": "HelixHeadlessLightbox",
|
|
51157
|
+
"module": "src/lightbox/root/lightbox-root.ts"
|
|
51158
|
+
}
|
|
51159
|
+
}
|
|
51160
|
+
]
|
|
51161
|
+
},
|
|
49598
51162
|
{
|
|
49599
51163
|
"kind": "javascript-module",
|
|
49600
51164
|
"path": "src/line-chart/index.ts",
|