@fusion.dev/helix-headless 0.147.0 → 0.149.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.
Files changed (296) hide show
  1. package/custom-elements.json +11222 -2332
  2. package/dist/accordion/item/accordion-item.d.ts +5 -2
  3. package/dist/accordion/item/accordion-item.js +11 -7
  4. package/dist/accordion/root/accordion-root.js +4 -6
  5. package/dist/announcement/root/announcement-root.d.ts +61 -5
  6. package/dist/announcement/root/announcement-root.js +126 -20
  7. package/dist/area-chart/root/area-chart-root.d.ts +11 -0
  8. package/dist/area-chart/root/area-chart-root.js +21 -9
  9. package/dist/avatar/group/avatar-group.d.ts +10 -2
  10. package/dist/avatar/group/avatar-group.js +10 -5
  11. package/dist/badge/count.d.ts +19 -0
  12. package/dist/badge/count.js +20 -0
  13. package/dist/badge/root/badge-root.d.ts +6 -2
  14. package/dist/badge/root/badge-root.js +8 -22
  15. package/dist/bar-chart/root/bar-chart-root.d.ts +13 -1
  16. package/dist/bar-chart/root/bar-chart-root.js +17 -4
  17. package/dist/blockquote/root/blockquote-root.d.ts +66 -8
  18. package/dist/blockquote/root/blockquote-root.js +85 -8
  19. package/dist/breadcrumbs/breadcrumb/breadcrumb.js +2 -2
  20. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +8 -1
  21. package/dist/breadcrumbs/root/breadcrumbs-root.js +5 -2
  22. package/dist/button/root/button-root.d.ts +10 -1
  23. package/dist/button/root/button-root.js +3 -2
  24. package/dist/button-group/arrows.d.ts +14 -0
  25. package/dist/button-group/arrows.js +10 -0
  26. package/dist/button-group/root/button-group-root.d.ts +144 -3
  27. package/dist/button-group/root/button-group-root.js +142 -2
  28. package/dist/callout/root/callout-root.d.ts +16 -2
  29. package/dist/callout/root/callout-root.js +16 -4
  30. package/dist/canvas/describe.d.ts +10 -0
  31. package/dist/canvas/describe.js +9 -0
  32. package/dist/canvas/edge-pan.d.ts +61 -0
  33. package/dist/canvas/edge-pan.js +63 -0
  34. package/dist/canvas/neighbor.d.ts +17 -0
  35. package/dist/canvas/neighbor.js +1 -0
  36. package/dist/canvas/node/canvas-node.d.ts +12 -2
  37. package/dist/canvas/node/canvas-node.js +8 -3
  38. package/dist/canvas/root/canvas-document.d.ts +10 -0
  39. package/dist/canvas/root/canvas-document.js +1 -0
  40. package/dist/canvas/root/canvas-root.d.ts +168 -9
  41. package/dist/canvas/root/canvas-root.js +239 -69
  42. package/dist/canvas/snap.d.ts +42 -0
  43. package/dist/canvas/snap.js +32 -0
  44. package/dist/carousel/root/carousel-root.d.ts +9 -3
  45. package/dist/carousel/root/carousel-root.js +17 -10
  46. package/dist/chat/composer/chat-composer.d.ts +5 -0
  47. package/dist/chat/composer/chat-composer.js +4 -1
  48. package/dist/chat/message/chat-message.d.ts +9 -5
  49. package/dist/chat/message/chat-message.js +8 -4
  50. package/dist/chat/naming.js +2 -2
  51. package/dist/chat/root/chat-root.d.ts +40 -4
  52. package/dist/chat/root/chat-root.js +38 -14
  53. package/dist/checkbox/root/checkbox-root.d.ts +11 -0
  54. package/dist/checkbox/root/checkbox-root.js +8 -2
  55. package/dist/checkbox-group/root/checkbox-group-root.d.ts +24 -0
  56. package/dist/checkbox-group/root/checkbox-group-root.js +28 -12
  57. package/dist/checkbox-group/select-all.d.ts +11 -0
  58. package/dist/checkbox-group/select-all.js +5 -0
  59. package/dist/code-block/root/code-block-root.d.ts +20 -8
  60. package/dist/code-block/root/code-block-root.js +16 -5
  61. package/dist/color-input/root/color-input-root.d.ts +13 -0
  62. package/dist/color-input/root/color-input-root.js +18 -5
  63. package/dist/color-picker/root/color-picker-root.d.ts +19 -3
  64. package/dist/color-picker/root/color-picker-root.js +52 -24
  65. package/dist/color-picker/wheel.d.ts +11 -0
  66. package/dist/color-picker/wheel.js +9 -0
  67. package/dist/combobox/root/combobox-root.d.ts +106 -18
  68. package/dist/combobox/root/combobox-root.js +101 -26
  69. package/dist/command/root/command-root.d.ts +19 -9
  70. package/dist/command/root/command-root.js +9 -4
  71. package/dist/copy-button/root/copy-button-root.d.ts +5 -0
  72. package/dist/copy-button/root/copy-button-root.js +7 -2
  73. package/dist/data-table/root/data-table-root.d.ts +171 -29
  74. package/dist/data-table/root/data-table-root.js +284 -161
  75. package/dist/date-input/root/date-input-root.d.ts +32 -9
  76. package/dist/date-input/root/date-input-root.js +66 -44
  77. package/dist/date-picker/root/date-picker-root.d.ts +38 -15
  78. package/dist/date-picker/root/date-picker-root.js +52 -33
  79. package/dist/description-list/item/description-list-item.d.ts +4 -0
  80. package/dist/description-list/item/description-list-item.js +7 -1
  81. package/dist/dialog/root/dialog-root.d.ts +12 -1
  82. package/dist/dialog/root/dialog-root.js +11 -4
  83. package/dist/divider/root/divider-root.d.ts +45 -16
  84. package/dist/divider/root/divider-root.js +28 -4
  85. package/dist/donut-chart/root/donut-chart-root.d.ts +5 -0
  86. package/dist/donut-chart/root/donut-chart-root.js +8 -5
  87. package/dist/drawer/root/drawer-root.d.ts +12 -1
  88. package/dist/drawer/root/drawer-root.js +9 -2
  89. package/dist/drilldown/item/drilldown-item.js +3 -4
  90. package/dist/drilldown/root/drilldown-root.d.ts +5 -0
  91. package/dist/drilldown/root/drilldown-root.js +4 -1
  92. package/dist/element-events.generated.js +26 -3
  93. package/dist/empty/root/empty-root.d.ts +17 -3
  94. package/dist/empty/root/empty-root.js +29 -5
  95. package/dist/file-input/root/file-input-root.d.ts +18 -3
  96. package/dist/file-input/root/file-input-root.js +34 -18
  97. package/dist/file-input/status.js +2 -1
  98. package/dist/filter-input/chip/filter-chip.d.ts +13 -0
  99. package/dist/filter-input/chip/filter-chip.js +7 -3
  100. package/dist/filter-input/menu/filter-menu.d.ts +5 -0
  101. package/dist/filter-input/menu/filter-menu.js +3 -1
  102. package/dist/filter-input/root/filter-input-root.d.ts +20 -3
  103. package/dist/filter-input/root/filter-input-root.js +8 -4
  104. package/dist/format-date/fields.d.ts +20 -0
  105. package/dist/format-date/fields.js +14 -0
  106. package/dist/format-date/options.d.ts +2 -1
  107. package/dist/format-date/options.js +9 -38
  108. package/dist/format-date/root/format-date-root.d.ts +55 -5
  109. package/dist/format-date/root/format-date-root.js +29 -34
  110. package/dist/graph/root/graph-model.d.ts +11 -0
  111. package/dist/graph/root/graph-model.js +4 -0
  112. package/dist/graph/root/graph-root.d.ts +101 -14
  113. package/dist/graph/root/graph-root.js +140 -46
  114. package/dist/heatmap/root/heatmap-root.d.ts +37 -4
  115. package/dist/heatmap/root/heatmap-root.js +51 -16
  116. package/dist/icon-button/root/icon-button-root.d.ts +5 -0
  117. package/dist/icon-button/root/icon-button-root.js +1 -0
  118. package/dist/image/root/image-root.d.ts +11 -0
  119. package/dist/input/root/input-root.d.ts +5 -0
  120. package/dist/input/root/input-root.js +4 -1
  121. package/dist/kbd/root/kbd-root.js +1 -2
  122. package/dist/legend/root/legend-root.js +4 -17
  123. package/dist/lightbox/root/lightbox-root.d.ts +14 -4
  124. package/dist/lightbox/root/lightbox-root.js +25 -7
  125. package/dist/line-chart/root/line-chart-root.d.ts +5 -0
  126. package/dist/line-chart/root/line-chart-root.js +4 -2
  127. package/dist/list/item/list-item.d.ts +32 -0
  128. package/dist/list/item/list-item.js +34 -7
  129. package/dist/list/root/list-root.d.ts +87 -0
  130. package/dist/list/root/list-root.js +119 -23
  131. package/dist/listbox/reorder/index.d.ts +1 -0
  132. package/dist/listbox/reorder/index.js +4 -0
  133. package/dist/listbox/reorder/listbox-reorder.d.ts +83 -0
  134. package/dist/listbox/reorder/listbox-reorder.js +151 -0
  135. package/dist/listbox/root/listbox-root.d.ts +185 -33
  136. package/dist/listbox/root/listbox-root.js +166 -136
  137. package/dist/loader/root/loader-root.d.ts +5 -0
  138. package/dist/loader/root/loader-root.js +3 -1
  139. package/dist/map/area/map-area.d.ts +5 -0
  140. package/dist/map/area/map-area.js +3 -1
  141. package/dist/map/buildings/map-buildings.d.ts +5 -0
  142. package/dist/map/buildings/map-buildings.js +3 -1
  143. package/dist/map/contours/map-contours.d.ts +5 -0
  144. package/dist/map/contours/map-contours.js +3 -1
  145. package/dist/map/landcover/map-landcover.d.ts +5 -0
  146. package/dist/map/landcover/map-landcover.js +3 -1
  147. package/dist/map/marker/map-marker.d.ts +18 -2
  148. package/dist/map/marker/map-marker.js +13 -5
  149. package/dist/map/points/map-points.d.ts +5 -0
  150. package/dist/map/points/map-points.js +6 -4
  151. package/dist/map/position/map-position.d.ts +5 -0
  152. package/dist/map/position/map-position.js +3 -1
  153. package/dist/map/raster/map-raster.d.ts +5 -0
  154. package/dist/map/raster/map-raster.js +3 -1
  155. package/dist/map/root/map-root.d.ts +73 -16
  156. package/dist/map/root/map-root.js +122 -44
  157. package/dist/map/route/map-route.d.ts +5 -0
  158. package/dist/map/route/map-route.js +3 -1
  159. package/dist/map/terrain/map-terrain.d.ts +5 -0
  160. package/dist/map/terrain/map-terrain.js +3 -1
  161. package/dist/megamenu/root/megamenu-root.js +4 -11
  162. package/dist/menu/root/menu-root.d.ts +7 -2
  163. package/dist/menu/root/menu-root.js +3 -1
  164. package/dist/meter/root/meter-root.d.ts +16 -3
  165. package/dist/meter/root/meter-root.js +12 -5
  166. package/dist/navigation/root/navigation-root.d.ts +5 -0
  167. package/dist/navigation/root/navigation-root.js +7 -8
  168. package/dist/notifications/group/notification-group.d.ts +8 -1
  169. package/dist/notifications/group/notification-group.js +12 -6
  170. package/dist/notifications/notification/notification.d.ts +17 -1
  171. package/dist/notifications/notification/notification.js +6 -2
  172. package/dist/notifications/root/notifications-root.d.ts +49 -5
  173. package/dist/notifications/root/notifications-root.js +36 -8
  174. package/dist/number-input/root/number-input-root.d.ts +21 -8
  175. package/dist/number-input/root/number-input-root.js +26 -11
  176. package/dist/object-inspector/root/object-inspector-root.d.ts +56 -13
  177. package/dist/object-inspector/root/object-inspector-root.js +41 -30
  178. package/dist/outline/root/outline-root.d.ts +5 -0
  179. package/dist/outline/root/outline-root.js +3 -1
  180. package/dist/pagination/root/pagination-root.d.ts +7 -1
  181. package/dist/pagination/root/pagination-root.js +16 -7
  182. package/dist/pagination/size/pagination-size.d.ts +8 -3
  183. package/dist/pagination/size/pagination-size.js +5 -3
  184. package/dist/pagination/summary/pagination-summary.d.ts +8 -6
  185. package/dist/pagination/summary/pagination-summary.js +4 -9
  186. package/dist/pin-input/code.d.ts +23 -0
  187. package/dist/pin-input/code.js +21 -0
  188. package/dist/pin-input/root/pin-input-root.d.ts +9 -3
  189. package/dist/pin-input/root/pin-input-root.js +13 -23
  190. package/dist/popover/root/popover-root.d.ts +12 -2
  191. package/dist/popover/root/popover-root.js +10 -4
  192. package/dist/progress/root/progress-root.d.ts +7 -2
  193. package/dist/progress/root/progress-root.js +5 -2
  194. package/dist/qr-code/name.d.ts +3 -2
  195. package/dist/qr-code/name.js +2 -2
  196. package/dist/qr-code/root/qr-code-root.d.ts +26 -5
  197. package/dist/qr-code/root/qr-code-root.js +27 -6
  198. package/dist/radio/group/radio-group.d.ts +11 -0
  199. package/dist/radio/group/radio-group.js +8 -2
  200. package/dist/rating/root/rating-root.d.ts +12 -1
  201. package/dist/rating/root/rating-root.js +10 -3
  202. package/dist/scatter-chart/measures.d.ts +22 -0
  203. package/dist/scatter-chart/measures.js +11 -0
  204. package/dist/scatter-chart/root/scatter-chart-root.d.ts +22 -8
  205. package/dist/scatter-chart/root/scatter-chart-root.js +25 -23
  206. package/dist/select/root/select-root.d.ts +67 -8
  207. package/dist/select/root/select-root.js +45 -11
  208. package/dist/skip-link/root/skip-link-root.d.ts +5 -0
  209. package/dist/skip-link/root/skip-link-root.js +3 -1
  210. package/dist/slider/root/slider-root.d.ts +7 -2
  211. package/dist/slider/root/slider-root.js +11 -5
  212. package/dist/sparkline/readings.d.ts +15 -5
  213. package/dist/sparkline/readings.js +3 -3
  214. package/dist/sparkline/root/sparkline-root.d.ts +9 -4
  215. package/dist/sparkline/root/sparkline-root.js +9 -3
  216. package/dist/speed-dial/group/speed-dial-group.d.ts +48 -0
  217. package/dist/speed-dial/group/speed-dial-group.js +43 -0
  218. package/dist/speed-dial/index.d.ts +1 -0
  219. package/dist/speed-dial/index.js +1 -0
  220. package/dist/speed-dial/item/speed-dial-item.d.ts +26 -1
  221. package/dist/speed-dial/item/speed-dial-item.js +41 -3
  222. package/dist/speed-dial/long-press.d.ts +50 -0
  223. package/dist/speed-dial/long-press.js +48 -0
  224. package/dist/speed-dial/root/speed-dial-root.d.ts +85 -1
  225. package/dist/speed-dial/root/speed-dial-root.js +117 -5
  226. package/dist/splitter/root/splitter-root.d.ts +12 -3
  227. package/dist/splitter/root/splitter-root.js +22 -4
  228. package/dist/steps/root/steps-root.d.ts +9 -2
  229. package/dist/steps/root/steps-root.js +6 -3
  230. package/dist/steps/step/step.d.ts +12 -0
  231. package/dist/steps/step/step.js +11 -2
  232. package/dist/switch/root/switch-root.d.ts +11 -0
  233. package/dist/switch/root/switch-root.js +8 -2
  234. package/dist/table/cell/table-cell.d.ts +8 -1
  235. package/dist/table/cell/table-cell.js +6 -2
  236. package/dist/table/column/table-column.d.ts +11 -4
  237. package/dist/table/column/table-column.js +15 -10
  238. package/dist/table/grid-controller.d.ts +122 -0
  239. package/dist/table/grid-controller.js +299 -0
  240. package/dist/table/root/table-root.d.ts +154 -8
  241. package/dist/table/root/table-root.js +197 -38
  242. package/dist/table/row/table-row.d.ts +55 -1
  243. package/dist/table/row/table-row.js +60 -7
  244. package/dist/tabs/root/tabs-root.d.ts +5 -0
  245. package/dist/tabs/root/tabs-root.js +3 -1
  246. package/dist/tag/group/tag-group.d.ts +5 -0
  247. package/dist/tag/group/tag-group.js +8 -15
  248. package/dist/tag/root/tag-root.d.ts +14 -1
  249. package/dist/tag/root/tag-root.js +11 -8
  250. package/dist/textarea/root/textarea-root.d.ts +5 -0
  251. package/dist/textarea/root/textarea-root.js +3 -1
  252. package/dist/time-input/root/time-input-root.d.ts +14 -7
  253. package/dist/time-input/root/time-input-root.js +43 -32
  254. package/dist/time-picker/root/time-picker-root.d.ts +16 -7
  255. package/dist/time-picker/root/time-picker-root.js +28 -12
  256. package/dist/toast/item/toast-item.d.ts +13 -3
  257. package/dist/toast/item/toast-item.js +2 -0
  258. package/dist/toast/root/toast-root.d.ts +22 -2
  259. package/dist/toast/root/toast-root.js +24 -17
  260. package/dist/toggle/group/toggle-group.js +3 -5
  261. package/dist/toolbar/root/toolbar-root.d.ts +36 -0
  262. package/dist/toolbar/root/toolbar-root.js +43 -9
  263. package/dist/tooltip/root/tooltip-root.d.ts +27 -17
  264. package/dist/tooltip/root/tooltip-root.js +1 -2
  265. package/dist/tour/root/tour-root.d.ts +8 -2
  266. package/dist/tour/root/tour-root.js +4 -2
  267. package/dist/tour/stop/tour-stop.d.ts +5 -0
  268. package/dist/tour/stop/tour-stop.js +6 -1
  269. package/dist/tree/grip.d.ts +5 -0
  270. package/dist/tree/grip.js +1 -0
  271. package/dist/tree/item/tree-item.d.ts +24 -0
  272. package/dist/tree/item/tree-item.js +27 -5
  273. package/dist/tree/root/tree-root.d.ts +66 -1
  274. package/dist/tree/root/tree-root.js +77 -5
  275. package/dist/trend/root/trend-root.d.ts +20 -4
  276. package/dist/trend/root/trend-root.js +20 -5
  277. package/dist/video/root/video-root.d.ts +23 -3
  278. package/dist/video/root/video-root.js +56 -15
  279. package/dist/video-playlist/menu/video-playlist-menu.d.ts +5 -0
  280. package/dist/video-playlist/menu/video-playlist-menu.js +3 -1
  281. package/dist/video-playlist/root/video-playlist-root.d.ts +5 -0
  282. package/dist/video-playlist/root/video-playlist-root.js +3 -1
  283. package/dist/virtual-list/root/virtual-list-root.d.ts +19 -3
  284. package/dist/virtual-list/root/virtual-list-root.js +10 -19
  285. package/lint.json +1 -1
  286. package/package.json +7 -6
  287. package/types/jsx.d.ts +6005 -2114
  288. package/types/svelte.d.ts +1 -0
  289. package/types/vue.d.ts +1594 -676
  290. package/types/words.d.ts +3280 -0
  291. package/dist/kbd/keys.d.ts +0 -29
  292. package/dist/kbd/keys.js +0 -52
  293. package/dist/toast/hotkey.d.ts +0 -22
  294. package/dist/toast/hotkey.js +0 -23
  295. package/dist/tooltip/focus-target.d.ts +0 -6
  296. package/dist/tooltip/focus-target.js +0 -9
@@ -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, HelixBeforeChangeEvent, HelixBeforeToggleEvent, HelixElement, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixToggleEvent, hostAria, KeyboardNavigationController, MixinViewport, requestChange, } from '@fusion.dev/helix-core';
7
+ import { customElement, focusItemOf, formatWords, HelixActivateEvent, HelixBeforeChangeEvent, HelixBeforeToggleEvent, HelixElement, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixToggleEvent, hostAria, KeyboardNavigationController, MixinViewport, requestChange, words, } 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';
@@ -42,9 +42,12 @@ const SETTLES = 400;
42
42
  let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement) {
43
43
  constructor() {
44
44
  super(...arguments);
45
+ this.activateHintLabel = 'Press the map to use it';
45
46
  this.bearing = 0;
46
47
  this.cluster = false;
48
+ this.controlsLabel = 'Map controls';
47
49
  this.faceNorthLabel = 'Face north';
50
+ this.fallbackLabel = 'Map';
48
51
  this.flatLabel = 'Looking straight down';
49
52
  this.hybridLabel = 'Hybrid';
50
53
  this.label = '';
@@ -61,9 +64,12 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
61
64
  this.rotateRightLabel = 'Rotate right';
62
65
  this.satelliteLabel = 'Satellite';
63
66
  this.standardLabel = 'Standard';
64
- this.tiltedLabel = 'Tilted {degrees} degrees';
67
+ this.tiltedLabel = '{degrees, plural, one {Tilted # degree} other {Tilted # degrees}}';
65
68
  this.tiltLabel = 'Show in 3D';
66
- this.turnedLabel = 'Facing {degrees} degrees';
69
+ this.turnedLabel = '{degrees, plural, one {Facing # degree} other {Facing # degrees}}';
70
+ this.twoFingerHintLabel = 'Use two fingers to move the map';
71
+ this.usingLabel = 'Using the map. Press Escape to scroll the page again.';
72
+ this.wheelHintLabel = 'Use {key} and scroll to zoom the map';
67
73
  this.zoomedLabel = 'Zoom level {level}';
68
74
  this.said = '';
69
75
  this.asked = undefined;
@@ -89,15 +95,13 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
89
95
  };
90
96
  this.stop = 0;
91
97
  this.keys = new KeyboardNavigationController(this, {
92
- items: () => this.markers.map((marker, at) => ({
93
- contains: (node) => node !== null && (marker.contains(node) || marker.shadowRoot?.contains(node) === true),
98
+ items: () => this.markers.map((marker, at) => focusItemOf(marker, {
94
99
  disabled: marker.gatheredBy !== undefined || !placed(marker),
95
- focusItem: () => {
100
+ focus: () => {
96
101
  this.stop = at;
97
102
  marker.focus();
98
103
  },
99
- select: () => { },
100
- selected: false,
104
+ owns: (node) => node !== null && (marker.contains(node) || marker.shadowRoot?.contains(node) === true),
101
105
  })),
102
106
  origin: 'focus',
103
107
  selects: () => false,
@@ -105,10 +109,26 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
105
109
  this.handleFocusIn = (event) => {
106
110
  const marker = this.markerOf(event);
107
111
  const at = marker ? this.markers.indexOf(marker) : -1;
112
+ this.focused = at === -1 ? undefined : marker;
108
113
  if (at !== -1) {
109
114
  this.stop = at;
110
115
  }
111
116
  };
117
+ this.handleFocusOut = (event) => {
118
+ const marker = this.markerOf(event);
119
+ if (!marker || marker !== this.focused) {
120
+ return;
121
+ }
122
+ if (event.relatedTarget) {
123
+ this.focused = undefined;
124
+ return;
125
+ }
126
+ queueMicrotask(() => {
127
+ if (marker.isConnected && this.focused === marker) {
128
+ this.focused = undefined;
129
+ }
130
+ });
131
+ };
112
132
  this.handleClick = (event) => {
113
133
  const marker = this.markerOf(event);
114
134
  if (marker) {
@@ -136,6 +156,7 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
136
156
  this.requestUpdate();
137
157
  };
138
158
  }
159
+ static { this.words = 'helix-map'; }
139
160
  moved() {
140
161
  if (!this.asked || performance.now() - this.asked.at > ASK_LAPSES) {
141
162
  return;
@@ -162,8 +183,6 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
162
183
  if (!asked) {
163
184
  return;
164
185
  }
165
- const numbers = formatNumbers(this.closest('[lang]')?.getAttribute('lang') ?? '');
166
- const degrees = (value) => numbers(Math.round(value));
167
186
  const bearing = ((Math.round(this.bearing) % 360) + 360) % 360;
168
187
  const words = {
169
188
  down: this.movedDownLabel,
@@ -176,14 +195,14 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
176
195
  : asked.kind === 'zoom'
177
196
  ? this.zoomLevel === undefined
178
197
  ? ''
179
- : fillTemplate(this.zoomedLabel, { level: numbers(this.zoomLevel) })
198
+ : formatWords(this, 'zoomedLabel', { level: this.zoomLevel })
180
199
  : asked.kind === 'tilt'
181
200
  ? Math.round(this.pitch) === 0
182
201
  ? this.flatLabel
183
- : fillTemplate(this.tiltedLabel, { degrees: degrees(this.pitch) })
202
+ : formatWords(this, 'tiltedLabel', { degrees: Math.round(this.pitch) })
184
203
  : bearing === 0
185
204
  ? this.northLabel
186
- : fillTemplate(this.turnedLabel, { degrees: degrees(bearing) });
205
+ : formatWords(this, 'turnedLabel', { degrees: bearing });
187
206
  this.said = next !== '' && next === this.said ? `${next}\u00a0` : next;
188
207
  }
189
208
  ask(kind, side) {
@@ -267,6 +286,23 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
267
286
  .composedPath()
268
287
  .find((one) => one.isMapMarker === true);
269
288
  }
289
+ refocus(stop) {
290
+ const gone = this.focused;
291
+ if (!gone || this.markers.includes(gone)) {
292
+ return;
293
+ }
294
+ this.focused = undefined;
295
+ const active = document.activeElement;
296
+ if (active !== null && active !== document.body) {
297
+ return;
298
+ }
299
+ if (stop) {
300
+ stop.focus();
301
+ }
302
+ else {
303
+ this.partNamed('region')?.focus();
304
+ }
305
+ }
270
306
  activate(marker) {
271
307
  if (marker.gathered.length > 1) {
272
308
  marker.dispatchEvent(new HelixMapClusterEvent({ labels: [...marker.gathered] }));
@@ -274,14 +310,6 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
274
310
  }
275
311
  this.dispatchEvent(new HelixActivateEvent({ value: marker.name || marker.label || '' }));
276
312
  }
277
- get restingGestureLabels() {
278
- return {
279
- activate: 'Press the map to use it',
280
- twoFinger: 'Use two fingers to move the map',
281
- using: 'Using the map. Press Escape to scroll the page again.',
282
- wheel: 'Use {key} and scroll to zoom the map',
283
- };
284
- }
285
313
  gesturesChanged() {
286
314
  this.dispatchEvent(new HelixMapPartChangeEvent({ kind: 'gestures' }));
287
315
  }
@@ -290,6 +318,7 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
290
318
  this.addEventListener(HelixMapPartChangeEvent.eventName, this.handlePartChange);
291
319
  this.addEventListener('click', this.handleClick);
292
320
  this.addEventListener('focusin', this.handleFocusIn);
321
+ this.addEventListener('focusout', this.handleFocusOut);
293
322
  this.addEventListener('keydown', this.handleMarkerKeydown);
294
323
  this.addEventListener('keyup', this.handleMarkerKeyup);
295
324
  this.hiding = new MutationObserver(() => this.requestUpdate());
@@ -304,6 +333,7 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
304
333
  this.removeEventListener(HelixMapPartChangeEvent.eventName, this.handlePartChange);
305
334
  this.removeEventListener('click', this.handleClick);
306
335
  this.removeEventListener('focusin', this.handleFocusIn);
336
+ this.removeEventListener('focusout', this.handleFocusOut);
307
337
  this.removeEventListener('keydown', this.handleMarkerKeydown);
308
338
  this.removeEventListener('keyup', this.handleMarkerKeyup);
309
339
  }
@@ -331,6 +361,7 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
331
361
  for (const marker of markers) {
332
362
  marker.current = marker === stop;
333
363
  }
364
+ this.refocus(stop);
334
365
  if (changed.has('cluster')) {
335
366
  this.dispatchEvent(new HelixMapPartChangeEvent({ kind: 'place' }));
336
367
  }
@@ -371,9 +402,11 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
371
402
  }}
372
403
  @keydown=${this.handleMenuKeydown}
373
404
  >
374
- <svg aria-hidden="true" fill="currentColor" height="16" viewBox=${stack.viewBox} width="16">
375
- ${unsafeSVG(stack.content)}
376
- </svg>
405
+ <slot name="layers-icon">
406
+ <svg aria-hidden="true" fill="currentColor" height="16" viewBox=${stack.viewBox} width="16">
407
+ ${unsafeSVG(stack.content)}
408
+ </svg>
409
+ </slot>
377
410
  </button>
378
411
  <div
379
412
  part="layers-menu"
@@ -428,41 +461,44 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
428
461
  </div>`;
429
462
  }
430
463
  renderCompass(pan, rotate) {
464
+ const { faceNorthLabel } = this;
431
465
  return html `<div part="compass">
432
466
  ${rotate
433
467
  ? html `<button part="rotate-left" aria-label=${this.rotateLeftLabel} type="button" @click=${() => this.rotate(-ROTATE_STEP)}>
434
- ↺
468
+ <slot name="rotate-left-icon">↺</slot>
435
469
  </button>`
436
470
  : nothing}
437
471
  ${pan
438
472
  ? html `<button part="pan-up" aria-label=${this.panLabel('up')} type="button" @click=${() => this.pan('up')}>
439
- ${this.panGlyph('up')}
473
+ <slot name="pan-up-icon">${this.panGlyph('up')}</slot>
440
474
  </button>`
441
475
  : nothing}
442
476
  ${rotate
443
477
  ? html `<button part="rotate-right" aria-label=${this.rotateRightLabel} type="button" @click=${() => this.rotate(ROTATE_STEP)}>
444
- ↻
478
+ <slot name="rotate-right-icon">↻</slot>
445
479
  </button>`
446
480
  : nothing}
447
481
  ${pan
448
482
  ? html `<button part="pan-start" aria-label=${this.panLabel('start')} type="button" @click=${() => this.pan('start')}>
449
- ${this.panGlyph('start')}
483
+ <slot name="pan-start-icon">${this.panGlyph('start')}</slot>
450
484
  </button>`
451
485
  : nothing}
452
- <button part="face-north" aria-label=${this.faceNorthLabel} type="button" style=${`--map-needle-turn: ${-this.bearing}deg`} @click=${() => this.faceNorth()}>
453
- <svg part="needle" aria-hidden="true" viewBox="0 0 16 16">
454
- <path data-end="north" d="M8 1.5 10.5 8h-5Z" />
455
- <path data-end="south" d="M8 14.5 5.5 8h5Z" />
456
- </svg>
486
+ <button part="face-north" aria-label=${faceNorthLabel} type="button" style=${`--map-needle-turn: ${-this.bearing}deg`} @click=${() => this.faceNorth()}>
487
+ <slot name="face-north-icon">
488
+ <svg part="needle" aria-hidden="true" viewBox="0 0 16 16">
489
+ <path data-end="north" d="M8 1.5 10.5 8h-5Z" />
490
+ <path data-end="south" d="M8 14.5 5.5 8h5Z" />
491
+ </svg>
492
+ </slot>
457
493
  </button>
458
494
  ${pan
459
495
  ? html `<button part="pan-end" aria-label=${this.panLabel('end')} type="button" @click=${() => this.pan('end')}>
460
- ${this.panGlyph('end')}
496
+ <slot name="pan-end-icon">${this.panGlyph('end')}</slot>
461
497
  </button>`
462
498
  : nothing}
463
499
  ${pan
464
500
  ? html `<button part="pan-down" aria-label=${this.panLabel('down')} type="button" @click=${() => this.pan('down')}>
465
- ${this.panGlyph('down')}
501
+ <slot name="pan-down-icon">${this.panGlyph('down')}</slot>
466
502
  </button>`
467
503
  : nothing}
468
504
  </div>`;
@@ -477,7 +513,7 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
477
513
  if (!pan && !zoom && !rotate && !tilt && !fullscreen && menu === nothing) {
478
514
  return nothing;
479
515
  }
480
- return html `<div part="controls" role="group" aria-label=${this.controlsLabel ?? this.restingControlsLabel}>
516
+ return html `<div part="controls" role="group" aria-label=${this.controlsLabel}>
481
517
  ${fullscreen
482
518
  ? html `<button
483
519
  part="fullscreen"
@@ -486,7 +522,7 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
486
522
  type="button"
487
523
  @click=${this.toggleFullscreen}
488
524
  >
489
- ⤢
525
+ <slot name="fullscreen-icon">⤢</slot>
490
526
  </button>`
491
527
  : nothing}
492
528
  ${menu}
@@ -498,15 +534,15 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
498
534
  type="button"
499
535
  @click=${() => this.tiltTo(this.pitch > 0 ? 0 : TILTED)}
500
536
  >
501
- 3D
537
+ <slot name="tilt-icon">3D</slot>
502
538
  </button>`
503
539
  : nothing}
504
540
  ${zoom
505
541
  ? html `<button part="zoom-in" aria-label=${this.zoomInLabel} type="button" @click=${() => this.zoom(1)}>
506
- +
542
+ <slot name="zoom-in-icon">+</slot>
507
543
  </button>
508
544
  <button part="zoom-out" aria-label=${this.zoomOutLabel} type="button" @click=${() => this.zoom(-1)}>
509
- −
545
+ <slot name="zoom-out-icon">−</slot>
510
546
  </button>`
511
547
  : nothing}
512
548
  ${this.drawsCompass ? this.renderCompass(pan, rotate) : nothing}
@@ -550,14 +586,14 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
550
586
  this.ask('zoom');
551
587
  return new HelixMapZoomEvent(detail);
552
588
  }
553
- get restingControlsLabel() {
554
- return 'Map controls';
555
- }
556
589
  willUpdate(changed) {
557
590
  super.willUpdate(changed);
558
591
  hostAria(this.internals, { label: this.label });
559
592
  this.toggleState('fullscreen', this.filled);
560
593
  this.toggleState('idle', this.resting);
594
+ this.toggleState('layers-open', this.layersOpen);
595
+ this.toggleState('rotated', Math.round(this.bearing) % 360 !== 0);
596
+ this.toggleState('tilted', Math.round(this.pitch) !== 0);
561
597
  }
562
598
  renderLayers() {
563
599
  const layers = this.layers.filter((layer) => this.shown(layer));
@@ -572,7 +608,7 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
572
608
  return html `<div
573
609
  part="region"
574
610
  role="group"
575
- aria-label=${this.label || this.getAttribute('aria-label') || 'Map'}
611
+ aria-label=${this.label || this.getAttribute('aria-label') || this.fallbackLabel}
576
612
  aria-keyshortcuts=${this.keyShortcuts}
577
613
  tabindex="0"
578
614
  @focusin=${this.idle.stir}
@@ -599,6 +635,10 @@ let HelixHeadlessMap = class HelixHeadlessMap extends MixinViewport(HelixElement
599
635
  </div>`;
600
636
  }
601
637
  };
638
+ __decorate([
639
+ words,
640
+ property({ attribute: 'activate-hint-label' })
641
+ ], HelixHeadlessMap.prototype, "activateHintLabel", void 0);
602
642
  __decorate([
603
643
  property({ type: Number })
604
644
  ], HelixHeadlessMap.prototype, "bearing", void 0);
@@ -606,18 +646,30 @@ __decorate([
606
646
  property({ type: Boolean })
607
647
  ], HelixHeadlessMap.prototype, "cluster", void 0);
608
648
  __decorate([
649
+ words,
650
+ property({ attribute: 'controls-label' })
651
+ ], HelixHeadlessMap.prototype, "controlsLabel", void 0);
652
+ __decorate([
653
+ words,
609
654
  property({ attribute: 'face-north-label' })
610
655
  ], HelixHeadlessMap.prototype, "faceNorthLabel", void 0);
611
656
  __decorate([
657
+ words,
658
+ property({ attribute: 'fallback-label' })
659
+ ], HelixHeadlessMap.prototype, "fallbackLabel", void 0);
660
+ __decorate([
661
+ words,
612
662
  property({ attribute: 'flat-label' })
613
663
  ], HelixHeadlessMap.prototype, "flatLabel", void 0);
614
664
  __decorate([
665
+ words,
615
666
  property({ attribute: 'hybrid-label' })
616
667
  ], HelixHeadlessMap.prototype, "hybridLabel", void 0);
617
668
  __decorate([
618
669
  property()
619
670
  ], HelixHeadlessMap.prototype, "label", void 0);
620
671
  __decorate([
672
+ words,
621
673
  property({ attribute: 'layers-label' })
622
674
  ], HelixHeadlessMap.prototype, "layersLabel", void 0);
623
675
  __decorate([
@@ -627,48 +679,74 @@ __decorate([
627
679
  property({ attribute: 'map-type', reflect: true })
628
680
  ], HelixHeadlessMap.prototype, "mapType", void 0);
629
681
  __decorate([
682
+ words,
630
683
  property({ attribute: 'map-type-label' })
631
684
  ], HelixHeadlessMap.prototype, "mapTypeLabel", void 0);
632
685
  __decorate([
686
+ words,
633
687
  property({ attribute: 'moved-down-label' })
634
688
  ], HelixHeadlessMap.prototype, "movedDownLabel", void 0);
635
689
  __decorate([
690
+ words,
636
691
  property({ attribute: 'moved-left-label' })
637
692
  ], HelixHeadlessMap.prototype, "movedLeftLabel", void 0);
638
693
  __decorate([
694
+ words,
639
695
  property({ attribute: 'moved-right-label' })
640
696
  ], HelixHeadlessMap.prototype, "movedRightLabel", void 0);
641
697
  __decorate([
698
+ words,
642
699
  property({ attribute: 'moved-up-label' })
643
700
  ], HelixHeadlessMap.prototype, "movedUpLabel", void 0);
644
701
  __decorate([
702
+ words,
645
703
  property({ attribute: 'north-label' })
646
704
  ], HelixHeadlessMap.prototype, "northLabel", void 0);
647
705
  __decorate([
648
706
  property({ type: Number })
649
707
  ], HelixHeadlessMap.prototype, "pitch", void 0);
650
708
  __decorate([
709
+ words,
651
710
  property({ attribute: 'rotate-left-label' })
652
711
  ], HelixHeadlessMap.prototype, "rotateLeftLabel", void 0);
653
712
  __decorate([
713
+ words,
654
714
  property({ attribute: 'rotate-right-label' })
655
715
  ], HelixHeadlessMap.prototype, "rotateRightLabel", void 0);
656
716
  __decorate([
717
+ words,
657
718
  property({ attribute: 'satellite-label' })
658
719
  ], HelixHeadlessMap.prototype, "satelliteLabel", void 0);
659
720
  __decorate([
721
+ words,
660
722
  property({ attribute: 'standard-label' })
661
723
  ], HelixHeadlessMap.prototype, "standardLabel", void 0);
662
724
  __decorate([
725
+ words,
663
726
  property({ attribute: 'tilted-label' })
664
727
  ], HelixHeadlessMap.prototype, "tiltedLabel", void 0);
665
728
  __decorate([
729
+ words,
666
730
  property({ attribute: 'tilt-label' })
667
731
  ], HelixHeadlessMap.prototype, "tiltLabel", void 0);
668
732
  __decorate([
733
+ words,
669
734
  property({ attribute: 'turned-label' })
670
735
  ], HelixHeadlessMap.prototype, "turnedLabel", void 0);
671
736
  __decorate([
737
+ words,
738
+ property({ attribute: 'two-finger-hint-label' })
739
+ ], HelixHeadlessMap.prototype, "twoFingerHintLabel", void 0);
740
+ __decorate([
741
+ words,
742
+ property({ attribute: 'using-label' })
743
+ ], HelixHeadlessMap.prototype, "usingLabel", void 0);
744
+ __decorate([
745
+ words,
746
+ property({ attribute: 'wheel-hint-label' })
747
+ ], HelixHeadlessMap.prototype, "wheelHintLabel", void 0);
748
+ __decorate([
749
+ words,
672
750
  property({ attribute: 'zoomed-label' })
673
751
  ], HelixHeadlessMap.prototype, "zoomedLabel", void 0);
674
752
  __decorate([
@@ -34,6 +34,11 @@ export declare const pointsConverter: {
34
34
  * @event {HelixMapPartChangeEvent} helix-map-part-change - The route's points, progress, name, or color changed. Used by `connectMap`; pages do not need to listen for it.
35
35
  */
36
36
  export declare class HelixHeadlessMapRoute extends HelixElement {
37
+ /**
38
+ * The key this part's words are registered under, its styled tag:
39
+ * `registerWords('de', { 'helix-map-route': { label: 'Route' } })`.
40
+ */
41
+ static words: string;
37
42
  /**
38
43
  * More about the route, such as its distance or time. Read after its label
39
44
  * in the frame's list.
@@ -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, HelixElement, HelixMapPartChangeEvent } from '@fusion.dev/helix-core';
7
+ import { customElement, HelixElement, HelixMapPartChangeEvent, words } from '@fusion.dev/helix-core';
8
8
  import { nothing } from 'lit';
9
9
  import { property } from 'lit/decorators.js';
10
10
  export const pointsOf = (value) => (value ?? '')
@@ -24,6 +24,7 @@ let HelixHeadlessMapRoute = class HelixHeadlessMapRoute extends HelixElement {
24
24
  this.layerKind = 'route';
25
25
  this.label = 'Route';
26
26
  }
27
+ static { this.words = 'helix-map-route'; }
27
28
  updated(changed) {
28
29
  super.updated(changed);
29
30
  this.dispatchEvent(new HelixMapPartChangeEvent({ kind: 'layer' }));
@@ -39,6 +40,7 @@ __decorate([
39
40
  property()
40
41
  ], HelixHeadlessMapRoute.prototype, "group", void 0);
41
42
  __decorate([
43
+ words,
42
44
  property()
43
45
  ], HelixHeadlessMapRoute.prototype, "label", void 0);
44
46
  __decorate([
@@ -28,6 +28,11 @@ export type MapTerrainEncoding = 'mapbox' | 'terrarium';
28
28
  * @event {HelixMapPartChangeEvent} helix-map-part-change - The tiles, how the ground is raised, or the layer's name or colors changed. Used by `connectMap`; pages do not need to listen for it.
29
29
  */
30
30
  export declare class HelixHeadlessMapTerrain extends HelixElement {
31
+ /**
32
+ * The key this part's words are registered under, its styled tag:
33
+ * `registerWords('de', { 'helix-map-terrain': { label: 'Gelände' } })`.
34
+ */
35
+ static words: string;
31
36
  /** The elevation provider's credit, shown in the frame's footer. Links in it stay links. */
32
37
  attribution?: string;
33
38
  /** More about the terrain. Read after the label in the frame's list. */
@@ -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, HelixElement, HelixMapPartChangeEvent } from '@fusion.dev/helix-core';
7
+ import { customElement, HelixElement, HelixMapPartChangeEvent, words } from '@fusion.dev/helix-core';
8
8
  import { nothing } from 'lit';
9
9
  import { property } from 'lit/decorators.js';
10
10
  let HelixHeadlessMapTerrain = class HelixHeadlessMapTerrain extends HelixElement {
@@ -17,6 +17,7 @@ let HelixHeadlessMapTerrain = class HelixHeadlessMapTerrain extends HelixElement
17
17
  this.label = 'Terrain';
18
18
  this.raised = false;
19
19
  }
20
+ static { this.words = 'helix-map-terrain'; }
20
21
  updated(changed) {
21
22
  super.updated(changed);
22
23
  this.dispatchEvent(new HelixMapPartChangeEvent({ kind: 'layer' }));
@@ -41,6 +42,7 @@ __decorate([
41
42
  property()
42
43
  ], HelixHeadlessMapTerrain.prototype, "group", void 0);
43
44
  __decorate([
45
+ words,
44
46
  property()
45
47
  ], HelixHeadlessMapTerrain.prototype, "label", void 0);
46
48
  __decorate([
@@ -5,7 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  var HelixHeadlessMegamenu_1;
8
- import { anchorElement, customElement, deepContains, focusableElements, HelixElement, KeyboardNavigationController, MixinControllerOpen, PopoverController, tellDisclosure, } from '@fusion.dev/helix-core';
8
+ import { anchorElement, customElement, deepContains, focusableElements, focusItemOf, HelixElement, KeyboardNavigationController, MixinControllerOpen, PopoverController, tellDisclosure, } from '@fusion.dev/helix-core';
9
9
  import { html, nothing } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
11
11
  import { HandOver } from '../hand-over.js';
@@ -30,16 +30,9 @@ let HelixHeadlessMegamenu = class HelixHeadlessMegamenu extends MixinControllerO
30
30
  });
31
31
  this.keys = new KeyboardNavigationController(this, {
32
32
  items: () => !this.parentElement?.shadowRoot
33
- ? HelixHeadlessMegamenu_1.bar.alongside(this).map((megamenu) => ({
34
- contains: (node) => {
35
- const control = megamenu.trigger;
36
- return node === control || control.contains(node);
37
- },
38
- disabled: false,
39
- focusItem: () => megamenu.trigger.focus(),
40
- select: () => { },
41
- selected: false,
42
- }))
33
+ ? HelixHeadlessMegamenu_1.bar
34
+ .alongside(this)
35
+ .map((megamenu) => focusItemOf(megamenu.trigger))
43
36
  : [],
44
37
  origin: 'focus',
45
38
  reserved: () => ['ArrowDown', 'ArrowUp'],
@@ -25,8 +25,8 @@ declare const HelixHeadlessMenu_base: (new (...args: any[]) => import("@fusion.d
25
25
  * onto your element after it upgrades causes a hydration mismatch.
26
26
  *
27
27
  * Group rows under a heading with `Menu.Section`, which is a `group` named by
28
- * its heading. Between runs of rows, a `<helix-divider announced>` is a
29
- * separator a screen reader announces.
28
+ * its heading. Between runs of rows, a `<helix-divider>` is a separator a
29
+ * screen reader announces.
30
30
  *
31
31
  * Keys: Enter, Space or Down Arrow on the trigger opens the menu on its first
32
32
  * row, and Up Arrow on its last. In the menu, Up and Down Arrow move between
@@ -80,6 +80,11 @@ declare const HelixHeadlessMenu_base: (new (...args: any[]) => import("@fusion.d
80
80
  * @cssstate start - A row on the current page has content in its leading column, so every row keeps that column.
81
81
  */
82
82
  export declare class HelixHeadlessMenu extends HelixHeadlessMenu_base {
83
+ /**
84
+ * The key this family's words are registered under, its styled tag:
85
+ * `registerWords('de', { 'helix-menu': { backLabel: 'Zurück' } })`.
86
+ */
87
+ static words: string;
83
88
  /**
84
89
  * The text of the row that returns from a submenu.
85
90
  */
@@ -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 { AriaForwardController, anchorElement, customElement, DrilldownController, deepActiveElement, deepContains, HelixElement, inlineStep, KeyboardNavigationController, MixinCollection, MixinControllerOpen, PopoverController, scrollItemIntoView, slottedWords, tellDisclosure, typeaheadBy, } from '@fusion.dev/helix-core';
7
+ import { AriaForwardController, anchorElement, customElement, DrilldownController, deepActiveElement, deepContains, HelixElement, inlineStep, KeyboardNavigationController, MixinCollection, MixinControllerOpen, PopoverController, scrollItemIntoView, slottedWords, tellDisclosure, typeaheadBy, words, } from '@fusion.dev/helix-core';
8
8
  import { caretLeft } from '@fusion.dev/helix-icons';
9
9
  import { html, nothing } from 'lit';
10
10
  import { property } from 'lit/decorators.js';
@@ -132,6 +132,7 @@ let HelixHeadlessMenu = class HelixHeadlessMenu extends MixinCollection(MixinCon
132
132
  }
133
133
  };
134
134
  }
135
+ static { this.words = 'helix-menu'; }
135
136
  tellTrigger() {
136
137
  const slot = this.renderRoot?.querySelector('slot[name="trigger"]');
137
138
  tellDisclosure(slot?.assignedElements({ flatten: true })[0], this.open, 'menu');
@@ -302,6 +303,7 @@ let HelixHeadlessMenu = class HelixHeadlessMenu extends MixinCollection(MixinCon
302
303
  }
303
304
  };
304
305
  __decorate([
306
+ words,
305
307
  property({ attribute: 'back-label' })
306
308
  ], HelixHeadlessMenu.prototype, "backLabel", void 0);
307
309
  __decorate([
@@ -59,6 +59,11 @@ export type MeterBand = 'fair' | 'good' | 'poor';
59
59
  * @cssstate under - The value is below `min`.
60
60
  */
61
61
  export declare class HelixHeadlessMeter extends HelixElement {
62
+ /**
63
+ * The key this family's words are registered under, its styled tag:
64
+ * `registerWords('de', { 'helix-meter': { label: 'Messwert' } })`.
65
+ */
66
+ static words: string;
62
67
  /**
63
68
  * Sets the band directly, for a rule that `low`, `high`, and `optimum` cannot
64
69
  * express.
@@ -93,7 +98,9 @@ export declare class HelixHeadlessMeter extends HelixElement {
93
98
  * The words each band is said with under `live`, by its name, written as
94
99
  * JSON in the attribute: `band-labels='{"poor":"Almost full"}'`.
95
100
  *
96
- * A band left out keeps its default: "Good", "Fair" or "Poor".
101
+ * A band left out keeps its default: "Good", "Fair" or "Poor". Reading the
102
+ * property gives every band's words, yours over the registry's over the
103
+ * English.
97
104
  */
98
105
  bandLabels: Partial<Record<MeterBand, string>>;
99
106
  /**
@@ -134,9 +141,15 @@ export declare class HelixHeadlessMeter extends HelixElement {
134
141
  */
135
142
  live: boolean;
136
143
  /**
137
- * The locale the percentage is written in, such as `fr` for `72 %`.
144
+ * What `live` says as the reading moves into another band. `{reading}` is
145
+ * the reading as it is shown, and `{band}` the band's words from
146
+ * `band-labels`.
147
+ */
148
+ liveLabel: string;
149
+ /**
150
+ * The locale the words and the percentage are in, such as `fr` for `72 %`.
138
151
  *
139
- * Absent uses the runtime's own.
152
+ * Absent reads the nearest `lang`, then the runtime's own.
140
153
  */
141
154
  locale: string;
142
155
  /**