@fusion.dev/helix-core 0.145.0 → 0.146.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +5203 -1777
- package/dist/controllers/aria-forward-controller/aria-forward-controller.d.ts +3 -2
- package/dist/controllers/aria-forward-controller/aria-forward-controller.js +3 -14
- package/dist/controllers/chart-pointer-controller/chart-pointer-controller.d.ts +65 -3
- package/dist/controllers/chart-pointer-controller/chart-pointer-controller.js +37 -9
- package/dist/controllers/chart-pointer-controller/reading-step.d.ts +7 -1
- package/dist/controllers/chart-pointer-controller/reading-step.js +5 -0
- package/dist/controllers/keyboard-navigation-controller/keyboard-navigation-controller.d.ts +9 -55
- package/dist/controllers/keyboard-navigation-controller/keyboard-navigation-controller.js +7 -39
- package/dist/controllers/relative-clock-controller/relative-clock-controller.d.ts +44 -0
- package/dist/controllers/relative-clock-controller/relative-clock-controller.js +31 -0
- package/dist/controllers/source-controller/source-controller.d.ts +10 -3
- package/dist/controllers/source-controller/source-controller.js +7 -4
- package/dist/controllers/virtualize-controller/virtualize-controller.d.ts +48 -1
- package/dist/controllers/virtualize-controller/virtualize-controller.js +50 -7
- package/dist/events/action.d.ts +12 -0
- package/dist/events/action.js +6 -0
- package/dist/events/activate.d.ts +22 -0
- package/dist/events/activate.js +11 -0
- package/dist/events/aura-fallback.d.ts +12 -0
- package/dist/events/aura-fallback.js +11 -0
- package/dist/events/before-activate.d.ts +24 -0
- package/dist/events/before-activate.js +11 -0
- package/dist/events/before-change.d.ts +26 -0
- package/dist/events/before-change.js +11 -0
- package/dist/events/before-close.d.ts +6 -0
- package/dist/events/before-close.js +11 -0
- package/dist/events/before-collapse.d.ts +6 -0
- package/dist/events/before-collapse.js +11 -0
- package/dist/events/before-edit.d.ts +6 -0
- package/dist/events/before-edit.js +11 -0
- package/dist/events/before-move.d.ts +17 -0
- package/dist/events/before-move.js +11 -0
- package/dist/events/before-open.d.ts +17 -0
- package/dist/events/before-open.js +11 -0
- package/dist/events/before-panel-resize.d.ts +13 -0
- package/dist/events/before-panel-resize.js +11 -0
- package/dist/events/before-pin.d.ts +6 -0
- package/dist/events/before-pin.js +11 -0
- package/dist/events/before-reconnect.d.ts +14 -0
- package/dist/events/before-reconnect.js +11 -0
- package/dist/events/before-relabel.d.ts +15 -0
- package/dist/events/before-relabel.js +11 -0
- package/dist/events/before-resize.d.ts +6 -0
- package/dist/events/before-resize.js +11 -0
- package/dist/events/before-split.d.ts +12 -0
- package/dist/events/before-split.js +11 -0
- package/dist/events/before-toggle.d.ts +23 -0
- package/dist/events/before-toggle.js +11 -0
- package/dist/events/canvas-edit.d.ts +16 -0
- package/dist/events/canvas-edit.js +11 -0
- package/dist/events/canvas-pan.d.ts +13 -0
- package/dist/events/canvas-pan.js +11 -0
- package/dist/events/canvas-view.d.ts +14 -0
- package/dist/events/canvas-view.js +11 -0
- package/dist/events/canvas-zoom.d.ts +6 -0
- package/dist/events/canvas-zoom.js +11 -0
- package/dist/events/caret.d.ts +17 -0
- package/dist/events/caret.js +11 -0
- package/dist/events/clear.d.ts +11 -0
- package/dist/events/clear.js +6 -0
- package/dist/events/collapse.d.ts +12 -0
- package/dist/events/collapse.js +11 -0
- package/dist/events/complete.d.ts +26 -0
- package/dist/events/complete.js +11 -0
- package/dist/events/connect.d.ts +14 -0
- package/dist/events/connect.js +11 -0
- package/dist/events/console.d.ts +13 -0
- package/dist/events/console.js +11 -0
- package/dist/events/copy-error.d.ts +9 -0
- package/dist/events/copy-error.js +6 -0
- package/dist/events/copy.d.ts +12 -0
- package/dist/events/copy.js +10 -0
- package/dist/events/create.d.ts +18 -0
- package/dist/events/create.js +11 -0
- package/dist/events/details.d.ts +454 -0
- package/dist/events/details.js +1 -0
- package/dist/events/dismiss.d.ts +16 -0
- package/dist/events/dismiss.js +11 -0
- package/dist/events/edit.d.ts +12 -0
- package/dist/events/edit.js +11 -0
- package/dist/events/end.d.ts +9 -0
- package/dist/events/end.js +6 -0
- package/dist/events/events.d.ts +111 -1478
- package/dist/events/events.js +91 -863
- package/dist/events/expand.d.ts +10 -0
- package/dist/events/expand.js +11 -0
- package/dist/events/facet.d.ts +17 -0
- package/dist/events/facet.js +11 -0
- package/dist/events/filter.d.ts +12 -0
- package/dist/events/filter.js +11 -0
- package/dist/events/filtered.d.ts +12 -0
- package/dist/events/filtered.js +11 -0
- package/dist/events/graph-filter.d.ts +10 -0
- package/dist/events/graph-filter.js +11 -0
- package/dist/events/graph-layout.d.ts +10 -0
- package/dist/events/graph-layout.js +11 -0
- package/dist/events/graph-pan.d.ts +9 -0
- package/dist/events/graph-pan.js +11 -0
- package/dist/events/graph-part-change.d.ts +10 -0
- package/dist/events/graph-part-change.js +11 -0
- package/dist/events/graph-ready.d.ts +8 -0
- package/dist/events/graph-ready.js +6 -0
- package/dist/events/graph-signal.d.ts +11 -0
- package/dist/events/graph-signal.js +11 -0
- package/dist/events/graph-zoom.d.ts +6 -0
- package/dist/events/graph-zoom.js +11 -0
- package/dist/events/history.d.ts +16 -0
- package/dist/events/history.js +11 -0
- package/dist/events/load-more.d.ts +12 -0
- package/dist/events/load-more.js +6 -0
- package/dist/events/load.d.ts +12 -0
- package/dist/events/load.js +6 -0
- package/dist/events/map-cluster.d.ts +15 -0
- package/dist/events/map-cluster.js +11 -0
- package/dist/events/map-pan.d.ts +18 -0
- package/dist/events/map-pan.js +11 -0
- package/dist/events/map-part-change.d.ts +16 -0
- package/dist/events/map-part-change.js +11 -0
- package/dist/events/map-ready.d.ts +15 -0
- package/dist/events/map-ready.js +6 -0
- package/dist/events/map-rotate.d.ts +9 -0
- package/dist/events/map-rotate.js +11 -0
- package/dist/events/map-tilt.d.ts +9 -0
- package/dist/events/map-tilt.js +11 -0
- package/dist/events/map-zoom.d.ts +13 -0
- package/dist/events/map-zoom.js +11 -0
- package/dist/events/move.d.ts +11 -0
- package/dist/events/move.js +11 -0
- package/dist/events/names.d.ts +15 -0
- package/dist/events/names.js +88 -0
- package/dist/events/navigate.d.ts +13 -0
- package/dist/events/navigate.js +11 -0
- package/dist/events/next.d.ts +23 -0
- package/dist/events/next.js +11 -0
- package/dist/events/panel-resize.d.ts +12 -0
- package/dist/events/panel-resize.js +11 -0
- package/dist/events/pin.d.ts +12 -0
- package/dist/events/pin.js +11 -0
- package/dist/events/press.d.ts +19 -0
- package/dist/events/press.js +11 -0
- package/dist/events/preview.d.ts +14 -0
- package/dist/events/preview.js +11 -0
- package/dist/events/previous.d.ts +6 -0
- package/dist/events/previous.js +11 -0
- package/dist/events/range-change.d.ts +10 -0
- package/dist/events/range-change.js +11 -0
- package/dist/events/read.d.ts +19 -0
- package/dist/events/read.js +11 -0
- package/dist/events/reconnect.d.ts +6 -0
- package/dist/events/reconnect.js +11 -0
- package/dist/events/reject.d.ts +13 -0
- package/dist/events/reject.js +11 -0
- package/dist/events/relabel.d.ts +6 -0
- package/dist/events/relabel.js +11 -0
- package/dist/events/remove.d.ts +12 -0
- package/dist/events/remove.js +11 -0
- package/dist/events/reorder.d.ts +18 -0
- package/dist/events/reorder.js +11 -0
- package/dist/events/reordered.d.ts +12 -0
- package/dist/events/reordered.js +11 -0
- package/dist/events/resize.d.ts +19 -0
- package/dist/events/resize.js +11 -0
- package/dist/events/resized.d.ts +16 -0
- package/dist/events/resized.js +11 -0
- package/dist/events/sample-end.d.ts +5 -0
- package/dist/events/sample-end.js +6 -0
- package/dist/events/sample-start.d.ts +18 -0
- package/dist/events/sample-start.js +6 -0
- package/dist/events/scrolled.d.ts +32 -0
- package/dist/events/scrolled.js +11 -0
- package/dist/events/select.d.ts +12 -0
- package/dist/events/select.js +11 -0
- package/dist/events/selected.d.ts +12 -0
- package/dist/events/selected.js +11 -0
- package/dist/events/send.d.ts +18 -0
- package/dist/events/send.js +11 -0
- package/dist/events/shortcut.d.ts +13 -0
- package/dist/events/shortcut.js +11 -0
- package/dist/events/sort.d.ts +17 -0
- package/dist/events/sort.js +11 -0
- package/dist/events/sorted.d.ts +15 -0
- package/dist/events/sorted.js +11 -0
- package/dist/events/split.d.ts +12 -0
- package/dist/events/split.js +11 -0
- package/dist/events/toggle.d.ts +15 -0
- package/dist/events/toggle.js +11 -0
- package/dist/events/tour-ask.d.ts +16 -0
- package/dist/events/tour-ask.js +11 -0
- package/dist/events/tour-status.d.ts +14 -0
- package/dist/events/tour-status.js +11 -0
- package/dist/events/typing.d.ts +10 -0
- package/dist/events/typing.js +11 -0
- package/dist/helix-element/react-bridge.d.ts +10 -0
- package/dist/helix-element/react-bridge.js +1 -1
- package/dist/helix-form-element/helix-form-element.d.ts +5 -20
- package/dist/helix-form-element/helix-form-element.js +4 -56
- package/dist/index.d.ts +15 -3
- package/dist/index.js +15 -3
- package/dist/mixins/mixin-chart-source/mixin-chart-source.d.ts +17 -2
- package/dist/mixins/mixin-chart-source/mixin-chart-source.js +22 -1
- package/dist/mixins/mixin-controller-active/mixin-controller-active.js +4 -3
- package/dist/mixins/mixin-controller-checked/mixin-controller-checked.d.ts +5 -2
- package/dist/mixins/mixin-controller-checked/mixin-controller-checked.js +2 -1
- package/dist/mixins/mixin-controller-value/mixin-controller-value.d.ts +4 -2
- package/dist/mixins/mixin-controller-value/mixin-controller-value.js +7 -2
- package/dist/mixins/mixin-dismissible/mixin-dismissible.js +20 -4
- package/dist/mixins/mixin-field/mixin-field.js +2 -2
- package/dist/mixins/mixin-picker-field/mixin-picker-field.d.ts +15 -3
- package/dist/mixins/mixin-picker-field/mixin-picker-field.js +11 -4
- package/dist/mixins/mixin-segmented-field/mixin-segmented-field.d.ts +1 -1
- package/dist/mixins/mixin-segmented-field/mixin-segmented-field.js +10 -4
- package/dist/utils/audit-name/audit-name-off.d.ts +10 -0
- package/dist/utils/audit-name/audit-name-off.js +1 -0
- package/dist/utils/audit-name/audit-name.d.ts +19 -6
- package/dist/utils/audit-name/audit-name.js +10 -27
- package/dist/utils/calendar/calendar.js +7 -7
- package/dist/utils/draw-tooltip/draw-tooltip.d.ts +1 -1
- package/dist/utils/draw-tooltip/draw-tooltip.js +3 -1
- package/dist/utils/draw-tooltip/spoken-reading.d.ts +6 -2
- package/dist/utils/draw-tooltip/spoken-reading.js +5 -4
- package/dist/utils/heading-level/heading-level.d.ts +8 -0
- package/dist/utils/heading-level/heading-level.js +4 -0
- package/dist/utils/implicit-submit/implicit-submit.d.ts +25 -0
- package/dist/utils/implicit-submit/implicit-submit.js +52 -0
- package/dist/utils/name-text/name-text.d.ts +12 -0
- package/dist/utils/name-text/name-text.js +25 -0
- package/dist/utils/number-format/number-format.d.ts +2 -1
- package/dist/utils/number-format/number-format.js +13 -5
- package/dist/utils/plain-click/plain-click.d.ts +10 -0
- package/dist/utils/plain-click/plain-click.js +1 -0
- package/dist/utils/press-type/press-type.d.ts +20 -0
- package/dist/utils/press-type/press-type.js +15 -0
- package/dist/utils/report-runtime/report-runtime.d.ts +6 -3
- package/dist/utils/row-data/row-data.d.ts +15 -0
- package/dist/utils/row-data/row-data.js +17 -0
- package/dist/utils/row-order/row-order.d.ts +141 -0
- package/dist/utils/row-order/row-order.js +76 -0
- package/dist/utils/tell-disclosure/tell-disclosure.d.ts +4 -0
- package/dist/utils/tree-arrow/tree-arrow.d.ts +23 -0
- package/dist/utils/tree-arrow/tree-arrow.js +9 -0
- package/dist/utils/typeahead/typeahead.d.ts +67 -0
- package/dist/utils/typeahead/typeahead.js +36 -0
- package/dist/utils/value-as/value-as.d.ts +9 -0
- package/dist/utils/value-as/value-as.js +9 -1
- package/dist/utils/watch-labels/watch-labels.d.ts +16 -0
- package/dist/utils/watch-labels/watch-labels.js +34 -0
- package/dist/utils/words-converter/words-converter.d.ts +14 -0
- package/dist/utils/words-converter/words-converter.js +15 -0
- package/dist/utils/written-list/written-list.d.ts +29 -0
- package/dist/utils/written-list/written-list.js +30 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +18 -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,
|
|
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,7 +30,7 @@ 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, 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
36
|
export { MixinChartSource, PALETTE, PLOT_HEIGHT, PLOT_WIDTH, seriesIndex, seriesNames, } from './mixins/mixin-chart-source/mixin-chart-source.js';
|
|
@@ -57,6 +59,7 @@ export { countLabel } from './utils/count-label/count-label.js';
|
|
|
57
59
|
export { createSheet } from './utils/create-sheet/create-sheet.js';
|
|
58
60
|
export { formatColor, parseColor, toCss, toHsl, toRgb, } from './utils/css-color/css-color.js';
|
|
59
61
|
export { customElement, definedTags, duplicateRegistrations, } from './utils/custom-element/custom-element.js';
|
|
62
|
+
export { segmentName } from './utils/date-segments/date-segments.js';
|
|
60
63
|
export { drawDismiss, drawDismissGlyph, } from './utils/draw-dismiss/draw-dismiss.js';
|
|
61
64
|
export { drawIcon } from './utils/draw-icon/draw-icon.js';
|
|
62
65
|
export { CHART_PLOT, drawTooltip } from './utils/draw-tooltip/draw-tooltip.js';
|
|
@@ -67,7 +70,9 @@ export { deepActiveElement, deepContains, focusableElements, } from './utils/foc
|
|
|
67
70
|
export { afterLinkFollowed, followLink, } from './utils/follow-link/follow-link.js';
|
|
68
71
|
export { formatNumbers } from './utils/format-numbers/format-numbers.js';
|
|
69
72
|
export { headingIn, headingsIn } from './utils/heading-in/heading-in.js';
|
|
73
|
+
export { headingLevel } from './utils/heading-level/heading-level.js';
|
|
70
74
|
export { hostAria } from './utils/host-aria/host-aria.js';
|
|
75
|
+
export { defaultButton, submitImplicitly, submits, submitsOnEnter, } from './utils/implicit-submit/implicit-submit.js';
|
|
71
76
|
export { forgetDisabled, inheritDisabled, } from './utils/inherit-disabled/inherit-disabled.js';
|
|
72
77
|
export { inlineStep } from './utils/inline-step/inline-step.js';
|
|
73
78
|
export { isRtl } from './utils/is-rtl/is-rtl.js';
|
|
@@ -77,7 +82,9 @@ export { markRegion } from './utils/mark-region/mark-region.js';
|
|
|
77
82
|
export { copiesOf, sameCopies, } from './utils/media-copy/media-copy.js';
|
|
78
83
|
export { formatNumber, parseNumber } from './utils/number-format/number-format.js';
|
|
79
84
|
export { onUnlessFalse } from './utils/on-unless-false/on-unless-false.js';
|
|
85
|
+
export { plainClick } from './utils/plain-click/plain-click.js';
|
|
80
86
|
export { appleTouch, onApple } from './utils/platform/platform.js';
|
|
87
|
+
export { pressType } from './utils/press-type/press-type.js';
|
|
81
88
|
export { rangeAdd } from './utils/range-add/range-add.js';
|
|
82
89
|
export { readColor, rgbOf } from './utils/read-color/read-color.js';
|
|
83
90
|
export { byRow, readRows, readSeries, seriesKey, unbroken, } from './utils/read-series/read-series.js';
|
|
@@ -91,6 +98,8 @@ export { requestChange, } from './utils/request-change/request-change.js';
|
|
|
91
98
|
export { resolveActiveItem, } from './utils/resolve-active-item/resolve-active-item.js';
|
|
92
99
|
export { holdCaret, restoreValue } from './utils/restore-value/restore-value.js';
|
|
93
100
|
export { rovingStop } from './utils/roving-stop/roving-stop.js';
|
|
101
|
+
export { valueAt } from './utils/row-data/row-data.js';
|
|
102
|
+
export { arranged, cycle, filter, format, ordered, parse, sort, window_, } from './utils/row-order/row-order.js';
|
|
94
103
|
export { extent, linear } from './utils/scale/scale.js';
|
|
95
104
|
export { ticks } from './utils/scale/ticks.js';
|
|
96
105
|
export { scrollItemIntoView, } from './utils/scroll-item-into-view/scroll-item-into-view.js';
|
|
@@ -102,8 +111,11 @@ export { edgeOffset, FLING, parseSnapPoints, settleSwipe, snapTravel, swipeAxis,
|
|
|
102
111
|
export { tellDisclosure } from './utils/tell-disclosure/tell-disclosure.js';
|
|
103
112
|
export { subscribe } from './utils/ticker/ticker.js';
|
|
104
113
|
export { TONE_MARKS, toneMark, } from './utils/tone-marks/tone-marks.js';
|
|
114
|
+
export { treeArrow } from './utils/tree-arrow/tree-arrow.js';
|
|
115
|
+
export { Typeahead, typeaheadBy, typesCharacter, } from './utils/typeahead/typeahead.js';
|
|
105
116
|
export { dateAsValue, isClockValue, isDateValue, isTimeValue, minutesAsValue, numberAsValue, secondsAsValue, timeAsValue, valueAsDate, valueAsMinutes, valueAsNumber, valueAsSeconds, valueAsTime, } from './utils/value-as/value-as.js';
|
|
106
117
|
export { watchTheme } from './utils/watch-theme/watch-theme.js';
|
|
118
|
+
export { wordsConverter } from './utils/words-converter/words-converter.js';
|
|
107
119
|
export { writeClock, writeTime } from './utils/write-time/write-time.js';
|
|
108
|
-
export { commaList, toggleValue, writtenList, writtenNumbers, } from './utils/written-list/written-list.js';
|
|
120
|
+
export { commaList, pressedValue, prunedValue, toggleEvery, toggleValue, writtenList, writtenNumbers, } from './utils/written-list/written-list.js';
|
|
109
121
|
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`
|
|
145
|
-
*
|
|
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
|
*/
|
|
@@ -23,6 +23,17 @@ export const MixinChartSource = (Base) => {
|
|
|
23
23
|
this.for = '';
|
|
24
24
|
this.label = '';
|
|
25
25
|
this.locale = '';
|
|
26
|
+
this.positionLabel = '{position} of {count}';
|
|
27
|
+
}
|
|
28
|
+
static get observedAttributes() {
|
|
29
|
+
const inherited = Reflect.get(Base, 'observedAttributes', this);
|
|
30
|
+
return [...(inherited ?? []), 'aria-label'];
|
|
31
|
+
}
|
|
32
|
+
attributeChangedCallback(name, old, value) {
|
|
33
|
+
super.attributeChangedCallback(name, old, value);
|
|
34
|
+
if (name === 'aria-label') {
|
|
35
|
+
this.requestUpdate();
|
|
36
|
+
}
|
|
26
37
|
}
|
|
27
38
|
willUpdate(changed) {
|
|
28
39
|
super.willUpdate(changed);
|
|
@@ -34,7 +45,10 @@ export const MixinChartSource = (Base) => {
|
|
|
34
45
|
return this.source.series;
|
|
35
46
|
}
|
|
36
47
|
get named() {
|
|
37
|
-
return this.
|
|
48
|
+
return (this.getAttribute?.('aria-label') ||
|
|
49
|
+
this.label ||
|
|
50
|
+
this.source.element?.querySelector('caption')?.textContent?.trim() ||
|
|
51
|
+
'');
|
|
38
52
|
}
|
|
39
53
|
get sourceRows() {
|
|
40
54
|
return this.source.rows;
|
|
@@ -51,6 +65,10 @@ export const MixinChartSource = (Base) => {
|
|
|
51
65
|
showsSeries(name) {
|
|
52
66
|
return !this.source.hidden.has(seriesKey(name));
|
|
53
67
|
}
|
|
68
|
+
showsColumn(cell) {
|
|
69
|
+
const name = this.sourceRows[0]?.cells[cell]?.name;
|
|
70
|
+
return name === undefined || this.showsSeries(name);
|
|
71
|
+
}
|
|
54
72
|
get readings() {
|
|
55
73
|
return this.sourceRows.length;
|
|
56
74
|
}
|
|
@@ -64,5 +82,8 @@ export const MixinChartSource = (Base) => {
|
|
|
64
82
|
__decorate([
|
|
65
83
|
property()
|
|
66
84
|
], ChartSourceElement.prototype, "locale", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
property({ attribute: 'position-label' })
|
|
87
|
+
], ChartSourceElement.prototype, "positionLabel", void 0);
|
|
67
88
|
return ChartSourceElement;
|
|
68
89
|
};
|
|
@@ -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
|
-
*
|
|
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 =
|
|
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 =
|
|
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 :
|
|
64
|
+
this.valueState = typeof state === 'string' ? state : this.declared;
|
|
60
65
|
this.requestUpdate('value', previous);
|
|
61
66
|
}
|
|
62
67
|
}
|
|
@@ -7,6 +7,7 @@ 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() {
|
|
@@ -25,14 +26,26 @@ export const MixinDismissible = (Base) => {
|
|
|
25
26
|
return this.shadowRoot?.querySelector('[part~="dismiss"]') ?? null;
|
|
26
27
|
}
|
|
27
28
|
dismiss() {
|
|
28
|
-
const
|
|
29
|
+
const inside = deepContains(this, deepActiveElement());
|
|
30
|
+
const neighbors = inside ? this.neighbors() : [];
|
|
31
|
+
const beside = inside && neighbors.length === 0 ? this.stopBeside() : undefined;
|
|
29
32
|
const event = this.dismissEvent();
|
|
30
33
|
this.dispatchEvent(event);
|
|
31
|
-
if (neighbors.length > 0 && !event.defaultPrevented) {
|
|
32
|
-
this.keepFocus(neighbors);
|
|
34
|
+
if ((neighbors.length > 0 || beside) && !event.defaultPrevented) {
|
|
35
|
+
this.keepFocus(neighbors, beside);
|
|
33
36
|
}
|
|
34
37
|
return !event.defaultPrevented;
|
|
35
38
|
}
|
|
39
|
+
stopBeside() {
|
|
40
|
+
const stops = tabStops(document.body);
|
|
41
|
+
const own = stops.flatMap((stop, at) => (deepContains(this, stop) ? [at] : []));
|
|
42
|
+
const first = own[0];
|
|
43
|
+
const last = own.at(-1);
|
|
44
|
+
if (first === undefined || last === undefined) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return stops[last + 1] ?? stops[first - 1];
|
|
48
|
+
}
|
|
36
49
|
neighbors() {
|
|
37
50
|
const same = (node) => node instanceof HTMLElement && node.localName === this.localName;
|
|
38
51
|
const after = [];
|
|
@@ -49,7 +62,7 @@ export const MixinDismissible = (Base) => {
|
|
|
49
62
|
}
|
|
50
63
|
return [...after, ...before];
|
|
51
64
|
}
|
|
52
|
-
keepFocus(neighbors) {
|
|
65
|
+
keepFocus(neighbors, beside) {
|
|
53
66
|
const settle = () => {
|
|
54
67
|
const active = document.activeElement;
|
|
55
68
|
if (this.isConnected || (active !== null && active !== document.body)) {
|
|
@@ -64,6 +77,9 @@ export const MixinDismissible = (Base) => {
|
|
|
64
77
|
}
|
|
65
78
|
}
|
|
66
79
|
}
|
|
80
|
+
if (beside?.isConnected) {
|
|
81
|
+
beside.focus();
|
|
82
|
+
}
|
|
67
83
|
};
|
|
68
84
|
settle();
|
|
69
85
|
requestAnimationFrame(settle);
|
|
@@ -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 '
|
|
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([
|
|
@@ -92,11 +92,23 @@ export declare class MixinPickerFieldInterface {
|
|
|
92
92
|
*
|
|
93
93
|
* The one check the platform cannot make: the control is `type="text"` and
|
|
94
94
|
* has no idea what a date, a time or a color is, so the family says what one
|
|
95
|
-
* looks like
|
|
96
|
-
*
|
|
95
|
+
* looks like. A message alone is reported as `badInput`; a flag and a
|
|
96
|
+
* message, such as `['rangeUnderflow', 'Choose a date on or after…']`, sets
|
|
97
|
+
* that flag, as a native date input does for its `min`. Empty means the
|
|
98
|
+
* platform's own verdict stands.
|
|
97
99
|
*/
|
|
98
|
-
protected validate():
|
|
100
|
+
protected validate(): PickerVerdict;
|
|
99
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* What a picker field finds wrong: a message, reported as `badInput`, or the
|
|
104
|
+
* validity flag to set and its message. Empty means nothing is wrong.
|
|
105
|
+
*/
|
|
106
|
+
export type PickerVerdict = string | readonly [flag: keyof ValidityStateFlags, message: string];
|
|
107
|
+
/**
|
|
108
|
+
* A verdict as the flags and the message `setValidity` takes, or `null` where
|
|
109
|
+
* there is nothing wrong.
|
|
110
|
+
*/
|
|
111
|
+
export declare const verdictFlags: (verdict: PickerVerdict) => [flags: ValidityStateFlags, message: string] | null;
|
|
100
112
|
/**
|
|
101
113
|
* Grafts a floating picker onto a text field, and the protocol between them.
|
|
102
114
|
*
|
|
@@ -6,8 +6,15 @@ 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
|
+
export const verdictFlags = (verdict) => {
|
|
13
|
+
if (typeof verdict === 'string') {
|
|
14
|
+
return verdict === '' ? null : [{ badInput: true }, verdict];
|
|
15
|
+
}
|
|
16
|
+
return [{ [verdict[0]]: true }, verdict[1]];
|
|
17
|
+
};
|
|
11
18
|
export const MixinPickerField = (Base) => {
|
|
12
19
|
class PickerFieldElement extends Base {
|
|
13
20
|
constructor() {
|
|
@@ -91,7 +98,7 @@ export const MixinPickerField = (Base) => {
|
|
|
91
98
|
this.fromTrigger = false;
|
|
92
99
|
this.handleKeypress = (event) => {
|
|
93
100
|
if (event.key === 'Enter' && !event.defaultPrevented) {
|
|
94
|
-
this.
|
|
101
|
+
submitImplicitly(this.form);
|
|
95
102
|
}
|
|
96
103
|
};
|
|
97
104
|
this.handleTriggerClick = () => {
|
|
@@ -136,12 +143,12 @@ export const MixinPickerField = (Base) => {
|
|
|
136
143
|
if (!control) {
|
|
137
144
|
return;
|
|
138
145
|
}
|
|
139
|
-
const
|
|
140
|
-
if (
|
|
146
|
+
const fault = verdictFlags(this.validate());
|
|
147
|
+
if (fault === null) {
|
|
141
148
|
this.copyValidity(control);
|
|
142
149
|
}
|
|
143
150
|
else {
|
|
144
|
-
this.internals.setValidity(
|
|
151
|
+
this.internals.setValidity(fault[0], fault[1], control);
|
|
145
152
|
}
|
|
146
153
|
this.refreshFeedback();
|
|
147
154
|
}
|
|
@@ -4,7 +4,7 @@ import { type SegmentedKind, type SegmentOptions } from '../../utils/date-segmen
|
|
|
4
4
|
import type { MixinControllerOpenInterface } from '../mixin-controller-open/mixin-controller-open.js';
|
|
5
5
|
import type { MixinControllerValueInterface } from '../mixin-controller-value/mixin-controller-value.js';
|
|
6
6
|
import type { MixinFieldInterface } from '../mixin-field/mixin-field.js';
|
|
7
|
-
import type
|
|
7
|
+
import { type MixinPickerFieldInterface } from '../mixin-picker-field/mixin-picker-field.js';
|
|
8
8
|
type Constructor<T> = new (...args: any[]) => T;
|
|
9
9
|
/** What this is applied over: a picker field, which `MixinPickerField` makes. */
|
|
10
10
|
type SegmentedBase = HelixFormElement & MixinControllerOpenInterface & MixinControllerValueInterface & MixinFieldInterface & MixinPickerFieldInterface;
|
|
@@ -8,6 +8,7 @@ import { html, nothing } from 'lit';
|
|
|
8
8
|
import { property, state } from 'lit/decorators.js';
|
|
9
9
|
import { isPartial, isTwelveHourLayout, segmentKey, segmentLayout, segmentName, segmentRange, segmentsOf, segmentsValue, segmentText, segmentValueText, shownValue, } from '../../utils/date-segments/date-segments.js';
|
|
10
10
|
import { inlineStep } from '../../utils/inline-step/inline-step.js';
|
|
11
|
+
import { verdictFlags, } from '../mixin-picker-field/mixin-picker-field.js';
|
|
11
12
|
export const MixinSegmentedField = (Base) => {
|
|
12
13
|
class SegmentedFieldElement extends Base {
|
|
13
14
|
constructor() {
|
|
@@ -169,7 +170,7 @@ export const MixinSegmentedField = (Base) => {
|
|
|
169
170
|
}
|
|
170
171
|
const anchor = this.anchor ?? undefined;
|
|
171
172
|
const partial = isPartial(this.segmentedKind, this.parts, this.layout);
|
|
172
|
-
const
|
|
173
|
+
const fault = verdictFlags(this.validate());
|
|
173
174
|
if (partial) {
|
|
174
175
|
this.internals.setValidity({ badInput: true }, this.badInputMessage ||
|
|
175
176
|
(this.segmentedKind === 'date' ? 'Enter a whole date.' : 'Enter a whole time.'), anchor);
|
|
@@ -178,8 +179,8 @@ export const MixinSegmentedField = (Base) => {
|
|
|
178
179
|
this.internals.setValidity({ valueMissing: true }, this.valueMissingMessage ||
|
|
179
180
|
(this.segmentedKind === 'date' ? 'Enter a date.' : 'Enter a time.'), anchor);
|
|
180
181
|
}
|
|
181
|
-
else if (
|
|
182
|
-
this.internals.setValidity(
|
|
182
|
+
else if (fault !== null) {
|
|
183
|
+
this.internals.setValidity(fault[0], fault[1], anchor);
|
|
183
184
|
}
|
|
184
185
|
else {
|
|
185
186
|
this.internals.setValidity({});
|
|
@@ -210,13 +211,18 @@ export const MixinSegmentedField = (Base) => {
|
|
|
210
211
|
const { max, min } = segmentRange(kind, this.parts, twelve);
|
|
211
212
|
const text = segmentText(kind, this.parts, twelve, locale);
|
|
212
213
|
const empty = shown === undefined;
|
|
214
|
+
const id = `${this.controlId}-${kind}`;
|
|
215
|
+
const editable = !this.isDisabled && !this.readOnly;
|
|
213
216
|
return html `<span
|
|
214
217
|
part="segment${empty ? ' segment-placeholder' : ''}"
|
|
218
|
+
id=${id}
|
|
215
219
|
data-segment=${kind}
|
|
216
220
|
role="spinbutton"
|
|
217
221
|
tabindex=${this.isDisabled ? '-1' : '0'}
|
|
218
222
|
inputmode=${kind === 'dayPeriod' ? nothing : 'numeric'}
|
|
219
|
-
|
|
223
|
+
enterkeyhint=${editable ? 'next' : nothing}
|
|
224
|
+
aria-label=${this.labeled ? `${segmentName(kind, locale)},` : segmentName(kind, locale)}
|
|
225
|
+
aria-labelledby=${this.labeled ? `${id} ${this.labelId}` : nothing}
|
|
220
226
|
aria-valuemin=${min}
|
|
221
227
|
aria-valuemax=${max}
|
|
222
228
|
aria-valuenow=${shown ?? nothing}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { auditName as audit } from './audit-name.js';
|
|
2
|
+
/**
|
|
3
|
+
* The missing-name warning in a production build: nothing.
|
|
4
|
+
*
|
|
5
|
+
* `#audit-name` resolves here unless the bundler or runtime asks for the
|
|
6
|
+
* `development` condition, so a production build carries none of the audit's
|
|
7
|
+
* code. The signature is the audit's, so a call site reads the same in both
|
|
8
|
+
* builds. See `audit-name.ts`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const auditName: typeof audit;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const auditName = () => { };
|
|
@@ -6,8 +6,13 @@
|
|
|
6
6
|
* **An estimate, cheap on purpose.** It answers whether any route holds words,
|
|
7
7
|
* which is what the warning is about, and leaves the order the routes win in
|
|
8
8
|
* to the browser.
|
|
9
|
+
*
|
|
10
|
+
* **What the control shows as its value is no name**, so the words in
|
|
11
|
+
* `shown` count for no route. A Select with no label names its trigger by the
|
|
12
|
+
* part that shows the choice, and while nothing is chosen that part shows the
|
|
13
|
+
* placeholder, "Choose", which says nothing about what is being chosen.
|
|
9
14
|
*/
|
|
10
|
-
export declare const hasName: (element: HTMLElement) => boolean;
|
|
15
|
+
export declare const hasName: (element: HTMLElement, shown?: Element | null) => boolean;
|
|
11
16
|
/**
|
|
12
17
|
* Warns once, through the runtime channel, when a control has no accessible
|
|
13
18
|
* name: none on the host, and none on the control inside it.
|
|
@@ -18,11 +23,19 @@ export declare const hasName: (element: HTMLElement) => boolean;
|
|
|
18
23
|
* that task, and an element is read once in its life, so a name taken away
|
|
19
24
|
* later is not reported.
|
|
20
25
|
*
|
|
21
|
-
* **In
|
|
22
|
-
*
|
|
23
|
-
*
|
|
26
|
+
* **In a development build only.** Every field and Button calls it, so in
|
|
27
|
+
* production it would cost each of them about 450 bytes gzip for a sentence
|
|
28
|
+
* meant for the person writing the page. Core imports it as `#audit-name`,
|
|
29
|
+
* which `package.json` resolves here under the `development` condition (Vite
|
|
30
|
+
* and webpack in development, `bun --conditions development`,
|
|
31
|
+
* `node --conditions=development`) and to `audit-name-off.ts`, which does
|
|
32
|
+
* nothing, everywhere else. Like every runtime warning it reports through the
|
|
33
|
+
* one channel, and a project that wants the console quiet tells
|
|
34
|
+
* `@fusion.dev/helix-diagnostics` with `core.warnings: false`.
|
|
24
35
|
*
|
|
25
36
|
* `also` answers for a name the component gave through its internals, which no
|
|
26
|
-
* attribute shows. `fix` is the sentence that says how to name it.
|
|
37
|
+
* attribute shows. `fix` is the sentence that says how to name it. `shown` is
|
|
38
|
+
* the part where the control shows its value or its placeholder, whose words
|
|
39
|
+
* are no name.
|
|
27
40
|
*/
|
|
28
|
-
export declare const auditName: (host: HTMLElement, control: () => HTMLElement | null, fix: string, also?: () => boolean) => void;
|
|
41
|
+
export declare const auditName: (host: HTMLElement, control: () => HTMLElement | null, fix: string, also?: () => boolean, shown?: () => Element | null) => void;
|
|
@@ -1,31 +1,13 @@
|
|
|
1
|
+
import { nameText } from '../name-text/name-text.js';
|
|
1
2
|
import { reportRuntime } from '../report-runtime/report-runtime.js';
|
|
2
|
-
const
|
|
3
|
-
if (node instanceof HTMLSlotElement) {
|
|
4
|
-
return node.assignedNodes({ flatten: true }).map(nameText).join('');
|
|
5
|
-
}
|
|
6
|
-
if (node.nodeType === Node.TEXT_NODE) {
|
|
7
|
-
return node.textContent ?? '';
|
|
8
|
-
}
|
|
9
|
-
if (!(node instanceof Element)) {
|
|
10
|
-
return '';
|
|
11
|
-
}
|
|
12
|
-
if ((node instanceof HTMLElement && node.hidden) || node.getAttribute('aria-hidden') === 'true') {
|
|
13
|
-
return '';
|
|
14
|
-
}
|
|
15
|
-
const said = node.getAttribute('aria-label') ?? node.getAttribute('alt');
|
|
16
|
-
if (said?.trim()) {
|
|
17
|
-
return said;
|
|
18
|
-
}
|
|
19
|
-
return [...node.childNodes].map(nameText).join('');
|
|
20
|
-
};
|
|
21
|
-
const namesWithWords = (ids, from) => {
|
|
3
|
+
const namesWithWords = (ids, from, shown) => {
|
|
22
4
|
const root = from.getRootNode();
|
|
23
5
|
return (ids ?? '')
|
|
24
6
|
.split(/\s+/)
|
|
25
7
|
.filter(Boolean)
|
|
26
8
|
.some((id) => {
|
|
27
9
|
const found = root.getElementById?.(id);
|
|
28
|
-
return found ? nameText(found).trim() !== '' : false;
|
|
10
|
+
return found ? nameText(found, shown).trim() !== '' : false;
|
|
29
11
|
});
|
|
30
12
|
};
|
|
31
13
|
const NAMED_BY_CONTENT = new Set([
|
|
@@ -40,18 +22,18 @@ const NAMED_BY_CONTENT = new Set([
|
|
|
40
22
|
'switch',
|
|
41
23
|
'tab',
|
|
42
24
|
]);
|
|
43
|
-
export const hasName = (element) => {
|
|
25
|
+
export const hasName = (element, shown) => {
|
|
44
26
|
for (const attribute of ['aria-label', 'title', 'placeholder']) {
|
|
45
27
|
if (element.getAttribute(attribute)?.trim()) {
|
|
46
28
|
return true;
|
|
47
29
|
}
|
|
48
30
|
}
|
|
49
|
-
if (namesWithWords(element.getAttribute('aria-labelledby'), element)) {
|
|
31
|
+
if (namesWithWords(element.getAttribute('aria-labelledby'), element, shown)) {
|
|
50
32
|
return true;
|
|
51
33
|
}
|
|
52
34
|
const referenced = element
|
|
53
35
|
.ariaLabelledByElements;
|
|
54
|
-
if ((referenced ?? []).some((one) => nameText(one).trim() !== '')) {
|
|
36
|
+
if ((referenced ?? []).some((one) => nameText(one, shown).trim() !== '')) {
|
|
55
37
|
return true;
|
|
56
38
|
}
|
|
57
39
|
const labels = element.labels;
|
|
@@ -59,7 +41,7 @@ export const hasName = (element) => {
|
|
|
59
41
|
return true;
|
|
60
42
|
}
|
|
61
43
|
const role = element.getAttribute('role') ?? (element.localName === 'button' ? 'button' : '');
|
|
62
|
-
return NAMED_BY_CONTENT.has(role) && nameText(element).trim() !== '';
|
|
44
|
+
return NAMED_BY_CONTENT.has(role) && nameText(element, shown).trim() !== '';
|
|
63
45
|
};
|
|
64
46
|
const audited = new WeakSet();
|
|
65
47
|
const waiting = new Map();
|
|
@@ -70,7 +52,7 @@ const readWaiting = () => {
|
|
|
70
52
|
check();
|
|
71
53
|
}
|
|
72
54
|
};
|
|
73
|
-
export const auditName = (host, control, fix, also) => {
|
|
55
|
+
export const auditName = (host, control, fix, also, shown) => {
|
|
74
56
|
if (audited.has(host) || waiting.has(host)) {
|
|
75
57
|
return;
|
|
76
58
|
}
|
|
@@ -83,7 +65,8 @@ export const auditName = (host, control, fix, also) => {
|
|
|
83
65
|
}
|
|
84
66
|
audited.add(host);
|
|
85
67
|
const inner = control();
|
|
86
|
-
|
|
68
|
+
const value = shown?.();
|
|
69
|
+
if (also?.() || hasName(host) || (inner !== null && hasName(inner, value))) {
|
|
87
70
|
return;
|
|
88
71
|
}
|
|
89
72
|
reportRuntime({
|