@fusion.dev/helix-core 0.145.0 → 0.147.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 (302) hide show
  1. package/custom-elements.json +6585 -1920
  2. package/dist/controllers/aria-forward-controller/aria-forward-controller.d.ts +3 -2
  3. package/dist/controllers/aria-forward-controller/aria-forward-controller.js +8 -17
  4. package/dist/controllers/chart-pointer-controller/chart-pointer-controller.d.ts +71 -3
  5. package/dist/controllers/chart-pointer-controller/chart-pointer-controller.js +50 -9
  6. package/dist/controllers/chart-pointer-controller/reading-step.d.ts +7 -1
  7. package/dist/controllers/chart-pointer-controller/reading-step.js +5 -0
  8. package/dist/controllers/copy-controller/copy-controller.d.ts +4 -1
  9. package/dist/controllers/copy-controller/copy-controller.js +2 -1
  10. package/dist/controllers/countdown-controller/countdown-controller.d.ts +4 -1
  11. package/dist/controllers/countdown-controller/countdown-controller.js +3 -1
  12. package/dist/controllers/keyboard-navigation-controller/keyboard-navigation-controller.d.ts +14 -55
  13. package/dist/controllers/keyboard-navigation-controller/keyboard-navigation-controller.js +7 -39
  14. package/dist/controllers/relative-clock-controller/relative-clock-controller.d.ts +44 -0
  15. package/dist/controllers/relative-clock-controller/relative-clock-controller.js +31 -0
  16. package/dist/controllers/source-controller/source-controller.d.ts +10 -3
  17. package/dist/controllers/source-controller/source-controller.js +9 -4
  18. package/dist/controllers/swipe-controller/swipe-controller.d.ts +10 -1
  19. package/dist/controllers/swipe-controller/swipe-controller.js +1 -1
  20. package/dist/controllers/virtualize-controller/virtualize-controller.d.ts +48 -1
  21. package/dist/controllers/virtualize-controller/virtualize-controller.js +52 -7
  22. package/dist/events/action.d.ts +12 -0
  23. package/dist/events/action.js +6 -0
  24. package/dist/events/activate.d.ts +22 -0
  25. package/dist/events/activate.js +11 -0
  26. package/dist/events/aura-fallback.d.ts +12 -0
  27. package/dist/events/aura-fallback.js +11 -0
  28. package/dist/events/band.d.ts +13 -0
  29. package/dist/events/band.js +11 -0
  30. package/dist/events/before-activate.d.ts +24 -0
  31. package/dist/events/before-activate.js +11 -0
  32. package/dist/events/before-change.d.ts +26 -0
  33. package/dist/events/before-change.js +11 -0
  34. package/dist/events/before-close.d.ts +6 -0
  35. package/dist/events/before-close.js +11 -0
  36. package/dist/events/before-collapse.d.ts +6 -0
  37. package/dist/events/before-collapse.js +11 -0
  38. package/dist/events/before-edit.d.ts +6 -0
  39. package/dist/events/before-edit.js +11 -0
  40. package/dist/events/before-move.d.ts +17 -0
  41. package/dist/events/before-move.js +11 -0
  42. package/dist/events/before-open.d.ts +17 -0
  43. package/dist/events/before-open.js +11 -0
  44. package/dist/events/before-panel-resize.d.ts +13 -0
  45. package/dist/events/before-panel-resize.js +11 -0
  46. package/dist/events/before-pin.d.ts +6 -0
  47. package/dist/events/before-pin.js +11 -0
  48. package/dist/events/before-reconnect.d.ts +14 -0
  49. package/dist/events/before-reconnect.js +11 -0
  50. package/dist/events/before-relabel.d.ts +15 -0
  51. package/dist/events/before-relabel.js +11 -0
  52. package/dist/events/before-resize.d.ts +6 -0
  53. package/dist/events/before-resize.js +11 -0
  54. package/dist/events/before-split.d.ts +12 -0
  55. package/dist/events/before-split.js +11 -0
  56. package/dist/events/before-toggle.d.ts +23 -0
  57. package/dist/events/before-toggle.js +11 -0
  58. package/dist/events/canvas-edit.d.ts +16 -0
  59. package/dist/events/canvas-edit.js +11 -0
  60. package/dist/events/canvas-pan.d.ts +13 -0
  61. package/dist/events/canvas-pan.js +11 -0
  62. package/dist/events/canvas-view.d.ts +14 -0
  63. package/dist/events/canvas-view.js +11 -0
  64. package/dist/events/canvas-zoom.d.ts +6 -0
  65. package/dist/events/canvas-zoom.js +11 -0
  66. package/dist/events/caret.d.ts +17 -0
  67. package/dist/events/caret.js +11 -0
  68. package/dist/events/clear.d.ts +11 -0
  69. package/dist/events/clear.js +6 -0
  70. package/dist/events/collapse.d.ts +12 -0
  71. package/dist/events/collapse.js +11 -0
  72. package/dist/events/complete.d.ts +26 -0
  73. package/dist/events/complete.js +11 -0
  74. package/dist/events/connect.d.ts +14 -0
  75. package/dist/events/connect.js +11 -0
  76. package/dist/events/console.d.ts +13 -0
  77. package/dist/events/console.js +11 -0
  78. package/dist/events/copy-error.d.ts +9 -0
  79. package/dist/events/copy-error.js +6 -0
  80. package/dist/events/copy.d.ts +12 -0
  81. package/dist/events/copy.js +10 -0
  82. package/dist/events/create.d.ts +18 -0
  83. package/dist/events/create.js +11 -0
  84. package/dist/events/details.d.ts +459 -0
  85. package/dist/events/details.js +1 -0
  86. package/dist/events/dismiss.d.ts +16 -0
  87. package/dist/events/dismiss.js +11 -0
  88. package/dist/events/edit.d.ts +12 -0
  89. package/dist/events/edit.js +11 -0
  90. package/dist/events/end.d.ts +9 -0
  91. package/dist/events/end.js +6 -0
  92. package/dist/events/events.d.ts +113 -1478
  93. package/dist/events/events.js +93 -863
  94. package/dist/events/expand.d.ts +10 -0
  95. package/dist/events/expand.js +11 -0
  96. package/dist/events/facet.d.ts +17 -0
  97. package/dist/events/facet.js +11 -0
  98. package/dist/events/filter.d.ts +12 -0
  99. package/dist/events/filter.js +11 -0
  100. package/dist/events/filtered.d.ts +12 -0
  101. package/dist/events/filtered.js +11 -0
  102. package/dist/events/graph-filter.d.ts +10 -0
  103. package/dist/events/graph-filter.js +11 -0
  104. package/dist/events/graph-layout.d.ts +10 -0
  105. package/dist/events/graph-layout.js +11 -0
  106. package/dist/events/graph-pan.d.ts +9 -0
  107. package/dist/events/graph-pan.js +11 -0
  108. package/dist/events/graph-part-change.d.ts +10 -0
  109. package/dist/events/graph-part-change.js +11 -0
  110. package/dist/events/graph-ready.d.ts +8 -0
  111. package/dist/events/graph-ready.js +6 -0
  112. package/dist/events/graph-signal.d.ts +11 -0
  113. package/dist/events/graph-signal.js +11 -0
  114. package/dist/events/graph-zoom.d.ts +6 -0
  115. package/dist/events/graph-zoom.js +11 -0
  116. package/dist/events/history.d.ts +16 -0
  117. package/dist/events/history.js +11 -0
  118. package/dist/events/load-more.d.ts +12 -0
  119. package/dist/events/load-more.js +6 -0
  120. package/dist/events/load.d.ts +12 -0
  121. package/dist/events/load.js +6 -0
  122. package/dist/events/map-cluster.d.ts +15 -0
  123. package/dist/events/map-cluster.js +11 -0
  124. package/dist/events/map-pan.d.ts +18 -0
  125. package/dist/events/map-pan.js +11 -0
  126. package/dist/events/map-part-change.d.ts +16 -0
  127. package/dist/events/map-part-change.js +11 -0
  128. package/dist/events/map-ready.d.ts +15 -0
  129. package/dist/events/map-ready.js +6 -0
  130. package/dist/events/map-rotate.d.ts +9 -0
  131. package/dist/events/map-rotate.js +11 -0
  132. package/dist/events/map-tilt.d.ts +9 -0
  133. package/dist/events/map-tilt.js +11 -0
  134. package/dist/events/map-zoom.d.ts +13 -0
  135. package/dist/events/map-zoom.js +11 -0
  136. package/dist/events/move.d.ts +11 -0
  137. package/dist/events/move.js +11 -0
  138. package/dist/events/names.d.ts +18 -0
  139. package/dist/events/names.js +13 -0
  140. package/dist/events/navigate.d.ts +13 -0
  141. package/dist/events/navigate.js +11 -0
  142. package/dist/events/next.d.ts +23 -0
  143. package/dist/events/next.js +11 -0
  144. package/dist/events/panel-resize.d.ts +12 -0
  145. package/dist/events/panel-resize.js +11 -0
  146. package/dist/events/pin.d.ts +12 -0
  147. package/dist/events/pin.js +11 -0
  148. package/dist/events/press.d.ts +19 -0
  149. package/dist/events/press.js +11 -0
  150. package/dist/events/preview.d.ts +14 -0
  151. package/dist/events/preview.js +11 -0
  152. package/dist/events/previous.d.ts +6 -0
  153. package/dist/events/previous.js +11 -0
  154. package/dist/events/range-change.d.ts +10 -0
  155. package/dist/events/range-change.js +11 -0
  156. package/dist/events/read.d.ts +19 -0
  157. package/dist/events/read.js +11 -0
  158. package/dist/events/reconnect.d.ts +6 -0
  159. package/dist/events/reconnect.js +11 -0
  160. package/dist/events/reject.d.ts +13 -0
  161. package/dist/events/reject.js +11 -0
  162. package/dist/events/relabel.d.ts +6 -0
  163. package/dist/events/relabel.js +11 -0
  164. package/dist/events/remove.d.ts +12 -0
  165. package/dist/events/remove.js +11 -0
  166. package/dist/events/reorder.d.ts +18 -0
  167. package/dist/events/reorder.js +11 -0
  168. package/dist/events/reordered.d.ts +12 -0
  169. package/dist/events/reordered.js +11 -0
  170. package/dist/events/resize.d.ts +19 -0
  171. package/dist/events/resize.js +11 -0
  172. package/dist/events/resized.d.ts +16 -0
  173. package/dist/events/resized.js +11 -0
  174. package/dist/events/sample-end.d.ts +5 -0
  175. package/dist/events/sample-end.js +6 -0
  176. package/dist/events/sample-start.d.ts +18 -0
  177. package/dist/events/sample-start.js +6 -0
  178. package/dist/events/scrolled.d.ts +32 -0
  179. package/dist/events/scrolled.js +11 -0
  180. package/dist/events/select.d.ts +12 -0
  181. package/dist/events/select.js +11 -0
  182. package/dist/events/selected.d.ts +12 -0
  183. package/dist/events/selected.js +11 -0
  184. package/dist/events/send.d.ts +18 -0
  185. package/dist/events/send.js +11 -0
  186. package/dist/events/shortcut.d.ts +13 -0
  187. package/dist/events/shortcut.js +11 -0
  188. package/dist/events/sort.d.ts +17 -0
  189. package/dist/events/sort.js +11 -0
  190. package/dist/events/sorted.d.ts +15 -0
  191. package/dist/events/sorted.js +11 -0
  192. package/dist/events/split.d.ts +12 -0
  193. package/dist/events/split.js +11 -0
  194. package/dist/events/toggle.d.ts +15 -0
  195. package/dist/events/toggle.js +11 -0
  196. package/dist/events/tour-ask.d.ts +16 -0
  197. package/dist/events/tour-ask.js +11 -0
  198. package/dist/events/tour-status.d.ts +14 -0
  199. package/dist/events/tour-status.js +11 -0
  200. package/dist/events/typing.d.ts +10 -0
  201. package/dist/events/typing.js +11 -0
  202. package/dist/helix-element/helix-element.js +9 -43
  203. package/dist/helix-element/react-bridge.d.ts +23 -0
  204. package/dist/helix-element/react-bridge.js +2 -2
  205. package/dist/helix-form-element/helix-form-element.d.ts +5 -20
  206. package/dist/helix-form-element/helix-form-element.js +4 -56
  207. package/dist/index.d.ts +30 -9
  208. package/dist/index.js +30 -9
  209. package/dist/mixins/mixin-chart-source/mixin-chart-source.d.ts +24 -2
  210. package/dist/mixins/mixin-chart-source/mixin-chart-source.js +23 -1
  211. package/dist/mixins/mixin-controller-active/mixin-controller-active.js +4 -3
  212. package/dist/mixins/mixin-controller-checked/mixin-controller-checked.d.ts +5 -2
  213. package/dist/mixins/mixin-controller-checked/mixin-controller-checked.js +2 -1
  214. package/dist/mixins/mixin-controller-value/mixin-controller-value.d.ts +4 -2
  215. package/dist/mixins/mixin-controller-value/mixin-controller-value.js +7 -2
  216. package/dist/mixins/mixin-dismissible/mixin-dismissible.js +44 -7
  217. package/dist/mixins/mixin-field/mixin-field.js +2 -2
  218. package/dist/mixins/mixin-picker-feedback/mixin-picker-feedback.d.ts +42 -0
  219. package/dist/mixins/mixin-picker-feedback/mixin-picker-feedback.js +46 -0
  220. package/dist/mixins/mixin-picker-field/mixin-picker-field.d.ts +7 -4
  221. package/dist/mixins/mixin-picker-field/mixin-picker-field.js +6 -4
  222. package/dist/mixins/mixin-segmented-field/mixin-segmented-field.js +19 -9
  223. package/dist/utils/audit-name/audit-name-off.d.ts +10 -0
  224. package/dist/utils/audit-name/audit-name-off.js +1 -0
  225. package/dist/utils/audit-name/audit-name.d.ts +26 -8
  226. package/dist/utils/audit-name/audit-name.js +22 -30
  227. package/dist/utils/audit-source/audit-source-off.d.ts +10 -0
  228. package/dist/utils/audit-source/audit-source-off.js +1 -0
  229. package/dist/utils/audit-source/audit-source.d.ts +19 -0
  230. package/dist/utils/audit-source/audit-source.js +27 -0
  231. package/dist/utils/calendar/calendar.js +7 -7
  232. package/dist/utils/call-listener/call-listener.d.ts +16 -0
  233. package/dist/utils/call-listener/call-listener.js +17 -0
  234. package/dist/utils/chord/chord.d.ts +14 -0
  235. package/dist/utils/chord/chord.js +1 -0
  236. package/dist/utils/clamp/clamp.d.ts +7 -0
  237. package/dist/utils/clamp/clamp.js +1 -0
  238. package/dist/utils/css-color/css-color.js +1 -1
  239. package/dist/utils/draw-tooltip/draw-tooltip.d.ts +1 -1
  240. package/dist/utils/draw-tooltip/draw-tooltip.js +3 -1
  241. package/dist/utils/draw-tooltip/spoken-reading.d.ts +6 -2
  242. package/dist/utils/draw-tooltip/spoken-reading.js +5 -4
  243. package/dist/utils/elapsed-time/elapsed-time.d.ts +1 -1
  244. package/dist/utils/elapsed-time/elapsed-time.js +2 -5
  245. package/dist/utils/heading-level/heading-level.d.ts +8 -0
  246. package/dist/utils/heading-level/heading-level.js +4 -0
  247. package/dist/utils/host-words/host-words.d.ts +16 -0
  248. package/dist/utils/host-words/host-words.js +13 -0
  249. package/dist/utils/implicit-submit/implicit-submit.d.ts +25 -0
  250. package/dist/utils/implicit-submit/implicit-submit.js +52 -0
  251. package/dist/utils/load-more/load-more.d.ts +25 -0
  252. package/dist/utils/load-more/load-more.js +1 -0
  253. package/dist/utils/locale-of/locale-of.d.ts +18 -0
  254. package/dist/utils/locale-of/locale-of.js +26 -0
  255. package/dist/utils/name-text/name-text.d.ts +12 -0
  256. package/dist/utils/name-text/name-text.js +25 -0
  257. package/dist/utils/nearest/nearest.d.ts +9 -0
  258. package/dist/utils/nearest/nearest.js +9 -0
  259. package/dist/utils/number-format/number-format.d.ts +11 -1
  260. package/dist/utils/number-format/number-format.js +17 -5
  261. package/dist/utils/own-rule/own-rule.d.ts +16 -0
  262. package/dist/utils/own-rule/own-rule.js +7 -0
  263. package/dist/utils/plain-click/plain-click.d.ts +10 -0
  264. package/dist/utils/plain-click/plain-click.js +1 -0
  265. package/dist/utils/platform/platform.d.ts +8 -0
  266. package/dist/utils/platform/platform.js +1 -0
  267. package/dist/utils/press-type/press-type.d.ts +20 -0
  268. package/dist/utils/press-type/press-type.js +15 -0
  269. package/dist/utils/read-series/read-series.d.ts +14 -0
  270. package/dist/utils/read-series/read-series.js +15 -0
  271. package/dist/utils/relative-time/relative-time.d.ts +8 -0
  272. package/dist/utils/relative-time/relative-time.js +5 -2
  273. package/dist/utils/report-render/report-render.js +2 -14
  274. package/dist/utils/report-runtime/report-runtime.d.ts +11 -4
  275. package/dist/utils/report-runtime/report-runtime.js +2 -14
  276. package/dist/utils/report-usage/report-usage.js +2 -14
  277. package/dist/utils/row-data/row-data.d.ts +15 -0
  278. package/dist/utils/row-data/row-data.js +17 -0
  279. package/dist/utils/row-order/row-order.d.ts +141 -0
  280. package/dist/utils/row-order/row-order.js +76 -0
  281. package/dist/utils/scroll-item-into-view/scroll-item-into-view.d.ts +33 -0
  282. package/dist/utils/scroll-item-into-view/scroll-item-into-view.js +13 -3
  283. package/dist/utils/slotted-glyph/slotted-glyph.d.ts +33 -0
  284. package/dist/utils/slotted-glyph/slotted-glyph.js +27 -0
  285. package/dist/utils/tell-disclosure/tell-disclosure.d.ts +4 -0
  286. package/dist/utils/tree-arrow/tree-arrow.d.ts +23 -0
  287. package/dist/utils/tree-arrow/tree-arrow.js +9 -0
  288. package/dist/utils/typeahead/typeahead.d.ts +75 -0
  289. package/dist/utils/typeahead/typeahead.js +37 -0
  290. package/dist/utils/value-as/value-as.d.ts +9 -0
  291. package/dist/utils/value-as/value-as.js +9 -1
  292. package/dist/utils/verdict-flags/verdict-flags.d.ts +13 -0
  293. package/dist/utils/verdict-flags/verdict-flags.js +6 -0
  294. package/dist/utils/watch-labels/watch-labels.d.ts +16 -0
  295. package/dist/utils/watch-labels/watch-labels.js +34 -0
  296. package/dist/utils/words-converter/words-converter.d.ts +14 -0
  297. package/dist/utils/words-converter/words-converter.js +15 -0
  298. package/dist/utils/written-list/written-list.d.ts +60 -0
  299. package/dist/utils/written-list/written-list.js +46 -0
  300. package/dist/version.d.ts +1 -1
  301. package/dist/version.js +1 -1
  302. package/package.json +29 -5
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { auditName } from '#audit-name';
1
2
  export { AriaForwardController, } from './controllers/aria-forward-controller/aria-forward-controller.js';
2
3
  export { ArrivalController, } from './controllers/arrival-controller/arrival-controller.js';
3
4
  export { ChartPointerController, } from './controllers/chart-pointer-controller/chart-pointer-controller.js';
@@ -15,12 +16,13 @@ export { FullscreenController } from './controllers/fullscreen-controller/fullsc
15
16
  export { HostClickController } from './controllers/host-click-controller/host-click-controller.js';
16
17
  export { IdleController } from './controllers/idle-controller/idle-controller.js';
17
18
  export { IndicatorController, } from './controllers/indicator-controller/indicator-controller.js';
18
- export { KeyboardNavigationController, Typeahead, typesCharacter, } from './controllers/keyboard-navigation-controller/keyboard-navigation-controller.js';
19
+ export { KeyboardNavigationController, } from './controllers/keyboard-navigation-controller/keyboard-navigation-controller.js';
19
20
  export { MediaSessionController, SKIP_SECONDS, } from './controllers/media-session-controller/media-session-controller.js';
20
21
  export { animationsSettled, OpenPhaseController, } from './controllers/open-phase-controller/open-phase-controller.js';
21
22
  export { MAX_FRAME_STEP, PaintGateController, } from './controllers/paint-gate-controller/paint-gate-controller.js';
22
23
  export { PlacementController } from './controllers/placement-controller/placement-controller.js';
23
24
  export { PopoverController, } from './controllers/popover-controller/popover-controller.js';
25
+ export { RelativeClockController, } from './controllers/relative-clock-controller/relative-clock-controller.js';
24
26
  export { RemotePlaybackController, } from './controllers/remote-playback-controller/remote-playback-controller.js';
25
27
  export { SourceController, } from './controllers/source-controller/source-controller.js';
26
28
  export { drawStatus, StatusController, } from './controllers/status-controller/status-controller.js';
@@ -28,10 +30,10 @@ export { SwipeController, } from './controllers/swipe-controller/swipe-controlle
28
30
  export { TokenColorController, } from './controllers/token-color-controller/token-color-controller.js';
29
31
  export { VirtualizeController, } from './controllers/virtualize-controller/virtualize-controller.js';
30
32
  export { eventsForTag, registerElementEvents } from './events/element-events.js';
31
- export { HelixActionEvent, HelixActivateEvent, HelixAuraFallbackEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixClearEvent, HelixCollapseEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyErrorEvent, HelixCopyEvent, HelixCreateEvent, HelixDismissEvent, HelixEditEvent, HelixEndEvent, HelixExpandEvent, HelixFacetEvent, HelixFilterEvent, HelixFilteredEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixLoadEvent, HelixLoadMoreEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPanelResizeEvent, HelixPinEvent, HelixPreviousEvent, HelixRangeChangeEvent, HelixReadEvent, HelixReconnectEvent, HelixRejectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixReorderedEvent, HelixResizedEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSelectedEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixSortedEvent, HelixSplitEvent, HelixToggleEvent, HelixTourAskEvent, HelixTypingEvent, } from './events/events.js';
33
+ export { HelixActionEvent, HelixActivateEvent, HelixAuraFallbackEvent, HelixBandEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixClearEvent, HelixCollapseEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyErrorEvent, HelixCopyEvent, HelixCreateEvent, HelixDismissEvent, HelixEditEvent, HelixEndEvent, HelixExpandEvent, HelixFacetEvent, HelixFilterEvent, HelixFilteredEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixLoadEvent, HelixLoadMoreEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPanelResizeEvent, HelixPinEvent, HelixPressEvent, HelixPreviewEvent, HelixPreviousEvent, HelixRangeChangeEvent, HelixReadEvent, HelixReconnectEvent, HelixRejectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixReorderedEvent, HelixResizedEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSelectedEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixSortedEvent, HelixSplitEvent, HelixToggleEvent, HelixTourAskEvent, HelixTourStatusEvent, HelixTypingEvent, } from './events/events.js';
32
34
  export { HelixElement, whenHydrated } from './helix-element/helix-element.js';
33
35
  export { HelixFormElement } from './helix-form-element/helix-form-element.js';
34
- export { MixinChartSource, PALETTE, PLOT_HEIGHT, PLOT_WIDTH, seriesIndex, seriesNames, } from './mixins/mixin-chart-source/mixin-chart-source.js';
36
+ export { MixinChartSource, PALETTE, PLOT_HEIGHT, PLOT_WIDTH, POSITION_LABEL, seriesIndex, seriesNames, } from './mixins/mixin-chart-source/mixin-chart-source.js';
35
37
  export { MixinCollection, } from './mixins/mixin-collection/mixin-collection.js';
36
38
  export { MixinControllerActive, } from './mixins/mixin-controller-active/mixin-controller-active.js';
37
39
  export { MixinControllerChecked, } from './mixins/mixin-controller-checked/mixin-controller-checked.js';
@@ -40,6 +42,7 @@ export { MixinControllerValue, } from './mixins/mixin-controller-value/mixin-con
40
42
  export { MixinDismissible, } from './mixins/mixin-dismissible/mixin-dismissible.js';
41
43
  export { MixinField } from './mixins/mixin-field/mixin-field.js';
42
44
  export { MixinPickerEditing, } from './mixins/mixin-picker-editing/mixin-picker-editing.js';
45
+ export { MixinPickerFeedback, } from './mixins/mixin-picker-feedback/mixin-picker-feedback.js';
43
46
  export { MixinPickerField, } from './mixins/mixin-picker-field/mixin-picker-field.js';
44
47
  export { MixinSegmentedField, } from './mixins/mixin-segmented-field/mixin-segmented-field.js';
45
48
  export { MixinSelectableItem, } from './mixins/mixin-selectable-item/mixin-selectable-item.js';
@@ -49,7 +52,8 @@ export { anchorElement } from './utils/anchor-element/anchor-element.js';
49
52
  export { arrowReach, sideOf } from './utils/arrow/arrow.js';
50
53
  export { addDays, addMonths, barredBy, localToday, monthOf, monthOut, periodCells, periodKey, periodMove, sameMonth, weekStartOf, YEARS_SHOWN, yearOut, yearPageOf, } from './utils/calendar/calendar.js';
51
54
  export { capturePointer } from './utils/capture-pointer/capture-pointer.js';
52
- export { ariaChord, chordParts, matchesChord, printableChord, } from './utils/chord/chord.js';
55
+ export { ariaChord, chordParts, matchesChord, printableChord, selectsAll, } from './utils/chord/chord.js';
56
+ export { clamp } from './utils/clamp/clamp.js';
53
57
  export { clockLocale, dayPeriod, isTwelveHour, nearestTime, offeredTimes, timeBarred, timeFault, wheelParts, wholeHour, } from './utils/clock/clock.js';
54
58
  export { closestInstance } from './utils/closest-instance/closest-instance.js';
55
59
  export { colorName, hueName } from './utils/color-name/color-name.js';
@@ -57,6 +61,7 @@ export { countLabel } from './utils/count-label/count-label.js';
57
61
  export { createSheet } from './utils/create-sheet/create-sheet.js';
58
62
  export { formatColor, parseColor, toCss, toHsl, toRgb, } from './utils/css-color/css-color.js';
59
63
  export { customElement, definedTags, duplicateRegistrations, } from './utils/custom-element/custom-element.js';
64
+ export { segmentName } from './utils/date-segments/date-segments.js';
60
65
  export { drawDismiss, drawDismissGlyph, } from './utils/draw-dismiss/draw-dismiss.js';
61
66
  export { drawIcon } from './utils/draw-icon/draw-icon.js';
62
67
  export { CHART_PLOT, drawTooltip } from './utils/draw-tooltip/draw-tooltip.js';
@@ -67,20 +72,30 @@ export { deepActiveElement, deepContains, focusableElements, } from './utils/foc
67
72
  export { afterLinkFollowed, followLink, } from './utils/follow-link/follow-link.js';
68
73
  export { formatNumbers } from './utils/format-numbers/format-numbers.js';
69
74
  export { headingIn, headingsIn } from './utils/heading-in/heading-in.js';
75
+ export { headingLevel } from './utils/heading-level/heading-level.js';
70
76
  export { hostAria } from './utils/host-aria/host-aria.js';
77
+ export { hostWords } from './utils/host-words/host-words.js';
78
+ export { defaultButton, submitImplicitly, submits, submitsOnEnter, } from './utils/implicit-submit/implicit-submit.js';
71
79
  export { forgetDisabled, inheritDisabled, } from './utils/inherit-disabled/inherit-disabled.js';
72
80
  export { inlineStep } from './utils/inline-step/inline-step.js';
73
81
  export { isRtl } from './utils/is-rtl/is-rtl.js';
74
82
  export { keyClaimed } from './utils/key-claimed/key-claimed.js';
75
83
  export { linePath } from './utils/line-path/line-path.js';
84
+ export { endInSight } from './utils/load-more/load-more.js';
85
+ export { localeOf } from './utils/locale-of/locale-of.js';
76
86
  export { markRegion } from './utils/mark-region/mark-region.js';
77
87
  export { copiesOf, sameCopies, } from './utils/media-copy/media-copy.js';
78
- export { formatNumber, parseNumber } from './utils/number-format/number-format.js';
88
+ export { nameText } from './utils/name-text/name-text.js';
89
+ export { nearest } from './utils/nearest/nearest.js';
90
+ export { formatNumber, parseNumber, readingText } from './utils/number-format/number-format.js';
79
91
  export { onUnlessFalse } from './utils/on-unless-false/on-unless-false.js';
80
- export { appleTouch, onApple } from './utils/platform/platform.js';
92
+ export { applyOwnRule } from './utils/own-rule/own-rule.js';
93
+ export { plainClick } from './utils/plain-click/plain-click.js';
94
+ export { appleTouch, onAndroid, onApple } from './utils/platform/platform.js';
95
+ export { pressType } from './utils/press-type/press-type.js';
81
96
  export { rangeAdd } from './utils/range-add/range-add.js';
82
97
  export { readColor, rgbOf } from './utils/read-color/read-color.js';
83
- export { byRow, readRows, readSeries, seriesKey, unbroken, } from './utils/read-series/read-series.js';
98
+ export { byRow, extremesOf, readRows, readSeries, seriesKey, unbroken, } from './utils/read-series/read-series.js';
84
99
  export { linkDescription, reflectElements, unlinkDescription, } from './utils/reflect-elements/reflect-elements.js';
85
100
  export { relativeTime, } from './utils/relative-time/relative-time.js';
86
101
  export { measuring, RENDER_SLOT, reportRender } from './utils/report-render/report-render.js';
@@ -91,19 +106,25 @@ export { requestChange, } from './utils/request-change/request-change.js';
91
106
  export { resolveActiveItem, } from './utils/resolve-active-item/resolve-active-item.js';
92
107
  export { holdCaret, restoreValue } from './utils/restore-value/restore-value.js';
93
108
  export { rovingStop } from './utils/roving-stop/roving-stop.js';
109
+ export { valueAt } from './utils/row-data/row-data.js';
110
+ export { arranged, cycle, filter, format, ordered, parse, sort, window_, } from './utils/row-order/row-order.js';
94
111
  export { extent, linear } from './utils/scale/scale.js';
95
112
  export { ticks } from './utils/scale/ticks.js';
96
- export { scrollItemIntoView, } from './utils/scroll-item-into-view/scroll-item-into-view.js';
113
+ export { scrollItemIntoView, scrollingAncestor, } from './utils/scroll-item-into-view/scroll-item-into-view.js';
97
114
  export { lockScroll, scrollHolders, unlockScroll } from './utils/scroll-lock/scroll-lock.js';
98
115
  export { slotFilled } from './utils/slot-filled/slot-filled.js';
116
+ export { SlottedGlyph } from './utils/slotted-glyph/slotted-glyph.js';
99
117
  export { slottedWords } from './utils/slotted-words/slotted-words.js';
100
118
  export { splitValues } from './utils/split-values/split-values.js';
101
119
  export { edgeOffset, FLING, parseSnapPoints, settleSwipe, snapTravel, swipeAxis, swipeEdge, swipeStep, towardEdge, } from './utils/swipe/swipe.js';
102
120
  export { tellDisclosure } from './utils/tell-disclosure/tell-disclosure.js';
103
121
  export { subscribe } from './utils/ticker/ticker.js';
104
122
  export { TONE_MARKS, toneMark, } from './utils/tone-marks/tone-marks.js';
123
+ export { treeArrow } from './utils/tree-arrow/tree-arrow.js';
124
+ export { Typeahead, typeaheadBy, typeaheadByWords, typesCharacter, } from './utils/typeahead/typeahead.js';
105
125
  export { dateAsValue, isClockValue, isDateValue, isTimeValue, minutesAsValue, numberAsValue, secondsAsValue, timeAsValue, valueAsDate, valueAsMinutes, valueAsNumber, valueAsSeconds, valueAsTime, } from './utils/value-as/value-as.js';
106
126
  export { watchTheme } from './utils/watch-theme/watch-theme.js';
127
+ export { wordsConverter } from './utils/words-converter/words-converter.js';
107
128
  export { writeClock, writeTime } from './utils/write-time/write-time.js';
108
- export { commaList, toggleValue, writtenList, writtenNumbers, } from './utils/written-list/written-list.js';
129
+ export { anchorAt, commaList, everyState, inRowOrder, pressedValue, prunedValue, toggleEvery, toggleValue, writtenList, writtenNumbers, } from './utils/written-list/written-list.js';
109
130
  export { VERSION } from './version.js';
@@ -136,13 +136,22 @@ export declare class MixinChartSourceInterface {
136
136
  * writes them, whatever this says.
137
137
  */
138
138
  locale: string;
139
+ /**
140
+ * Where a reading the keys moved to stands among the readings, said after
141
+ * it. `{position}` and `{count}` are replaced with the numbers, written in
142
+ * `locale`.
143
+ *
144
+ * Set it to the words of the page's language, such as `{position} von
145
+ * {count}`, or to nothing to say no position.
146
+ */
147
+ positionLabel: string;
139
148
  /**
140
149
  * The table's columns, one series each. Empty when there is no table.
141
150
  */
142
151
  get series(): Series[];
143
152
  /**
144
- * The chart's name: `label` when it is set, and the table's caption
145
- * otherwise.
153
+ * The chart's name: an `aria-label` written on the chart, then `label`,
154
+ * then the table's caption.
146
155
  */
147
156
  get named(): string;
148
157
  /**
@@ -163,6 +172,12 @@ export declare class MixinChartSourceInterface {
163
172
  * reading the same table hid it.
164
173
  */
165
174
  showsSeries(name: string): boolean;
175
+ /**
176
+ * Whether the series read from the cell at this place in a row is drawn,
177
+ * by its column's heading. The keys and the readout pass over one a legend
178
+ * hid.
179
+ */
180
+ showsColumn(cell: number): boolean;
166
181
  /**
167
182
  * The number of readings, which the pointer position maps onto.
168
183
  */
@@ -172,6 +187,13 @@ export declare class MixinChartSourceInterface {
172
187
  */
173
188
  pointer: ChartPointerController;
174
189
  }
190
+ /**
191
+ * The words a chart says a reading's place in by default, such as "2 of 12":
192
+ * every chart's `position-label`, and Sparkline's, which is no chart source.
193
+ * The property keeps the words written out, which is what its reference page
194
+ * shows as the default; a spec holds the two together.
195
+ */
196
+ export declare const POSITION_LABEL = "{position} of {count}";
175
197
  /**
176
198
  * The half of a chart that is about finding its numbers rather than drawing.
177
199
  *
@@ -14,6 +14,7 @@ export const seriesIndex = (depth) => (depth % PALETTE) + 1;
14
14
  export const PLOT_WIDTH = 100;
15
15
  export const PLOT_HEIGHT = 100;
16
16
  export const seriesNames = (list) => writtenList(list).map(seriesKey);
17
+ export const POSITION_LABEL = '{position} of {count}';
17
18
  export const MixinChartSource = (Base) => {
18
19
  class ChartSourceElement extends Base {
19
20
  constructor() {
@@ -23,6 +24,17 @@ export const MixinChartSource = (Base) => {
23
24
  this.for = '';
24
25
  this.label = '';
25
26
  this.locale = '';
27
+ this.positionLabel = '{position} of {count}';
28
+ }
29
+ static get observedAttributes() {
30
+ const inherited = Reflect.get(Base, 'observedAttributes', this);
31
+ return [...(inherited ?? []), 'aria-label'];
32
+ }
33
+ attributeChangedCallback(name, old, value) {
34
+ super.attributeChangedCallback(name, old, value);
35
+ if (name === 'aria-label') {
36
+ this.requestUpdate();
37
+ }
26
38
  }
27
39
  willUpdate(changed) {
28
40
  super.willUpdate(changed);
@@ -34,7 +46,10 @@ export const MixinChartSource = (Base) => {
34
46
  return this.source.series;
35
47
  }
36
48
  get named() {
37
- return this.label || this.source.element?.querySelector('caption')?.textContent?.trim() || '';
49
+ return (this.getAttribute?.('aria-label') ||
50
+ this.label ||
51
+ this.source.element?.querySelector('caption')?.textContent?.trim() ||
52
+ '');
38
53
  }
39
54
  get sourceRows() {
40
55
  return this.source.rows;
@@ -51,6 +66,10 @@ export const MixinChartSource = (Base) => {
51
66
  showsSeries(name) {
52
67
  return !this.source.hidden.has(seriesKey(name));
53
68
  }
69
+ showsColumn(cell) {
70
+ const name = this.sourceRows[0]?.cells[cell]?.name;
71
+ return name === undefined || this.showsSeries(name);
72
+ }
54
73
  get readings() {
55
74
  return this.sourceRows.length;
56
75
  }
@@ -64,5 +83,8 @@ export const MixinChartSource = (Base) => {
64
83
  __decorate([
65
84
  property()
66
85
  ], ChartSourceElement.prototype, "locale", void 0);
86
+ __decorate([
87
+ property({ attribute: 'position-label' })
88
+ ], ChartSourceElement.prototype, "positionLabel", void 0);
67
89
  return ChartSourceElement;
68
90
  };
@@ -27,6 +27,7 @@ export const MixinControllerActive = (Base) => {
27
27
  if (next === this.active) {
28
28
  return true;
29
29
  }
30
+ const before = this.active;
30
31
  const applied = requestChange({
31
32
  apply: (value) => {
32
33
  const previous = this.active;
@@ -38,12 +39,12 @@ export const MixinControllerActive = (Base) => {
38
39
  next,
39
40
  });
40
41
  if (applied) {
41
- this.announceActivated(next);
42
+ this.announceActivated(next, before);
42
43
  }
43
44
  return applied;
44
45
  }
45
- announceActivated(value) {
46
- this.dispatchEvent(new HelixActivateEvent({ value }));
46
+ announceActivated(value, previous) {
47
+ this.dispatchEvent(new HelixActivateEvent({ previous, value }));
47
48
  }
48
49
  resolveActive(items) {
49
50
  return resolveActiveItem(this.active, items);
@@ -17,7 +17,9 @@ export declare class MixinControllerCheckedInterface {
17
17
  */
18
18
  checked: boolean;
19
19
  /**
20
- * Whether the control starts checked. A form reset returns it to this state.
20
+ * Whether the control starts checked. A form reset returns it to this state,
21
+ * and to the `checked` attribute where this one is not written, as a native
22
+ * checkbox resets to the `checked` it declares.
21
23
  */
22
24
  defaultChecked: boolean;
23
25
  /**
@@ -40,7 +42,8 @@ export declare class MixinControllerCheckedInterface {
40
42
  /** Requests the opposite of the current state. */
41
43
  toggleChecked(): boolean;
42
44
  /**
43
- * Drops the recorded state, so the control reads `defaultChecked` again.
45
+ * Returns the control to what its markup declared: `defaultChecked` where
46
+ * `default-checked` is written, and the `checked` attribute where it is not.
44
47
  *
45
48
  * A form reset has to return a control to what its markup declared, and
46
49
  * assigning `checked` cannot do it: any assignment records a state, and the
@@ -59,7 +59,8 @@ export const MixinControllerChecked = (Base) => {
59
59
  }
60
60
  resetChecked() {
61
61
  const previous = this.checked;
62
- this.checkedState = undefined;
62
+ this.checkedState =
63
+ this.hasAttribute('default-checked') || !this.hasAttribute('checked') ? undefined : true;
63
64
  this.requestUpdate('checked', previous);
64
65
  }
65
66
  }
@@ -8,7 +8,9 @@ type Constructor<T> = new (...args: any[]) => T;
8
8
  */
9
9
  export declare class MixinControllerValueInterface {
10
10
  /**
11
- * The value the control starts with. A form reset returns it to this value.
11
+ * The value the control starts with. A form reset returns it to this value,
12
+ * and to the `value` attribute where this one is not written, as a native
13
+ * control resets to the `value` it declares.
12
14
  *
13
15
  * Separate from `value`, which is where the control is now, and gone from the
14
16
  * reader's view the moment they change anything.
@@ -37,7 +39,7 @@ export declare class MixinControllerValueInterface {
37
39
  protected readonly announcesInput: boolean;
38
40
  /** Requests a new value, and returns whether the change was applied. */
39
41
  requestValue(next: string): boolean;
40
- /** Returns the control to its `defaultValue`. */
42
+ /** Returns the control to its `defaultValue`, or to its `value` attribute where there is none. */
41
43
  formResetCallback(): void;
42
44
  /** Restores the value when the browser brings a form back. */
43
45
  formStateRestoreCallback(state: string | File | FormData | null): void;
@@ -48,15 +48,20 @@ export const MixinControllerValue = (Base) => {
48
48
  }
49
49
  return applied;
50
50
  }
51
+ get declared() {
52
+ return this.hasAttribute('default-value')
53
+ ? undefined
54
+ : (this.getAttribute('value') ?? undefined);
55
+ }
51
56
  formResetCallback() {
52
57
  super.formResetCallback();
53
58
  const previous = this.value;
54
- this.valueState = undefined;
59
+ this.valueState = this.declared;
55
60
  this.requestUpdate('value', previous);
56
61
  }
57
62
  formStateRestoreCallback(state) {
58
63
  const previous = this.value;
59
- this.valueState = typeof state === 'string' ? state : undefined;
64
+ this.valueState = typeof state === 'string' ? state : this.declared;
60
65
  this.requestUpdate('value', previous);
61
66
  }
62
67
  }
@@ -7,12 +7,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { property } from 'lit/decorators.js';
8
8
  import { HelixDismissEvent } from '../../events/events.js';
9
9
  import { deepActiveElement, deepContains, } from '../../utils/focusable-elements/focusable-elements.js';
10
+ import { tabStops } from '../../utils/tab-stops/tab-stops.js';
10
11
  export const MixinDismissible = (Base) => {
11
12
  class Dismissible extends Base {
12
13
  constructor() {
13
14
  super(...arguments);
14
15
  this.dismissible = false;
15
16
  this.dismissLabel = 'Dismiss';
17
+ this.handOff = undefined;
18
+ this.forgetFocus = undefined;
16
19
  }
17
20
  dismissEvent() {
18
21
  const own = [...this.childNodes]
@@ -25,14 +28,26 @@ export const MixinDismissible = (Base) => {
25
28
  return this.shadowRoot?.querySelector('[part~="dismiss"]') ?? null;
26
29
  }
27
30
  dismiss() {
28
- const neighbors = deepContains(this, deepActiveElement()) ? this.neighbors() : [];
31
+ const inside = deepContains(this, deepActiveElement());
32
+ const neighbors = inside ? this.neighbors() : [];
33
+ const beside = inside && neighbors.length === 0 ? this.stopBeside() : undefined;
29
34
  const event = this.dismissEvent();
30
35
  this.dispatchEvent(event);
31
- if (neighbors.length > 0 && !event.defaultPrevented) {
32
- this.keepFocus(neighbors);
36
+ if ((neighbors.length > 0 || beside) && !event.defaultPrevented) {
37
+ this.keepFocus(neighbors, beside);
33
38
  }
34
39
  return !event.defaultPrevented;
35
40
  }
41
+ stopBeside() {
42
+ const stops = tabStops(document.body);
43
+ const own = stops.flatMap((stop, at) => (deepContains(this, stop) ? [at] : []));
44
+ const first = own[0];
45
+ const last = own.at(-1);
46
+ if (first === undefined || last === undefined) {
47
+ return undefined;
48
+ }
49
+ return stops[last + 1] ?? stops[first - 1];
50
+ }
36
51
  neighbors() {
37
52
  const same = (node) => node instanceof HTMLElement && node.localName === this.localName;
38
53
  const after = [];
@@ -49,8 +64,9 @@ export const MixinDismissible = (Base) => {
49
64
  }
50
65
  return [...after, ...before];
51
66
  }
52
- keepFocus(neighbors) {
53
- const settle = () => {
67
+ keepFocus(neighbors, beside) {
68
+ this.forgetFocus?.();
69
+ const settle = (late) => {
54
70
  const active = document.activeElement;
55
71
  if (this.isConnected || (active !== null && active !== document.body)) {
56
72
  return;
@@ -64,9 +80,30 @@ export const MixinDismissible = (Base) => {
64
80
  }
65
81
  }
66
82
  }
83
+ if (late && beside?.isConnected) {
84
+ beside.focus();
85
+ }
67
86
  };
68
- settle();
69
- requestAnimationFrame(settle);
87
+ settle(false);
88
+ requestAnimationFrame(() => settle(true));
89
+ if (this.isConnected) {
90
+ const forget = () => {
91
+ this.handOff = undefined;
92
+ this.forgetFocus = undefined;
93
+ document.removeEventListener('focusin', forget, true);
94
+ };
95
+ this.handOff = settle;
96
+ this.forgetFocus = forget;
97
+ document.addEventListener('focusin', forget, true);
98
+ }
99
+ }
100
+ disconnectedCallback() {
101
+ super.disconnectedCallback();
102
+ const settle = this.handOff;
103
+ if (settle) {
104
+ this.forgetFocus?.();
105
+ requestAnimationFrame(() => settle(true));
106
+ }
70
107
  }
71
108
  }
72
109
  __decorate([
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { html, nothing } from 'lit';
8
8
  import { property, state } from 'lit/decorators.js';
9
- import { auditName } from '../../utils/audit-name/audit-name.js';
9
+ import { auditName } from '#audit-name';
10
10
  import { hostAria } from '../../utils/host-aria/host-aria.js';
11
11
  const HINT_ID = 'helix-hint';
12
12
  const FEEDBACK_ID = 'helix-feedback';
@@ -167,7 +167,7 @@ export const MixinField = (Base) => {
167
167
  this.addEventListener('change', touch);
168
168
  this.renderRoot.addEventListener('slotchange', this.noteSlotted);
169
169
  auditName(this, () => this.namedControl, 'Give it a `label`, an `aria-label`, words in its label, or a `<label for>` that names it.', () => this.labeled ||
170
- [...this.children].some((child) => child.slot === 'label' && (child.textContent ?? '').trim() !== ''));
170
+ [...this.children].some((child) => child.slot === 'label' && (child.textContent ?? '').trim() !== ''), () => this.partNamed('value'));
171
171
  }
172
172
  }
173
173
  __decorate([
@@ -0,0 +1,42 @@
1
+ import { nothing, type TemplateResult } from 'lit';
2
+ import type { HelixFormElement } from '../../helix-form-element/helix-form-element.js';
3
+ type Constructor<T> = new (...args: any[]) => T;
4
+ export declare class MixinPickerFeedbackInterface {
5
+ /**
6
+ * A message under the picker, such as what is wrong with the answer.
7
+ *
8
+ * While set, the picker is invalid and does not submit, as a field's
9
+ * `feedback` is, it is marked invalid to a reader and to CSS, and the
10
+ * controls a reader answers with are described by it.
11
+ */
12
+ feedback: string;
13
+ /**
14
+ * Whether the answer fails validation, marked on the controls a reader
15
+ * answers with and as `:state(invalid)`.
16
+ *
17
+ * A flag a field that wraps the picker sets, since that field owns the
18
+ * label, the hint and the message; on its own, `feedback` both marks the
19
+ * picker and says why.
20
+ */
21
+ invalid: boolean;
22
+ /** Whether a reader is told the answer is wrong: `invalid`, or `feedback`. */
23
+ protected get marked(): boolean;
24
+ /** The `feedback` line, or nothing while there is none. */
25
+ protected renderPickerFeedback(): TemplateResult | typeof nothing;
26
+ }
27
+ /**
28
+ * `feedback` and `invalid` for a picker that stands on its own as a form
29
+ * control: Color Picker, Date Picker and Time Picker.
30
+ *
31
+ * **One mark for both.** `invalid` is the flag a wrapping field sets, and
32
+ * `feedback` is the message a picker on its own shows; either one marks the
33
+ * picker invalid on its internals (`aria-invalid` on the host) and as
34
+ * `:state(invalid)`, and each picker marks the controls it draws by `marked`.
35
+ * Measured on Color Picker before this: `feedback` set `customError` in its
36
+ * validity while every control reported `invalid: false`.
37
+ *
38
+ * The message is the validity's too, as a field's `feedback` is, through
39
+ * `HelixFormElement`'s `validityFeedback`, so a form with one does not submit.
40
+ */
41
+ export declare const MixinPickerFeedback: <T extends Constructor<HelixFormElement>>(Base: T) => Constructor<MixinPickerFeedbackInterface> & T;
42
+ export {};
@@ -0,0 +1,46 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html, nothing } from 'lit';
8
+ import { property } from 'lit/decorators.js';
9
+ import { hostAria } from '../../utils/host-aria/host-aria.js';
10
+ export const MixinPickerFeedback = (Base) => {
11
+ class PickerFeedbackElement extends Base {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.feedback = '';
15
+ this.invalid = false;
16
+ }
17
+ get marked() {
18
+ return this.invalid || this.feedback !== '';
19
+ }
20
+ get validityFeedback() {
21
+ return this.feedback;
22
+ }
23
+ willUpdate(changed) {
24
+ super.willUpdate(changed);
25
+ this.internals.ariaInvalid = this.marked ? 'true' : null;
26
+ this.toggleState('invalid', this.marked);
27
+ }
28
+ updated(changed) {
29
+ super.updated(changed);
30
+ const line = this.partNamed('feedback');
31
+ hostAria(this.internals, { describedBy: line ? [line] : [] });
32
+ }
33
+ renderPickerFeedback() {
34
+ return this.feedback === ''
35
+ ? nothing
36
+ : html `<p part="feedback" id="feedback">${this.feedback}</p>`;
37
+ }
38
+ }
39
+ __decorate([
40
+ property()
41
+ ], PickerFeedbackElement.prototype, "feedback", void 0);
42
+ __decorate([
43
+ property({ reflect: true, type: Boolean })
44
+ ], PickerFeedbackElement.prototype, "invalid", void 0);
45
+ return PickerFeedbackElement;
46
+ };
@@ -1,8 +1,10 @@
1
1
  import { PopoverController } from '../../controllers/popover-controller/popover-controller.js';
2
2
  import type { HelixFormElement } from '../../helix-form-element/helix-form-element.js';
3
+ import { type PickerVerdict } from '../../utils/verdict-flags/verdict-flags.js';
3
4
  import type { MixinControllerOpenInterface } from '../mixin-controller-open/mixin-controller-open.js';
4
5
  import type { MixinControllerValueInterface } from '../mixin-controller-value/mixin-controller-value.js';
5
6
  import type { MixinFieldInterface } from '../mixin-field/mixin-field.js';
7
+ export type { PickerVerdict } from '../../utils/verdict-flags/verdict-flags.js';
6
8
  type Constructor<T> = new (...args: any[]) => T;
7
9
  /**
8
10
  * What this is applied over: a form field that opens, holds a value and has a
@@ -92,10 +94,12 @@ export declare class MixinPickerFieldInterface {
92
94
  *
93
95
  * The one check the platform cannot make: the control is `type="text"` and
94
96
  * has no idea what a date, a time or a color is, so the family says what one
95
- * looks like and `sync` reports it as `badInput`. Empty means the platform's
96
- * own verdict stands.
97
+ * looks like. A message alone is reported as `badInput`; a flag and a
98
+ * message, such as `['rangeUnderflow', 'Choose a date on or after…']`, sets
99
+ * that flag, as a native date input does for its `min`. Empty means the
100
+ * platform's own verdict stands.
97
101
  */
98
- protected validate(): string;
102
+ protected validate(): PickerVerdict;
99
103
  }
100
104
  /**
101
105
  * Grafts a floating picker onto a text field, and the protocol between them.
@@ -154,4 +158,3 @@ export declare class MixinPickerFieldInterface {
154
158
  * `sync`, which is not a protocol.
155
159
  */
156
160
  export declare const MixinPickerField: <T extends Constructor<PickerBase>>(Base: T) => Constructor<MixinPickerFieldInterface> & T;
157
- export {};
@@ -6,8 +6,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { property } from 'lit/decorators.js';
8
8
  import { PopoverController } from '../../controllers/popover-controller/popover-controller.js';
9
+ import { submitImplicitly } from '../../utils/implicit-submit/implicit-submit.js';
9
10
  import { reportValues } from '../../utils/report-values/report-values.js';
10
11
  import { tabStops } from '../../utils/tab-stops/tab-stops.js';
12
+ import { verdictFlags } from '../../utils/verdict-flags/verdict-flags.js';
11
13
  export const MixinPickerField = (Base) => {
12
14
  class PickerFieldElement extends Base {
13
15
  constructor() {
@@ -91,7 +93,7 @@ export const MixinPickerField = (Base) => {
91
93
  this.fromTrigger = false;
92
94
  this.handleKeypress = (event) => {
93
95
  if (event.key === 'Enter' && !event.defaultPrevented) {
94
- this.submitImplicitly();
96
+ submitImplicitly(this.form);
95
97
  }
96
98
  };
97
99
  this.handleTriggerClick = () => {
@@ -136,12 +138,12 @@ export const MixinPickerField = (Base) => {
136
138
  if (!control) {
137
139
  return;
138
140
  }
139
- const message = this.validate();
140
- if (message === '') {
141
+ const fault = verdictFlags(this.validate());
142
+ if (fault === null) {
141
143
  this.copyValidity(control);
142
144
  }
143
145
  else {
144
- this.internals.setValidity({ badInput: true }, message, control);
146
+ this.internals.setValidity(fault[0], fault[1], control);
145
147
  }
146
148
  this.refreshFeedback();
147
149
  }