@fusion.dev/helix-headless 0.113.0 → 0.115.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.
@@ -62448,9 +62448,28 @@
62448
62448
  "declarations": [
62449
62449
  {
62450
62450
  "kind": "class",
62451
- "description": "`connectMap` fills the shape as a layer of the map, under its place names.\nThe frame lists each area by its `label` and `description` for screen\nreaders.",
62451
+ "description": "`connectMap` fills the shape as a layer of the map, under its place names.\nThe frame lists each area by its `label` and `description` for screen\nreaders.\n\nSet `caption` to draw words on the map with the area, such as a letter for a\nsearch sector, in a color that reads on the map. It is drawn rather than\nfocusable, so it adds nothing to the tab order, and a screen reader reads\nthe area's `label` in the frame's list.",
62452
62452
  "name": "HelixHeadlessMapArea",
62453
62453
  "members": [
62454
+ {
62455
+ "kind": "field",
62456
+ "name": "caption",
62457
+ "type": {
62458
+ "text": "string | undefined"
62459
+ },
62460
+ "description": "Words drawn on the map with the area, such as `A` for a search sector.\nUnset, nothing is drawn. Keep it short: it is a caption on a map, and the\narea's `label` is what a screen reader hears.",
62461
+ "attribute": "caption"
62462
+ },
62463
+ {
62464
+ "kind": "field",
62465
+ "name": "captionPlacement",
62466
+ "type": {
62467
+ "text": "'inside' | 'outside'"
62468
+ },
62469
+ "default": "'inside'",
62470
+ "description": "Where the caption stands. `inside`, the default, at the point of the area\nfurthest from its edges. `outside`, just above the area's northernmost\npoint, clear of the shape, for an area whose caption would cover what is\nin it.",
62471
+ "attribute": "caption-placement"
62472
+ },
62454
62473
  {
62455
62474
  "kind": "field",
62456
62475
  "name": "description",
@@ -62834,6 +62853,23 @@
62834
62853
  }
62835
62854
  ],
62836
62855
  "attributes": [
62856
+ {
62857
+ "name": "caption",
62858
+ "type": {
62859
+ "text": "string | undefined"
62860
+ },
62861
+ "description": "Words drawn on the map with the area, such as `A` for a search sector.\nUnset, nothing is drawn. Keep it short: it is a caption on a map, and the\narea's `label` is what a screen reader hears.",
62862
+ "fieldName": "caption"
62863
+ },
62864
+ {
62865
+ "name": "caption-placement",
62866
+ "type": {
62867
+ "text": "'inside' | 'outside'"
62868
+ },
62869
+ "default": "'inside'",
62870
+ "description": "Where the caption stands. `inside`, the default, at the point of the area\nfurthest from its edges. `outside`, just above the area's northernmost\npoint, clear of the shape, for an area whose caption would cover what is\nin it.",
62871
+ "fieldName": "captionPlacement"
62872
+ },
62837
62873
  {
62838
62874
  "name": "description",
62839
62875
  "type": {
@@ -67583,6 +67619,44 @@
67583
67619
  "text": "moved() => void"
67584
67620
  }
67585
67621
  },
67622
+ {
67623
+ "kind": "field",
67624
+ "name": "ready",
67625
+ "type": {
67626
+ "text": "boolean"
67627
+ },
67628
+ "description": "Whether the map has been drawn whole, which `drawn()` says. For a page that\nconnects after `helix-map-ready` has been sent, and missed it.",
67629
+ "readonly": true
67630
+ },
67631
+ {
67632
+ "kind": "field",
67633
+ "name": "whole",
67634
+ "type": {
67635
+ "text": "boolean"
67636
+ },
67637
+ "privacy": "private",
67638
+ "default": "false",
67639
+ "description": "What `ready` reads, written by `drawn()`."
67640
+ },
67641
+ {
67642
+ "kind": "method",
67643
+ "name": "drawn",
67644
+ "return": {
67645
+ "type": {
67646
+ "text": "void"
67647
+ }
67648
+ },
67649
+ "parameters": [
67650
+ {
67651
+ "name": "whole",
67652
+ "default": "true"
67653
+ }
67654
+ ],
67655
+ "description": "Says the map has been drawn whole, or with `false`, that it no longer is.\n\n**Called by whatever draws the map**, as `connectMap` does once its driver\nhas every tile the view needs and the ground where there is terrain, and\nwith `false` when it disconnects. A page drawing its own map calls it when\nthat map is finished. The first call after the map was not drawn sends\n`helix-map-ready` and turns on `:state(ready)`, so a page can wait on the\nevent or select on the state, and a page that connects late reads `ready`.",
67656
+ "type": {
67657
+ "text": "drawn(whole = true) => void"
67658
+ }
67659
+ },
67586
67660
  {
67587
67661
  "kind": "method",
67588
67662
  "name": "say",
@@ -68903,6 +68977,14 @@
68903
68977
  "name": "helix-map-part-change",
68904
68978
  "reactProp": "onhelix-map-part-change"
68905
68979
  },
68980
+ {
68981
+ "type": {
68982
+ "text": "HelixMapReadyEvent"
68983
+ },
68984
+ "description": "The map has been drawn whole: its style, every tile the view needs, and the ground where it has terrain. Sent once per connection. Show a map that is finished on it, where it would otherwise draw in stages.",
68985
+ "name": "helix-map-ready",
68986
+ "reactProp": "onhelix-map-ready"
68987
+ },
68906
68988
  {
68907
68989
  "type": {
68908
68990
  "text": "HelixMapRotateEvent"
@@ -69306,6 +69388,10 @@
69306
69388
  "description": "The user has been still long enough for the header and footer to fade.",
69307
69389
  "name": "idle"
69308
69390
  },
69391
+ {
69392
+ "description": "The map has been drawn whole, after `helix-map-ready`.",
69393
+ "name": "ready"
69394
+ },
69309
69395
  {
69310
69396
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
69311
69397
  "name": "settled",
@@ -105,6 +105,7 @@ registerElementEvents({
105
105
  'helix-map-cluster',
106
106
  'helix-map-pan',
107
107
  'helix-map-part-change',
108
+ 'helix-map-ready',
108
109
  'helix-map-rotate',
109
110
  'helix-map-tilt',
110
111
  'helix-map-zoom',
@@ -9,6 +9,11 @@ import { type MapPoint } from '../route/map-route.js';
9
9
  * The frame lists each area by its `label` and `description` for screen
10
10
  * readers.
11
11
  *
12
+ * Set `caption` to draw words on the map with the area, such as a letter for a
13
+ * search sector, in a color that reads on the map. It is drawn rather than
14
+ * focusable, so it adds nothing to the tab order, and a screen reader reads
15
+ * the area's `label` in the frame's list.
16
+ *
12
17
  * @since 0.105.0
13
18
  * @status experimental
14
19
  * @category media
@@ -18,6 +23,19 @@ import { type MapPoint } from '../route/map-route.js';
18
23
  * @event {HelixMapPartChangeEvent} helix-map-part-change - The area's points, name, or color changed. Used by `connectMap`; pages do not need to listen for it.
19
24
  */
20
25
  export declare class HelixHeadlessMapArea extends HelixElement {
26
+ /**
27
+ * Words drawn on the map with the area, such as `A` for a search sector.
28
+ * Unset, nothing is drawn. Keep it short: it is a caption on a map, and the
29
+ * area's `label` is what a screen reader hears.
30
+ */
31
+ caption?: string;
32
+ /**
33
+ * Where the caption stands. `inside`, the default, at the point of the area
34
+ * furthest from its edges. `outside`, just above the area's northernmost
35
+ * point, clear of the shape, for an area whose caption would cover what is
36
+ * in it.
37
+ */
38
+ captionPlacement: 'inside' | 'outside';
21
39
  /** More about the area. Read after its label in the frame's list. */
22
40
  description?: string;
23
41
  /**
@@ -11,6 +11,7 @@ import { pointsConverter } from '../route/map-route.js';
11
11
  let HelixHeadlessMapArea = class HelixHeadlessMapArea extends HelixElement {
12
12
  constructor() {
13
13
  super(...arguments);
14
+ this.captionPlacement = 'inside';
14
15
  this.isMapLayer = true;
15
16
  this.layerKind = 'area';
16
17
  this.label = 'Area';
@@ -23,6 +24,12 @@ let HelixHeadlessMapArea = class HelixHeadlessMapArea extends HelixElement {
23
24
  return nothing;
24
25
  }
25
26
  };
27
+ __decorate([
28
+ property()
29
+ ], HelixHeadlessMapArea.prototype, "caption", void 0);
30
+ __decorate([
31
+ property({ attribute: 'caption-placement' })
32
+ ], HelixHeadlessMapArea.prototype, "captionPlacement", void 0);
26
33
  __decorate([
27
34
  property()
28
35
  ], HelixHeadlessMapArea.prototype, "description", void 0);
@@ -70,6 +70,7 @@ declare const HelixHeadlessMap_base: (new (...args: any[]) => import("@fusion.de
70
70
  * @event {HelixMapClusterEvent} helix-map-cluster - A cluster was pressed. Sent from the marker that shows the cluster, with the names of its places.
71
71
  * @event {HelixMapPanEvent} helix-map-pan - A pan button or arrow key was pressed. Move your map in response.
72
72
  * @event {HelixMapPartChangeEvent} helix-map-part-change - Clustering was turned on or off. Used by `connectMap`; pages do not need to listen for it.
73
+ * @event {HelixMapReadyEvent} helix-map-ready - The map has been drawn whole: its style, every tile the view needs, and the ground where it has terrain. Sent once per connection. Show a map that is finished on it, where it would otherwise draw in stages.
73
74
  * @event {HelixMapRotateEvent} helix-map-rotate - A rotate or Face north button, or Shift with Left or Right, was pressed. Turn your map in response.
74
75
  * @event {HelixMapTiltEvent} helix-map-tilt - The 3D button, or Shift with Up or Down, was pressed. Tilt your map in response.
75
76
  * @event {HelixMapZoomEvent} helix-map-zoom - A zoom button or key was pressed, with a direction. Zoom your map in response.
@@ -111,6 +112,7 @@ declare const HelixHeadlessMap_base: (new (...args: any[]) => import("@fusion.de
111
112
  *
112
113
  * @cssstate fullscreen - The map fills the screen.
113
114
  * @cssstate idle - The user has been still long enough for the header and footer to fade.
115
+ * @cssstate ready - The map has been drawn whole, after `helix-map-ready`.
114
116
  */
115
117
  export declare class HelixHeadlessMap extends HelixHeadlessMap_base {
116
118
  /**
@@ -220,6 +222,24 @@ export declare class HelixHeadlessMap extends HelixHeadlessMap_base {
220
222
  * say, so it says which way the map moved.
221
223
  */
222
224
  moved(): void;
225
+ /**
226
+ * Whether the map has been drawn whole, which `drawn()` says. For a page that
227
+ * connects after `helix-map-ready` has been sent, and missed it.
228
+ */
229
+ get ready(): boolean;
230
+ /** What `ready` reads, written by `drawn()`. */
231
+ private whole;
232
+ /**
233
+ * Says the map has been drawn whole, or with `false`, that it no longer is.
234
+ *
235
+ * **Called by whatever draws the map**, as `connectMap` does once its driver
236
+ * has every tile the view needs and the ground where there is terrain, and
237
+ * with `false` when it disconnects. A page drawing its own map calls it when
238
+ * that map is finished. The first call after the map was not drawn sends
239
+ * `helix-map-ready` and turns on `:state(ready)`, so a page can wait on the
240
+ * event or select on the state, and a page that connects late reads `ready`.
241
+ */
242
+ drawn(whole?: boolean): void;
223
243
  private say;
224
244
  /** Records what a reader asked, so the answer can be said. */
225
245
  private ask;
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement, fillTemplate, formatNumbers, HelixActivateEvent, HelixElement, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, hostAria, KeyboardNavigationController, MixinViewport, } from '@fusion.dev/helix-core';
7
+ import { customElement, fillTemplate, formatNumbers, HelixActivateEvent, HelixElement, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, hostAria, KeyboardNavigationController, MixinViewport, } from '@fusion.dev/helix-core';
8
8
  import { buildings, cloudRain, dotsNine, leaf, mountains, path, polygon, stack, target, } from '@fusion.dev/helix-icons';
9
9
  import { html, nothing } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
@@ -67,6 +67,7 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
67
67
  this.said = '';
68
68
  this.asked = undefined;
69
69
  this.settling = undefined;
70
+ this.whole = false;
70
71
  this.layersOpen = false;
71
72
  this.handleOutside = (event) => {
72
73
  if (!event.composedPath().includes(this)) {
@@ -141,6 +142,19 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
141
142
  clearTimeout(this.settling);
142
143
  this.settling = setTimeout(() => this.say(), SETTLES);
143
144
  }
145
+ get ready() {
146
+ return this.whole;
147
+ }
148
+ drawn(whole = true) {
149
+ if (whole === this.whole) {
150
+ return;
151
+ }
152
+ this.whole = whole;
153
+ this.toggleState('ready', whole);
154
+ if (whole) {
155
+ this.dispatchEvent(new HelixMapReadyEvent());
156
+ }
157
+ }
144
158
  say() {
145
159
  const asked = this.asked;
146
160
  this.asked = undefined;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix-headless",
3
3
  "description": "Headless component tier. Structure, accessibility, state, and form participation. No styling.",
4
- "version": "0.113.0",
4
+ "version": "0.115.0",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -46,13 +46,13 @@
46
46
  },
47
47
  "bugs": "https://github.com/project-fusion/fusion/issues",
48
48
  "dependencies": {
49
- "@fusion.dev/helix-core": "0.113.0",
50
- "@fusion.dev/helix-icons": "0.113.0",
49
+ "@fusion.dev/helix-core": "0.115.0",
50
+ "@fusion.dev/helix-icons": "0.115.0",
51
51
  "uqr": "^0.1.3"
52
52
  },
53
53
  "devDependencies": {
54
- "@fusion.dev/helix-cem": "0.113.0",
55
- "@fusion.dev/helix-testing": "0.113.0",
54
+ "@fusion.dev/helix-cem": "0.115.0",
55
+ "@fusion.dev/helix-testing": "0.115.0",
56
56
  "@fusion.dev/scripts": "0.0.0-dev",
57
57
  "@happy-dom/global-registrator": "^20.0.0",
58
58
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -184,6 +184,7 @@ import type {
184
184
  HelixMapClusterEvent,
185
185
  HelixMapPanEvent,
186
186
  HelixMapPartChangeEvent,
187
+ HelixMapReadyEvent,
187
188
  HelixMapRotateEvent,
188
189
  HelixMapTiltEvent,
189
190
  HelixMapZoomEvent,
@@ -11473,6 +11474,20 @@ export type HelixHeadlessMapAreaHelixMapPartChangeElementEvent =
11473
11474
  HelixHeadlessMapAreaElementEvent<HelixMapPartChangeEvent>;
11474
11475
 
11475
11476
  export type HelixHeadlessMapAreaProps = {
11477
+ /** Words drawn on the map with the area, such as `A` for a search sector.
11478
+ Unset, nothing is drawn. Keep it short: it is a caption on a map, and the
11479
+ area's `label` is what a screen reader hears. */
11480
+ caption?: (HelixHeadlessMapArea["caption"]) | undefined;
11481
+ /** Where the caption stands. `inside`, the default, at the point of the area
11482
+ furthest from its edges. `outside`, just above the area's northernmost
11483
+ point, clear of the shape, for an area whose caption would cover what is
11484
+ in it. */
11485
+ "caption-placement"?: (HelixHeadlessMapArea["captionPlacement"]) | undefined;
11486
+ /** Where the caption stands. `inside`, the default, at the point of the area
11487
+ furthest from its edges. `outside`, just above the area's northernmost
11488
+ point, clear of the shape, for an area whose caption would cover what is
11489
+ in it. */
11490
+ captionPlacement?: (HelixHeadlessMapArea["captionPlacement"]) | undefined;
11476
11491
  /** More about the area. Read after its label in the frame's list. */
11477
11492
  description?: (HelixHeadlessMapArea["description"]) | undefined;
11478
11493
  /** A name this layer shares with other layers, such as a route and its
@@ -11493,6 +11508,20 @@ first. */
11493
11508
  };
11494
11509
 
11495
11510
  export type HelixHeadlessMapAreaSolidJsProps = {
11511
+ /** Words drawn on the map with the area, such as `A` for a search sector.
11512
+ Unset, nothing is drawn. Keep it short: it is a caption on a map, and the
11513
+ area's `label` is what a screen reader hears. */
11514
+ "prop:caption"?: (HelixHeadlessMapArea["caption"]) | undefined;
11515
+ /** Where the caption stands. `inside`, the default, at the point of the area
11516
+ furthest from its edges. `outside`, just above the area's northernmost
11517
+ point, clear of the shape, for an area whose caption would cover what is
11518
+ in it. */
11519
+ "attr:caption-placement"?: (HelixHeadlessMapArea["captionPlacement"]) | undefined;
11520
+ /** Where the caption stands. `inside`, the default, at the point of the area
11521
+ furthest from its edges. `outside`, just above the area's northernmost
11522
+ point, clear of the shape, for an area whose caption would cover what is
11523
+ in it. */
11524
+ "prop:captionPlacement"?: (HelixHeadlessMapArea["captionPlacement"]) | undefined;
11496
11525
  /** More about the area. Read after its label in the frame's list. */
11497
11526
  "prop:description"?: (HelixHeadlessMapArea["description"]) | undefined;
11498
11527
  /** A name this layer shares with other layers, such as a route and its
@@ -12025,6 +12054,9 @@ export type HelixHeadlessMapHelixMapPanElementEvent =
12025
12054
  /** `helix-map-part-change` event type */
12026
12055
  export type HelixHeadlessMapHelixMapPartChangeElementEvent =
12027
12056
  HelixHeadlessMapElementEvent<HelixMapPartChangeEvent>;
12057
+ /** `helix-map-ready` event type */
12058
+ export type HelixHeadlessMapHelixMapReadyElementEvent =
12059
+ HelixHeadlessMapElementEvent<HelixMapReadyEvent>;
12028
12060
  /** `helix-map-rotate` event type */
12029
12061
  export type HelixHeadlessMapHelixMapRotateElementEvent =
12030
12062
  HelixHeadlessMapElementEvent<HelixMapRotateEvent>;
@@ -12280,6 +12312,8 @@ at any zoom, and a consumer who wants their own units multiplies by them. */
12280
12312
  "onhelix-map-part-change"?: ((
12281
12313
  e: HelixHeadlessMapHelixMapPartChangeElementEvent,
12282
12314
  ) => void) | undefined;
12315
+ /** The map has been drawn whole: its style, every tile the view needs, and the ground where it has terrain. Sent once per connection. Show a map that is finished on it, where it would otherwise draw in stages. */
12316
+ "onhelix-map-ready"?: ((e: HelixHeadlessMapHelixMapReadyElementEvent) => void) | undefined;
12283
12317
  /** A rotate or Face north button, or Shift with Left or Right, was pressed. Turn your map in response. */
12284
12318
  "onhelix-map-rotate"?: ((
12285
12319
  e: HelixHeadlessMapHelixMapRotateElementEvent,
@@ -12534,6 +12568,8 @@ at any zoom, and a consumer who wants their own units multiplies by them. */
12534
12568
  "on:helix-map-part-change"?: ((
12535
12569
  e: HelixHeadlessMapHelixMapPartChangeElementEvent,
12536
12570
  ) => void) | undefined;
12571
+ /** The map has been drawn whole: its style, every tile the view needs, and the ground where it has terrain. Sent once per connection. Show a map that is finished on it, where it would otherwise draw in stages. */
12572
+ "on:helix-map-ready"?: ((e: HelixHeadlessMapHelixMapReadyElementEvent) => void) | undefined;
12537
12573
  /** A rotate or Face north button, or Shift with Left or Right, was pressed. Turn your map in response. */
12538
12574
  "on:helix-map-rotate"?: ((
12539
12575
  e: HelixHeadlessMapHelixMapRotateElementEvent,
@@ -32487,10 +32523,22 @@ export type CustomElements = {
32487
32523
  * The frame lists each area by its `label` and `description` for screen
32488
32524
  * readers.
32489
32525
  *
32526
+ * Set `caption` to draw words on the map with the area, such as a letter for a
32527
+ * search sector, in a color that reads on the map. It is drawn rather than
32528
+ * focusable, so it adds nothing to the tab order, and a screen reader reads
32529
+ * the area's `label` in the frame's list.
32530
+ *
32490
32531
  * ## Attributes & Properties
32491
32532
  *
32492
32533
  * Component attributes and properties that can be applied to the element or by using JavaScript.
32493
32534
  *
32535
+ * - `caption`: Words drawn on the map with the area, such as `A` for a search sector.
32536
+ * Unset, nothing is drawn. Keep it short: it is a caption on a map, and the
32537
+ * area's `label` is what a screen reader hears.
32538
+ * - `caption-placement`/`captionPlacement`: Where the caption stands. `inside`, the default, at the point of the area
32539
+ * furthest from its edges. `outside`, just above the area's northernmost
32540
+ * point, clear of the shape, for an area whose caption would cover what is
32541
+ * in it.
32494
32542
  * - `description`: More about the area. Read after its label in the frame's list.
32495
32543
  * - `group`: A name this layer shares with other layers, such as a route and its
32496
32544
  * dotted legs. The layers menu shows layers in the same group as one entry,
@@ -33190,6 +33238,8 @@ export type CustomElements = {
33190
33238
  * - `pan-up-label`/`panUpLabel`: The pan up button's label.
33191
33239
  * - `zoom-in-label`/`zoomInLabel`: The zoom in button's label.
33192
33240
  * - `zoom-out-label`/`zoomOutLabel`: The zoom out button's label.
33241
+ * - `ready`: Whether the map has been drawn whole, which `drawn()` says. For a page that
33242
+ * connects after `helix-map-ready` has been sent, and missed it. (property only) (readonly)
33193
33243
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
33194
33244
  *
33195
33245
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -33219,6 +33269,7 @@ export type CustomElements = {
33219
33269
  * - `helix-map-cluster`: A cluster was pressed. Sent from the marker that shows the cluster, with the names of its places.
33220
33270
  * - `helix-map-pan`: A pan button or arrow key was pressed. Move your map in response.
33221
33271
  * - `helix-map-part-change`: Clustering was turned on or off. Used by `connectMap`; pages do not need to listen for it.
33272
+ * - `helix-map-ready`: The map has been drawn whole: its style, every tile the view needs, and the ground where it has terrain. Sent once per connection. Show a map that is finished on it, where it would otherwise draw in stages.
33222
33273
  * - `helix-map-rotate`: A rotate or Face north button, or Shift with Left or Right, was pressed. Turn your map in response.
33223
33274
  * - `helix-map-tilt`: The 3D button, or Shift with Up or Down, was pressed. Tilt your map in response.
33224
33275
  * - `helix-map-zoom`: A zoom button or key was pressed, with a direction. Zoom your map in response.
@@ -33250,6 +33301,14 @@ export type CustomElements = {
33250
33301
  * animation is one sentence, and it is the view's state where there is one:
33251
33302
  * the zoom level, the way the map faces, its tilt. A pan has no state to
33252
33303
  * say, so it says which way the map moved.
33304
+ * - `drawn(whole = true) => void`: Says the map has been drawn whole, or with `false`, that it no longer is.
33305
+ *
33306
+ * **Called by whatever draws the map**, as `connectMap` does once its driver
33307
+ * has every tile the view needs and the ground where there is terrain, and
33308
+ * with `false` when it disconnects. A page drawing its own map calls it when
33309
+ * that map is finished. The first call after the map was not drawn sends
33310
+ * `helix-map-ready` and turns on `:state(ready)`, so a page can wait on the
33311
+ * event or select on the state, and a page that connects late reads `ready`.
33253
33312
  * - `rotate(by: number) => void`: Turns the map by some degrees, clockwise where positive.
33254
33313
  * - `faceNorth() => void`: Turns the map to face north.
33255
33314
  * - `tilt(by: number) => void`: Tilts the map by some degrees, toward the horizon where positive.
@@ -33307,6 +33366,7 @@ export type CustomElements = {
33307
33366
  *
33308
33367
  * - `fullscreen`: The map fills the screen.
33309
33368
  * - `idle`: The user has been still long enough for the header and footer to fade.
33369
+ * - `ready`: The map has been drawn whole, after `helix-map-ready`.
33310
33370
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
33311
33371
  */
33312
33372
  "helix-headless-map": Partial<
@@ -52544,10 +52604,22 @@ export type CustomElementsSolidJs = {
52544
52604
  * The frame lists each area by its `label` and `description` for screen
52545
52605
  * readers.
52546
52606
  *
52607
+ * Set `caption` to draw words on the map with the area, such as a letter for a
52608
+ * search sector, in a color that reads on the map. It is drawn rather than
52609
+ * focusable, so it adds nothing to the tab order, and a screen reader reads
52610
+ * the area's `label` in the frame's list.
52611
+ *
52547
52612
  * ## Attributes & Properties
52548
52613
  *
52549
52614
  * Component attributes and properties that can be applied to the element or by using JavaScript.
52550
52615
  *
52616
+ * - `caption`: Words drawn on the map with the area, such as `A` for a search sector.
52617
+ * Unset, nothing is drawn. Keep it short: it is a caption on a map, and the
52618
+ * area's `label` is what a screen reader hears.
52619
+ * - `caption-placement`/`captionPlacement`: Where the caption stands. `inside`, the default, at the point of the area
52620
+ * furthest from its edges. `outside`, just above the area's northernmost
52621
+ * point, clear of the shape, for an area whose caption would cover what is
52622
+ * in it.
52551
52623
  * - `description`: More about the area. Read after its label in the frame's list.
52552
52624
  * - `group`: A name this layer shares with other layers, such as a route and its
52553
52625
  * dotted legs. The layers menu shows layers in the same group as one entry,
@@ -53263,6 +53335,8 @@ export type CustomElementsSolidJs = {
53263
53335
  * - `pan-up-label`/`panUpLabel`: The pan up button's label.
53264
53336
  * - `zoom-in-label`/`zoomInLabel`: The zoom in button's label.
53265
53337
  * - `zoom-out-label`/`zoomOutLabel`: The zoom out button's label.
53338
+ * - `ready`: Whether the map has been drawn whole, which `drawn()` says. For a page that
53339
+ * connects after `helix-map-ready` has been sent, and missed it. (property only) (readonly)
53266
53340
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
53267
53341
  *
53268
53342
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -53292,6 +53366,7 @@ export type CustomElementsSolidJs = {
53292
53366
  * - `helix-map-cluster`: A cluster was pressed. Sent from the marker that shows the cluster, with the names of its places.
53293
53367
  * - `helix-map-pan`: A pan button or arrow key was pressed. Move your map in response.
53294
53368
  * - `helix-map-part-change`: Clustering was turned on or off. Used by `connectMap`; pages do not need to listen for it.
53369
+ * - `helix-map-ready`: The map has been drawn whole: its style, every tile the view needs, and the ground where it has terrain. Sent once per connection. Show a map that is finished on it, where it would otherwise draw in stages.
53295
53370
  * - `helix-map-rotate`: A rotate or Face north button, or Shift with Left or Right, was pressed. Turn your map in response.
53296
53371
  * - `helix-map-tilt`: The 3D button, or Shift with Up or Down, was pressed. Tilt your map in response.
53297
53372
  * - `helix-map-zoom`: A zoom button or key was pressed, with a direction. Zoom your map in response.
@@ -53323,6 +53398,14 @@ export type CustomElementsSolidJs = {
53323
53398
  * animation is one sentence, and it is the view's state where there is one:
53324
53399
  * the zoom level, the way the map faces, its tilt. A pan has no state to
53325
53400
  * say, so it says which way the map moved.
53401
+ * - `drawn(whole = true) => void`: Says the map has been drawn whole, or with `false`, that it no longer is.
53402
+ *
53403
+ * **Called by whatever draws the map**, as `connectMap` does once its driver
53404
+ * has every tile the view needs and the ground where there is terrain, and
53405
+ * with `false` when it disconnects. A page drawing its own map calls it when
53406
+ * that map is finished. The first call after the map was not drawn sends
53407
+ * `helix-map-ready` and turns on `:state(ready)`, so a page can wait on the
53408
+ * event or select on the state, and a page that connects late reads `ready`.
53326
53409
  * - `rotate(by: number) => void`: Turns the map by some degrees, clockwise where positive.
53327
53410
  * - `faceNorth() => void`: Turns the map to face north.
53328
53411
  * - `tilt(by: number) => void`: Tilts the map by some degrees, toward the horizon where positive.
@@ -53380,6 +53463,7 @@ export type CustomElementsSolidJs = {
53380
53463
  *
53381
53464
  * - `fullscreen`: The map fills the screen.
53382
53465
  * - `idle`: The user has been still long enough for the header and footer to fade.
53466
+ * - `ready`: The map has been drawn whole, after `helix-map-ready`.
53383
53467
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
53384
53468
  */
53385
53469
  "helix-headless-map": Partial<
package/types/vue.d.ts CHANGED
@@ -200,6 +200,7 @@ import type {
200
200
  HelixMapPartChangeEvent,
201
201
  HelixMapClusterEvent,
202
202
  HelixMapPanEvent,
203
+ HelixMapReadyEvent,
203
204
  HelixMapRotateEvent,
204
205
  HelixMapTiltEvent,
205
206
  HelixMapZoomEvent,
@@ -5871,6 +5872,20 @@ export type HelixHeadlessMapAreaHelixMapPartChangeElementEvent =
5871
5872
  HelixHeadlessMapAreaElementEvent<HelixMapPartChangeEvent>;
5872
5873
 
5873
5874
  export type HelixHeadlessMapAreaVueProps = {
5875
+ /** Words drawn on the map with the area, such as `A` for a search sector.
5876
+ Unset, nothing is drawn. Keep it short: it is a caption on a map, and the
5877
+ area's `label` is what a screen reader hears. */
5878
+ caption?: (HelixHeadlessMapArea["caption"]) | undefined;
5879
+ /** Where the caption stands. `inside`, the default, at the point of the area
5880
+ furthest from its edges. `outside`, just above the area's northernmost
5881
+ point, clear of the shape, for an area whose caption would cover what is
5882
+ in it. */
5883
+ "caption-placement"?: (HelixHeadlessMapArea["captionPlacement"]) | undefined;
5884
+ /** Where the caption stands. `inside`, the default, at the point of the area
5885
+ furthest from its edges. `outside`, just above the area's northernmost
5886
+ point, clear of the shape, for an area whose caption would cover what is
5887
+ in it. */
5888
+ captionPlacement?: (HelixHeadlessMapArea["captionPlacement"]) | undefined;
5874
5889
  /** More about the area. Read after its label in the frame's list. */
5875
5890
  description?: (HelixHeadlessMapArea["description"]) | undefined;
5876
5891
  /** A name this layer shares with other layers, such as a route and its
@@ -6169,6 +6184,9 @@ export type HelixHeadlessMapHelixMapPanElementEvent =
6169
6184
  /** `helix-map-part-change` event type */
6170
6185
  export type HelixHeadlessMapHelixMapPartChangeElementEvent =
6171
6186
  HelixHeadlessMapElementEvent<HelixMapPartChangeEvent>;
6187
+ /** `helix-map-ready` event type */
6188
+ export type HelixHeadlessMapHelixMapReadyElementEvent =
6189
+ HelixHeadlessMapElementEvent<HelixMapReadyEvent>;
6172
6190
  /** `helix-map-rotate` event type */
6173
6191
  export type HelixHeadlessMapHelixMapRotateElementEvent =
6174
6192
  HelixHeadlessMapElementEvent<HelixMapRotateEvent>;
@@ -6422,6 +6440,8 @@ export type HelixHeadlessMapVueEvents = {
6422
6440
  "helix-map-pan": HelixHeadlessMapHelixMapPanElementEvent;
6423
6441
  /** Clustering was turned on or off. Used by `connectMap`; pages do not need to listen for it. */
6424
6442
  "helix-map-part-change": HelixHeadlessMapHelixMapPartChangeElementEvent;
6443
+ /** The map has been drawn whole: its style, every tile the view needs, and the ground where it has terrain. Sent once per connection. Show a map that is finished on it, where it would otherwise draw in stages. */
6444
+ "helix-map-ready": HelixHeadlessMapHelixMapReadyElementEvent;
6425
6445
  /** A rotate or Face north button, or Shift with Left or Right, was pressed. Turn your map in response. */
6426
6446
  "helix-map-rotate": HelixHeadlessMapHelixMapRotateElementEvent;
6427
6447
  /** The 3D button, or Shift with Up or Down, was pressed. Tilt your map in response. */
@@ -12134,7 +12154,7 @@ export interface WcToolkitVueGlobalComponents {
12134
12154
  HelixHeadlessLoaderVueProps,
12135
12155
  HelixHeadlessLoaderVueEvents
12136
12156
  >;
12137
- /** 'connectMap' fills the shape as a layer of the map, under its place names. The frame lists each area by its 'label' and 'description' for screen readers. */
12157
+ /** 'connectMap' fills the shape as a layer of the map, under its place names. The frame lists each area by its 'label' and 'description' for screen readers. Set 'caption' to draw words on the map with the area, such as a letter for a search sector, in a color that reads on the map. It is drawn rather than focusable, so it adds nothing to the tab order, and a screen reader reads the area's 'label' in the frame's list. */
12138
12158
  "helix-headless-map-area": DefineCustomElement<
12139
12159
  HelixHeadlessMapArea,
12140
12160
  HelixHeadlessMapAreaVueProps,