@fusion.dev/helix 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.
@@ -40797,7 +40797,6 @@
40797
40797
  "documentation": "https://fusion.dev/helix/components/dialog",
40798
40798
  "aliases": [
40799
40799
  "Modal",
40800
- "Lightbox",
40801
40800
  "Sheet"
40802
40801
  ],
40803
40802
  "tier": "styled",
@@ -58713,6 +58712,14 @@
58713
58712
  "module": "src/legend/index.js"
58714
58713
  }
58715
58714
  },
58715
+ {
58716
+ "kind": "js",
58717
+ "name": "*",
58718
+ "declaration": {
58719
+ "name": "*",
58720
+ "module": "src/lightbox/index.js"
58721
+ }
58722
+ },
58716
58723
  {
58717
58724
  "kind": "js",
58718
58725
  "name": "*",
@@ -62248,6 +62255,1843 @@
62248
62255
  }
62249
62256
  ]
62250
62257
  },
62258
+ {
62259
+ "kind": "javascript-module",
62260
+ "path": "src/lightbox/index.ts",
62261
+ "declarations": [],
62262
+ "exports": [
62263
+ {
62264
+ "kind": "js",
62265
+ "name": "HelixLightboxItem",
62266
+ "declaration": {
62267
+ "name": "HelixLightboxItem",
62268
+ "module": "./item/lightbox-item.js"
62269
+ }
62270
+ },
62271
+ {
62272
+ "kind": "js",
62273
+ "name": "HelixLightbox",
62274
+ "declaration": {
62275
+ "name": "HelixLightbox",
62276
+ "module": "./root/lightbox-root.js"
62277
+ }
62278
+ }
62279
+ ]
62280
+ },
62281
+ {
62282
+ "kind": "javascript-module",
62283
+ "path": "src/lightbox/item/lightbox-item.css.ts",
62284
+ "declarations": [
62285
+ {
62286
+ "kind": "variable",
62287
+ "name": "styles"
62288
+ }
62289
+ ],
62290
+ "exports": [
62291
+ {
62292
+ "kind": "js",
62293
+ "name": "styles",
62294
+ "declaration": {
62295
+ "name": "styles",
62296
+ "module": "src/lightbox/item/lightbox-item.css.ts"
62297
+ }
62298
+ }
62299
+ ]
62300
+ },
62301
+ {
62302
+ "kind": "javascript-module",
62303
+ "path": "src/lightbox/item/lightbox-item.ts",
62304
+ "declarations": [
62305
+ {
62306
+ "kind": "class",
62307
+ "description": "Presentation only: the box centers what it was given and holds it inside the\nviewport rather than sizing it, because what is in here is the consumer's and\nmay be a picture, a frame of video or a chart. Which item is shown, and the\narithmetic that decides, is the base class.",
62308
+ "name": "HelixLightboxItem",
62309
+ "cssProperties": [
62310
+ {
62311
+ "description": "Color of the line under the content.",
62312
+ "name": "--lightbox-item-description-color"
62313
+ },
62314
+ {
62315
+ "description": "Space between the content and the line under it.",
62316
+ "name": "--lightbox-item-gap"
62317
+ }
62318
+ ],
62319
+ "members": [
62320
+ {
62321
+ "kind": "field",
62322
+ "name": "current",
62323
+ "type": {
62324
+ "text": "boolean"
62325
+ },
62326
+ "default": "false",
62327
+ "description": "Whether this is the one being shown.\n\nWritten by the root, which is the only thing that sees the set.",
62328
+ "attribute": "current",
62329
+ "inheritedFrom": {
62330
+ "name": "HelixHeadlessLightboxItem",
62331
+ "module": "src/lightbox/item/lightbox-item.ts"
62332
+ }
62333
+ },
62334
+ {
62335
+ "kind": "field",
62336
+ "name": "label",
62337
+ "type": {
62338
+ "text": "string"
62339
+ },
62340
+ "default": "''",
62341
+ "description": "What this item is called, for the reading that says where the reader is.",
62342
+ "attribute": "label",
62343
+ "inheritedFrom": {
62344
+ "name": "HelixHeadlessLightboxItem",
62345
+ "module": "src/lightbox/item/lightbox-item.ts"
62346
+ }
62347
+ },
62348
+ {
62349
+ "kind": "field",
62350
+ "name": "value",
62351
+ "type": {
62352
+ "text": "string"
62353
+ },
62354
+ "default": "''",
62355
+ "description": "What names this item, and what `active` on the root is compared against.",
62356
+ "attribute": "value",
62357
+ "inheritedFrom": {
62358
+ "name": "HelixHeadlessLightboxItem",
62359
+ "module": "src/lightbox/item/lightbox-item.ts"
62360
+ }
62361
+ },
62362
+ {
62363
+ "kind": "field",
62364
+ "name": "tier",
62365
+ "type": {
62366
+ "text": "string"
62367
+ },
62368
+ "static": true,
62369
+ "default": "'helix-headless-'",
62370
+ "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.",
62371
+ "inheritedFrom": {
62372
+ "name": "HelixElement",
62373
+ "module": "src/helix-element/helix-element.ts"
62374
+ }
62375
+ },
62376
+ {
62377
+ "kind": "method",
62378
+ "name": "tag",
62379
+ "privacy": "protected",
62380
+ "return": {
62381
+ "type": {
62382
+ "text": "StaticValue"
62383
+ }
62384
+ },
62385
+ "parameters": [
62386
+ {
62387
+ "name": "name",
62388
+ "type": {
62389
+ "text": "string"
62390
+ }
62391
+ }
62392
+ ],
62393
+ "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.",
62394
+ "inheritedFrom": {
62395
+ "name": "HelixElement",
62396
+ "module": "src/helix-element/helix-element.ts"
62397
+ }
62398
+ },
62399
+ {
62400
+ "kind": "method",
62401
+ "name": "partNamed",
62402
+ "privacy": "protected",
62403
+ "return": {
62404
+ "type": {
62405
+ "text": "T | null"
62406
+ }
62407
+ },
62408
+ "parameters": [
62409
+ {
62410
+ "name": "name",
62411
+ "type": {
62412
+ "text": "string"
62413
+ }
62414
+ }
62415
+ ],
62416
+ "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.",
62417
+ "inheritedFrom": {
62418
+ "name": "HelixElement",
62419
+ "module": "src/helix-element/helix-element.ts"
62420
+ }
62421
+ },
62422
+ {
62423
+ "kind": "field",
62424
+ "name": "internals",
62425
+ "type": {
62426
+ "text": "ElementInternals"
62427
+ },
62428
+ "privacy": "protected",
62429
+ "readonly": true,
62430
+ "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.",
62431
+ "inheritedFrom": {
62432
+ "name": "HelixElement",
62433
+ "module": "src/helix-element/helix-element.ts"
62434
+ }
62435
+ },
62436
+ {
62437
+ "kind": "method",
62438
+ "name": "toggleState",
62439
+ "privacy": "protected",
62440
+ "return": {
62441
+ "type": {
62442
+ "text": "void"
62443
+ }
62444
+ },
62445
+ "parameters": [
62446
+ {
62447
+ "name": "name",
62448
+ "type": {
62449
+ "text": "string"
62450
+ }
62451
+ },
62452
+ {
62453
+ "name": "on",
62454
+ "type": {
62455
+ "text": "boolean"
62456
+ }
62457
+ }
62458
+ ],
62459
+ "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.",
62460
+ "inheritedFrom": {
62461
+ "name": "HelixElement",
62462
+ "module": "src/helix-element/helix-element.ts"
62463
+ }
62464
+ },
62465
+ {
62466
+ "kind": "field",
62467
+ "name": "whenSettled",
62468
+ "type": {
62469
+ "text": "Promise<void>"
62470
+ },
62471
+ "readonly": true,
62472
+ "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.",
62473
+ "default": "new Promise<void>((resolve) => { this.resolveSettled = resolve })",
62474
+ "inheritedFrom": {
62475
+ "name": "HelixElement",
62476
+ "module": "src/helix-element/helix-element.ts"
62477
+ }
62478
+ },
62479
+ {
62480
+ "kind": "field",
62481
+ "name": "resolveSettled",
62482
+ "type": {
62483
+ "text": "() => void"
62484
+ },
62485
+ "privacy": "private",
62486
+ "description": "Resolves `whenSettled`, once, from the frame that records the state.",
62487
+ "inheritedFrom": {
62488
+ "name": "HelixElement",
62489
+ "module": "src/helix-element/helix-element.ts"
62490
+ }
62491
+ },
62492
+ {
62493
+ "kind": "field",
62494
+ "name": "fromServer",
62495
+ "type": {
62496
+ "text": "boolean"
62497
+ },
62498
+ "privacy": "private",
62499
+ "default": "false",
62500
+ "description": "Whether the shadow root was a server's, parsed from declarative shadow DOM.",
62501
+ "inheritedFrom": {
62502
+ "name": "HelixElement",
62503
+ "module": "src/helix-element/helix-element.ts"
62504
+ }
62505
+ },
62506
+ {
62507
+ "kind": "field",
62508
+ "name": "hydrating",
62509
+ "type": {
62510
+ "text": "boolean"
62511
+ },
62512
+ "privacy": "protected",
62513
+ "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.",
62514
+ "readonly": true,
62515
+ "inheritedFrom": {
62516
+ "name": "HelixElement",
62517
+ "module": "src/helix-element/helix-element.ts"
62518
+ }
62519
+ },
62520
+ {
62521
+ "kind": "field",
62522
+ "name": "serverRendered",
62523
+ "type": {
62524
+ "text": "boolean"
62525
+ },
62526
+ "privacy": "protected",
62527
+ "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.",
62528
+ "readonly": true,
62529
+ "inheritedFrom": {
62530
+ "name": "HelixElement",
62531
+ "module": "src/helix-element/helix-element.ts"
62532
+ }
62533
+ },
62534
+ {
62535
+ "kind": "method",
62536
+ "name": "finishHydration",
62537
+ "privacy": "protected",
62538
+ "return": {
62539
+ "type": {
62540
+ "text": "void"
62541
+ }
62542
+ },
62543
+ "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.",
62544
+ "inheritedFrom": {
62545
+ "name": "HelixElement",
62546
+ "module": "src/helix-element/helix-element.ts"
62547
+ }
62548
+ },
62549
+ {
62550
+ "kind": "field",
62551
+ "name": "childrenKnown",
62552
+ "type": {
62553
+ "text": "boolean"
62554
+ },
62555
+ "privacy": "protected",
62556
+ "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.",
62557
+ "readonly": true,
62558
+ "inheritedFrom": {
62559
+ "name": "HelixElement",
62560
+ "module": "src/helix-element/helix-element.ts"
62561
+ }
62562
+ },
62563
+ {
62564
+ "kind": "field",
62565
+ "name": "knownChildren",
62566
+ "type": {
62567
+ "text": "Element[]"
62568
+ },
62569
+ "privacy": "protected",
62570
+ "description": "The children a render may read: all of them where they are known, and none otherwise.",
62571
+ "readonly": true,
62572
+ "inheritedFrom": {
62573
+ "name": "HelixElement",
62574
+ "module": "src/helix-element/helix-element.ts"
62575
+ }
62576
+ },
62577
+ {
62578
+ "kind": "field",
62579
+ "name": "assignsByName",
62580
+ "type": {
62581
+ "text": "boolean"
62582
+ },
62583
+ "privacy": "protected",
62584
+ "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.",
62585
+ "readonly": true,
62586
+ "inheritedFrom": {
62587
+ "name": "HelixElement",
62588
+ "module": "src/helix-element/helix-element.ts"
62589
+ }
62590
+ },
62591
+ {
62592
+ "kind": "method",
62593
+ "name": "route",
62594
+ "privacy": "protected",
62595
+ "return": {
62596
+ "type": {
62597
+ "text": "void"
62598
+ }
62599
+ },
62600
+ "parameters": [
62601
+ {
62602
+ "name": "child",
62603
+ "type": {
62604
+ "text": "Element"
62605
+ }
62606
+ },
62607
+ {
62608
+ "name": "name",
62609
+ "type": {
62610
+ "text": "string | undefined"
62611
+ }
62612
+ }
62613
+ ],
62614
+ "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.",
62615
+ "inheritedFrom": {
62616
+ "name": "HelixElement",
62617
+ "module": "src/helix-element/helix-element.ts"
62618
+ }
62619
+ },
62620
+ {
62621
+ "kind": "field",
62622
+ "name": "stopInner",
62623
+ "privacy": "protected",
62624
+ "readonly": true,
62625
+ "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.",
62626
+ "inheritedFrom": {
62627
+ "name": "HelixElement",
62628
+ "module": "src/helix-element/helix-element.ts"
62629
+ }
62630
+ },
62631
+ {
62632
+ "kind": "method",
62633
+ "name": "relayNativeEvent",
62634
+ "privacy": "protected",
62635
+ "return": {
62636
+ "type": {
62637
+ "text": "void"
62638
+ }
62639
+ },
62640
+ "parameters": [
62641
+ {
62642
+ "name": "event",
62643
+ "type": {
62644
+ "text": "Event"
62645
+ }
62646
+ },
62647
+ {
62648
+ "name": "init",
62649
+ "optional": true,
62650
+ "type": {
62651
+ "text": "EventInit"
62652
+ }
62653
+ }
62654
+ ],
62655
+ "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.",
62656
+ "inheritedFrom": {
62657
+ "name": "HelixElement",
62658
+ "module": "src/helix-element/helix-element.ts"
62659
+ }
62660
+ },
62661
+ {
62662
+ "kind": "method",
62663
+ "name": "finalizeStyles",
62664
+ "privacy": "protected",
62665
+ "static": true,
62666
+ "return": {
62667
+ "type": {
62668
+ "text": "CSSResultOrNative[]"
62669
+ }
62670
+ },
62671
+ "parameters": [
62672
+ {
62673
+ "name": "styles",
62674
+ "optional": true,
62675
+ "type": {
62676
+ "text": "CSSResultOrNative | CSSResultOrNative[]"
62677
+ }
62678
+ }
62679
+ ],
62680
+ "description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it.",
62681
+ "inheritedFrom": {
62682
+ "name": "HelixElement",
62683
+ "module": "src/helix-element/helix-element.ts"
62684
+ }
62685
+ }
62686
+ ],
62687
+ "superclass": {
62688
+ "name": "HelixHeadlessLightboxItem",
62689
+ "package": "@fusion.dev/helix-headless/lightbox"
62690
+ },
62691
+ "summary": "One thing a lightbox can show.",
62692
+ "helix": {
62693
+ "category": "media",
62694
+ "since": "0.100.0",
62695
+ "status": "stable",
62696
+ "documentation": "https://fusion.dev/helix/components/lightbox",
62697
+ "aliases": [
62698
+ "LightboxSlide",
62699
+ "GalleryItem"
62700
+ ],
62701
+ "tier": "styled",
62702
+ "group": "Lightbox",
62703
+ "part": "Item"
62704
+ },
62705
+ "tagName": "helix-lightbox-item",
62706
+ "customElement": true,
62707
+ "slots": [
62708
+ {
62709
+ "description": "What is being shown.",
62710
+ "name": "",
62711
+ "inheritedFrom": {
62712
+ "name": "HelixHeadlessLightboxItem",
62713
+ "module": "src/lightbox/item/lightbox-item.ts"
62714
+ }
62715
+ },
62716
+ {
62717
+ "description": "A line under it saying what it is.",
62718
+ "name": "description",
62719
+ "inheritedFrom": {
62720
+ "name": "HelixHeadlessLightboxItem",
62721
+ "module": "src/lightbox/item/lightbox-item.ts"
62722
+ }
62723
+ }
62724
+ ],
62725
+ "cssParts": [
62726
+ {
62727
+ "description": "The box the content is shown in.",
62728
+ "name": "item",
62729
+ "inheritedFrom": {
62730
+ "name": "HelixHeadlessLightboxItem",
62731
+ "module": "src/lightbox/item/lightbox-item.ts"
62732
+ }
62733
+ }
62734
+ ],
62735
+ "attributes": [
62736
+ {
62737
+ "name": "current",
62738
+ "type": {
62739
+ "text": "boolean"
62740
+ },
62741
+ "default": "false",
62742
+ "description": "Whether this is the one being shown.\n\nWritten by the root, which is the only thing that sees the set.",
62743
+ "fieldName": "current",
62744
+ "inheritedFrom": {
62745
+ "name": "HelixHeadlessLightboxItem",
62746
+ "module": "src/lightbox/item/lightbox-item.ts"
62747
+ }
62748
+ },
62749
+ {
62750
+ "name": "label",
62751
+ "type": {
62752
+ "text": "string"
62753
+ },
62754
+ "default": "''",
62755
+ "description": "What this item is called, for the reading that says where the reader is.",
62756
+ "fieldName": "label",
62757
+ "inheritedFrom": {
62758
+ "name": "HelixHeadlessLightboxItem",
62759
+ "module": "src/lightbox/item/lightbox-item.ts"
62760
+ }
62761
+ },
62762
+ {
62763
+ "name": "value",
62764
+ "type": {
62765
+ "text": "string"
62766
+ },
62767
+ "default": "''",
62768
+ "description": "What names this item, and what `active` on the root is compared against.",
62769
+ "fieldName": "value",
62770
+ "inheritedFrom": {
62771
+ "name": "HelixHeadlessLightboxItem",
62772
+ "module": "src/lightbox/item/lightbox-item.ts"
62773
+ }
62774
+ }
62775
+ ],
62776
+ "cssStates": [
62777
+ {
62778
+ "description": "While this is the item the lightbox is showing.",
62779
+ "name": "current",
62780
+ "inheritedFrom": {
62781
+ "name": "HelixHeadlessLightboxItem",
62782
+ "module": "src/lightbox/item/lightbox-item.ts"
62783
+ }
62784
+ },
62785
+ {
62786
+ "description": "Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.",
62787
+ "name": "settled",
62788
+ "inheritedFrom": {
62789
+ "name": "HelixElement",
62790
+ "module": "src/helix-element/helix-element.ts"
62791
+ }
62792
+ }
62793
+ ],
62794
+ "modulePath": "src/lightbox/item/lightbox-item.ts",
62795
+ "definitionPath": "src/lightbox/item/lightbox-item.ts"
62796
+ }
62797
+ ],
62798
+ "exports": [
62799
+ {
62800
+ "kind": "js",
62801
+ "name": "HelixLightboxItem",
62802
+ "declaration": {
62803
+ "name": "HelixLightboxItem",
62804
+ "module": "src/lightbox/item/lightbox-item.ts"
62805
+ }
62806
+ },
62807
+ {
62808
+ "kind": "custom-element-definition",
62809
+ "name": "helix-lightbox-item",
62810
+ "declaration": {
62811
+ "name": "HelixLightboxItem",
62812
+ "module": "src/lightbox/item/lightbox-item.ts"
62813
+ }
62814
+ }
62815
+ ]
62816
+ },
62817
+ {
62818
+ "kind": "javascript-module",
62819
+ "path": "src/lightbox/root/lightbox-root.css.ts",
62820
+ "declarations": [
62821
+ {
62822
+ "kind": "variable",
62823
+ "name": "styles"
62824
+ }
62825
+ ],
62826
+ "exports": [
62827
+ {
62828
+ "kind": "js",
62829
+ "name": "styles",
62830
+ "declaration": {
62831
+ "name": "styles",
62832
+ "module": "src/lightbox/root/lightbox-root.css.ts"
62833
+ }
62834
+ }
62835
+ ]
62836
+ },
62837
+ {
62838
+ "kind": "javascript-module",
62839
+ "path": "src/lightbox/root/lightbox-root.ts",
62840
+ "declarations": [
62841
+ {
62842
+ "kind": "class",
62843
+ "description": "**A takeover rather than a panel, which is the whole difference from\n`Dialog`.** A dialog is a thing over the page and stops short of the edges to\nsay so; a lightbox is the page for as long as it is open. The scrim is heavier\nfor the same reason: what is behind it is not meant to be read.\n\n**A dark region that says so once**, with `color-scheme: dark` on the host,\nwhich is `Video`'s answer to the same problem: the chrome is the consumer's\nown components and they resolve their own tokens, so without a scheme on the\nregion they draw page-colored ink on a black room and disappear into it.\n\nThe chrome fades rather than leaves while the reader is still, because a bar\nthat is removed from the layout takes the picture's size with it and the\nreader watches it jump every time they stop moving.",
62844
+ "name": "HelixLightbox",
62845
+ "cssProperties": [
62846
+ {
62847
+ "description": "Color of the chrome drawn over the content.",
62848
+ "name": "--lightbox-foreground"
62849
+ },
62850
+ {
62851
+ "description": "Space between the chrome and the content.",
62852
+ "name": "--lightbox-gap"
62853
+ },
62854
+ {
62855
+ "description": "Inset from the edges of the screen.",
62856
+ "name": "--lightbox-padding"
62857
+ },
62858
+ {
62859
+ "description": "The wash over the page behind the viewer. Set on the host, where a token still resolves: a `var()` written inside `::backdrop` cannot see one.",
62860
+ "name": "--lightbox-scrim"
62861
+ }
62862
+ ],
62863
+ "members": [
62864
+ {
62865
+ "kind": "field",
62866
+ "name": "active",
62867
+ "type": {
62868
+ "text": "string"
62869
+ },
62870
+ "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.",
62871
+ "attribute": "active",
62872
+ "inheritedFrom": {
62873
+ "name": "MixinControllerActive",
62874
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
62875
+ }
62876
+ },
62877
+ {
62878
+ "kind": "field",
62879
+ "name": "defaultActive",
62880
+ "type": {
62881
+ "text": "string"
62882
+ },
62883
+ "default": "''",
62884
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
62885
+ "attribute": "default-active",
62886
+ "inheritedFrom": {
62887
+ "name": "MixinControllerActive",
62888
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
62889
+ }
62890
+ },
62891
+ {
62892
+ "kind": "field",
62893
+ "name": "activeState",
62894
+ "type": {
62895
+ "text": "string | undefined"
62896
+ },
62897
+ "privacy": "private",
62898
+ "default": "undefined",
62899
+ "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.",
62900
+ "inheritedFrom": {
62901
+ "name": "MixinControllerActive",
62902
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
62903
+ }
62904
+ },
62905
+ {
62906
+ "kind": "method",
62907
+ "name": "requestActive",
62908
+ "return": {
62909
+ "type": {
62910
+ "text": "boolean"
62911
+ }
62912
+ },
62913
+ "parameters": [
62914
+ {
62915
+ "name": "next",
62916
+ "type": {
62917
+ "text": "string"
62918
+ }
62919
+ }
62920
+ ],
62921
+ "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.",
62922
+ "inheritedFrom": {
62923
+ "name": "MixinControllerActive",
62924
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
62925
+ },
62926
+ "type": {
62927
+ "text": "requestActive(next: string) => boolean"
62928
+ }
62929
+ },
62930
+ {
62931
+ "kind": "method",
62932
+ "name": "announceActivated",
62933
+ "privacy": "private",
62934
+ "return": {
62935
+ "type": {
62936
+ "text": "void"
62937
+ }
62938
+ },
62939
+ "parameters": [
62940
+ {
62941
+ "name": "value",
62942
+ "type": {
62943
+ "text": "string"
62944
+ }
62945
+ }
62946
+ ],
62947
+ "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.",
62948
+ "inheritedFrom": {
62949
+ "name": "MixinControllerActive",
62950
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
62951
+ }
62952
+ },
62953
+ {
62954
+ "kind": "method",
62955
+ "name": "resolveActive",
62956
+ "privacy": "protected",
62957
+ "return": {
62958
+ "type": {
62959
+ "text": "Item | undefined"
62960
+ }
62961
+ },
62962
+ "parameters": [
62963
+ {
62964
+ "name": "items",
62965
+ "type": {
62966
+ "text": "Item[]"
62967
+ }
62968
+ }
62969
+ ],
62970
+ "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.",
62971
+ "inheritedFrom": {
62972
+ "name": "MixinControllerActive",
62973
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
62974
+ }
62975
+ },
62976
+ {
62977
+ "kind": "field",
62978
+ "name": "open",
62979
+ "type": {
62980
+ "text": "boolean"
62981
+ },
62982
+ "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.",
62983
+ "attribute": "open",
62984
+ "inheritedFrom": {
62985
+ "name": "MixinControllerOpen",
62986
+ "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
62987
+ }
62988
+ },
62989
+ {
62990
+ "kind": "field",
62991
+ "name": "defaultOpen",
62992
+ "type": {
62993
+ "text": "boolean"
62994
+ },
62995
+ "default": "false",
62996
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
62997
+ "attribute": "default-open",
62998
+ "inheritedFrom": {
62999
+ "name": "MixinControllerOpen",
63000
+ "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
63001
+ }
63002
+ },
63003
+ {
63004
+ "kind": "field",
63005
+ "name": "openState",
63006
+ "type": {
63007
+ "text": "boolean | undefined"
63008
+ },
63009
+ "privacy": "private",
63010
+ "default": "undefined",
63011
+ "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.",
63012
+ "inheritedFrom": {
63013
+ "name": "MixinControllerOpen",
63014
+ "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
63015
+ }
63016
+ },
63017
+ {
63018
+ "kind": "method",
63019
+ "name": "requestOpen",
63020
+ "return": {
63021
+ "type": {
63022
+ "text": "boolean"
63023
+ }
63024
+ },
63025
+ "parameters": [
63026
+ {
63027
+ "name": "next",
63028
+ "type": {
63029
+ "text": "boolean"
63030
+ }
63031
+ }
63032
+ ],
63033
+ "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.",
63034
+ "inheritedFrom": {
63035
+ "name": "MixinControllerOpen",
63036
+ "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
63037
+ },
63038
+ "type": {
63039
+ "text": "requestOpen(next: boolean) => boolean"
63040
+ }
63041
+ },
63042
+ {
63043
+ "kind": "method",
63044
+ "name": "announceToggle",
63045
+ "privacy": "private",
63046
+ "return": {
63047
+ "type": {
63048
+ "text": "void"
63049
+ }
63050
+ },
63051
+ "parameters": [
63052
+ {
63053
+ "name": "open",
63054
+ "type": {
63055
+ "text": "boolean"
63056
+ }
63057
+ }
63058
+ ],
63059
+ "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.",
63060
+ "inheritedFrom": {
63061
+ "name": "MixinControllerOpen",
63062
+ "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
63063
+ }
63064
+ },
63065
+ {
63066
+ "kind": "method",
63067
+ "name": "toggleOpen",
63068
+ "return": {
63069
+ "type": {
63070
+ "text": "boolean"
63071
+ }
63072
+ },
63073
+ "description": "Requests the opposite of the current state.",
63074
+ "inheritedFrom": {
63075
+ "name": "MixinControllerOpen",
63076
+ "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
63077
+ },
63078
+ "type": {
63079
+ "text": "toggleOpen() => boolean"
63080
+ }
63081
+ },
63082
+ {
63083
+ "kind": "field",
63084
+ "name": "idleDelay",
63085
+ "type": {
63086
+ "text": "number"
63087
+ },
63088
+ "default": "0",
63089
+ "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.",
63090
+ "attribute": "idle-delay",
63091
+ "inheritedFrom": {
63092
+ "name": "HelixHeadlessLightbox",
63093
+ "module": "src/lightbox/root/lightbox-root.ts"
63094
+ }
63095
+ },
63096
+ {
63097
+ "kind": "field",
63098
+ "name": "label",
63099
+ "type": {
63100
+ "text": "string"
63101
+ },
63102
+ "default": "''",
63103
+ "description": "Accessible name for the viewer.",
63104
+ "attribute": "label",
63105
+ "inheritedFrom": {
63106
+ "name": "HelixHeadlessLightbox",
63107
+ "module": "src/lightbox/root/lightbox-root.ts"
63108
+ }
63109
+ },
63110
+ {
63111
+ "kind": "field",
63112
+ "name": "loop",
63113
+ "type": {
63114
+ "text": "boolean"
63115
+ },
63116
+ "default": "false",
63117
+ "description": "Whether walking past the end comes back to the beginning.",
63118
+ "attribute": "loop",
63119
+ "reflects": true,
63120
+ "inheritedFrom": {
63121
+ "name": "HelixHeadlessLightbox",
63122
+ "module": "src/lightbox/root/lightbox-root.ts"
63123
+ }
63124
+ },
63125
+ {
63126
+ "kind": "field",
63127
+ "name": "statusLabel",
63128
+ "type": {
63129
+ "text": "string"
63130
+ },
63131
+ "default": "'{index} of {count}'",
63132
+ "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.",
63133
+ "attribute": "status-label",
63134
+ "inheritedFrom": {
63135
+ "name": "HelixHeadlessLightbox",
63136
+ "module": "src/lightbox/root/lightbox-root.ts"
63137
+ }
63138
+ },
63139
+ {
63140
+ "kind": "field",
63141
+ "name": "resting",
63142
+ "type": {
63143
+ "text": "boolean"
63144
+ },
63145
+ "privacy": "private",
63146
+ "default": "false",
63147
+ "description": "Whether the reader has been still long enough to hide the chrome.",
63148
+ "inheritedFrom": {
63149
+ "name": "HelixHeadlessLightbox",
63150
+ "module": "src/lightbox/root/lightbox-root.ts"
63151
+ }
63152
+ },
63153
+ {
63154
+ "kind": "field",
63155
+ "name": "filled",
63156
+ "type": {
63157
+ "text": "boolean"
63158
+ },
63159
+ "privacy": "private",
63160
+ "default": "false",
63161
+ "description": "Whether the viewer is filling the screen.",
63162
+ "inheritedFrom": {
63163
+ "name": "HelixHeadlessLightbox",
63164
+ "module": "src/lightbox/root/lightbox-root.ts"
63165
+ }
63166
+ },
63167
+ {
63168
+ "kind": "field",
63169
+ "name": "announcement",
63170
+ "type": {
63171
+ "text": "string"
63172
+ },
63173
+ "privacy": "private",
63174
+ "default": "''",
63175
+ "description": "What the live region is currently saying.",
63176
+ "inheritedFrom": {
63177
+ "name": "HelixHeadlessLightbox",
63178
+ "module": "src/lightbox/root/lightbox-root.ts"
63179
+ }
63180
+ },
63181
+ {
63182
+ "kind": "field",
63183
+ "name": "fullscreen",
63184
+ "privacy": "private",
63185
+ "readonly": true,
63186
+ "default": "new FullscreenController(this, (full) => { this.filled = full })",
63187
+ "inheritedFrom": {
63188
+ "name": "HelixHeadlessLightbox",
63189
+ "module": "src/lightbox/root/lightbox-root.ts"
63190
+ }
63191
+ },
63192
+ {
63193
+ "kind": "field",
63194
+ "name": "idle",
63195
+ "privacy": "private",
63196
+ "readonly": true,
63197
+ "default": "new IdleController( this, () => this.idleDelay, (resting) => { this.resting = resting }, )",
63198
+ "inheritedFrom": {
63199
+ "name": "HelixHeadlessLightbox",
63200
+ "module": "src/lightbox/root/lightbox-root.ts"
63201
+ }
63202
+ },
63203
+ {
63204
+ "kind": "field",
63205
+ "name": "commands",
63206
+ "privacy": "protected",
63207
+ "readonly": true,
63208
+ "default": "new CommandController(this, { commands: { '--close': () => this.close(), '--fullscreen': () => this.toggleFullscreen(), '--next': () => this.next(), '--previous': () => this.previous(), '--show': () => this.show(), '--toggle': () => this.toggleOpen(), }, })",
63209
+ "inheritedFrom": {
63210
+ "name": "HelixHeadlessLightbox",
63211
+ "module": "src/lightbox/root/lightbox-root.ts"
63212
+ }
63213
+ },
63214
+ {
63215
+ "kind": "field",
63216
+ "name": "items",
63217
+ "type": {
63218
+ "text": "HelixHeadlessLightboxItem[]"
63219
+ },
63220
+ "privacy": "private",
63221
+ "description": "The items, read from the host so the server has them too.",
63222
+ "readonly": true,
63223
+ "inheritedFrom": {
63224
+ "name": "HelixHeadlessLightbox",
63225
+ "module": "src/lightbox/root/lightbox-root.ts"
63226
+ }
63227
+ },
63228
+ {
63229
+ "kind": "field",
63230
+ "name": "dialog",
63231
+ "type": {
63232
+ "text": "HTMLDialogElement | null"
63233
+ },
63234
+ "privacy": "private",
63235
+ "description": "The native dialog, or nothing where there is no DOM to hold one.",
63236
+ "readonly": true,
63237
+ "inheritedFrom": {
63238
+ "name": "HelixHeadlessLightbox",
63239
+ "module": "src/lightbox/root/lightbox-root.ts"
63240
+ }
63241
+ },
63242
+ {
63243
+ "kind": "method",
63244
+ "name": "show",
63245
+ "return": {
63246
+ "type": {
63247
+ "text": "void"
63248
+ }
63249
+ },
63250
+ "description": "Opens the viewer, which makes the rest of the page inert.",
63251
+ "type": {
63252
+ "text": "show() => void"
63253
+ },
63254
+ "inheritedFrom": {
63255
+ "name": "HelixHeadlessLightbox",
63256
+ "module": "src/lightbox/root/lightbox-root.ts"
63257
+ }
63258
+ },
63259
+ {
63260
+ "kind": "method",
63261
+ "name": "close",
63262
+ "return": {
63263
+ "type": {
63264
+ "text": "void"
63265
+ }
63266
+ },
63267
+ "description": "Asks to close, which a consumer may refuse.",
63268
+ "type": {
63269
+ "text": "close() => void"
63270
+ },
63271
+ "inheritedFrom": {
63272
+ "name": "HelixHeadlessLightbox",
63273
+ "module": "src/lightbox/root/lightbox-root.ts"
63274
+ }
63275
+ },
63276
+ {
63277
+ "kind": "method",
63278
+ "name": "next",
63279
+ "return": {
63280
+ "type": {
63281
+ "text": "void"
63282
+ }
63283
+ },
63284
+ "description": "Shows the next item, or the first where it is past the end and looping.",
63285
+ "type": {
63286
+ "text": "next() => void"
63287
+ },
63288
+ "inheritedFrom": {
63289
+ "name": "HelixHeadlessLightbox",
63290
+ "module": "src/lightbox/root/lightbox-root.ts"
63291
+ }
63292
+ },
63293
+ {
63294
+ "kind": "method",
63295
+ "name": "previous",
63296
+ "return": {
63297
+ "type": {
63298
+ "text": "void"
63299
+ }
63300
+ },
63301
+ "description": "Shows the previous item, or the last where it is past the start and looping.",
63302
+ "type": {
63303
+ "text": "previous() => void"
63304
+ },
63305
+ "inheritedFrom": {
63306
+ "name": "HelixHeadlessLightbox",
63307
+ "module": "src/lightbox/root/lightbox-root.ts"
63308
+ }
63309
+ },
63310
+ {
63311
+ "kind": "method",
63312
+ "name": "toggleFullscreen",
63313
+ "return": {
63314
+ "type": {
63315
+ "text": "void"
63316
+ }
63317
+ },
63318
+ "description": "Fills the screen with the viewer, or comes back.",
63319
+ "type": {
63320
+ "text": "toggleFullscreen() => void"
63321
+ },
63322
+ "inheritedFrom": {
63323
+ "name": "HelixHeadlessLightbox",
63324
+ "module": "src/lightbox/root/lightbox-root.ts"
63325
+ }
63326
+ },
63327
+ {
63328
+ "kind": "method",
63329
+ "name": "step",
63330
+ "privacy": "private",
63331
+ "return": {
63332
+ "type": {
63333
+ "text": "void"
63334
+ }
63335
+ },
63336
+ "parameters": [
63337
+ {
63338
+ "name": "by",
63339
+ "type": {
63340
+ "text": "number"
63341
+ }
63342
+ }
63343
+ ],
63344
+ "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.",
63345
+ "inheritedFrom": {
63346
+ "name": "HelixHeadlessLightbox",
63347
+ "module": "src/lightbox/root/lightbox-root.ts"
63348
+ }
63349
+ },
63350
+ {
63351
+ "kind": "field",
63352
+ "name": "handleCancel",
63353
+ "privacy": "private",
63354
+ "readonly": true,
63355
+ "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.",
63356
+ "inheritedFrom": {
63357
+ "name": "HelixHeadlessLightbox",
63358
+ "module": "src/lightbox/root/lightbox-root.ts"
63359
+ }
63360
+ },
63361
+ {
63362
+ "kind": "field",
63363
+ "name": "handleClose",
63364
+ "privacy": "private",
63365
+ "readonly": true,
63366
+ "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.",
63367
+ "inheritedFrom": {
63368
+ "name": "HelixHeadlessLightbox",
63369
+ "module": "src/lightbox/root/lightbox-root.ts"
63370
+ }
63371
+ },
63372
+ {
63373
+ "kind": "field",
63374
+ "name": "handleKeydown",
63375
+ "privacy": "private",
63376
+ "readonly": true,
63377
+ "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.",
63378
+ "inheritedFrom": {
63379
+ "name": "HelixHeadlessLightbox",
63380
+ "module": "src/lightbox/root/lightbox-root.ts"
63381
+ }
63382
+ },
63383
+ {
63384
+ "kind": "method",
63385
+ "name": "toEnd",
63386
+ "privacy": "private",
63387
+ "return": {
63388
+ "type": {
63389
+ "text": "void"
63390
+ }
63391
+ },
63392
+ "parameters": [
63393
+ {
63394
+ "name": "at",
63395
+ "type": {
63396
+ "text": "number"
63397
+ }
63398
+ }
63399
+ ],
63400
+ "description": "Home and End, which are an index rather than a step.",
63401
+ "inheritedFrom": {
63402
+ "name": "HelixHeadlessLightbox",
63403
+ "module": "src/lightbox/root/lightbox-root.ts"
63404
+ }
63405
+ },
63406
+ {
63407
+ "kind": "field",
63408
+ "name": "handleBackdrop",
63409
+ "privacy": "private",
63410
+ "readonly": true,
63411
+ "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.",
63412
+ "inheritedFrom": {
63413
+ "name": "HelixHeadlessLightbox",
63414
+ "module": "src/lightbox/root/lightbox-root.ts"
63415
+ }
63416
+ },
63417
+ {
63418
+ "kind": "method",
63419
+ "name": "mark",
63420
+ "privacy": "private",
63421
+ "return": {
63422
+ "type": {
63423
+ "text": "void"
63424
+ }
63425
+ },
63426
+ "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.",
63427
+ "inheritedFrom": {
63428
+ "name": "HelixHeadlessLightbox",
63429
+ "module": "src/lightbox/root/lightbox-root.ts"
63430
+ }
63431
+ },
63432
+ {
63433
+ "kind": "method",
63434
+ "name": "say",
63435
+ "privacy": "private",
63436
+ "return": {
63437
+ "type": {
63438
+ "text": "void"
63439
+ }
63440
+ },
63441
+ "parameters": [
63442
+ {
63443
+ "name": "changed",
63444
+ "type": {
63445
+ "text": "PropertyValues"
63446
+ }
63447
+ }
63448
+ ],
63449
+ "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.",
63450
+ "inheritedFrom": {
63451
+ "name": "HelixHeadlessLightbox",
63452
+ "module": "src/lightbox/root/lightbox-root.ts"
63453
+ }
63454
+ },
63455
+ {
63456
+ "kind": "field",
63457
+ "name": "tier",
63458
+ "type": {
63459
+ "text": "string"
63460
+ },
63461
+ "static": true,
63462
+ "default": "'helix-headless-'",
63463
+ "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.",
63464
+ "inheritedFrom": {
63465
+ "name": "HelixElement",
63466
+ "module": "src/helix-element/helix-element.ts"
63467
+ }
63468
+ },
63469
+ {
63470
+ "kind": "method",
63471
+ "name": "tag",
63472
+ "privacy": "protected",
63473
+ "return": {
63474
+ "type": {
63475
+ "text": "StaticValue"
63476
+ }
63477
+ },
63478
+ "parameters": [
63479
+ {
63480
+ "name": "name",
63481
+ "type": {
63482
+ "text": "string"
63483
+ }
63484
+ }
63485
+ ],
63486
+ "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.",
63487
+ "inheritedFrom": {
63488
+ "name": "HelixElement",
63489
+ "module": "src/helix-element/helix-element.ts"
63490
+ }
63491
+ },
63492
+ {
63493
+ "kind": "method",
63494
+ "name": "partNamed",
63495
+ "privacy": "protected",
63496
+ "return": {
63497
+ "type": {
63498
+ "text": "T | null"
63499
+ }
63500
+ },
63501
+ "parameters": [
63502
+ {
63503
+ "name": "name",
63504
+ "type": {
63505
+ "text": "string"
63506
+ }
63507
+ }
63508
+ ],
63509
+ "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.",
63510
+ "inheritedFrom": {
63511
+ "name": "HelixElement",
63512
+ "module": "src/helix-element/helix-element.ts"
63513
+ }
63514
+ },
63515
+ {
63516
+ "kind": "field",
63517
+ "name": "internals",
63518
+ "type": {
63519
+ "text": "ElementInternals"
63520
+ },
63521
+ "privacy": "protected",
63522
+ "readonly": true,
63523
+ "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.",
63524
+ "inheritedFrom": {
63525
+ "name": "HelixElement",
63526
+ "module": "src/helix-element/helix-element.ts"
63527
+ }
63528
+ },
63529
+ {
63530
+ "kind": "method",
63531
+ "name": "toggleState",
63532
+ "privacy": "protected",
63533
+ "return": {
63534
+ "type": {
63535
+ "text": "void"
63536
+ }
63537
+ },
63538
+ "parameters": [
63539
+ {
63540
+ "name": "name",
63541
+ "type": {
63542
+ "text": "string"
63543
+ }
63544
+ },
63545
+ {
63546
+ "name": "on",
63547
+ "type": {
63548
+ "text": "boolean"
63549
+ }
63550
+ }
63551
+ ],
63552
+ "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.",
63553
+ "inheritedFrom": {
63554
+ "name": "HelixElement",
63555
+ "module": "src/helix-element/helix-element.ts"
63556
+ }
63557
+ },
63558
+ {
63559
+ "kind": "field",
63560
+ "name": "whenSettled",
63561
+ "type": {
63562
+ "text": "Promise<void>"
63563
+ },
63564
+ "readonly": true,
63565
+ "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.",
63566
+ "default": "new Promise<void>((resolve) => { this.resolveSettled = resolve })",
63567
+ "inheritedFrom": {
63568
+ "name": "HelixElement",
63569
+ "module": "src/helix-element/helix-element.ts"
63570
+ }
63571
+ },
63572
+ {
63573
+ "kind": "field",
63574
+ "name": "resolveSettled",
63575
+ "type": {
63576
+ "text": "() => void"
63577
+ },
63578
+ "privacy": "private",
63579
+ "description": "Resolves `whenSettled`, once, from the frame that records the state.",
63580
+ "inheritedFrom": {
63581
+ "name": "HelixElement",
63582
+ "module": "src/helix-element/helix-element.ts"
63583
+ }
63584
+ },
63585
+ {
63586
+ "kind": "field",
63587
+ "name": "fromServer",
63588
+ "type": {
63589
+ "text": "boolean"
63590
+ },
63591
+ "privacy": "private",
63592
+ "default": "false",
63593
+ "description": "Whether the shadow root was a server's, parsed from declarative shadow DOM.",
63594
+ "inheritedFrom": {
63595
+ "name": "HelixElement",
63596
+ "module": "src/helix-element/helix-element.ts"
63597
+ }
63598
+ },
63599
+ {
63600
+ "kind": "field",
63601
+ "name": "hydrating",
63602
+ "type": {
63603
+ "text": "boolean"
63604
+ },
63605
+ "privacy": "protected",
63606
+ "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.",
63607
+ "readonly": true,
63608
+ "inheritedFrom": {
63609
+ "name": "HelixElement",
63610
+ "module": "src/helix-element/helix-element.ts"
63611
+ }
63612
+ },
63613
+ {
63614
+ "kind": "field",
63615
+ "name": "serverRendered",
63616
+ "type": {
63617
+ "text": "boolean"
63618
+ },
63619
+ "privacy": "protected",
63620
+ "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.",
63621
+ "readonly": true,
63622
+ "inheritedFrom": {
63623
+ "name": "HelixElement",
63624
+ "module": "src/helix-element/helix-element.ts"
63625
+ }
63626
+ },
63627
+ {
63628
+ "kind": "method",
63629
+ "name": "finishHydration",
63630
+ "privacy": "protected",
63631
+ "return": {
63632
+ "type": {
63633
+ "text": "void"
63634
+ }
63635
+ },
63636
+ "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.",
63637
+ "inheritedFrom": {
63638
+ "name": "HelixElement",
63639
+ "module": "src/helix-element/helix-element.ts"
63640
+ }
63641
+ },
63642
+ {
63643
+ "kind": "field",
63644
+ "name": "childrenKnown",
63645
+ "type": {
63646
+ "text": "boolean"
63647
+ },
63648
+ "privacy": "protected",
63649
+ "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.",
63650
+ "readonly": true,
63651
+ "inheritedFrom": {
63652
+ "name": "HelixElement",
63653
+ "module": "src/helix-element/helix-element.ts"
63654
+ }
63655
+ },
63656
+ {
63657
+ "kind": "field",
63658
+ "name": "knownChildren",
63659
+ "type": {
63660
+ "text": "Element[]"
63661
+ },
63662
+ "privacy": "protected",
63663
+ "description": "The children a render may read: all of them where they are known, and none otherwise.",
63664
+ "readonly": true,
63665
+ "inheritedFrom": {
63666
+ "name": "HelixElement",
63667
+ "module": "src/helix-element/helix-element.ts"
63668
+ }
63669
+ },
63670
+ {
63671
+ "kind": "field",
63672
+ "name": "assignsByName",
63673
+ "type": {
63674
+ "text": "boolean"
63675
+ },
63676
+ "privacy": "protected",
63677
+ "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.",
63678
+ "readonly": true,
63679
+ "inheritedFrom": {
63680
+ "name": "HelixElement",
63681
+ "module": "src/helix-element/helix-element.ts"
63682
+ }
63683
+ },
63684
+ {
63685
+ "kind": "method",
63686
+ "name": "route",
63687
+ "privacy": "protected",
63688
+ "return": {
63689
+ "type": {
63690
+ "text": "void"
63691
+ }
63692
+ },
63693
+ "parameters": [
63694
+ {
63695
+ "name": "child",
63696
+ "type": {
63697
+ "text": "Element"
63698
+ }
63699
+ },
63700
+ {
63701
+ "name": "name",
63702
+ "type": {
63703
+ "text": "string | undefined"
63704
+ }
63705
+ }
63706
+ ],
63707
+ "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.",
63708
+ "inheritedFrom": {
63709
+ "name": "HelixElement",
63710
+ "module": "src/helix-element/helix-element.ts"
63711
+ }
63712
+ },
63713
+ {
63714
+ "kind": "field",
63715
+ "name": "stopInner",
63716
+ "privacy": "protected",
63717
+ "readonly": true,
63718
+ "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.",
63719
+ "inheritedFrom": {
63720
+ "name": "HelixElement",
63721
+ "module": "src/helix-element/helix-element.ts"
63722
+ }
63723
+ },
63724
+ {
63725
+ "kind": "method",
63726
+ "name": "relayNativeEvent",
63727
+ "privacy": "protected",
63728
+ "return": {
63729
+ "type": {
63730
+ "text": "void"
63731
+ }
63732
+ },
63733
+ "parameters": [
63734
+ {
63735
+ "name": "event",
63736
+ "type": {
63737
+ "text": "Event"
63738
+ }
63739
+ },
63740
+ {
63741
+ "name": "init",
63742
+ "optional": true,
63743
+ "type": {
63744
+ "text": "EventInit"
63745
+ }
63746
+ }
63747
+ ],
63748
+ "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.",
63749
+ "inheritedFrom": {
63750
+ "name": "HelixElement",
63751
+ "module": "src/helix-element/helix-element.ts"
63752
+ }
63753
+ },
63754
+ {
63755
+ "kind": "method",
63756
+ "name": "finalizeStyles",
63757
+ "privacy": "protected",
63758
+ "static": true,
63759
+ "return": {
63760
+ "type": {
63761
+ "text": "CSSResultOrNative[]"
63762
+ }
63763
+ },
63764
+ "parameters": [
63765
+ {
63766
+ "name": "styles",
63767
+ "optional": true,
63768
+ "type": {
63769
+ "text": "CSSResultOrNative | CSSResultOrNative[]"
63770
+ }
63771
+ }
63772
+ ],
63773
+ "description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it.",
63774
+ "inheritedFrom": {
63775
+ "name": "HelixElement",
63776
+ "module": "src/helix-element/helix-element.ts"
63777
+ }
63778
+ }
63779
+ ],
63780
+ "events": [
63781
+ {
63782
+ "type": {
63783
+ "text": "HelixActivateEvent"
63784
+ },
63785
+ "description": "Fired once the shown item has moved, so the element already holds it.",
63786
+ "name": "helix-activate",
63787
+ "reactProp": "onhelix-activate",
63788
+ "inheritedFrom": {
63789
+ "name": "HelixHeadlessLightbox",
63790
+ "module": "src/lightbox/root/lightbox-root.ts"
63791
+ }
63792
+ },
63793
+ {
63794
+ "type": {
63795
+ "text": "Event"
63796
+ },
63797
+ "description": "Relayed, because the platform's own does not escape.",
63798
+ "name": "close",
63799
+ "reactProp": "onclose",
63800
+ "inheritedFrom": {
63801
+ "name": "HelixHeadlessLightbox",
63802
+ "module": "src/lightbox/root/lightbox-root.ts"
63803
+ }
63804
+ },
63805
+ {
63806
+ "type": {
63807
+ "text": "HelixBeforeActivateEvent"
63808
+ },
63809
+ "description": "Fired before the shown item changes, and cancelable. The only way to refuse one.",
63810
+ "name": "helix-before-activate",
63811
+ "reactProp": "onhelix-before-activate",
63812
+ "inheritedFrom": {
63813
+ "name": "HelixHeadlessLightbox",
63814
+ "module": "src/lightbox/root/lightbox-root.ts"
63815
+ }
63816
+ },
63817
+ {
63818
+ "type": {
63819
+ "text": "HelixBeforeCloseEvent"
63820
+ },
63821
+ "description": "Fired before it closes, and cancelable.",
63822
+ "name": "helix-before-close",
63823
+ "reactProp": "onhelix-before-close",
63824
+ "inheritedFrom": {
63825
+ "name": "HelixHeadlessLightbox",
63826
+ "module": "src/lightbox/root/lightbox-root.ts"
63827
+ }
63828
+ },
63829
+ {
63830
+ "type": {
63831
+ "text": "HelixBeforeOpenEvent"
63832
+ },
63833
+ "description": "Fired before it opens, and cancelable.",
63834
+ "name": "helix-before-open",
63835
+ "reactProp": "onhelix-before-open",
63836
+ "inheritedFrom": {
63837
+ "name": "HelixHeadlessLightbox",
63838
+ "module": "src/lightbox/root/lightbox-root.ts"
63839
+ }
63840
+ },
63841
+ {
63842
+ "type": {
63843
+ "text": "Event"
63844
+ },
63845
+ "description": "Says the state moved, carrying `newState` and `oldState`.",
63846
+ "name": "toggle",
63847
+ "reactProp": "ontoggle",
63848
+ "inheritedFrom": {
63849
+ "name": "HelixHeadlessLightbox",
63850
+ "module": "src/lightbox/root/lightbox-root.ts"
63851
+ }
63852
+ }
63853
+ ],
63854
+ "superclass": {
63855
+ "name": "HelixHeadlessLightbox",
63856
+ "package": "@fusion.dev/helix-headless/lightbox"
63857
+ },
63858
+ "summary": "A viewer that opens one thing over the page.",
63859
+ "helix": {
63860
+ "category": "media",
63861
+ "since": "0.100.0",
63862
+ "status": "stable",
63863
+ "documentation": "https://fusion.dev/helix/components/lightbox",
63864
+ "aliases": [
63865
+ "Photo viewer",
63866
+ "Image viewer",
63867
+ "Gallery overlay"
63868
+ ],
63869
+ "tier": "styled",
63870
+ "group": "Lightbox",
63871
+ "part": "Root",
63872
+ "examples": [
63873
+ {
63874
+ "description": "A set of pictures opened over the page, walked with the arrow keys.",
63875
+ "slug": "gallery"
63876
+ }
63877
+ ],
63878
+ "source": "helix/styled/src/lightbox"
63879
+ },
63880
+ "tagName": "helix-lightbox",
63881
+ "customElement": true,
63882
+ "attributes": [
63883
+ {
63884
+ "name": "active",
63885
+ "type": {
63886
+ "text": "string"
63887
+ },
63888
+ "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.",
63889
+ "fieldName": "active",
63890
+ "inheritedFrom": {
63891
+ "name": "MixinControllerActive",
63892
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
63893
+ }
63894
+ },
63895
+ {
63896
+ "name": "default-active",
63897
+ "type": {
63898
+ "text": "string"
63899
+ },
63900
+ "default": "''",
63901
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
63902
+ "fieldName": "defaultActive",
63903
+ "inheritedFrom": {
63904
+ "name": "MixinControllerActive",
63905
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
63906
+ }
63907
+ },
63908
+ {
63909
+ "name": "open",
63910
+ "type": {
63911
+ "text": "boolean"
63912
+ },
63913
+ "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.",
63914
+ "fieldName": "open",
63915
+ "inheritedFrom": {
63916
+ "name": "MixinControllerOpen",
63917
+ "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
63918
+ }
63919
+ },
63920
+ {
63921
+ "name": "default-open",
63922
+ "type": {
63923
+ "text": "boolean"
63924
+ },
63925
+ "default": "false",
63926
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
63927
+ "fieldName": "defaultOpen",
63928
+ "inheritedFrom": {
63929
+ "name": "MixinControllerOpen",
63930
+ "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
63931
+ }
63932
+ },
63933
+ {
63934
+ "name": "idle-delay",
63935
+ "type": {
63936
+ "text": "number"
63937
+ },
63938
+ "default": "0",
63939
+ "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.",
63940
+ "fieldName": "idleDelay",
63941
+ "inheritedFrom": {
63942
+ "name": "HelixHeadlessLightbox",
63943
+ "module": "src/lightbox/root/lightbox-root.ts"
63944
+ }
63945
+ },
63946
+ {
63947
+ "name": "label",
63948
+ "type": {
63949
+ "text": "string"
63950
+ },
63951
+ "default": "''",
63952
+ "description": "Accessible name for the viewer.",
63953
+ "fieldName": "label",
63954
+ "inheritedFrom": {
63955
+ "name": "HelixHeadlessLightbox",
63956
+ "module": "src/lightbox/root/lightbox-root.ts"
63957
+ }
63958
+ },
63959
+ {
63960
+ "name": "loop",
63961
+ "type": {
63962
+ "text": "boolean"
63963
+ },
63964
+ "default": "false",
63965
+ "description": "Whether walking past the end comes back to the beginning.",
63966
+ "fieldName": "loop",
63967
+ "inheritedFrom": {
63968
+ "name": "HelixHeadlessLightbox",
63969
+ "module": "src/lightbox/root/lightbox-root.ts"
63970
+ }
63971
+ },
63972
+ {
63973
+ "name": "status-label",
63974
+ "type": {
63975
+ "text": "string"
63976
+ },
63977
+ "default": "'{index} of {count}'",
63978
+ "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.",
63979
+ "fieldName": "statusLabel",
63980
+ "inheritedFrom": {
63981
+ "name": "HelixHeadlessLightbox",
63982
+ "module": "src/lightbox/root/lightbox-root.ts"
63983
+ }
63984
+ }
63985
+ ],
63986
+ "slots": [
63987
+ {
63988
+ "description": "The items, which are `<helix-headless-lightbox-item>` elements.",
63989
+ "name": "",
63990
+ "inheritedFrom": {
63991
+ "name": "HelixHeadlessLightbox",
63992
+ "module": "src/lightbox/root/lightbox-root.ts"
63993
+ }
63994
+ },
63995
+ {
63996
+ "description": "Chrome below the item, such as a counter or a thumbnail strip.",
63997
+ "name": "footer",
63998
+ "inheritedFrom": {
63999
+ "name": "HelixHeadlessLightbox",
64000
+ "module": "src/lightbox/root/lightbox-root.ts"
64001
+ }
64002
+ },
64003
+ {
64004
+ "description": "Chrome above the item, such as a title and a close button.",
64005
+ "name": "header",
64006
+ "inheritedFrom": {
64007
+ "name": "HelixHeadlessLightbox",
64008
+ "module": "src/lightbox/root/lightbox-root.ts"
64009
+ }
64010
+ }
64011
+ ],
64012
+ "cssParts": [
64013
+ {
64014
+ "description": "The native dialog element.",
64015
+ "name": "dialog",
64016
+ "inheritedFrom": {
64017
+ "name": "HelixHeadlessLightbox",
64018
+ "module": "src/lightbox/root/lightbox-root.ts"
64019
+ }
64020
+ },
64021
+ {
64022
+ "description": "The region that says which item is shown.",
64023
+ "name": "live",
64024
+ "inheritedFrom": {
64025
+ "name": "HelixHeadlessLightbox",
64026
+ "module": "src/lightbox/root/lightbox-root.ts"
64027
+ }
64028
+ },
64029
+ {
64030
+ "description": "The box the current item is shown in.",
64031
+ "name": "viewport",
64032
+ "inheritedFrom": {
64033
+ "name": "HelixHeadlessLightbox",
64034
+ "module": "src/lightbox/root/lightbox-root.ts"
64035
+ }
64036
+ }
64037
+ ],
64038
+ "cssStates": [
64039
+ {
64040
+ "description": "While the viewer fills the screen.",
64041
+ "name": "fullscreen",
64042
+ "inheritedFrom": {
64043
+ "name": "HelixHeadlessLightbox",
64044
+ "module": "src/lightbox/root/lightbox-root.ts"
64045
+ }
64046
+ },
64047
+ {
64048
+ "description": "While the reader has been still long enough to hide the chrome.",
64049
+ "name": "idle",
64050
+ "inheritedFrom": {
64051
+ "name": "HelixHeadlessLightbox",
64052
+ "module": "src/lightbox/root/lightbox-root.ts"
64053
+ }
64054
+ },
64055
+ {
64056
+ "description": "While the viewer is open.",
64057
+ "name": "open",
64058
+ "inheritedFrom": {
64059
+ "name": "HelixHeadlessLightbox",
64060
+ "module": "src/lightbox/root/lightbox-root.ts"
64061
+ }
64062
+ },
64063
+ {
64064
+ "description": "Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.",
64065
+ "name": "settled",
64066
+ "inheritedFrom": {
64067
+ "name": "HelixElement",
64068
+ "module": "src/helix-element/helix-element.ts"
64069
+ }
64070
+ }
64071
+ ],
64072
+ "modulePath": "src/lightbox/root/lightbox-root.ts",
64073
+ "definitionPath": "src/lightbox/root/lightbox-root.ts"
64074
+ }
64075
+ ],
64076
+ "exports": [
64077
+ {
64078
+ "kind": "js",
64079
+ "name": "HelixLightbox",
64080
+ "declaration": {
64081
+ "name": "HelixLightbox",
64082
+ "module": "src/lightbox/root/lightbox-root.ts"
64083
+ }
64084
+ },
64085
+ {
64086
+ "kind": "custom-element-definition",
64087
+ "name": "helix-lightbox",
64088
+ "declaration": {
64089
+ "name": "HelixLightbox",
64090
+ "module": "src/lightbox/root/lightbox-root.ts"
64091
+ }
64092
+ }
64093
+ ]
64094
+ },
62251
64095
  {
62252
64096
  "kind": "javascript-module",
62253
64097
  "path": "src/line-chart/index.ts",