@fusion.dev/helix 0.100.0 → 0.102.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/types/jsx.d.ts CHANGED
@@ -82,11 +82,16 @@ import type {
82
82
  HelixInput,
83
83
  HelixKbd,
84
84
  HelixLegend,
85
+ HelixLightbox,
86
+ HelixLightboxItem,
85
87
  HelixLineChart,
86
88
  HelixList,
87
89
  HelixListItem,
88
90
  HelixListbox,
89
91
  HelixLoader,
92
+ HelixMap,
93
+ HelixMapPanEvent,
94
+ HelixMapZoomEvent,
90
95
  HelixMegamenu,
91
96
  HelixMenu,
92
97
  HelixMenuItem,
@@ -10536,6 +10541,222 @@ shadow root reads a table in that root rather than one in the document.
10536
10541
  textContent?: (string | number) | undefined;
10537
10542
  };
10538
10543
 
10544
+ export type HelixLightboxItemProps = {
10545
+ /** Whether this is the one being shown.
10546
+
10547
+ Written by the root, which is the only thing that sees the set. */
10548
+ current?: (HelixLightboxItem["current"]) | undefined;
10549
+ /** What this item is called, for the reading that says where the reader is. */
10550
+ label?: (HelixLightboxItem["label"]) | undefined;
10551
+ /** What names this item, and what `active` on the root is compared against. */
10552
+ value?: (HelixLightboxItem["value"]) | undefined;
10553
+ };
10554
+
10555
+ export type HelixLightboxItemSolidJsProps = {
10556
+ /** Whether this is the one being shown.
10557
+
10558
+ Written by the root, which is the only thing that sees the set. */
10559
+ "prop:current"?: (HelixLightboxItem["current"]) | undefined;
10560
+ /** What this item is called, for the reading that says where the reader is. */
10561
+ "prop:label"?: (HelixLightboxItem["label"]) | undefined;
10562
+ /** What names this item, and what `active` on the root is compared against. */
10563
+ "prop:value"?: (HelixLightboxItem["value"]) | undefined;
10564
+
10565
+ /** Set the innerHTML of the element */
10566
+ innerHTML?: (string) | undefined;
10567
+ /** Set the textContent of the element */
10568
+ textContent?: (string | number) | undefined;
10569
+ };
10570
+
10571
+ /** `HelixLightbox` component event */
10572
+ export type HelixLightboxElementEvent<E = Event> = TypedEvent<HelixLightbox, E>;
10573
+ /** `helix-activate` event type */
10574
+ export type HelixLightboxHelixActivateElementEvent =
10575
+ HelixLightboxElementEvent<HelixActivateEvent>;
10576
+ /** `helix-before-activate` event type */
10577
+ export type HelixLightboxHelixBeforeActivateElementEvent =
10578
+ HelixLightboxElementEvent<HelixBeforeActivateEvent>;
10579
+ /** `helix-before-close` event type */
10580
+ export type HelixLightboxHelixBeforeCloseElementEvent =
10581
+ HelixLightboxElementEvent<HelixBeforeCloseEvent>;
10582
+ /** `helix-before-open` event type */
10583
+ export type HelixLightboxHelixBeforeOpenElementEvent =
10584
+ HelixLightboxElementEvent<HelixBeforeOpenEvent>;
10585
+
10586
+ export type HelixLightboxProps = {
10587
+ /** Which item is current, by its `value`.
10588
+
10589
+ Not `option.active`, which is the option the keyboard is on: that is a
10590
+ different question from which one is chosen.
10591
+
10592
+ Writing always applies, so `<helix-tabs active="one">` starts on that
10593
+ tab, and `default-active` is how markup says where to start without
10594
+ naming the current one. */
10595
+ active?: (HelixLightbox["active"]) | undefined;
10596
+ /** Which item the markup declared current.
10597
+
10598
+ Ignored once `active` is written. */
10599
+ "default-active"?: (HelixLightbox["defaultActive"]) | undefined;
10600
+ /** Which item the markup declared current.
10601
+
10602
+ Ignored once `active` is written. */
10603
+ defaultActive?: (HelixLightbox["defaultActive"]) | undefined;
10604
+ /** Whether the element is open.
10605
+
10606
+ One property, not two, so `dialog.open` answers the question anyone
10607
+ asking it meant. Writing always applies; `<helix-dialog open>` is the
10608
+ same statement in markup.
10609
+
10610
+ **Not reflected, and that is required rather than tidy.** Reflection
10611
+ writes the resolved state back as an attribute, so an element that opened
10612
+ itself would put `open` on its own host: cloned, serialized for
10613
+ hydration, or diffed by a framework, it comes back holding whatever the
10614
+ last reader did rather than what the author wrote. `:state(open)` carries
10615
+ the resolved state for stylesheets, which is what the mirror is for. */
10616
+ open?: (HelixLightbox["open"]) | undefined;
10617
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10618
+ "default-open"?: (HelixLightbox["defaultOpen"]) | undefined;
10619
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10620
+ defaultOpen?: (HelixLightbox["defaultOpen"]) | undefined;
10621
+ /** How long the reader may be still before the chrome hides, in milliseconds.
10622
+
10623
+ Zero keeps it up, which is what a viewer with a caption worth reading
10624
+ wants. The wait is only ever about idling: whether anything else should
10625
+ keep the chrome up is the consumer's to decide with this. */
10626
+ "idle-delay"?: (HelixLightbox["idleDelay"] | `${number}`) | undefined;
10627
+ /** How long the reader may be still before the chrome hides, in milliseconds.
10628
+
10629
+ Zero keeps it up, which is what a viewer with a caption worth reading
10630
+ wants. The wait is only ever about idling: whether anything else should
10631
+ keep the chrome up is the consumer's to decide with this. */
10632
+ idleDelay?: (HelixLightbox["idleDelay"]) | undefined;
10633
+ /** Accessible name for the viewer. */
10634
+ label?: (HelixLightbox["label"]) | undefined;
10635
+ /** Whether walking past the end comes back to the beginning. */
10636
+ loop?: (HelixLightbox["loop"]) | undefined;
10637
+ /** The reading that says where in the set the reader is, with `{index}` and
10638
+ `{count}` filled in.
10639
+
10640
+ Announced rather than only drawn, because the picture changing under a
10641
+ reader who cannot see it is otherwise silent. A consumer who has their own
10642
+ counter in the chrome can empty this and say it themselves. */
10643
+ "status-label"?: (HelixLightbox["statusLabel"]) | undefined;
10644
+ /** The reading that says where in the set the reader is, with `{index}` and
10645
+ `{count}` filled in.
10646
+
10647
+ Announced rather than only drawn, because the picture changing under a
10648
+ reader who cannot see it is otherwise silent. A consumer who has their own
10649
+ counter in the chrome can empty this and say it themselves. */
10650
+ statusLabel?: (HelixLightbox["statusLabel"]) | undefined;
10651
+
10652
+ /** Fired once the shown item has moved, so the element already holds it. */
10653
+ "onhelix-activate"?: ((e: HelixLightboxHelixActivateElementEvent) => void) | undefined;
10654
+ /** Relayed, because the platform's own does not escape. */
10655
+ onclose?: ((e: HelixLightboxElementEvent) => void) | undefined;
10656
+ /** Fired before the shown item changes, and cancelable. The only way to refuse one. */
10657
+ "onhelix-before-activate"?: ((
10658
+ e: HelixLightboxHelixBeforeActivateElementEvent,
10659
+ ) => void) | undefined;
10660
+ /** Fired before it closes, and cancelable. */
10661
+ "onhelix-before-close"?: ((
10662
+ e: HelixLightboxHelixBeforeCloseElementEvent,
10663
+ ) => void) | undefined;
10664
+ /** Fired before it opens, and cancelable. */
10665
+ "onhelix-before-open"?: ((e: HelixLightboxHelixBeforeOpenElementEvent) => void) | undefined;
10666
+ /** Says the state moved, carrying `newState` and `oldState`. */
10667
+ ontoggle?: ((e: HelixLightboxElementEvent) => void) | undefined;
10668
+ };
10669
+
10670
+ export type HelixLightboxSolidJsProps = {
10671
+ /** Which item is current, by its `value`.
10672
+
10673
+ Not `option.active`, which is the option the keyboard is on: that is a
10674
+ different question from which one is chosen.
10675
+
10676
+ Writing always applies, so `<helix-tabs active="one">` starts on that
10677
+ tab, and `default-active` is how markup says where to start without
10678
+ naming the current one. */
10679
+ "prop:active"?: (HelixLightbox["active"]) | undefined;
10680
+ /** Which item the markup declared current.
10681
+
10682
+ Ignored once `active` is written. */
10683
+ "attr:default-active"?: (HelixLightbox["defaultActive"]) | undefined;
10684
+ /** Which item the markup declared current.
10685
+
10686
+ Ignored once `active` is written. */
10687
+ "prop:defaultActive"?: (HelixLightbox["defaultActive"]) | undefined;
10688
+ /** Whether the element is open.
10689
+
10690
+ One property, not two, so `dialog.open` answers the question anyone
10691
+ asking it meant. Writing always applies; `<helix-dialog open>` is the
10692
+ same statement in markup.
10693
+
10694
+ **Not reflected, and that is required rather than tidy.** Reflection
10695
+ writes the resolved state back as an attribute, so an element that opened
10696
+ itself would put `open` on its own host: cloned, serialized for
10697
+ hydration, or diffed by a framework, it comes back holding whatever the
10698
+ last reader did rather than what the author wrote. `:state(open)` carries
10699
+ the resolved state for stylesheets, which is what the mirror is for. */
10700
+ "prop:open"?: (HelixLightbox["open"]) | undefined;
10701
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10702
+ "bool:default-open"?: (HelixLightbox["defaultOpen"]) | undefined;
10703
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10704
+ "prop:defaultOpen"?: (HelixLightbox["defaultOpen"]) | undefined;
10705
+ /** How long the reader may be still before the chrome hides, in milliseconds.
10706
+
10707
+ Zero keeps it up, which is what a viewer with a caption worth reading
10708
+ wants. The wait is only ever about idling: whether anything else should
10709
+ keep the chrome up is the consumer's to decide with this. */
10710
+ "attr:idle-delay"?: (HelixLightbox["idleDelay"] | `${number}`) | undefined;
10711
+ /** How long the reader may be still before the chrome hides, in milliseconds.
10712
+
10713
+ Zero keeps it up, which is what a viewer with a caption worth reading
10714
+ wants. The wait is only ever about idling: whether anything else should
10715
+ keep the chrome up is the consumer's to decide with this. */
10716
+ "prop:idleDelay"?: (HelixLightbox["idleDelay"]) | undefined;
10717
+ /** Accessible name for the viewer. */
10718
+ "prop:label"?: (HelixLightbox["label"]) | undefined;
10719
+ /** Whether walking past the end comes back to the beginning. */
10720
+ "prop:loop"?: (HelixLightbox["loop"]) | undefined;
10721
+ /** The reading that says where in the set the reader is, with `{index}` and
10722
+ `{count}` filled in.
10723
+
10724
+ Announced rather than only drawn, because the picture changing under a
10725
+ reader who cannot see it is otherwise silent. A consumer who has their own
10726
+ counter in the chrome can empty this and say it themselves. */
10727
+ "attr:status-label"?: (HelixLightbox["statusLabel"]) | undefined;
10728
+ /** The reading that says where in the set the reader is, with `{index}` and
10729
+ `{count}` filled in.
10730
+
10731
+ Announced rather than only drawn, because the picture changing under a
10732
+ reader who cannot see it is otherwise silent. A consumer who has their own
10733
+ counter in the chrome can empty this and say it themselves. */
10734
+ "prop:statusLabel"?: (HelixLightbox["statusLabel"]) | undefined;
10735
+ /** Fired once the shown item has moved, so the element already holds it. */
10736
+ "on:helix-activate"?: ((e: HelixLightboxHelixActivateElementEvent) => void) | undefined;
10737
+ /** Relayed, because the platform's own does not escape. */
10738
+ "on:close"?: ((e: HelixLightboxElementEvent) => void) | undefined;
10739
+ /** Fired before the shown item changes, and cancelable. The only way to refuse one. */
10740
+ "on:helix-before-activate"?: ((
10741
+ e: HelixLightboxHelixBeforeActivateElementEvent,
10742
+ ) => void) | undefined;
10743
+ /** Fired before it closes, and cancelable. */
10744
+ "on:helix-before-close"?: ((
10745
+ e: HelixLightboxHelixBeforeCloseElementEvent,
10746
+ ) => void) | undefined;
10747
+ /** Fired before it opens, and cancelable. */
10748
+ "on:helix-before-open"?: ((
10749
+ e: HelixLightboxHelixBeforeOpenElementEvent,
10750
+ ) => void) | undefined;
10751
+ /** Says the state moved, carrying `newState` and `oldState`. */
10752
+ "on:toggle"?: ((e: HelixLightboxElementEvent) => void) | undefined;
10753
+
10754
+ /** Set the innerHTML of the element */
10755
+ innerHTML?: (string) | undefined;
10756
+ /** Set the textContent of the element */
10757
+ textContent?: (string | number) | undefined;
10758
+ };
10759
+
10539
10760
  export type HelixLineChartProps = {
10540
10761
  /** How much ink the lines claim.
10541
10762
 
@@ -11279,6 +11500,131 @@ around a logo reads as chrome bolted to the brand. */
11279
11500
  textContent?: (string | number) | undefined;
11280
11501
  };
11281
11502
 
11503
+ /** `HelixMap` component event */
11504
+ export type HelixMapElementEvent<E = Event> = TypedEvent<HelixMap, E>;
11505
+ /** `helix-map-pan` event type */
11506
+ export type HelixMapHelixMapPanElementEvent =
11507
+ HelixMapElementEvent<HelixMapPanEvent>;
11508
+ /** `helix-map-zoom` event type */
11509
+ export type HelixMapHelixMapZoomElementEvent =
11510
+ HelixMapElementEvent<HelixMapZoomEvent>;
11511
+
11512
+ export type HelixMapProps = {
11513
+ /** What the control that fills the screen is called. */
11514
+ "fullscreen-label"?: (HelixMap["fullscreenLabel"]) | undefined;
11515
+ /** What the control that fills the screen is called. */
11516
+ fullscreenLabel?: (HelixMap["fullscreenLabel"]) | undefined;
11517
+ /** How long the reader may be still before the chrome hides, in milliseconds.
11518
+
11519
+ Zero keeps it up, which is the default: a map's controls are how a keyboard
11520
+ reader operates it, and chrome that hides itself by default would be this
11521
+ component undoing its own argument. Set it for a display map nobody drives. */
11522
+ "idle-delay"?: (HelixMap["idleDelay"] | `${number}`) | undefined;
11523
+ /** How long the reader may be still before the chrome hides, in milliseconds.
11524
+
11525
+ Zero keeps it up, which is the default: a map's controls are how a keyboard
11526
+ reader operates it, and chrome that hides itself by default would be this
11527
+ component undoing its own argument. Set it for a display map nobody drives. */
11528
+ idleDelay?: (HelixMap["idleDelay"]) | undefined;
11529
+ /** Accessible name for the map, which is the one thing a consumer must write.
11530
+
11531
+ There is no sensible default. "Map" names the widget rather than the place,
11532
+ and a reader meeting three of them on a page learns nothing from hearing the
11533
+ same word three times. */
11534
+ label?: (HelixMap["label"]) | undefined;
11535
+ /** What the controls are called, for a page not in English. */
11536
+ "pan-label"?: (HelixMap["panLabel"]) | undefined;
11537
+ /** What the controls are called, for a page not in English. */
11538
+ panLabel?: (HelixMap["panLabel"]) | undefined;
11539
+ /** How far one press moves the map, as a fraction of what is on screen.
11540
+
11541
+ A fraction rather than a distance, because this frame does not know the
11542
+ scale of what is inside it: a quarter of the viewport is the same gesture at
11543
+ street level and at country level, and a consumer who wants metres can
11544
+ multiply by their own. */
11545
+ "pan-step"?: (HelixMap["panStep"] | `${number}`) | undefined;
11546
+ /** How far one press moves the map, as a fraction of what is on screen.
11547
+
11548
+ A fraction rather than a distance, because this frame does not know the
11549
+ scale of what is inside it: a quarter of the viewport is the same gesture at
11550
+ street level and at country level, and a consumer who wants metres can
11551
+ multiply by their own. */
11552
+ panStep?: (HelixMap["panStep"]) | undefined;
11553
+ /** What the zoom controls are called. */
11554
+ "zoom-in-label"?: (HelixMap["zoomInLabel"]) | undefined;
11555
+ /** What the zoom controls are called. */
11556
+ zoomInLabel?: (HelixMap["zoomInLabel"]) | undefined;
11557
+ /** What the zoom control that goes the other way is called. */
11558
+ "zoom-out-label"?: (HelixMap["zoomOutLabel"]) | undefined;
11559
+ /** What the zoom control that goes the other way is called. */
11560
+ zoomOutLabel?: (HelixMap["zoomOutLabel"]) | undefined;
11561
+
11562
+ /** The reader asked the map to move. Answer it against your own map. */
11563
+ "onhelix-map-pan"?: ((e: HelixMapHelixMapPanElementEvent) => void) | undefined;
11564
+ /** The reader asked the map to zoom, by a direction rather than to a level. */
11565
+ "onhelix-map-zoom"?: ((e: HelixMapHelixMapZoomElementEvent) => void) | undefined;
11566
+ };
11567
+
11568
+ export type HelixMapSolidJsProps = {
11569
+ /** What the control that fills the screen is called. */
11570
+ "attr:fullscreen-label"?: (HelixMap["fullscreenLabel"]) | undefined;
11571
+ /** What the control that fills the screen is called. */
11572
+ "prop:fullscreenLabel"?: (HelixMap["fullscreenLabel"]) | undefined;
11573
+ /** How long the reader may be still before the chrome hides, in milliseconds.
11574
+
11575
+ Zero keeps it up, which is the default: a map's controls are how a keyboard
11576
+ reader operates it, and chrome that hides itself by default would be this
11577
+ component undoing its own argument. Set it for a display map nobody drives. */
11578
+ "attr:idle-delay"?: (HelixMap["idleDelay"] | `${number}`) | undefined;
11579
+ /** How long the reader may be still before the chrome hides, in milliseconds.
11580
+
11581
+ Zero keeps it up, which is the default: a map's controls are how a keyboard
11582
+ reader operates it, and chrome that hides itself by default would be this
11583
+ component undoing its own argument. Set it for a display map nobody drives. */
11584
+ "prop:idleDelay"?: (HelixMap["idleDelay"]) | undefined;
11585
+ /** Accessible name for the map, which is the one thing a consumer must write.
11586
+
11587
+ There is no sensible default. "Map" names the widget rather than the place,
11588
+ and a reader meeting three of them on a page learns nothing from hearing the
11589
+ same word three times. */
11590
+ "prop:label"?: (HelixMap["label"]) | undefined;
11591
+ /** What the controls are called, for a page not in English. */
11592
+ "attr:pan-label"?: (HelixMap["panLabel"]) | undefined;
11593
+ /** What the controls are called, for a page not in English. */
11594
+ "prop:panLabel"?: (HelixMap["panLabel"]) | undefined;
11595
+ /** How far one press moves the map, as a fraction of what is on screen.
11596
+
11597
+ A fraction rather than a distance, because this frame does not know the
11598
+ scale of what is inside it: a quarter of the viewport is the same gesture at
11599
+ street level and at country level, and a consumer who wants metres can
11600
+ multiply by their own. */
11601
+ "attr:pan-step"?: (HelixMap["panStep"] | `${number}`) | undefined;
11602
+ /** How far one press moves the map, as a fraction of what is on screen.
11603
+
11604
+ A fraction rather than a distance, because this frame does not know the
11605
+ scale of what is inside it: a quarter of the viewport is the same gesture at
11606
+ street level and at country level, and a consumer who wants metres can
11607
+ multiply by their own. */
11608
+ "prop:panStep"?: (HelixMap["panStep"]) | undefined;
11609
+ /** What the zoom controls are called. */
11610
+ "attr:zoom-in-label"?: (HelixMap["zoomInLabel"]) | undefined;
11611
+ /** What the zoom controls are called. */
11612
+ "prop:zoomInLabel"?: (HelixMap["zoomInLabel"]) | undefined;
11613
+ /** What the zoom control that goes the other way is called. */
11614
+ "attr:zoom-out-label"?: (HelixMap["zoomOutLabel"]) | undefined;
11615
+ /** What the zoom control that goes the other way is called. */
11616
+ "prop:zoomOutLabel"?: (HelixMap["zoomOutLabel"]) | undefined;
11617
+ /** The reader asked the map to move. Answer it against your own map. */
11618
+ "on:helix-map-pan"?: ((e: HelixMapHelixMapPanElementEvent) => void) | undefined;
11619
+ /** The reader asked the map to zoom, by a direction rather than to a level. */
11620
+ "on:helix-map-zoom"?: ((e: HelixMapHelixMapZoomElementEvent) => void) | undefined;
11621
+
11622
+ /** Set the innerHTML of the element */
11623
+ innerHTML?: (string) | undefined;
11624
+ /** Set the textContent of the element */
11625
+ textContent?: (string | number) | undefined;
11626
+ };
11627
+
11282
11628
  /** `HelixMegamenu` component event */
11283
11629
  export type HelixMegamenuElementEvent<E = Event> = TypedEvent<HelixMegamenu, E>;
11284
11630
  /** `helix-before-close` event type */
@@ -30391,6 +30737,225 @@ export type CustomElements = {
30391
30737
  HelixLegendProps & BaseProps<HelixLegend> & BaseEvents<HelixLegend>
30392
30738
  >;
30393
30739
 
30740
+ /**
30741
+ * Presentation only: the box centers what it was given and holds it inside the
30742
+ * viewport rather than sizing it, because what is in here is the consumer's and
30743
+ * may be a picture, a frame of video or a chart. Which item is shown, and the
30744
+ * arithmetic that decides, is the base class.
30745
+ *
30746
+ * ## Attributes & Properties
30747
+ *
30748
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
30749
+ *
30750
+ * - `current`: Whether this is the one being shown.
30751
+ *
30752
+ * Written by the root, which is the only thing that sees the set.
30753
+ * - `label`: What this item is called, for the reading that says where the reader is.
30754
+ * - `value`: What names this item, and what `active` on the root is compared against.
30755
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
30756
+ *
30757
+ * **Named `whenSettled` because `settled` is taken four times over**, by
30758
+ * Image, Splitter and both color controls, none of them about transitions. A
30759
+ * base class takes the name every subclass then cannot use.
30760
+ *
30761
+ * **The state it reports cannot be watched, which is why this exists.** A
30762
+ * custom state is deliberately not in the DOM, so there is no
30763
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
30764
+ * instead.
30765
+ *
30766
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
30767
+ * the suppression is still active in. That is the distinction `readyToMove`
30768
+ * in `@fusion.dev/helix-testing` is written around.
30769
+ *
30770
+ * It never resolves where `requestAnimationFrame` never fires, which is a
30771
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
30772
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
30773
+ * browser harness's awaits it alone: a browser always runs the frame, and a
30774
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
30775
+ *
30776
+ * ## Slots
30777
+ *
30778
+ * Areas where markup can be added to the component.
30779
+ *
30780
+ * - `(default)`: What is being shown.
30781
+ * - `description`: A line under it saying what it is.
30782
+ *
30783
+ * ## CSS Custom Properties
30784
+ *
30785
+ * CSS variables available for styling the component.
30786
+ *
30787
+ * - `--lightbox-item-description-color`: Color of the line under the content. (default: `undefined`)
30788
+ * - `--lightbox-item-gap`: Space between the content and the line under it. (default: `undefined`)
30789
+ *
30790
+ * ## CSS Parts
30791
+ *
30792
+ * Custom selectors for styling elements within the component.
30793
+ *
30794
+ * - `item`: The box the content is shown in.
30795
+ *
30796
+ * ## CSS States
30797
+ *
30798
+ * These can be used to apply styling when a component is in a given state.
30799
+ *
30800
+ * - `current`: While this is the item the lightbox is showing.
30801
+ * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
30802
+ */
30803
+ "helix-lightbox-item": Partial<
30804
+ HelixLightboxItemProps & BaseProps<HelixLightboxItem> & BaseEvents<HelixLightboxItem>
30805
+ >;
30806
+
30807
+ /**
30808
+ * **A takeover rather than a panel, which is the whole difference from
30809
+ * `Dialog`.** A dialog is a thing over the page and stops short of the edges to
30810
+ * say so; a lightbox is the page for as long as it is open. The scrim is heavier
30811
+ * for the same reason: what is behind it is not meant to be read.
30812
+ *
30813
+ * **A dark region that says so once**, with `color-scheme: dark` on the host,
30814
+ * which is `Video`'s answer to the same problem: the chrome is the consumer's
30815
+ * own components and they resolve their own tokens, so without a scheme on the
30816
+ * region they draw page-colored ink on a black room and disappear into it.
30817
+ *
30818
+ * The chrome fades rather than leaves while the reader is still, because a bar
30819
+ * that is removed from the layout takes the picture's size with it and the
30820
+ * reader watches it jump every time they stop moving.
30821
+ *
30822
+ * ## Attributes & Properties
30823
+ *
30824
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
30825
+ *
30826
+ * - `active`: Which item is current, by its `value`.
30827
+ *
30828
+ * Not `option.active`, which is the option the keyboard is on: that is a
30829
+ * different question from which one is chosen.
30830
+ *
30831
+ * Writing always applies, so `<helix-tabs active="one">` starts on that
30832
+ * tab, and `default-active` is how markup says where to start without
30833
+ * naming the current one.
30834
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
30835
+ *
30836
+ * Ignored once `active` is written.
30837
+ * - `open`: Whether the element is open.
30838
+ *
30839
+ * One property, not two, so `dialog.open` answers the question anyone
30840
+ * asking it meant. Writing always applies; `<helix-dialog open>` is the
30841
+ * same statement in markup.
30842
+ *
30843
+ * **Not reflected, and that is required rather than tidy.** Reflection
30844
+ * writes the resolved state back as an attribute, so an element that opened
30845
+ * itself would put `open` on its own host: cloned, serialized for
30846
+ * hydration, or diffed by a framework, it comes back holding whatever the
30847
+ * last reader did rather than what the author wrote. `:state(open)` carries
30848
+ * the resolved state for stylesheets, which is what the mirror is for.
30849
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
30850
+ * - `idle-delay`/`idleDelay`: How long the reader may be still before the chrome hides, in milliseconds.
30851
+ *
30852
+ * Zero keeps it up, which is what a viewer with a caption worth reading
30853
+ * wants. The wait is only ever about idling: whether anything else should
30854
+ * keep the chrome up is the consumer's to decide with this.
30855
+ * - `label`: Accessible name for the viewer.
30856
+ * - `loop`: Whether walking past the end comes back to the beginning.
30857
+ * - `status-label`/`statusLabel`: The reading that says where in the set the reader is, with `{index}` and
30858
+ * `{count}` filled in.
30859
+ *
30860
+ * Announced rather than only drawn, because the picture changing under a
30861
+ * reader who cannot see it is otherwise silent. A consumer who has their own
30862
+ * counter in the chrome can empty this and say it themselves.
30863
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
30864
+ *
30865
+ * **Named `whenSettled` because `settled` is taken four times over**, by
30866
+ * Image, Splitter and both color controls, none of them about transitions. A
30867
+ * base class takes the name every subclass then cannot use.
30868
+ *
30869
+ * **The state it reports cannot be watched, which is why this exists.** A
30870
+ * custom state is deliberately not in the DOM, so there is no
30871
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
30872
+ * instead.
30873
+ *
30874
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
30875
+ * the suppression is still active in. That is the distinction `readyToMove`
30876
+ * in `@fusion.dev/helix-testing` is written around.
30877
+ *
30878
+ * It never resolves where `requestAnimationFrame` never fires, which is a
30879
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
30880
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
30881
+ * browser harness's awaits it alone: a browser always runs the frame, and a
30882
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
30883
+ *
30884
+ * ## Events
30885
+ *
30886
+ * Events that will be emitted by the component.
30887
+ *
30888
+ * - `helix-activate`: Fired once the shown item has moved, so the element already holds it.
30889
+ * - `close`: Relayed, because the platform's own does not escape.
30890
+ * - `helix-before-activate`: Fired before the shown item changes, and cancelable. The only way to refuse one.
30891
+ * - `helix-before-close`: Fired before it closes, and cancelable.
30892
+ * - `helix-before-open`: Fired before it opens, and cancelable.
30893
+ * - `toggle`: Says the state moved, carrying `newState` and `oldState`.
30894
+ *
30895
+ * ## Slots
30896
+ *
30897
+ * Areas where markup can be added to the component.
30898
+ *
30899
+ * - `(default)`: The items, which are `<helix-headless-lightbox-item>` elements.
30900
+ * - `footer`: Chrome below the item, such as a counter or a thumbnail strip.
30901
+ * - `header`: Chrome above the item, such as a title and a close button.
30902
+ *
30903
+ * ## Methods
30904
+ *
30905
+ * Methods that can be called to access component functionality.
30906
+ *
30907
+ * - `requestActive(next: string) => boolean`: Requests a new current item, and reports whether the request stood.
30908
+ *
30909
+ * Announces before it acts, so `preventDefault()` on the `helix-before-activate` is
30910
+ * a refusal and nothing moves. Unlike a native control, nothing has moved
30911
+ * by the time this runs, so refusing is simply not writing: there is
30912
+ * nothing to put back. Nobody refusing means the set updates itself,
30913
+ * whether or not a consumer declared `active`, a declared property being a
30914
+ * seed and a correction.
30915
+ * - `requestOpen(next: boolean) => boolean`: Requests an open-state change, and reports whether it was applied.
30916
+ *
30917
+ * Announces before it acts, so `preventDefault()` on the `helix-before-open` or
30918
+ * `helix-before-close` is a refusal and nothing moves. Nobody refusing means the
30919
+ * element opens or closes itself, whether or not a consumer declared
30920
+ * `open`: a declared property is a seed and a correction, and a consumer
30921
+ * who wants the decision for themselves refuses it and assigns their own.
30922
+ * - `toggleOpen() => boolean`: Requests the opposite of the current state.
30923
+ * - `show() => void`: Opens the viewer, which makes the rest of the page inert.
30924
+ * - `close() => void`: Asks to close, which a consumer may refuse.
30925
+ * - `next() => void`: Shows the next item, or the first where it is past the end and looping.
30926
+ * - `previous() => void`: Shows the previous item, or the last where it is past the start and looping.
30927
+ * - `toggleFullscreen() => void`: Fills the screen with the viewer, or comes back.
30928
+ *
30929
+ * ## CSS Custom Properties
30930
+ *
30931
+ * CSS variables available for styling the component.
30932
+ *
30933
+ * - `--lightbox-foreground`: Color of the chrome drawn over the content. (default: `undefined`)
30934
+ * - `--lightbox-gap`: Space between the chrome and the content. (default: `undefined`)
30935
+ * - `--lightbox-padding`: Inset from the edges of the screen. (default: `undefined`)
30936
+ * - `--lightbox-scrim`: 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. (default: `undefined`)
30937
+ *
30938
+ * ## CSS Parts
30939
+ *
30940
+ * Custom selectors for styling elements within the component.
30941
+ *
30942
+ * - `dialog`: The native dialog element.
30943
+ * - `live`: The region that says which item is shown.
30944
+ * - `viewport`: The box the current item is shown in.
30945
+ *
30946
+ * ## CSS States
30947
+ *
30948
+ * These can be used to apply styling when a component is in a given state.
30949
+ *
30950
+ * - `fullscreen`: While the viewer fills the screen.
30951
+ * - `idle`: While the reader has been still long enough to hide the chrome.
30952
+ * - `open`: While the viewer is open.
30953
+ * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
30954
+ */
30955
+ "helix-lightbox": Partial<
30956
+ HelixLightboxProps & BaseProps<HelixLightbox> & BaseEvents<HelixLightbox>
30957
+ >;
30958
+
30394
30959
  /**
30395
30960
  * The lines take the series palette in order, so a chart of one is series one
30396
30961
  * and a chart of four is the first four, and a legend beside it maps the same
@@ -31193,6 +31758,118 @@ export type CustomElements = {
31193
31758
  HelixLoaderProps & BaseProps<HelixLoader> & BaseEvents<HelixLoader>
31194
31759
  >;
31195
31760
 
31761
+ /**
31762
+ * Presentation only: a bordered well with the controls over it, at the corner
31763
+ * every map puts them. What the frame is for, and why the controls are buttons
31764
+ * rather than arrow keys, is the base class.
31765
+ *
31766
+ * **The controls do not fade with the chrome.** A reader who has gone still has
31767
+ * not stopped needing the only controls this frame offers, so the idle state
31768
+ * takes the header and footer a consumer slotted and leaves the buttons alone.
31769
+ *
31770
+ * ## Attributes & Properties
31771
+ *
31772
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
31773
+ *
31774
+ * - `fullscreen-label`/`fullscreenLabel`: What the control that fills the screen is called.
31775
+ * - `idle-delay`/`idleDelay`: How long the reader may be still before the chrome hides, in milliseconds.
31776
+ *
31777
+ * Zero keeps it up, which is the default: a map's controls are how a keyboard
31778
+ * reader operates it, and chrome that hides itself by default would be this
31779
+ * component undoing its own argument. Set it for a display map nobody drives.
31780
+ * - `label`: Accessible name for the map, which is the one thing a consumer must write.
31781
+ *
31782
+ * There is no sensible default. "Map" names the widget rather than the place,
31783
+ * and a reader meeting three of them on a page learns nothing from hearing the
31784
+ * same word three times.
31785
+ * - `pan-label`/`panLabel`: What the controls are called, for a page not in English.
31786
+ * - `pan-step`/`panStep`: How far one press moves the map, as a fraction of what is on screen.
31787
+ *
31788
+ * A fraction rather than a distance, because this frame does not know the
31789
+ * scale of what is inside it: a quarter of the viewport is the same gesture at
31790
+ * street level and at country level, and a consumer who wants metres can
31791
+ * multiply by their own.
31792
+ * - `zoom-in-label`/`zoomInLabel`: What the zoom controls are called.
31793
+ * - `zoom-out-label`/`zoomOutLabel`: What the zoom control that goes the other way is called.
31794
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
31795
+ *
31796
+ * **Named `whenSettled` because `settled` is taken four times over**, by
31797
+ * Image, Splitter and both color controls, none of them about transitions. A
31798
+ * base class takes the name every subclass then cannot use.
31799
+ *
31800
+ * **The state it reports cannot be watched, which is why this exists.** A
31801
+ * custom state is deliberately not in the DOM, so there is no
31802
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
31803
+ * instead.
31804
+ *
31805
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
31806
+ * the suppression is still active in. That is the distinction `readyToMove`
31807
+ * in `@fusion.dev/helix-testing` is written around.
31808
+ *
31809
+ * It never resolves where `requestAnimationFrame` never fires, which is a
31810
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
31811
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
31812
+ * browser harness's awaits it alone: a browser always runs the frame, and a
31813
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
31814
+ *
31815
+ * ## Events
31816
+ *
31817
+ * Events that will be emitted by the component.
31818
+ *
31819
+ * - `helix-map-pan`: The reader asked the map to move. Answer it against your own map.
31820
+ * - `helix-map-zoom`: The reader asked the map to zoom, by a direction rather than to a level.
31821
+ *
31822
+ * ## Slots
31823
+ *
31824
+ * Areas where markup can be added to the component.
31825
+ *
31826
+ * - `(default)`: The map, which is the consumer's own.
31827
+ * - `attribution`: Whoever the tiles belong to, which most licenses require you to say.
31828
+ * - `footer`: Chrome below the map, such as a legend or a scale.
31829
+ * - `header`: Chrome above the map, such as a title or a search field.
31830
+ *
31831
+ * ## Methods
31832
+ *
31833
+ * Methods that can be called to access component functionality.
31834
+ *
31835
+ * - `toggleFullscreen() => void`: Fills the screen with the frame, or comes back.
31836
+ * - `pan(to: Way) => void`: Asks for the map to move, which the consumer answers.
31837
+ * - `zoom(by: number) => void`: Asks for the map to zoom, `1` in and `-1` out.
31838
+ *
31839
+ * ## CSS Custom Properties
31840
+ *
31841
+ * CSS variables available for styling the component.
31842
+ *
31843
+ * - `--map-background-color`: The well behind the map, seen while tiles are on their way. (default: `undefined`)
31844
+ * - `--map-block-size`: How tall the frame is. A length, since the map fills it. (default: `undefined`)
31845
+ * - `--map-border-color`: Color of the frame's edge. (default: `undefined`)
31846
+ * - `--map-control-background-color`: The ground under the pan and zoom buttons. (default: `undefined`)
31847
+ *
31848
+ * ## CSS Parts
31849
+ *
31850
+ * Custom selectors for styling elements within the component.
31851
+ *
31852
+ * - `controls`: The group the pan and zoom buttons sit in.
31853
+ * - `fullscreen`: The button that fills the screen.
31854
+ * - `pan-down`: The button that moves the map down.
31855
+ * - `pan-end`: The button that moves the map the way the text ends, which is right on an English page.
31856
+ * - `pan-start`: The button that moves the map the way the text starts, which is left on an English page.
31857
+ * - `pan-up`: The button that moves the map up.
31858
+ * - `region`: The named region the map is slotted into.
31859
+ * - `viewport`: The box the map is drawn in.
31860
+ * - `zoom-in`: The button that zooms in.
31861
+ * - `zoom-out`: The button that zooms out.
31862
+ *
31863
+ * ## CSS States
31864
+ *
31865
+ * These can be used to apply styling when a component is in a given state.
31866
+ *
31867
+ * - `fullscreen`: While the frame fills the screen.
31868
+ * - `idle`: While the reader has been still long enough to hide the chrome.
31869
+ * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
31870
+ */
31871
+ "helix-map": Partial<HelixMapProps & BaseProps<HelixMap> & BaseEvents<HelixMap>>;
31872
+
31196
31873
  /**
31197
31874
  * Presentation only: the trigger, and the panel it opens as a grid of columns.
31198
31875
  * Everything about what opens it and what closes it is the base class.
@@ -50239,6 +50916,231 @@ export type CustomElementsSolidJs = {
50239
50916
  BaseEvents<HelixLegend>
50240
50917
  >;
50241
50918
 
50919
+ /**
50920
+ * Presentation only: the box centers what it was given and holds it inside the
50921
+ * viewport rather than sizing it, because what is in here is the consumer's and
50922
+ * may be a picture, a frame of video or a chart. Which item is shown, and the
50923
+ * arithmetic that decides, is the base class.
50924
+ *
50925
+ * ## Attributes & Properties
50926
+ *
50927
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
50928
+ *
50929
+ * - `current`: Whether this is the one being shown.
50930
+ *
50931
+ * Written by the root, which is the only thing that sees the set.
50932
+ * - `label`: What this item is called, for the reading that says where the reader is.
50933
+ * - `value`: What names this item, and what `active` on the root is compared against.
50934
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
50935
+ *
50936
+ * **Named `whenSettled` because `settled` is taken four times over**, by
50937
+ * Image, Splitter and both color controls, none of them about transitions. A
50938
+ * base class takes the name every subclass then cannot use.
50939
+ *
50940
+ * **The state it reports cannot be watched, which is why this exists.** A
50941
+ * custom state is deliberately not in the DOM, so there is no
50942
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
50943
+ * instead.
50944
+ *
50945
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
50946
+ * the suppression is still active in. That is the distinction `readyToMove`
50947
+ * in `@fusion.dev/helix-testing` is written around.
50948
+ *
50949
+ * It never resolves where `requestAnimationFrame` never fires, which is a
50950
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
50951
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
50952
+ * browser harness's awaits it alone: a browser always runs the frame, and a
50953
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
50954
+ *
50955
+ * ## Slots
50956
+ *
50957
+ * Areas where markup can be added to the component.
50958
+ *
50959
+ * - `(default)`: What is being shown.
50960
+ * - `description`: A line under it saying what it is.
50961
+ *
50962
+ * ## CSS Custom Properties
50963
+ *
50964
+ * CSS variables available for styling the component.
50965
+ *
50966
+ * - `--lightbox-item-description-color`: Color of the line under the content. (default: `undefined`)
50967
+ * - `--lightbox-item-gap`: Space between the content and the line under it. (default: `undefined`)
50968
+ *
50969
+ * ## CSS Parts
50970
+ *
50971
+ * Custom selectors for styling elements within the component.
50972
+ *
50973
+ * - `item`: The box the content is shown in.
50974
+ *
50975
+ * ## CSS States
50976
+ *
50977
+ * These can be used to apply styling when a component is in a given state.
50978
+ *
50979
+ * - `current`: While this is the item the lightbox is showing.
50980
+ * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
50981
+ */
50982
+ "helix-lightbox-item": Partial<
50983
+ HelixLightboxItemProps &
50984
+ HelixLightboxItemSolidJsProps &
50985
+ BaseProps<HelixLightboxItem> &
50986
+ BaseEvents<HelixLightboxItem>
50987
+ >;
50988
+
50989
+ /**
50990
+ * **A takeover rather than a panel, which is the whole difference from
50991
+ * `Dialog`.** A dialog is a thing over the page and stops short of the edges to
50992
+ * say so; a lightbox is the page for as long as it is open. The scrim is heavier
50993
+ * for the same reason: what is behind it is not meant to be read.
50994
+ *
50995
+ * **A dark region that says so once**, with `color-scheme: dark` on the host,
50996
+ * which is `Video`'s answer to the same problem: the chrome is the consumer's
50997
+ * own components and they resolve their own tokens, so without a scheme on the
50998
+ * region they draw page-colored ink on a black room and disappear into it.
50999
+ *
51000
+ * The chrome fades rather than leaves while the reader is still, because a bar
51001
+ * that is removed from the layout takes the picture's size with it and the
51002
+ * reader watches it jump every time they stop moving.
51003
+ *
51004
+ * ## Attributes & Properties
51005
+ *
51006
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
51007
+ *
51008
+ * - `active`: Which item is current, by its `value`.
51009
+ *
51010
+ * Not `option.active`, which is the option the keyboard is on: that is a
51011
+ * different question from which one is chosen.
51012
+ *
51013
+ * Writing always applies, so `<helix-tabs active="one">` starts on that
51014
+ * tab, and `default-active` is how markup says where to start without
51015
+ * naming the current one.
51016
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
51017
+ *
51018
+ * Ignored once `active` is written.
51019
+ * - `open`: Whether the element is open.
51020
+ *
51021
+ * One property, not two, so `dialog.open` answers the question anyone
51022
+ * asking it meant. Writing always applies; `<helix-dialog open>` is the
51023
+ * same statement in markup.
51024
+ *
51025
+ * **Not reflected, and that is required rather than tidy.** Reflection
51026
+ * writes the resolved state back as an attribute, so an element that opened
51027
+ * itself would put `open` on its own host: cloned, serialized for
51028
+ * hydration, or diffed by a framework, it comes back holding whatever the
51029
+ * last reader did rather than what the author wrote. `:state(open)` carries
51030
+ * the resolved state for stylesheets, which is what the mirror is for.
51031
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
51032
+ * - `idle-delay`/`idleDelay`: How long the reader may be still before the chrome hides, in milliseconds.
51033
+ *
51034
+ * Zero keeps it up, which is what a viewer with a caption worth reading
51035
+ * wants. The wait is only ever about idling: whether anything else should
51036
+ * keep the chrome up is the consumer's to decide with this.
51037
+ * - `label`: Accessible name for the viewer.
51038
+ * - `loop`: Whether walking past the end comes back to the beginning.
51039
+ * - `status-label`/`statusLabel`: The reading that says where in the set the reader is, with `{index}` and
51040
+ * `{count}` filled in.
51041
+ *
51042
+ * Announced rather than only drawn, because the picture changing under a
51043
+ * reader who cannot see it is otherwise silent. A consumer who has their own
51044
+ * counter in the chrome can empty this and say it themselves.
51045
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
51046
+ *
51047
+ * **Named `whenSettled` because `settled` is taken four times over**, by
51048
+ * Image, Splitter and both color controls, none of them about transitions. A
51049
+ * base class takes the name every subclass then cannot use.
51050
+ *
51051
+ * **The state it reports cannot be watched, which is why this exists.** A
51052
+ * custom state is deliberately not in the DOM, so there is no
51053
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
51054
+ * instead.
51055
+ *
51056
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
51057
+ * the suppression is still active in. That is the distinction `readyToMove`
51058
+ * in `@fusion.dev/helix-testing` is written around.
51059
+ *
51060
+ * It never resolves where `requestAnimationFrame` never fires, which is a
51061
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
51062
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
51063
+ * browser harness's awaits it alone: a browser always runs the frame, and a
51064
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
51065
+ *
51066
+ * ## Events
51067
+ *
51068
+ * Events that will be emitted by the component.
51069
+ *
51070
+ * - `helix-activate`: Fired once the shown item has moved, so the element already holds it.
51071
+ * - `close`: Relayed, because the platform's own does not escape.
51072
+ * - `helix-before-activate`: Fired before the shown item changes, and cancelable. The only way to refuse one.
51073
+ * - `helix-before-close`: Fired before it closes, and cancelable.
51074
+ * - `helix-before-open`: Fired before it opens, and cancelable.
51075
+ * - `toggle`: Says the state moved, carrying `newState` and `oldState`.
51076
+ *
51077
+ * ## Slots
51078
+ *
51079
+ * Areas where markup can be added to the component.
51080
+ *
51081
+ * - `(default)`: The items, which are `<helix-headless-lightbox-item>` elements.
51082
+ * - `footer`: Chrome below the item, such as a counter or a thumbnail strip.
51083
+ * - `header`: Chrome above the item, such as a title and a close button.
51084
+ *
51085
+ * ## Methods
51086
+ *
51087
+ * Methods that can be called to access component functionality.
51088
+ *
51089
+ * - `requestActive(next: string) => boolean`: Requests a new current item, and reports whether the request stood.
51090
+ *
51091
+ * Announces before it acts, so `preventDefault()` on the `helix-before-activate` is
51092
+ * a refusal and nothing moves. Unlike a native control, nothing has moved
51093
+ * by the time this runs, so refusing is simply not writing: there is
51094
+ * nothing to put back. Nobody refusing means the set updates itself,
51095
+ * whether or not a consumer declared `active`, a declared property being a
51096
+ * seed and a correction.
51097
+ * - `requestOpen(next: boolean) => boolean`: Requests an open-state change, and reports whether it was applied.
51098
+ *
51099
+ * Announces before it acts, so `preventDefault()` on the `helix-before-open` or
51100
+ * `helix-before-close` is a refusal and nothing moves. Nobody refusing means the
51101
+ * element opens or closes itself, whether or not a consumer declared
51102
+ * `open`: a declared property is a seed and a correction, and a consumer
51103
+ * who wants the decision for themselves refuses it and assigns their own.
51104
+ * - `toggleOpen() => boolean`: Requests the opposite of the current state.
51105
+ * - `show() => void`: Opens the viewer, which makes the rest of the page inert.
51106
+ * - `close() => void`: Asks to close, which a consumer may refuse.
51107
+ * - `next() => void`: Shows the next item, or the first where it is past the end and looping.
51108
+ * - `previous() => void`: Shows the previous item, or the last where it is past the start and looping.
51109
+ * - `toggleFullscreen() => void`: Fills the screen with the viewer, or comes back.
51110
+ *
51111
+ * ## CSS Custom Properties
51112
+ *
51113
+ * CSS variables available for styling the component.
51114
+ *
51115
+ * - `--lightbox-foreground`: Color of the chrome drawn over the content. (default: `undefined`)
51116
+ * - `--lightbox-gap`: Space between the chrome and the content. (default: `undefined`)
51117
+ * - `--lightbox-padding`: Inset from the edges of the screen. (default: `undefined`)
51118
+ * - `--lightbox-scrim`: 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. (default: `undefined`)
51119
+ *
51120
+ * ## CSS Parts
51121
+ *
51122
+ * Custom selectors for styling elements within the component.
51123
+ *
51124
+ * - `dialog`: The native dialog element.
51125
+ * - `live`: The region that says which item is shown.
51126
+ * - `viewport`: The box the current item is shown in.
51127
+ *
51128
+ * ## CSS States
51129
+ *
51130
+ * These can be used to apply styling when a component is in a given state.
51131
+ *
51132
+ * - `fullscreen`: While the viewer fills the screen.
51133
+ * - `idle`: While the reader has been still long enough to hide the chrome.
51134
+ * - `open`: While the viewer is open.
51135
+ * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
51136
+ */
51137
+ "helix-lightbox": Partial<
51138
+ HelixLightboxProps &
51139
+ HelixLightboxSolidJsProps &
51140
+ BaseProps<HelixLightbox> &
51141
+ BaseEvents<HelixLightbox>
51142
+ >;
51143
+
50242
51144
  /**
50243
51145
  * The lines take the series palette in order, so a chart of one is series one
50244
51146
  * and a chart of four is the first four, and a legend beside it maps the same
@@ -51055,6 +51957,120 @@ export type CustomElementsSolidJs = {
51055
51957
  BaseEvents<HelixLoader>
51056
51958
  >;
51057
51959
 
51960
+ /**
51961
+ * Presentation only: a bordered well with the controls over it, at the corner
51962
+ * every map puts them. What the frame is for, and why the controls are buttons
51963
+ * rather than arrow keys, is the base class.
51964
+ *
51965
+ * **The controls do not fade with the chrome.** A reader who has gone still has
51966
+ * not stopped needing the only controls this frame offers, so the idle state
51967
+ * takes the header and footer a consumer slotted and leaves the buttons alone.
51968
+ *
51969
+ * ## Attributes & Properties
51970
+ *
51971
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
51972
+ *
51973
+ * - `fullscreen-label`/`fullscreenLabel`: What the control that fills the screen is called.
51974
+ * - `idle-delay`/`idleDelay`: How long the reader may be still before the chrome hides, in milliseconds.
51975
+ *
51976
+ * Zero keeps it up, which is the default: a map's controls are how a keyboard
51977
+ * reader operates it, and chrome that hides itself by default would be this
51978
+ * component undoing its own argument. Set it for a display map nobody drives.
51979
+ * - `label`: Accessible name for the map, which is the one thing a consumer must write.
51980
+ *
51981
+ * There is no sensible default. "Map" names the widget rather than the place,
51982
+ * and a reader meeting three of them on a page learns nothing from hearing the
51983
+ * same word three times.
51984
+ * - `pan-label`/`panLabel`: What the controls are called, for a page not in English.
51985
+ * - `pan-step`/`panStep`: How far one press moves the map, as a fraction of what is on screen.
51986
+ *
51987
+ * A fraction rather than a distance, because this frame does not know the
51988
+ * scale of what is inside it: a quarter of the viewport is the same gesture at
51989
+ * street level and at country level, and a consumer who wants metres can
51990
+ * multiply by their own.
51991
+ * - `zoom-in-label`/`zoomInLabel`: What the zoom controls are called.
51992
+ * - `zoom-out-label`/`zoomOutLabel`: What the zoom control that goes the other way is called.
51993
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
51994
+ *
51995
+ * **Named `whenSettled` because `settled` is taken four times over**, by
51996
+ * Image, Splitter and both color controls, none of them about transitions. A
51997
+ * base class takes the name every subclass then cannot use.
51998
+ *
51999
+ * **The state it reports cannot be watched, which is why this exists.** A
52000
+ * custom state is deliberately not in the DOM, so there is no
52001
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
52002
+ * instead.
52003
+ *
52004
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
52005
+ * the suppression is still active in. That is the distinction `readyToMove`
52006
+ * in `@fusion.dev/helix-testing` is written around.
52007
+ *
52008
+ * It never resolves where `requestAnimationFrame` never fires, which is a
52009
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
52010
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
52011
+ * browser harness's awaits it alone: a browser always runs the frame, and a
52012
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
52013
+ *
52014
+ * ## Events
52015
+ *
52016
+ * Events that will be emitted by the component.
52017
+ *
52018
+ * - `helix-map-pan`: The reader asked the map to move. Answer it against your own map.
52019
+ * - `helix-map-zoom`: The reader asked the map to zoom, by a direction rather than to a level.
52020
+ *
52021
+ * ## Slots
52022
+ *
52023
+ * Areas where markup can be added to the component.
52024
+ *
52025
+ * - `(default)`: The map, which is the consumer's own.
52026
+ * - `attribution`: Whoever the tiles belong to, which most licenses require you to say.
52027
+ * - `footer`: Chrome below the map, such as a legend or a scale.
52028
+ * - `header`: Chrome above the map, such as a title or a search field.
52029
+ *
52030
+ * ## Methods
52031
+ *
52032
+ * Methods that can be called to access component functionality.
52033
+ *
52034
+ * - `toggleFullscreen() => void`: Fills the screen with the frame, or comes back.
52035
+ * - `pan(to: Way) => void`: Asks for the map to move, which the consumer answers.
52036
+ * - `zoom(by: number) => void`: Asks for the map to zoom, `1` in and `-1` out.
52037
+ *
52038
+ * ## CSS Custom Properties
52039
+ *
52040
+ * CSS variables available for styling the component.
52041
+ *
52042
+ * - `--map-background-color`: The well behind the map, seen while tiles are on their way. (default: `undefined`)
52043
+ * - `--map-block-size`: How tall the frame is. A length, since the map fills it. (default: `undefined`)
52044
+ * - `--map-border-color`: Color of the frame's edge. (default: `undefined`)
52045
+ * - `--map-control-background-color`: The ground under the pan and zoom buttons. (default: `undefined`)
52046
+ *
52047
+ * ## CSS Parts
52048
+ *
52049
+ * Custom selectors for styling elements within the component.
52050
+ *
52051
+ * - `controls`: The group the pan and zoom buttons sit in.
52052
+ * - `fullscreen`: The button that fills the screen.
52053
+ * - `pan-down`: The button that moves the map down.
52054
+ * - `pan-end`: The button that moves the map the way the text ends, which is right on an English page.
52055
+ * - `pan-start`: The button that moves the map the way the text starts, which is left on an English page.
52056
+ * - `pan-up`: The button that moves the map up.
52057
+ * - `region`: The named region the map is slotted into.
52058
+ * - `viewport`: The box the map is drawn in.
52059
+ * - `zoom-in`: The button that zooms in.
52060
+ * - `zoom-out`: The button that zooms out.
52061
+ *
52062
+ * ## CSS States
52063
+ *
52064
+ * These can be used to apply styling when a component is in a given state.
52065
+ *
52066
+ * - `fullscreen`: While the frame fills the screen.
52067
+ * - `idle`: While the reader has been still long enough to hide the chrome.
52068
+ * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
52069
+ */
52070
+ "helix-map": Partial<
52071
+ HelixMapProps & HelixMapSolidJsProps & BaseProps<HelixMap> & BaseEvents<HelixMap>
52072
+ >;
52073
+
51058
52074
  /**
51059
52075
  * Presentation only: the trigger, and the panel it opens as a grid of columns.
51060
52076
  * Everything about what opens it and what closes it is the base class.
@@ -61710,6 +62726,18 @@ export type CustomCssProperties = {
61710
62726
  "--legend-swatch-size"?: (string) | undefined;
61711
62727
  /** Width of the edge an `outlined` or `subtle` swatch is drawn with. */
61712
62728
  "--legend-swatch-stroke"?: (string) | undefined;
62729
+ /** Color of the line under the content. */
62730
+ "--lightbox-item-description-color"?: (string) | undefined;
62731
+ /** Space between the content and the line under it. */
62732
+ "--lightbox-item-gap"?: (string) | undefined;
62733
+ /** Color of the chrome drawn over the content. */
62734
+ "--lightbox-foreground"?: (string) | undefined;
62735
+ /** Space between the chrome and the content. */
62736
+ "--lightbox-gap"?: (string) | undefined;
62737
+ /** Inset from the edges of the screen. */
62738
+ "--lightbox-padding"?: (string) | undefined;
62739
+ /** 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. */
62740
+ "--lightbox-scrim"?: (string) | undefined;
61713
62741
  /** A fill for the middle of a `ring` terminus, which is otherwise open. One name across this family and Sparkline, the two reading one shared sheet. */
61714
62742
  "--chart-terminus-hole"?: (string) | undefined;
61715
62743
  /** Size of the mark on each series' last reading. One name across this family and Sparkline, the two reading one shared sheet. */
@@ -61758,6 +62786,14 @@ export type CustomCssProperties = {
61758
62786
  "--loader-size"?: (string) | undefined;
61759
62787
  /** Color of the circle behind it. */
61760
62788
  "--loader-track-color"?: (string) | undefined;
62789
+ /** The well behind the map, seen while tiles are on their way. */
62790
+ "--map-background-color"?: (string) | undefined;
62791
+ /** How tall the frame is. A length, since the map fills it. */
62792
+ "--map-block-size"?: (string) | undefined;
62793
+ /** Color of the frame's edge. */
62794
+ "--map-border-color"?: (string) | undefined;
62795
+ /** The ground under the pan and zoom buttons. */
62796
+ "--map-control-background-color"?: (string) | undefined;
61761
62797
  /** A filter behind the panel, which is `none` until one is asked for: this family carries no `material`, so the pair is two hooks rather than a word. */
61762
62798
  "--megamenu-backdrop"?: (string) | undefined;
61763
62799
  /** The panel's own fill. */