@fusion.dev/helix 0.103.2 → 0.103.3

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix",
3
3
  "description": "Styled component tier. Extends the headless tier with token-driven presentation.",
4
- "version": "0.103.2",
4
+ "version": "0.103.3",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -47,13 +47,13 @@
47
47
  },
48
48
  "bugs": "https://github.com/project-fusion/fusion/issues",
49
49
  "dependencies": {
50
- "@fusion.dev/helix-core": "0.103.2",
51
- "@fusion.dev/helix-headless": "0.103.2",
52
- "@fusion.dev/helix-styles": "0.103.2"
50
+ "@fusion.dev/helix-core": "0.103.3",
51
+ "@fusion.dev/helix-headless": "0.103.3",
52
+ "@fusion.dev/helix-styles": "0.103.3"
53
53
  },
54
54
  "devDependencies": {
55
- "@fusion.dev/helix-cem": "0.103.2",
56
- "@fusion.dev/helix-testing": "0.103.2",
55
+ "@fusion.dev/helix-cem": "0.103.3",
56
+ "@fusion.dev/helix-testing": "0.103.3",
57
57
  "@fusion.dev/scripts": "0.0.0-dev",
58
58
  "@happy-dom/global-registrator": "^20.0.0",
59
59
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -11510,56 +11510,48 @@ export type HelixMapHelixMapZoomElementEvent =
11510
11510
  HelixMapElementEvent<HelixMapZoomEvent>;
11511
11511
 
11512
11512
  export type HelixMapProps = {
11513
- /** Which of the controls this frame draws, as a list of what to keep.
11514
-
11515
- **A list rather than a switch, because the overlap is not symmetric.**
11516
- Every map library draws zoom controls and none of them draws pan buttons:
11517
- MapLibre's navigation control is zoom and a compass, Leaflet's is zoom,
11518
- Google's is zoom. So a consumer slotting one of those has our zoom twice
11519
- over and our pan pad not at all, and a single switch would make them choose
11520
- between a duplicate and nothing.
11521
-
11522
- `none` draws none of them, which is the right answer where the slotted map
11523
- already has controls a reader can find: what this family argues for is that
11524
- *a* findable control exists, never that it is ours. The methods stay public
11525
- either way, so a consumer drawing their own chrome can still drive the
11526
- frame.
11527
-
11528
- Absent is all three, which is this library's rule that a resting value is an
11529
- attribute's absence, and it is what the stylesheet asks about: the layout
11530
- rules are written against `[controls]:not([controls~="zoom"])` rather than
11531
- the bare negation, or a frame that named no list at all would be laid out as
11532
- though it had dropped everything. */
11513
+ /** Which of the controls this surface draws, as a list of what to keep.
11514
+
11515
+ **A list rather than a switch, because the overlap is not symmetric.** A
11516
+ surface a consumer brings often has zoom controls of its own and almost
11517
+ never has pan buttons, so a single switch would make them choose between
11518
+ a duplicate and nothing.
11519
+
11520
+ `none` draws none of them, which is the right answer where what was
11521
+ slotted already has controls a reader can find: what this argues for is
11522
+ that *a* findable control exists, never that it is ours. The methods stay
11523
+ public either way, so a consumer drawing their own chrome can still drive
11524
+ the surface.
11525
+
11526
+ Absent is all three, which is this library's rule that a resting value is
11527
+ an attribute's absence, and it is what the stylesheet asks about: the
11528
+ layout rules are written against `[controls]:not([controls~="zoom"])`
11529
+ rather than the bare negation, or a surface that named no list at all
11530
+ would be laid out as though it had dropped everything. */
11533
11531
  controls?: (HelixMap["controls"]) | undefined;
11534
11532
  /** Which corner the controls sit in.
11535
11533
 
11536
- **Configurable because there is no safe default**, and this is a collision
11537
- rather than a taste: MapLibre puts its own controls at the top end, Leaflet
11538
- and OpenLayers at the top start, Google's zoom at the bottom end. Whichever
11539
- corner this took would land on somebody's, which is why every one of those
11540
- libraries made it a setting too.
11534
+ **Configurable because there is no safe default**, which is a collision
11535
+ rather than a taste: whatever a consumer slots may put its own controls
11536
+ in any corner, and every library that draws some made this a setting for
11537
+ the same reason.
11541
11538
 
11542
11539
  Logical corners rather than left and right, so a right-to-left page moves
11543
- them without a consumer writing a second rule.
11544
-
11545
- Absent is the top end, which is this library's rule that a resting value is
11546
- an attribute's absence: a default that reflected would write an attribute
11547
- onto every host that no server sent and nobody asked for. */
11540
+ them without a consumer writing a second rule. Absent is the top end, a
11541
+ resting value being an attribute's absence: a default that reflected
11542
+ would write an attribute onto every host that no server sent. */
11548
11543
  "controls-placement"?: (HelixMap["controlsPlacement"]) | undefined;
11549
11544
  /** Which corner the controls sit in.
11550
11545
 
11551
- **Configurable because there is no safe default**, and this is a collision
11552
- rather than a taste: MapLibre puts its own controls at the top end, Leaflet
11553
- and OpenLayers at the top start, Google's zoom at the bottom end. Whichever
11554
- corner this took would land on somebody's, which is why every one of those
11555
- libraries made it a setting too.
11546
+ **Configurable because there is no safe default**, which is a collision
11547
+ rather than a taste: whatever a consumer slots may put its own controls
11548
+ in any corner, and every library that draws some made this a setting for
11549
+ the same reason.
11556
11550
 
11557
11551
  Logical corners rather than left and right, so a right-to-left page moves
11558
- them without a consumer writing a second rule.
11559
-
11560
- Absent is the top end, which is this library's rule that a resting value is
11561
- an attribute's absence: a default that reflected would write an attribute
11562
- onto every host that no server sent and nobody asked for. */
11552
+ them without a consumer writing a second rule. Absent is the top end, a
11553
+ resting value being an attribute's absence: a default that reflected
11554
+ would write an attribute onto every host that no server sent. */
11563
11555
  controlsPlacement?: (HelixMap["controlsPlacement"]) | undefined;
11564
11556
  /** What the control that fills the screen is called. */
11565
11557
  "fullscreen-label"?: (HelixMap["fullscreenLabel"]) | undefined;
@@ -11567,16 +11559,42 @@ onto every host that no server sent and nobody asked for. */
11567
11559
  fullscreenLabel?: (HelixMap["fullscreenLabel"]) | undefined;
11568
11560
  /** How long the reader may be still before the chrome hides, in milliseconds.
11569
11561
 
11570
- Zero keeps it up, which is the default: a map's controls are how a keyboard
11571
- reader operates it, and chrome that hides itself by default would be this
11572
- component undoing its own argument. Set it for a display map nobody drives. */
11562
+ Zero keeps it up, which is the default: these controls are how a keyboard
11563
+ reader operates the surface, and chrome that hid itself by default would
11564
+ be the component undoing its own argument. Set it for a display nobody
11565
+ drives. */
11573
11566
  "idle-delay"?: (HelixMap["idleDelay"] | `${number}`) | undefined;
11574
11567
  /** How long the reader may be still before the chrome hides, in milliseconds.
11575
11568
 
11576
- Zero keeps it up, which is the default: a map's controls are how a keyboard
11577
- reader operates it, and chrome that hides itself by default would be this
11578
- component undoing its own argument. Set it for a display map nobody drives. */
11569
+ Zero keeps it up, which is the default: these controls are how a keyboard
11570
+ reader operates the surface, and chrome that hid itself by default would
11571
+ be the component undoing its own argument. Set it for a display nobody
11572
+ drives. */
11579
11573
  idleDelay?: (HelixMap["idleDelay"]) | undefined;
11574
+ /** What one pan control is called, with `{way}` filled in. */
11575
+ "pan-label"?: (HelixMap["panLabel"]) | undefined;
11576
+ /** What one pan control is called, with `{way}` filled in. */
11577
+ panLabel?: (HelixMap["panLabel"]) | undefined;
11578
+ /** How far one press moves the view, as a fraction of what is on screen.
11579
+
11580
+ A fraction rather than a distance, because this surface does not know the
11581
+ scale of what is inside it: a quarter of the viewport is the same gesture
11582
+ at any zoom, and a consumer who wants their own units multiplies by them. */
11583
+ "pan-step"?: (HelixMap["panStep"] | `${number}`) | undefined;
11584
+ /** How far one press moves the view, as a fraction of what is on screen.
11585
+
11586
+ A fraction rather than a distance, because this surface does not know the
11587
+ scale of what is inside it: a quarter of the viewport is the same gesture
11588
+ at any zoom, and a consumer who wants their own units multiplies by them. */
11589
+ panStep?: (HelixMap["panStep"]) | undefined;
11590
+ /** What the control that zooms in is called. */
11591
+ "zoom-in-label"?: (HelixMap["zoomInLabel"]) | undefined;
11592
+ /** What the control that zooms in is called. */
11593
+ zoomInLabel?: (HelixMap["zoomInLabel"]) | undefined;
11594
+ /** What the control that zooms out is called. */
11595
+ "zoom-out-label"?: (HelixMap["zoomOutLabel"]) | undefined;
11596
+ /** What the control that zooms out is called. */
11597
+ zoomOutLabel?: (HelixMap["zoomOutLabel"]) | undefined;
11580
11598
  /** Accessible name for the map, which is the one thing a consumer must write.
11581
11599
 
11582
11600
  There is no sensible default. "Map" names the widget rather than the place,
@@ -11590,32 +11608,6 @@ arrow keys no reader could ever press. `aria-keyshortcuts` says which keys
11590
11608
  rather than spelling them into the name, which would otherwise be read out
11591
11609
  at every encounter. */
11592
11610
  label?: (HelixMap["label"]) | undefined;
11593
- /** What the controls are called, for a page not in English. */
11594
- "pan-label"?: (HelixMap["panLabel"]) | undefined;
11595
- /** What the controls are called, for a page not in English. */
11596
- panLabel?: (HelixMap["panLabel"]) | undefined;
11597
- /** How far one press moves the map, as a fraction of what is on screen.
11598
-
11599
- A fraction rather than a distance, because this frame does not know the
11600
- scale of what is inside it: a quarter of the viewport is the same gesture at
11601
- street level and at country level, and a consumer who wants metres can
11602
- multiply by their own. */
11603
- "pan-step"?: (HelixMap["panStep"] | `${number}`) | undefined;
11604
- /** How far one press moves the map, as a fraction of what is on screen.
11605
-
11606
- A fraction rather than a distance, because this frame does not know the
11607
- scale of what is inside it: a quarter of the viewport is the same gesture at
11608
- street level and at country level, and a consumer who wants metres can
11609
- multiply by their own. */
11610
- panStep?: (HelixMap["panStep"]) | undefined;
11611
- /** What the zoom controls are called. */
11612
- "zoom-in-label"?: (HelixMap["zoomInLabel"]) | undefined;
11613
- /** What the zoom controls are called. */
11614
- zoomInLabel?: (HelixMap["zoomInLabel"]) | undefined;
11615
- /** What the zoom control that goes the other way is called. */
11616
- "zoom-out-label"?: (HelixMap["zoomOutLabel"]) | undefined;
11617
- /** What the zoom control that goes the other way is called. */
11618
- zoomOutLabel?: (HelixMap["zoomOutLabel"]) | undefined;
11619
11611
 
11620
11612
  /** The reader asked the map to move. Answer it against your own map. */
11621
11613
  "onhelix-map-pan"?: ((e: HelixMapHelixMapPanElementEvent) => void) | undefined;
@@ -11624,56 +11616,48 @@ multiply by their own. */
11624
11616
  };
11625
11617
 
11626
11618
  export type HelixMapSolidJsProps = {
11627
- /** Which of the controls this frame draws, as a list of what to keep.
11628
-
11629
- **A list rather than a switch, because the overlap is not symmetric.**
11630
- Every map library draws zoom controls and none of them draws pan buttons:
11631
- MapLibre's navigation control is zoom and a compass, Leaflet's is zoom,
11632
- Google's is zoom. So a consumer slotting one of those has our zoom twice
11633
- over and our pan pad not at all, and a single switch would make them choose
11634
- between a duplicate and nothing.
11635
-
11636
- `none` draws none of them, which is the right answer where the slotted map
11637
- already has controls a reader can find: what this family argues for is that
11638
- *a* findable control exists, never that it is ours. The methods stay public
11639
- either way, so a consumer drawing their own chrome can still drive the
11640
- frame.
11641
-
11642
- Absent is all three, which is this library's rule that a resting value is an
11643
- attribute's absence, and it is what the stylesheet asks about: the layout
11644
- rules are written against `[controls]:not([controls~="zoom"])` rather than
11645
- the bare negation, or a frame that named no list at all would be laid out as
11646
- though it had dropped everything. */
11619
+ /** Which of the controls this surface draws, as a list of what to keep.
11620
+
11621
+ **A list rather than a switch, because the overlap is not symmetric.** A
11622
+ surface a consumer brings often has zoom controls of its own and almost
11623
+ never has pan buttons, so a single switch would make them choose between
11624
+ a duplicate and nothing.
11625
+
11626
+ `none` draws none of them, which is the right answer where what was
11627
+ slotted already has controls a reader can find: what this argues for is
11628
+ that *a* findable control exists, never that it is ours. The methods stay
11629
+ public either way, so a consumer drawing their own chrome can still drive
11630
+ the surface.
11631
+
11632
+ Absent is all three, which is this library's rule that a resting value is
11633
+ an attribute's absence, and it is what the stylesheet asks about: the
11634
+ layout rules are written against `[controls]:not([controls~="zoom"])`
11635
+ rather than the bare negation, or a surface that named no list at all
11636
+ would be laid out as though it had dropped everything. */
11647
11637
  "prop:controls"?: (HelixMap["controls"]) | undefined;
11648
11638
  /** Which corner the controls sit in.
11649
11639
 
11650
- **Configurable because there is no safe default**, and this is a collision
11651
- rather than a taste: MapLibre puts its own controls at the top end, Leaflet
11652
- and OpenLayers at the top start, Google's zoom at the bottom end. Whichever
11653
- corner this took would land on somebody's, which is why every one of those
11654
- libraries made it a setting too.
11640
+ **Configurable because there is no safe default**, which is a collision
11641
+ rather than a taste: whatever a consumer slots may put its own controls
11642
+ in any corner, and every library that draws some made this a setting for
11643
+ the same reason.
11655
11644
 
11656
11645
  Logical corners rather than left and right, so a right-to-left page moves
11657
- them without a consumer writing a second rule.
11658
-
11659
- Absent is the top end, which is this library's rule that a resting value is
11660
- an attribute's absence: a default that reflected would write an attribute
11661
- onto every host that no server sent and nobody asked for. */
11646
+ them without a consumer writing a second rule. Absent is the top end, a
11647
+ resting value being an attribute's absence: a default that reflected
11648
+ would write an attribute onto every host that no server sent. */
11662
11649
  "attr:controls-placement"?: (HelixMap["controlsPlacement"]) | undefined;
11663
11650
  /** Which corner the controls sit in.
11664
11651
 
11665
- **Configurable because there is no safe default**, and this is a collision
11666
- rather than a taste: MapLibre puts its own controls at the top end, Leaflet
11667
- and OpenLayers at the top start, Google's zoom at the bottom end. Whichever
11668
- corner this took would land on somebody's, which is why every one of those
11669
- libraries made it a setting too.
11652
+ **Configurable because there is no safe default**, which is a collision
11653
+ rather than a taste: whatever a consumer slots may put its own controls
11654
+ in any corner, and every library that draws some made this a setting for
11655
+ the same reason.
11670
11656
 
11671
11657
  Logical corners rather than left and right, so a right-to-left page moves
11672
- them without a consumer writing a second rule.
11673
-
11674
- Absent is the top end, which is this library's rule that a resting value is
11675
- an attribute's absence: a default that reflected would write an attribute
11676
- onto every host that no server sent and nobody asked for. */
11658
+ them without a consumer writing a second rule. Absent is the top end, a
11659
+ resting value being an attribute's absence: a default that reflected
11660
+ would write an attribute onto every host that no server sent. */
11677
11661
  "prop:controlsPlacement"?: (HelixMap["controlsPlacement"]) | undefined;
11678
11662
  /** What the control that fills the screen is called. */
11679
11663
  "attr:fullscreen-label"?: (HelixMap["fullscreenLabel"]) | undefined;
@@ -11681,16 +11665,42 @@ onto every host that no server sent and nobody asked for. */
11681
11665
  "prop:fullscreenLabel"?: (HelixMap["fullscreenLabel"]) | undefined;
11682
11666
  /** How long the reader may be still before the chrome hides, in milliseconds.
11683
11667
 
11684
- Zero keeps it up, which is the default: a map's controls are how a keyboard
11685
- reader operates it, and chrome that hides itself by default would be this
11686
- component undoing its own argument. Set it for a display map nobody drives. */
11668
+ Zero keeps it up, which is the default: these controls are how a keyboard
11669
+ reader operates the surface, and chrome that hid itself by default would
11670
+ be the component undoing its own argument. Set it for a display nobody
11671
+ drives. */
11687
11672
  "attr:idle-delay"?: (HelixMap["idleDelay"] | `${number}`) | undefined;
11688
11673
  /** How long the reader may be still before the chrome hides, in milliseconds.
11689
11674
 
11690
- Zero keeps it up, which is the default: a map's controls are how a keyboard
11691
- reader operates it, and chrome that hides itself by default would be this
11692
- component undoing its own argument. Set it for a display map nobody drives. */
11675
+ Zero keeps it up, which is the default: these controls are how a keyboard
11676
+ reader operates the surface, and chrome that hid itself by default would
11677
+ be the component undoing its own argument. Set it for a display nobody
11678
+ drives. */
11693
11679
  "prop:idleDelay"?: (HelixMap["idleDelay"]) | undefined;
11680
+ /** What one pan control is called, with `{way}` filled in. */
11681
+ "attr:pan-label"?: (HelixMap["panLabel"]) | undefined;
11682
+ /** What one pan control is called, with `{way}` filled in. */
11683
+ "prop:panLabel"?: (HelixMap["panLabel"]) | undefined;
11684
+ /** How far one press moves the view, as a fraction of what is on screen.
11685
+
11686
+ A fraction rather than a distance, because this surface does not know the
11687
+ scale of what is inside it: a quarter of the viewport is the same gesture
11688
+ at any zoom, and a consumer who wants their own units multiplies by them. */
11689
+ "attr:pan-step"?: (HelixMap["panStep"] | `${number}`) | undefined;
11690
+ /** How far one press moves the view, as a fraction of what is on screen.
11691
+
11692
+ A fraction rather than a distance, because this surface does not know the
11693
+ scale of what is inside it: a quarter of the viewport is the same gesture
11694
+ at any zoom, and a consumer who wants their own units multiplies by them. */
11695
+ "prop:panStep"?: (HelixMap["panStep"]) | undefined;
11696
+ /** What the control that zooms in is called. */
11697
+ "attr:zoom-in-label"?: (HelixMap["zoomInLabel"]) | undefined;
11698
+ /** What the control that zooms in is called. */
11699
+ "prop:zoomInLabel"?: (HelixMap["zoomInLabel"]) | undefined;
11700
+ /** What the control that zooms out is called. */
11701
+ "attr:zoom-out-label"?: (HelixMap["zoomOutLabel"]) | undefined;
11702
+ /** What the control that zooms out is called. */
11703
+ "prop:zoomOutLabel"?: (HelixMap["zoomOutLabel"]) | undefined;
11694
11704
  /** Accessible name for the map, which is the one thing a consumer must write.
11695
11705
 
11696
11706
  There is no sensible default. "Map" names the widget rather than the place,
@@ -11704,32 +11714,6 @@ arrow keys no reader could ever press. `aria-keyshortcuts` says which keys
11704
11714
  rather than spelling them into the name, which would otherwise be read out
11705
11715
  at every encounter. */
11706
11716
  "prop:label"?: (HelixMap["label"]) | undefined;
11707
- /** What the controls are called, for a page not in English. */
11708
- "attr:pan-label"?: (HelixMap["panLabel"]) | undefined;
11709
- /** What the controls are called, for a page not in English. */
11710
- "prop:panLabel"?: (HelixMap["panLabel"]) | undefined;
11711
- /** How far one press moves the map, as a fraction of what is on screen.
11712
-
11713
- A fraction rather than a distance, because this frame does not know the
11714
- scale of what is inside it: a quarter of the viewport is the same gesture at
11715
- street level and at country level, and a consumer who wants metres can
11716
- multiply by their own. */
11717
- "attr:pan-step"?: (HelixMap["panStep"] | `${number}`) | undefined;
11718
- /** How far one press moves the map, as a fraction of what is on screen.
11719
-
11720
- A fraction rather than a distance, because this frame does not know the
11721
- scale of what is inside it: a quarter of the viewport is the same gesture at
11722
- street level and at country level, and a consumer who wants metres can
11723
- multiply by their own. */
11724
- "prop:panStep"?: (HelixMap["panStep"]) | undefined;
11725
- /** What the zoom controls are called. */
11726
- "attr:zoom-in-label"?: (HelixMap["zoomInLabel"]) | undefined;
11727
- /** What the zoom controls are called. */
11728
- "prop:zoomInLabel"?: (HelixMap["zoomInLabel"]) | undefined;
11729
- /** What the zoom control that goes the other way is called. */
11730
- "attr:zoom-out-label"?: (HelixMap["zoomOutLabel"]) | undefined;
11731
- /** What the zoom control that goes the other way is called. */
11732
- "prop:zoomOutLabel"?: (HelixMap["zoomOutLabel"]) | undefined;
11733
11717
  /** The reader asked the map to move. Answer it against your own map. */
11734
11718
  "on:helix-map-pan"?: ((e: HelixMapHelixMapPanElementEvent) => void) | undefined;
11735
11719
  /** The reader asked the map to zoom, by a direction rather than to a level. */
@@ -31887,46 +31871,50 @@ export type CustomElements = {
31887
31871
  *
31888
31872
  * Component attributes and properties that can be applied to the element or by using JavaScript.
31889
31873
  *
31890
- * - `controls`: Which of the controls this frame draws, as a list of what to keep.
31874
+ * - `controls`: Which of the controls this surface draws, as a list of what to keep.
31891
31875
  *
31892
- * **A list rather than a switch, because the overlap is not symmetric.**
31893
- * Every map library draws zoom controls and none of them draws pan buttons:
31894
- * MapLibre's navigation control is zoom and a compass, Leaflet's is zoom,
31895
- * Google's is zoom. So a consumer slotting one of those has our zoom twice
31896
- * over and our pan pad not at all, and a single switch would make them choose
31897
- * between a duplicate and nothing.
31876
+ * **A list rather than a switch, because the overlap is not symmetric.** A
31877
+ * surface a consumer brings often has zoom controls of its own and almost
31878
+ * never has pan buttons, so a single switch would make them choose between
31879
+ * a duplicate and nothing.
31898
31880
  *
31899
- * `none` draws none of them, which is the right answer where the slotted map
31900
- * already has controls a reader can find: what this family argues for is that
31901
- * *a* findable control exists, never that it is ours. The methods stay public
31902
- * either way, so a consumer drawing their own chrome can still drive the
31903
- * frame.
31881
+ * `none` draws none of them, which is the right answer where what was
31882
+ * slotted already has controls a reader can find: what this argues for is
31883
+ * that *a* findable control exists, never that it is ours. The methods stay
31884
+ * public either way, so a consumer drawing their own chrome can still drive
31885
+ * the surface.
31904
31886
  *
31905
- * Absent is all three, which is this library's rule that a resting value is an
31906
- * attribute's absence, and it is what the stylesheet asks about: the layout
31907
- * rules are written against `[controls]:not([controls~="zoom"])` rather than
31908
- * the bare negation, or a frame that named no list at all would be laid out as
31909
- * though it had dropped everything.
31887
+ * Absent is all three, which is this library's rule that a resting value is
31888
+ * an attribute's absence, and it is what the stylesheet asks about: the
31889
+ * layout rules are written against `[controls]:not([controls~="zoom"])`
31890
+ * rather than the bare negation, or a surface that named no list at all
31891
+ * would be laid out as though it had dropped everything.
31910
31892
  * - `controls-placement`/`controlsPlacement`: Which corner the controls sit in.
31911
31893
  *
31912
- * **Configurable because there is no safe default**, and this is a collision
31913
- * rather than a taste: MapLibre puts its own controls at the top end, Leaflet
31914
- * and OpenLayers at the top start, Google's zoom at the bottom end. Whichever
31915
- * corner this took would land on somebody's, which is why every one of those
31916
- * libraries made it a setting too.
31894
+ * **Configurable because there is no safe default**, which is a collision
31895
+ * rather than a taste: whatever a consumer slots may put its own controls
31896
+ * in any corner, and every library that draws some made this a setting for
31897
+ * the same reason.
31917
31898
  *
31918
31899
  * Logical corners rather than left and right, so a right-to-left page moves
31919
- * them without a consumer writing a second rule.
31920
- *
31921
- * Absent is the top end, which is this library's rule that a resting value is
31922
- * an attribute's absence: a default that reflected would write an attribute
31923
- * onto every host that no server sent and nobody asked for.
31900
+ * them without a consumer writing a second rule. Absent is the top end, a
31901
+ * resting value being an attribute's absence: a default that reflected
31902
+ * would write an attribute onto every host that no server sent.
31924
31903
  * - `fullscreen-label`/`fullscreenLabel`: What the control that fills the screen is called.
31925
31904
  * - `idle-delay`/`idleDelay`: How long the reader may be still before the chrome hides, in milliseconds.
31926
31905
  *
31927
- * Zero keeps it up, which is the default: a map's controls are how a keyboard
31928
- * reader operates it, and chrome that hides itself by default would be this
31929
- * component undoing its own argument. Set it for a display map nobody drives.
31906
+ * Zero keeps it up, which is the default: these controls are how a keyboard
31907
+ * reader operates the surface, and chrome that hid itself by default would
31908
+ * be the component undoing its own argument. Set it for a display nobody
31909
+ * drives.
31910
+ * - `pan-label`/`panLabel`: What one pan control is called, with `{way}` filled in.
31911
+ * - `pan-step`/`panStep`: How far one press moves the view, as a fraction of what is on screen.
31912
+ *
31913
+ * A fraction rather than a distance, because this surface does not know the
31914
+ * scale of what is inside it: a quarter of the viewport is the same gesture
31915
+ * at any zoom, and a consumer who wants their own units multiplies by them.
31916
+ * - `zoom-in-label`/`zoomInLabel`: What the control that zooms in is called.
31917
+ * - `zoom-out-label`/`zoomOutLabel`: What the control that zooms out is called.
31930
31918
  * - `label`: Accessible name for the map, which is the one thing a consumer must write.
31931
31919
  *
31932
31920
  * There is no sensible default. "Map" names the widget rather than the place,
@@ -31939,15 +31927,6 @@ export type CustomElements = {
31939
31927
  * arrow keys no reader could ever press. `aria-keyshortcuts` says which keys
31940
31928
  * rather than spelling them into the name, which would otherwise be read out
31941
31929
  * at every encounter.
31942
- * - `pan-label`/`panLabel`: What the controls are called, for a page not in English.
31943
- * - `pan-step`/`panStep`: How far one press moves the map, as a fraction of what is on screen.
31944
- *
31945
- * A fraction rather than a distance, because this frame does not know the
31946
- * scale of what is inside it: a quarter of the viewport is the same gesture at
31947
- * street level and at country level, and a consumer who wants metres can
31948
- * multiply by their own.
31949
- * - `zoom-in-label`/`zoomInLabel`: What the zoom controls are called.
31950
- * - `zoom-out-label`/`zoomOutLabel`: What the zoom control that goes the other way is called.
31951
31930
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
31952
31931
  *
31953
31932
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -31989,9 +31968,9 @@ export type CustomElements = {
31989
31968
  *
31990
31969
  * Methods that can be called to access component functionality.
31991
31970
  *
31992
- * - `toggleFullscreen() => void`: Fills the screen with the frame, or comes back.
31993
- * - `pan(to: Way) => void`: Asks for the map to move, which the consumer answers.
31994
- * - `zoom(by: number) => void`: Asks for the map to zoom, `1` in and `-1` out.
31971
+ * - `pan(to: ViewportWay) => void`: Asks for the view to move, which the consumer answers.
31972
+ * - `zoom(by: number) => void`: Asks for the view to zoom, `1` in and `-1` out.
31973
+ * - `toggleFullscreen() => void`: Fills the screen with the surface, or comes back.
31995
31974
  *
31996
31975
  * ## CSS Custom Properties
31997
31976
  *
@@ -52130,46 +52109,50 @@ export type CustomElementsSolidJs = {
52130
52109
  *
52131
52110
  * Component attributes and properties that can be applied to the element or by using JavaScript.
52132
52111
  *
52133
- * - `controls`: Which of the controls this frame draws, as a list of what to keep.
52112
+ * - `controls`: Which of the controls this surface draws, as a list of what to keep.
52134
52113
  *
52135
- * **A list rather than a switch, because the overlap is not symmetric.**
52136
- * Every map library draws zoom controls and none of them draws pan buttons:
52137
- * MapLibre's navigation control is zoom and a compass, Leaflet's is zoom,
52138
- * Google's is zoom. So a consumer slotting one of those has our zoom twice
52139
- * over and our pan pad not at all, and a single switch would make them choose
52140
- * between a duplicate and nothing.
52114
+ * **A list rather than a switch, because the overlap is not symmetric.** A
52115
+ * surface a consumer brings often has zoom controls of its own and almost
52116
+ * never has pan buttons, so a single switch would make them choose between
52117
+ * a duplicate and nothing.
52141
52118
  *
52142
- * `none` draws none of them, which is the right answer where the slotted map
52143
- * already has controls a reader can find: what this family argues for is that
52144
- * *a* findable control exists, never that it is ours. The methods stay public
52145
- * either way, so a consumer drawing their own chrome can still drive the
52146
- * frame.
52119
+ * `none` draws none of them, which is the right answer where what was
52120
+ * slotted already has controls a reader can find: what this argues for is
52121
+ * that *a* findable control exists, never that it is ours. The methods stay
52122
+ * public either way, so a consumer drawing their own chrome can still drive
52123
+ * the surface.
52147
52124
  *
52148
- * Absent is all three, which is this library's rule that a resting value is an
52149
- * attribute's absence, and it is what the stylesheet asks about: the layout
52150
- * rules are written against `[controls]:not([controls~="zoom"])` rather than
52151
- * the bare negation, or a frame that named no list at all would be laid out as
52152
- * though it had dropped everything.
52125
+ * Absent is all three, which is this library's rule that a resting value is
52126
+ * an attribute's absence, and it is what the stylesheet asks about: the
52127
+ * layout rules are written against `[controls]:not([controls~="zoom"])`
52128
+ * rather than the bare negation, or a surface that named no list at all
52129
+ * would be laid out as though it had dropped everything.
52153
52130
  * - `controls-placement`/`controlsPlacement`: Which corner the controls sit in.
52154
52131
  *
52155
- * **Configurable because there is no safe default**, and this is a collision
52156
- * rather than a taste: MapLibre puts its own controls at the top end, Leaflet
52157
- * and OpenLayers at the top start, Google's zoom at the bottom end. Whichever
52158
- * corner this took would land on somebody's, which is why every one of those
52159
- * libraries made it a setting too.
52132
+ * **Configurable because there is no safe default**, which is a collision
52133
+ * rather than a taste: whatever a consumer slots may put its own controls
52134
+ * in any corner, and every library that draws some made this a setting for
52135
+ * the same reason.
52160
52136
  *
52161
52137
  * Logical corners rather than left and right, so a right-to-left page moves
52162
- * them without a consumer writing a second rule.
52163
- *
52164
- * Absent is the top end, which is this library's rule that a resting value is
52165
- * an attribute's absence: a default that reflected would write an attribute
52166
- * onto every host that no server sent and nobody asked for.
52138
+ * them without a consumer writing a second rule. Absent is the top end, a
52139
+ * resting value being an attribute's absence: a default that reflected
52140
+ * would write an attribute onto every host that no server sent.
52167
52141
  * - `fullscreen-label`/`fullscreenLabel`: What the control that fills the screen is called.
52168
52142
  * - `idle-delay`/`idleDelay`: How long the reader may be still before the chrome hides, in milliseconds.
52169
52143
  *
52170
- * Zero keeps it up, which is the default: a map's controls are how a keyboard
52171
- * reader operates it, and chrome that hides itself by default would be this
52172
- * component undoing its own argument. Set it for a display map nobody drives.
52144
+ * Zero keeps it up, which is the default: these controls are how a keyboard
52145
+ * reader operates the surface, and chrome that hid itself by default would
52146
+ * be the component undoing its own argument. Set it for a display nobody
52147
+ * drives.
52148
+ * - `pan-label`/`panLabel`: What one pan control is called, with `{way}` filled in.
52149
+ * - `pan-step`/`panStep`: How far one press moves the view, as a fraction of what is on screen.
52150
+ *
52151
+ * A fraction rather than a distance, because this surface does not know the
52152
+ * scale of what is inside it: a quarter of the viewport is the same gesture
52153
+ * at any zoom, and a consumer who wants their own units multiplies by them.
52154
+ * - `zoom-in-label`/`zoomInLabel`: What the control that zooms in is called.
52155
+ * - `zoom-out-label`/`zoomOutLabel`: What the control that zooms out is called.
52173
52156
  * - `label`: Accessible name for the map, which is the one thing a consumer must write.
52174
52157
  *
52175
52158
  * There is no sensible default. "Map" names the widget rather than the place,
@@ -52182,15 +52165,6 @@ export type CustomElementsSolidJs = {
52182
52165
  * arrow keys no reader could ever press. `aria-keyshortcuts` says which keys
52183
52166
  * rather than spelling them into the name, which would otherwise be read out
52184
52167
  * at every encounter.
52185
- * - `pan-label`/`panLabel`: What the controls are called, for a page not in English.
52186
- * - `pan-step`/`panStep`: How far one press moves the map, as a fraction of what is on screen.
52187
- *
52188
- * A fraction rather than a distance, because this frame does not know the
52189
- * scale of what is inside it: a quarter of the viewport is the same gesture at
52190
- * street level and at country level, and a consumer who wants metres can
52191
- * multiply by their own.
52192
- * - `zoom-in-label`/`zoomInLabel`: What the zoom controls are called.
52193
- * - `zoom-out-label`/`zoomOutLabel`: What the zoom control that goes the other way is called.
52194
52168
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
52195
52169
  *
52196
52170
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -52232,9 +52206,9 @@ export type CustomElementsSolidJs = {
52232
52206
  *
52233
52207
  * Methods that can be called to access component functionality.
52234
52208
  *
52235
- * - `toggleFullscreen() => void`: Fills the screen with the frame, or comes back.
52236
- * - `pan(to: Way) => void`: Asks for the map to move, which the consumer answers.
52237
- * - `zoom(by: number) => void`: Asks for the map to zoom, `1` in and `-1` out.
52209
+ * - `pan(to: ViewportWay) => void`: Asks for the view to move, which the consumer answers.
52210
+ * - `zoom(by: number) => void`: Asks for the view to zoom, `1` in and `-1` out.
52211
+ * - `toggleFullscreen() => void`: Fills the screen with the surface, or comes back.
52238
52212
  *
52239
52213
  * ## CSS Custom Properties
52240
52214
  *