@fusion.dev/helix-core 0.142.1 → 0.144.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 (112) hide show
  1. package/custom-elements.json +10436 -3804
  2. package/dist/controllers/aria-forward-controller/aria-forward-controller.d.ts +65 -0
  3. package/dist/controllers/aria-forward-controller/aria-forward-controller.js +77 -16
  4. package/dist/controllers/arrival-controller/arrival-controller.d.ts +12 -0
  5. package/dist/controllers/arrival-controller/arrival-controller.js +10 -0
  6. package/dist/controllers/chart-pointer-controller/chart-pointer-controller.d.ts +99 -0
  7. package/dist/controllers/chart-pointer-controller/chart-pointer-controller.js +107 -2
  8. package/dist/controllers/chart-pointer-controller/reading-step.d.ts +57 -0
  9. package/dist/controllers/chart-pointer-controller/reading-step.js +45 -0
  10. package/dist/controllers/copy-controller/copy-controller.d.ts +11 -6
  11. package/dist/controllers/copy-controller/copy-controller.js +16 -9
  12. package/dist/controllers/delay-controller/delay-controller.d.ts +50 -0
  13. package/dist/controllers/delay-controller/delay-controller.js +54 -0
  14. package/dist/controllers/dismiss-controller/dismiss-controller.js +40 -3
  15. package/dist/controllers/focus-scope-controller/focus-scope-controller.d.ts +56 -0
  16. package/dist/controllers/focus-scope-controller/focus-scope-controller.js +71 -0
  17. package/dist/controllers/keyboard-navigation-controller/keyboard-navigation-controller.d.ts +79 -1
  18. package/dist/controllers/keyboard-navigation-controller/keyboard-navigation-controller.js +80 -10
  19. package/dist/controllers/open-phase-controller/open-phase-controller.d.ts +49 -0
  20. package/dist/controllers/open-phase-controller/open-phase-controller.js +41 -0
  21. package/dist/controllers/popover-controller/popover-controller.d.ts +11 -0
  22. package/dist/controllers/popover-controller/popover-controller.js +6 -0
  23. package/dist/controllers/source-controller/source-controller.d.ts +38 -0
  24. package/dist/controllers/source-controller/source-controller.js +71 -2
  25. package/dist/controllers/status-controller/status-controller.d.ts +47 -0
  26. package/dist/controllers/status-controller/status-controller.js +34 -0
  27. package/dist/controllers/swipe-controller/swipe-controller.d.ts +61 -0
  28. package/dist/controllers/swipe-controller/swipe-controller.js +106 -0
  29. package/dist/controllers/virtualize-controller/virtualize-controller.d.ts +16 -0
  30. package/dist/controllers/virtualize-controller/virtualize-controller.js +24 -2
  31. package/dist/events/events.d.ts +137 -4
  32. package/dist/events/events.js +96 -0
  33. package/dist/helix-element/react-bridge.js +6 -4
  34. package/dist/helix-form-element/helix-form-element.d.ts +131 -2
  35. package/dist/helix-form-element/helix-form-element.js +216 -6
  36. package/dist/index.d.ts +30 -9
  37. package/dist/index.js +29 -8
  38. package/dist/mixins/mixin-chart-source/mixin-chart-source.d.ts +15 -2
  39. package/dist/mixins/mixin-chart-source/mixin-chart-source.js +9 -1
  40. package/dist/mixins/mixin-collection/mixin-collection.d.ts +4 -2
  41. package/dist/mixins/mixin-collection/mixin-collection.js +8 -6
  42. package/dist/mixins/mixin-controller-checked/mixin-controller-checked.d.ts +10 -0
  43. package/dist/mixins/mixin-controller-checked/mixin-controller-checked.js +9 -0
  44. package/dist/mixins/mixin-controller-open/mixin-controller-open.js +19 -3
  45. package/dist/mixins/mixin-dismissible/mixin-dismissible.d.ts +2 -0
  46. package/dist/mixins/mixin-dismissible/mixin-dismissible.js +43 -0
  47. package/dist/mixins/mixin-field/mixin-field.d.ts +2 -0
  48. package/dist/mixins/mixin-field/mixin-field.js +46 -8
  49. package/dist/mixins/mixin-picker-editing/mixin-picker-editing.d.ts +23 -8
  50. package/dist/mixins/mixin-picker-editing/mixin-picker-editing.js +25 -1
  51. package/dist/mixins/mixin-picker-field/mixin-picker-field.d.ts +29 -5
  52. package/dist/mixins/mixin-picker-field/mixin-picker-field.js +94 -1
  53. package/dist/mixins/mixin-segmented-field/mixin-segmented-field.d.ts +67 -0
  54. package/dist/mixins/mixin-segmented-field/mixin-segmented-field.js +243 -0
  55. package/dist/utils/arrow/arrow.d.ts +15 -0
  56. package/dist/utils/arrow/arrow.js +2 -0
  57. package/dist/utils/audit-name/audit-name.d.ts +28 -0
  58. package/dist/utils/audit-name/audit-name.js +95 -0
  59. package/dist/utils/calendar/calendar.d.ts +117 -0
  60. package/dist/utils/calendar/calendar.js +96 -0
  61. package/dist/utils/chord/chord.d.ts +43 -0
  62. package/dist/utils/chord/chord.js +53 -0
  63. package/dist/utils/clock/clock.d.ts +87 -0
  64. package/dist/utils/clock/clock.js +68 -0
  65. package/dist/utils/color-name/color-name.d.ts +28 -0
  66. package/dist/utils/color-name/color-name.js +150 -0
  67. package/dist/utils/count-label/count-label.d.ts +13 -0
  68. package/dist/utils/count-label/count-label.js +5 -0
  69. package/dist/utils/css-color/css-color.d.ts +12 -0
  70. package/dist/utils/css-color/css-color.js +2 -2
  71. package/dist/utils/date-segments/date-segments.d.ts +122 -0
  72. package/dist/utils/date-segments/date-segments.js +206 -0
  73. package/dist/utils/draw-dismiss/draw-dismiss.d.ts +30 -0
  74. package/dist/utils/draw-dismiss/draw-dismiss.js +16 -0
  75. package/dist/utils/draw-tooltip/draw-tooltip.d.ts +15 -18
  76. package/dist/utils/draw-tooltip/draw-tooltip.js +16 -5
  77. package/dist/utils/draw-tooltip/spoken-reading.d.ts +10 -0
  78. package/dist/utils/draw-tooltip/spoken-reading.js +10 -0
  79. package/dist/utils/follow-link/follow-link.d.ts +46 -0
  80. package/dist/utils/follow-link/follow-link.js +37 -0
  81. package/dist/utils/heading-in/heading-in.d.ts +19 -0
  82. package/dist/utils/heading-in/heading-in.js +14 -0
  83. package/dist/utils/number-format/number-format.d.ts +23 -0
  84. package/dist/utils/number-format/number-format.js +55 -0
  85. package/dist/utils/platform/platform.d.ts +23 -0
  86. package/dist/utils/platform/platform.js +11 -0
  87. package/dist/utils/read-color/read-color.d.ts +14 -0
  88. package/dist/utils/read-color/read-color.js +13 -0
  89. package/dist/utils/read-series/read-series.d.ts +34 -0
  90. package/dist/utils/read-series/read-series.js +32 -4
  91. package/dist/utils/reflect-elements/reflect-elements.d.ts +37 -0
  92. package/dist/utils/reflect-elements/reflect-elements.js +40 -0
  93. package/dist/utils/relative-time/relative-time.d.ts +13 -1
  94. package/dist/utils/relative-time/relative-time.js +7 -4
  95. package/dist/utils/report-runtime/report-runtime.d.ts +12 -0
  96. package/dist/utils/roving-stop/roving-stop.d.ts +20 -0
  97. package/dist/utils/roving-stop/roving-stop.js +3 -0
  98. package/dist/utils/scroll-lock/scroll-lock.d.ts +16 -0
  99. package/dist/utils/scroll-lock/scroll-lock.js +30 -0
  100. package/dist/utils/swipe/swipe.d.ts +63 -0
  101. package/dist/utils/swipe/swipe.js +48 -0
  102. package/dist/utils/tab-stops/tab-stops.d.ts +16 -0
  103. package/dist/utils/tab-stops/tab-stops.js +22 -0
  104. package/dist/utils/value-as/value-as.d.ts +20 -0
  105. package/dist/utils/value-as/value-as.js +16 -0
  106. package/dist/utils/write-time/write-time.d.ts +11 -1
  107. package/dist/utils/write-time/write-time.js +7 -7
  108. package/dist/utils/written-list/written-list.d.ts +29 -2
  109. package/dist/utils/written-list/written-list.js +11 -1
  110. package/dist/version.d.ts +1 -1
  111. package/dist/version.js +1 -1
  112. package/package.json +4 -4
@@ -6,13 +6,55 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { property, state } from 'lit/decorators.js';
8
8
  import { HelixElement } from '../helix-element/helix-element.js';
9
- export class HelixFormElement extends HelixElement {
10
- constructor() {
11
- super(...arguments);
12
- this.disabled = false;
13
- this.formDisabled = false;
14
- this.name = '';
9
+ const VALIDITY_FLAGS = [
10
+ 'badInput',
11
+ 'customError',
12
+ 'patternMismatch',
13
+ 'rangeOverflow',
14
+ 'rangeUnderflow',
15
+ 'stepMismatch',
16
+ 'tooLong',
17
+ 'tooShort',
18
+ 'typeMismatch',
19
+ 'valueMissing',
20
+ ];
21
+ const BLOCKING_TYPES = new Set([
22
+ 'date',
23
+ 'datetime-local',
24
+ 'email',
25
+ 'month',
26
+ 'number',
27
+ 'password',
28
+ 'search',
29
+ 'tel',
30
+ 'text',
31
+ 'time',
32
+ 'url',
33
+ 'week',
34
+ ]);
35
+ const takesFocus = (element) => (element.tabIndex >= 0 || element.hasAttribute('tabindex')) &&
36
+ !element.disabled &&
37
+ (typeof element.checkVisibility !== 'function' || element.checkVisibility());
38
+ const isTabStop = (element) => element instanceof HTMLElement &&
39
+ element.tabIndex >= 0 &&
40
+ !element.disabled &&
41
+ !element.hidden &&
42
+ !element.inert &&
43
+ (typeof element.checkVisibility !== 'function' || element.checkVisibility());
44
+ const firstTabStop = (node) => {
45
+ const children = node instanceof HTMLSlotElement ? node.assignedElements({ flatten: true }) : [...node.children];
46
+ for (const child of children) {
47
+ if (isTabStop(child)) {
48
+ return child;
49
+ }
50
+ const found = (child.shadowRoot ? firstTabStop(child.shadowRoot) : null) ?? firstTabStop(child);
51
+ if (found) {
52
+ return found;
53
+ }
15
54
  }
55
+ return null;
56
+ };
57
+ export class HelixFormElement extends HelixElement {
16
58
  static { this.formAssociated = true; }
17
59
  get isDisabled() {
18
60
  return this.disabled || this.formDisabled;
@@ -20,10 +62,27 @@ export class HelixFormElement extends HelixElement {
20
62
  formDisabledCallback(disabled) {
21
63
  this.formDisabled = disabled && !this.disabled;
22
64
  }
65
+ get heldByFieldset() {
66
+ let fieldset = this.parentElement?.closest('fieldset[disabled]') ?? null;
67
+ while (fieldset) {
68
+ const legend = fieldset.querySelector(':scope > legend');
69
+ if (!legend?.contains(this)) {
70
+ return true;
71
+ }
72
+ fieldset = fieldset.parentElement?.closest('fieldset[disabled]') ?? null;
73
+ }
74
+ return false;
75
+ }
23
76
  formResetCallback() { }
24
77
  willUpdate(changed) {
25
78
  super.willUpdate(changed);
79
+ if (changed.get('disabled') === true && !this.disabled && this.isConnected) {
80
+ this.formDisabled = this.heldByFieldset;
81
+ }
26
82
  this.internals.ariaDisabled = this.isDisabled ? 'true' : null;
83
+ if (this.validityFeedback !== this.appliedFeedback) {
84
+ this.applyValidity();
85
+ }
27
86
  }
28
87
  announceInput() {
29
88
  this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
@@ -31,6 +90,157 @@ export class HelixFormElement extends HelixElement {
31
90
  announceChange() {
32
91
  this.dispatchEvent(new Event('change', { bubbles: true, composed: false }));
33
92
  }
93
+ constructor() {
94
+ super();
95
+ this.disabled = false;
96
+ this.formDisabled = false;
97
+ this.name = '';
98
+ this.reported = { anchor: undefined, flags: {}, message: '' };
99
+ this.customValidity = '';
100
+ this.appliedFeedback = '';
101
+ this.focusFromLabel = (event) => {
102
+ if (!event.isTrusted || event.composedPath()[0] !== this || this.isDisabled) {
103
+ return;
104
+ }
105
+ if (!this.matches(':focus-within')) {
106
+ this.focus();
107
+ }
108
+ };
109
+ this.refreshAnchor = () => {
110
+ if (!this.internals.validity.valid) {
111
+ this.applyValidity();
112
+ }
113
+ };
114
+ const internals = this.internals;
115
+ const report = internals.setValidity.bind(internals);
116
+ this.reportValidityTo = report;
117
+ internals.setValidity = (flags, message, anchor) => {
118
+ this.reported = { anchor, flags: flags ?? {}, message: message ?? '' };
119
+ this.applyValidity();
120
+ };
121
+ }
122
+ get validityFeedback() {
123
+ return '';
124
+ }
125
+ applyValidity() {
126
+ const feedback = this.validityFeedback;
127
+ this.appliedFeedback = feedback;
128
+ const custom = this.customValidity || feedback;
129
+ const flags = {};
130
+ for (const flag of VALIDITY_FLAGS) {
131
+ if (this.reported.flags[flag] === true) {
132
+ flags[flag] = true;
133
+ }
134
+ }
135
+ if (custom !== '') {
136
+ flags.customError = true;
137
+ }
138
+ if (Object.keys(flags).length === 0) {
139
+ this.reportValidityTo({});
140
+ return;
141
+ }
142
+ this.reportValidityTo(flags, custom || this.reported.message, this.validationAnchor(this.reported.anchor));
143
+ }
144
+ validationAnchor(anchor) {
145
+ if (anchor && takesFocus(anchor)) {
146
+ return anchor;
147
+ }
148
+ return this.focusTarget ?? anchor;
149
+ }
150
+ get validity() {
151
+ return this.internals.validity;
152
+ }
153
+ get validationMessage() {
154
+ return this.internals.validationMessage;
155
+ }
156
+ get willValidate() {
157
+ return this.internals.willValidate;
158
+ }
159
+ checkValidity() {
160
+ return this.internals.checkValidity();
161
+ }
162
+ reportValidity() {
163
+ this.applyValidity();
164
+ return this.internals.reportValidity();
165
+ }
166
+ setCustomValidity(message) {
167
+ this.customValidity = message;
168
+ this.applyValidity();
169
+ this.requestUpdate();
170
+ }
171
+ get focusTarget() {
172
+ const root = this.shadowRoot;
173
+ return root ? firstTabStop(root) : null;
174
+ }
175
+ focus(options) {
176
+ const target = this.focusTarget;
177
+ if (target) {
178
+ target.focus(options);
179
+ return;
180
+ }
181
+ super.focus(options);
182
+ }
183
+ connectedCallback() {
184
+ super.connectedCallback();
185
+ this.addEventListener('click', this.focusFromLabel);
186
+ this.addEventListener('invalid', this.refreshAnchor);
187
+ }
188
+ disconnectedCallback() {
189
+ super.disconnectedCallback();
190
+ this.removeEventListener('click', this.focusFromLabel);
191
+ this.removeEventListener('invalid', this.refreshAnchor);
192
+ }
193
+ get blocksImplicitSubmission() {
194
+ return false;
195
+ }
196
+ get submitsForm() {
197
+ return false;
198
+ }
199
+ activate() {
200
+ this.click();
201
+ }
202
+ submitImplicitly() {
203
+ const { form } = this;
204
+ if (!form) {
205
+ return;
206
+ }
207
+ const elements = [...form.elements];
208
+ const button = HelixFormElement.defaultButton(form);
209
+ if (button) {
210
+ if (button.matches(':disabled')) {
211
+ return;
212
+ }
213
+ if (button instanceof HelixFormElement) {
214
+ button.activate();
215
+ }
216
+ else {
217
+ ;
218
+ button.click();
219
+ }
220
+ return;
221
+ }
222
+ const blocking = elements.filter((element) => element instanceof HelixFormElement
223
+ ? element.blocksImplicitSubmission
224
+ : element instanceof HTMLInputElement && BLOCKING_TYPES.has(element.type));
225
+ if (blocking.length <= 1) {
226
+ form.requestSubmit();
227
+ }
228
+ }
229
+ static defaultButton(form) {
230
+ return [...form.elements].find((element) => HelixFormElement.submits(element));
231
+ }
232
+ static submitsOnEnter(target, form) {
233
+ return (target instanceof HTMLInputElement && target.form === form && BLOCKING_TYPES.has(target.type));
234
+ }
235
+ static submits(element) {
236
+ if (element instanceof HelixFormElement) {
237
+ return element.submitsForm;
238
+ }
239
+ if (element instanceof HTMLButtonElement) {
240
+ return element.type === 'submit';
241
+ }
242
+ return (element instanceof HTMLInputElement && (element.type === 'submit' || element.type === 'image'));
243
+ }
34
244
  get form() {
35
245
  return this.internals.form;
36
246
  }
package/dist/index.d.ts CHANGED
@@ -4,25 +4,30 @@ export { ChartPointerController, type ChartPointerHost, } from './controllers/ch
4
4
  export { CommandController, type CommandOptions, HelixFallbackCommandEvent, supportsInvokers, } from './controllers/command-controller/command-controller.js';
5
5
  export { CopyController, type CopyOptions, } from './controllers/copy-controller/copy-controller.js';
6
6
  export { activeCue, adoptTrack, type Caption, CueController, captionsAmong, captionTracks, showCaption, } from './controllers/cue-controller/cue-controller.js';
7
+ export { DelayController, type DelayOptions, } from './controllers/delay-controller/delay-controller.js';
7
8
  export { DisabledCascadeController, type DisabledCascadeOptions, } from './controllers/disabled-cascade-controller/disabled-cascade-controller.js';
8
9
  export { DismissController, type DismissOptions, } from './controllers/dismiss-controller/dismiss-controller.js';
9
10
  export { DrilldownController, type DrilldownOptions, } from './controllers/drilldown-controller/drilldown-controller.js';
10
11
  export { FloatingController, type FloatingOptions, type Placement, type Side, } from './controllers/floating-controller/floating-controller.js';
12
+ export { controlsIn, FocusScopeController, type FocusScopeOptions, } from './controllers/focus-scope-controller/focus-scope-controller.js';
11
13
  export { FullscreenController } from './controllers/fullscreen-controller/fullscreen-controller.js';
12
14
  export { HostClickController } from './controllers/host-click-controller/host-click-controller.js';
13
15
  export { IdleController } from './controllers/idle-controller/idle-controller.js';
14
16
  export { IndicatorController, type IndicatorOptions, } from './controllers/indicator-controller/indicator-controller.js';
15
- export { KeyboardNavigationController, type KeyboardNavigationOptions, type NavigableItem, } from './controllers/keyboard-navigation-controller/keyboard-navigation-controller.js';
17
+ export { KeyboardNavigationController, type KeyboardNavigationOptions, type NavigableItem, Typeahead, typesCharacter, } from './controllers/keyboard-navigation-controller/keyboard-navigation-controller.js';
16
18
  export { MediaSessionController, type SessionHandlers, SKIP_SECONDS, } from './controllers/media-session-controller/media-session-controller.js';
19
+ export { animationsSettled, type OpenPhase, OpenPhaseController, type OpenPhaseOptions, } from './controllers/open-phase-controller/open-phase-controller.js';
17
20
  export { MAX_FRAME_STEP, PaintGateController, type PaintGateOptions, } from './controllers/paint-gate-controller/paint-gate-controller.js';
18
21
  export { PlacementController } from './controllers/placement-controller/placement-controller.js';
19
22
  export { PopoverController, type PopoverOptions, } from './controllers/popover-controller/popover-controller.js';
20
23
  export { RemotePlaybackController, type RemoteReport, } from './controllers/remote-playback-controller/remote-playback-controller.js';
21
24
  export { SourceController, type SourceHost, } from './controllers/source-controller/source-controller.js';
25
+ export { drawStatus, type SayOptions, StatusController, } from './controllers/status-controller/status-controller.js';
26
+ export { SwipeController, type SwipeOptions, } from './controllers/swipe-controller/swipe-controller.js';
22
27
  export { type TokenColor, TokenColorController, } from './controllers/token-color-controller/token-color-controller.js';
23
28
  export { type Rendered, VirtualizeController, type VirtualizeOptions, type Window as VirtualizeWindow, } from './controllers/virtualize-controller/virtualize-controller.js';
24
29
  export { eventsForTag, registerElementEvents } from './events/element-events.js';
25
- export { type CanvasView, type CaretDetail, type ChangeDetail, type CompleteDetail, type ConnectDetail, type ConsoleDetail, type CopyDetail, type CreateDetail, type DismissDetail, type FacetDetail, type FilterDetail, type GraphFilterDetail, type GraphLayoutDetail, type GraphPartChangeDetail, type GraphSignalDetail, HelixActivateEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyEvent, HelixCreateEvent, HelixDismissEvent, HelixFacetEvent, HelixFilterEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPreviousEvent, HelixReadEvent, HelixReconnectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixTourAskEvent, type MapClusterDetail, type MapPanDetail, type MapPartChangeDetail, type MapRotateDetail, type MapTiltDetail, type MapZoomDetail, type MoveDetail, type NavigateDetail, type OpenDetail, type ReadDetail, type ReconnectDetail, type RelabelDetail, type RemoveDetail, type ResizeDetail, type ScrolledDetail, type SelectDetail, type SendDetail, type ShortcutDetail, type SkipDetail, type SortDetail, type ToggleDetail, type ViewportPanDetail, type ViewportZoomDetail, } from './events/events.js';
30
+ export { type CanvasView, type CaretDetail, type ChangeDetail, type CompleteDetail, type ConnectDetail, type ConsoleDetail, type CopyDetail, type CreateDetail, type DismissDetail, type FacetDetail, type FilterDetail, type GraphFilterDetail, type GraphLayoutDetail, type GraphPartChangeDetail, type GraphSignalDetail, HelixActivateEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixCollapseEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyEvent, HelixCreateEvent, HelixDismissEvent, HelixFacetEvent, HelixFilterEvent, HelixFilteredEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPinEvent, HelixPreviousEvent, HelixReadEvent, HelixReconnectEvent, HelixRejectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixReorderedEvent, HelixResizedEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSelectedEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixSortedEvent, HelixTourAskEvent, type MapClusterDetail, type MapPanDetail, type MapPartChangeDetail, type MapRotateDetail, type MapTiltDetail, type MapZoomDetail, type MoveDetail, type NavigateDetail, type OpenDetail, type ReadDetail, type ReconnectDetail, type Refusal, type RefusedFile, type RejectDetail, type RelabelDetail, type RemoveDetail, type ResizeDetail, type ScrolledDetail, type SelectDetail, type SendDetail, type ShortcutDetail, type SkipDetail, type SortDetail, type ToggleDetail, type ViewportPanDetail, type ViewportZoomDetail, } from './events/events.js';
26
31
  export { HelixElement, whenHydrated } from './helix-element/helix-element.js';
27
32
  export { HelixFormElement } from './helix-form-element/helix-form-element.js';
28
33
  export { MixinChartSource, type MixinChartSourceInterface, PALETTE, PLOT_HEIGHT, PLOT_WIDTH, seriesIndex, seriesNames, } from './mixins/mixin-chart-source/mixin-chart-source.js';
@@ -35,22 +40,32 @@ export { type DismissibleElement, MixinDismissible, } from './mixins/mixin-dismi
35
40
  export { MixinField, type MixinFieldInterface } from './mixins/mixin-field/mixin-field.js';
36
41
  export { MixinPickerEditing, type MixinPickerEditingInterface, } from './mixins/mixin-picker-editing/mixin-picker-editing.js';
37
42
  export { MixinPickerField, type MixinPickerFieldInterface, } from './mixins/mixin-picker-field/mixin-picker-field.js';
43
+ export { MixinSegmentedField, type MixinSegmentedFieldInterface, } from './mixins/mixin-segmented-field/mixin-segmented-field.js';
38
44
  export { MixinSelectableItem, type MixinSelectableItemInterface, } from './mixins/mixin-selectable-item/mixin-selectable-item.js';
39
45
  export { MixinTokens, type MixinTokensInterface } from './mixins/mixin-tokens/mixin-tokens.js';
40
46
  export { MixinViewport, type ViewportControlsPlacement, type ViewportElement, type ViewportGestureLabels, type ViewportGestureMode, type ViewportGestures, type ViewportWay, } from './mixins/mixin-viewport/mixin-viewport.js';
41
47
  export { anchorElement } from './utils/anchor-element/anchor-element.js';
48
+ export { arrowReach, sideOf } from './utils/arrow/arrow.js';
49
+ export { addDays, addMonths, type Barring, barredBy, type CalendarView, localToday, monthOf, monthOut, type PeriodCell, type PeriodPage, periodCells, periodKey, periodMove, sameMonth, weekStartOf, YEARS_SHOWN, yearOut, yearPageOf, } from './utils/calendar/calendar.js';
42
50
  export { capturePointer } from './utils/capture-pointer/capture-pointer.js';
51
+ export { ariaChord, type ChordPress, chordParts, matchesChord, printableChord, } from './utils/chord/chord.js';
52
+ export { clockLocale, dayPeriod, type HourCycle, isTwelveHour, nearestTime, offeredTimes, type TimeFault, type TimeRules, timeBarred, timeFault, wheelParts, wholeHour, } from './utils/clock/clock.js';
43
53
  export { closestInstance } from './utils/closest-instance/closest-instance.js';
54
+ export { type ColorWords, colorName, hueName } from './utils/color-name/color-name.js';
55
+ export { countLabel } from './utils/count-label/count-label.js';
44
56
  export { createSheet } from './utils/create-sheet/create-sheet.js';
45
- export { type Color, type ColorFormat, formatColor, parseColor, toCss, } from './utils/css-color/css-color.js';
57
+ export { type Color, type ColorFormat, formatColor, parseColor, toCss, toHsl, toRgb, } from './utils/css-color/css-color.js';
46
58
  export { customElement, definedTags, duplicateRegistrations, } from './utils/custom-element/custom-element.js';
59
+ export { type DrawDismissOptions, drawDismiss, drawDismissGlyph, } from './utils/draw-dismiss/draw-dismiss.js';
47
60
  export { type DrawIconOptions, drawIcon } from './utils/draw-icon/draw-icon.js';
48
61
  export { CHART_PLOT, drawTooltip } from './utils/draw-tooltip/draw-tooltip.js';
49
62
  export { elapsedTime } from './utils/elapsed-time/elapsed-time.js';
50
63
  export { type ElementByIdOptions, elementById, searchableById, } from './utils/element-by-id/element-by-id.js';
51
64
  export { fillTemplate } from './utils/fill-template/fill-template.js';
52
65
  export { deepActiveElement, deepContains, focusableElements, } from './utils/focusable-elements/focusable-elements.js';
66
+ export { afterLinkFollowed, followLink, type LinkModifiers, type LinkTarget, } from './utils/follow-link/follow-link.js';
53
67
  export { formatNumbers } from './utils/format-numbers/format-numbers.js';
68
+ export { headingIn, headingsIn } from './utils/heading-in/heading-in.js';
54
69
  export { type HostAria, hostAria } from './utils/host-aria/host-aria.js';
55
70
  export { type DisableableItem, forgetDisabled, inheritDisabled, } from './utils/inherit-disabled/inherit-disabled.js';
56
71
  export { inlineStep } from './utils/inline-step/inline-step.js';
@@ -59,10 +74,13 @@ export { keyClaimed } from './utils/key-claimed/key-claimed.js';
59
74
  export { type Curve, linePath, type Point } from './utils/line-path/line-path.js';
60
75
  export { markRegion, type RegionOptions } from './utils/mark-region/mark-region.js';
61
76
  export { copiesOf, type MediaCopy, sameCopies, } from './utils/media-copy/media-copy.js';
77
+ export { formatNumber, parseNumber } from './utils/number-format/number-format.js';
62
78
  export { onUnlessFalse } from './utils/on-unless-false/on-unless-false.js';
63
- export { type ColorBytes, readColor } from './utils/read-color/read-color.js';
64
- export { type Row, type RowCell, readRows, readSeries, type Series, type SeriesPoint, } from './utils/read-series/read-series.js';
65
- export { type Relative, relativeTime, } from './utils/relative-time/relative-time.js';
79
+ export { appleTouch, onApple, type Platform } from './utils/platform/platform.js';
80
+ export { type ColorBytes, readColor, rgbOf } from './utils/read-color/read-color.js';
81
+ export { byRow, type Row, type RowCell, readRows, readSeries, type Series, type SeriesPoint, seriesKey, unbroken, } from './utils/read-series/read-series.js';
82
+ export { type ElementsProperty, linkDescription, reflectElements, unlinkDescription, } from './utils/reflect-elements/reflect-elements.js';
83
+ export { type Relative, type RelativeOptions, relativeTime, } from './utils/relative-time/relative-time.js';
66
84
  export { measuring, RENDER_SLOT, reportRender } from './utils/report-render/report-render.js';
67
85
  export { RUNTIME_LOG, RUNTIME_SLOT, type RuntimeEvent, type RuntimeKind, reportRuntime, } from './utils/report-runtime/report-runtime.js';
68
86
  export { noteVersion, reportUsage, USAGE_SLOT, VERSIONS_SLOT, } from './utils/report-usage/report-usage.js';
@@ -70,17 +88,20 @@ export { reportValues } from './utils/report-values/report-values.js';
70
88
  export { type ChangeRequestOptions, requestChange, } from './utils/request-change/request-change.js';
71
89
  export { type ActivatableItem, resolveActiveItem, } from './utils/resolve-active-item/resolve-active-item.js';
72
90
  export { holdCaret, restoreValue } from './utils/restore-value/restore-value.js';
91
+ export { type RovingOptions, rovingStop } from './utils/roving-stop/roving-stop.js';
73
92
  export { extent, linear, type Scale } from './utils/scale/scale.js';
74
93
  export { ticks } from './utils/scale/ticks.js';
75
94
  export { type ScrollItemOptions, scrollItemIntoView, } from './utils/scroll-item-into-view/scroll-item-into-view.js';
95
+ export { lockScroll, scrollHolders, unlockScroll } from './utils/scroll-lock/scroll-lock.js';
76
96
  export { slotFilled } from './utils/slot-filled/slot-filled.js';
77
97
  export { slottedWords } from './utils/slotted-words/slotted-words.js';
78
98
  export { splitValues } from './utils/split-values/split-values.js';
99
+ export { edgeOffset, FLING, parseSnapPoints, type SwipeAxis, type SwipeEdge, type SwipeRelease, settleSwipe, snapTravel, swipeAxis, swipeEdge, swipeStep, towardEdge, } from './utils/swipe/swipe.js';
79
100
  export { tellDisclosure } from './utils/tell-disclosure/tell-disclosure.js';
80
101
  export { subscribe } from './utils/ticker/ticker.js';
81
102
  export { type HelixStatusTone, TONE_MARKS, type ToneMark, toneMark, } from './utils/tone-marks/tone-marks.js';
82
- export { dateAsValue, isDateValue, isTimeValue, minutesAsValue, numberAsValue, timeAsValue, valueAsDate, valueAsMinutes, valueAsNumber, valueAsTime, } from './utils/value-as/value-as.js';
103
+ export { dateAsValue, isClockValue, isDateValue, isTimeValue, minutesAsValue, numberAsValue, secondsAsValue, timeAsValue, valueAsDate, valueAsMinutes, valueAsNumber, valueAsSeconds, valueAsTime, } from './utils/value-as/value-as.js';
83
104
  export { watchTheme } from './utils/watch-theme/watch-theme.js';
84
- export { writeTime } from './utils/write-time/write-time.js';
85
- export { writtenList, writtenNumbers } from './utils/written-list/written-list.js';
105
+ export { writeClock, writeTime } from './utils/write-time/write-time.js';
106
+ export { commaList, toggleValue, writtenList, writtenNumbers, } from './utils/written-list/written-list.js';
86
107
  export { VERSION } from './version.js';
package/dist/index.js CHANGED
@@ -4,25 +4,30 @@ export { ChartPointerController, } from './controllers/chart-pointer-controller/
4
4
  export { CommandController, HelixFallbackCommandEvent, supportsInvokers, } from './controllers/command-controller/command-controller.js';
5
5
  export { CopyController, } from './controllers/copy-controller/copy-controller.js';
6
6
  export { activeCue, adoptTrack, CueController, captionsAmong, captionTracks, showCaption, } from './controllers/cue-controller/cue-controller.js';
7
+ export { DelayController, } from './controllers/delay-controller/delay-controller.js';
7
8
  export { DisabledCascadeController, } from './controllers/disabled-cascade-controller/disabled-cascade-controller.js';
8
9
  export { DismissController, } from './controllers/dismiss-controller/dismiss-controller.js';
9
10
  export { DrilldownController, } from './controllers/drilldown-controller/drilldown-controller.js';
10
11
  export { FloatingController, } from './controllers/floating-controller/floating-controller.js';
12
+ export { controlsIn, FocusScopeController, } from './controllers/focus-scope-controller/focus-scope-controller.js';
11
13
  export { FullscreenController } from './controllers/fullscreen-controller/fullscreen-controller.js';
12
14
  export { HostClickController } from './controllers/host-click-controller/host-click-controller.js';
13
15
  export { IdleController } from './controllers/idle-controller/idle-controller.js';
14
16
  export { IndicatorController, } from './controllers/indicator-controller/indicator-controller.js';
15
- export { KeyboardNavigationController, } from './controllers/keyboard-navigation-controller/keyboard-navigation-controller.js';
17
+ export { KeyboardNavigationController, Typeahead, typesCharacter, } from './controllers/keyboard-navigation-controller/keyboard-navigation-controller.js';
16
18
  export { MediaSessionController, SKIP_SECONDS, } from './controllers/media-session-controller/media-session-controller.js';
19
+ export { animationsSettled, OpenPhaseController, } from './controllers/open-phase-controller/open-phase-controller.js';
17
20
  export { MAX_FRAME_STEP, PaintGateController, } from './controllers/paint-gate-controller/paint-gate-controller.js';
18
21
  export { PlacementController } from './controllers/placement-controller/placement-controller.js';
19
22
  export { PopoverController, } from './controllers/popover-controller/popover-controller.js';
20
23
  export { RemotePlaybackController, } from './controllers/remote-playback-controller/remote-playback-controller.js';
21
24
  export { SourceController, } from './controllers/source-controller/source-controller.js';
25
+ export { drawStatus, StatusController, } from './controllers/status-controller/status-controller.js';
26
+ export { SwipeController, } from './controllers/swipe-controller/swipe-controller.js';
22
27
  export { TokenColorController, } from './controllers/token-color-controller/token-color-controller.js';
23
28
  export { VirtualizeController, } from './controllers/virtualize-controller/virtualize-controller.js';
24
29
  export { eventsForTag, registerElementEvents } from './events/element-events.js';
25
- export { HelixActivateEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyEvent, HelixCreateEvent, HelixDismissEvent, HelixFacetEvent, HelixFilterEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPreviousEvent, HelixReadEvent, HelixReconnectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixTourAskEvent, } from './events/events.js';
30
+ export { HelixActivateEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixCollapseEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyEvent, HelixCreateEvent, HelixDismissEvent, HelixFacetEvent, HelixFilterEvent, HelixFilteredEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPinEvent, HelixPreviousEvent, HelixReadEvent, HelixReconnectEvent, HelixRejectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixReorderedEvent, HelixResizedEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSelectedEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixSortedEvent, HelixTourAskEvent, } from './events/events.js';
26
31
  export { HelixElement, whenHydrated } from './helix-element/helix-element.js';
27
32
  export { HelixFormElement } from './helix-form-element/helix-form-element.js';
28
33
  export { MixinChartSource, PALETTE, PLOT_HEIGHT, PLOT_WIDTH, seriesIndex, seriesNames, } from './mixins/mixin-chart-source/mixin-chart-source.js';
@@ -35,22 +40,32 @@ export { MixinDismissible, } from './mixins/mixin-dismissible/mixin-dismissible.
35
40
  export { MixinField } from './mixins/mixin-field/mixin-field.js';
36
41
  export { MixinPickerEditing, } from './mixins/mixin-picker-editing/mixin-picker-editing.js';
37
42
  export { MixinPickerField, } from './mixins/mixin-picker-field/mixin-picker-field.js';
43
+ export { MixinSegmentedField, } from './mixins/mixin-segmented-field/mixin-segmented-field.js';
38
44
  export { MixinSelectableItem, } from './mixins/mixin-selectable-item/mixin-selectable-item.js';
39
45
  export { MixinTokens } from './mixins/mixin-tokens/mixin-tokens.js';
40
46
  export { MixinViewport, } from './mixins/mixin-viewport/mixin-viewport.js';
41
47
  export { anchorElement } from './utils/anchor-element/anchor-element.js';
48
+ export { arrowReach, sideOf } from './utils/arrow/arrow.js';
49
+ export { addDays, addMonths, barredBy, localToday, monthOf, monthOut, periodCells, periodKey, periodMove, sameMonth, weekStartOf, YEARS_SHOWN, yearOut, yearPageOf, } from './utils/calendar/calendar.js';
42
50
  export { capturePointer } from './utils/capture-pointer/capture-pointer.js';
51
+ export { ariaChord, chordParts, matchesChord, printableChord, } from './utils/chord/chord.js';
52
+ export { clockLocale, dayPeriod, isTwelveHour, nearestTime, offeredTimes, timeBarred, timeFault, wheelParts, wholeHour, } from './utils/clock/clock.js';
43
53
  export { closestInstance } from './utils/closest-instance/closest-instance.js';
54
+ export { colorName, hueName } from './utils/color-name/color-name.js';
55
+ export { countLabel } from './utils/count-label/count-label.js';
44
56
  export { createSheet } from './utils/create-sheet/create-sheet.js';
45
- export { formatColor, parseColor, toCss, } from './utils/css-color/css-color.js';
57
+ export { formatColor, parseColor, toCss, toHsl, toRgb, } from './utils/css-color/css-color.js';
46
58
  export { customElement, definedTags, duplicateRegistrations, } from './utils/custom-element/custom-element.js';
59
+ export { drawDismiss, drawDismissGlyph, } from './utils/draw-dismiss/draw-dismiss.js';
47
60
  export { drawIcon } from './utils/draw-icon/draw-icon.js';
48
61
  export { CHART_PLOT, drawTooltip } from './utils/draw-tooltip/draw-tooltip.js';
49
62
  export { elapsedTime } from './utils/elapsed-time/elapsed-time.js';
50
63
  export { elementById, searchableById, } from './utils/element-by-id/element-by-id.js';
51
64
  export { fillTemplate } from './utils/fill-template/fill-template.js';
52
65
  export { deepActiveElement, deepContains, focusableElements, } from './utils/focusable-elements/focusable-elements.js';
66
+ export { afterLinkFollowed, followLink, } from './utils/follow-link/follow-link.js';
53
67
  export { formatNumbers } from './utils/format-numbers/format-numbers.js';
68
+ export { headingIn, headingsIn } from './utils/heading-in/heading-in.js';
54
69
  export { hostAria } from './utils/host-aria/host-aria.js';
55
70
  export { forgetDisabled, inheritDisabled, } from './utils/inherit-disabled/inherit-disabled.js';
56
71
  export { inlineStep } from './utils/inline-step/inline-step.js';
@@ -59,9 +74,12 @@ export { keyClaimed } from './utils/key-claimed/key-claimed.js';
59
74
  export { linePath } from './utils/line-path/line-path.js';
60
75
  export { markRegion } from './utils/mark-region/mark-region.js';
61
76
  export { copiesOf, sameCopies, } from './utils/media-copy/media-copy.js';
77
+ export { formatNumber, parseNumber } from './utils/number-format/number-format.js';
62
78
  export { onUnlessFalse } from './utils/on-unless-false/on-unless-false.js';
63
- export { readColor } from './utils/read-color/read-color.js';
64
- export { readRows, readSeries, } from './utils/read-series/read-series.js';
79
+ export { appleTouch, onApple } from './utils/platform/platform.js';
80
+ export { readColor, rgbOf } from './utils/read-color/read-color.js';
81
+ export { byRow, readRows, readSeries, seriesKey, unbroken, } from './utils/read-series/read-series.js';
82
+ export { linkDescription, reflectElements, unlinkDescription, } from './utils/reflect-elements/reflect-elements.js';
65
83
  export { relativeTime, } from './utils/relative-time/relative-time.js';
66
84
  export { measuring, RENDER_SLOT, reportRender } from './utils/report-render/report-render.js';
67
85
  export { RUNTIME_LOG, RUNTIME_SLOT, reportRuntime, } from './utils/report-runtime/report-runtime.js';
@@ -70,17 +88,20 @@ export { reportValues } from './utils/report-values/report-values.js';
70
88
  export { requestChange, } from './utils/request-change/request-change.js';
71
89
  export { resolveActiveItem, } from './utils/resolve-active-item/resolve-active-item.js';
72
90
  export { holdCaret, restoreValue } from './utils/restore-value/restore-value.js';
91
+ export { rovingStop } from './utils/roving-stop/roving-stop.js';
73
92
  export { extent, linear } from './utils/scale/scale.js';
74
93
  export { ticks } from './utils/scale/ticks.js';
75
94
  export { scrollItemIntoView, } from './utils/scroll-item-into-view/scroll-item-into-view.js';
95
+ export { lockScroll, scrollHolders, unlockScroll } from './utils/scroll-lock/scroll-lock.js';
76
96
  export { slotFilled } from './utils/slot-filled/slot-filled.js';
77
97
  export { slottedWords } from './utils/slotted-words/slotted-words.js';
78
98
  export { splitValues } from './utils/split-values/split-values.js';
99
+ export { edgeOffset, FLING, parseSnapPoints, settleSwipe, snapTravel, swipeAxis, swipeEdge, swipeStep, towardEdge, } from './utils/swipe/swipe.js';
79
100
  export { tellDisclosure } from './utils/tell-disclosure/tell-disclosure.js';
80
101
  export { subscribe } from './utils/ticker/ticker.js';
81
102
  export { TONE_MARKS, toneMark, } from './utils/tone-marks/tone-marks.js';
82
- export { dateAsValue, isDateValue, isTimeValue, minutesAsValue, numberAsValue, timeAsValue, valueAsDate, valueAsMinutes, valueAsNumber, valueAsTime, } from './utils/value-as/value-as.js';
103
+ export { dateAsValue, isClockValue, isDateValue, isTimeValue, minutesAsValue, numberAsValue, secondsAsValue, timeAsValue, valueAsDate, valueAsMinutes, valueAsNumber, valueAsSeconds, valueAsTime, } from './utils/value-as/value-as.js';
83
104
  export { watchTheme } from './utils/watch-theme/watch-theme.js';
84
- export { writeTime } from './utils/write-time/write-time.js';
85
- export { writtenList, writtenNumbers } from './utils/written-list/written-list.js';
105
+ export { writeClock, writeTime } from './utils/write-time/write-time.js';
106
+ export { commaList, toggleValue, writtenList, writtenNumbers, } from './utils/written-list/written-list.js';
86
107
  export { VERSION } from './version.js';
@@ -1,6 +1,6 @@
1
1
  import { ChartPointerController } from '../../controllers/chart-pointer-controller/chart-pointer-controller.js';
2
2
  import type { HelixElement } from '../../helix-element/helix-element.js';
3
- import type { Row, Series } from '../../utils/read-series/read-series.js';
3
+ import { type Row, type Series } from '../../utils/read-series/read-series.js';
4
4
  type Constructor<T> = new (...args: any[]) => T;
5
5
  /**
6
6
  * How many colors the series palette has, and so where it starts over.
@@ -45,7 +45,7 @@ export declare const PLOT_HEIGHT = 100;
45
45
  * nothing to read off the page that says why.
46
46
  *
47
47
  * `writtenList` is the split, and carries the argument for accepting a comma.
48
- * What this adds is the lowercase, the headings being matched
48
+ * What this adds is `seriesKey`, the headings being matched
49
49
  * case-insensitively.
50
50
  */
51
51
  export declare const seriesNames: (list: string | undefined) => string[];
@@ -128,6 +128,14 @@ export declare class MixinChartSourceInterface {
128
128
  * words and is already written.
129
129
  */
130
130
  label: string;
131
+ /**
132
+ * The locale the chart's own numbers are written in: its axis, its
133
+ * percentages and its totals, such as `de` for `1.240` and `32 %`.
134
+ *
135
+ * Absent uses the runtime's own. The table's cells are shown as the table
136
+ * writes them, whatever this says.
137
+ */
138
+ locale: string;
131
139
  /**
132
140
  * The table's columns, one series each. Empty when there is no table.
133
141
  */
@@ -150,6 +158,11 @@ export declare class MixinChartSourceInterface {
150
158
  * when no series was read from that column.
151
159
  */
152
160
  seriesOf(cell: number): number | undefined;
161
+ /**
162
+ * Whether the series of this name is drawn, which it is unless a legend
163
+ * reading the same table hid it.
164
+ */
165
+ showsSeries(name: string): boolean;
153
166
  /**
154
167
  * The number of readings, which the pointer position maps onto.
155
168
  */
@@ -7,12 +7,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { property } from 'lit/decorators.js';
8
8
  import { ChartPointerController } from '../../controllers/chart-pointer-controller/chart-pointer-controller.js';
9
9
  import { SourceController } from '../../controllers/source-controller/source-controller.js';
10
+ import { seriesKey } from '../../utils/read-series/read-series.js';
10
11
  import { writtenList } from '../../utils/written-list/written-list.js';
11
12
  export const PALETTE = 24;
12
13
  export const seriesIndex = (depth) => (depth % PALETTE) + 1;
13
14
  export const PLOT_WIDTH = 100;
14
15
  export const PLOT_HEIGHT = 100;
15
- export const seriesNames = (list) => writtenList(list).map((name) => name.toLowerCase());
16
+ export const seriesNames = (list) => writtenList(list).map(seriesKey);
16
17
  export const MixinChartSource = (Base) => {
17
18
  class ChartSourceElement extends Base {
18
19
  constructor() {
@@ -21,6 +22,7 @@ export const MixinChartSource = (Base) => {
21
22
  this.pointer = new ChartPointerController(this);
22
23
  this.for = '';
23
24
  this.label = '';
25
+ this.locale = '';
24
26
  }
25
27
  willUpdate(changed) {
26
28
  super.willUpdate(changed);
@@ -46,6 +48,9 @@ export const MixinChartSource = (Base) => {
46
48
  const depth = this.plottedColumns.indexOf(cell);
47
49
  return depth < 0 ? undefined : seriesIndex(depth);
48
50
  }
51
+ showsSeries(name) {
52
+ return !this.source.hidden.has(seriesKey(name));
53
+ }
49
54
  get readings() {
50
55
  return this.sourceRows.length;
51
56
  }
@@ -56,5 +61,8 @@ export const MixinChartSource = (Base) => {
56
61
  __decorate([
57
62
  property()
58
63
  ], ChartSourceElement.prototype, "label", void 0);
64
+ __decorate([
65
+ property()
66
+ ], ChartSourceElement.prototype, "locale", void 0);
59
67
  return ChartSourceElement;
60
68
  };
@@ -16,9 +16,11 @@ export declare class CollectionElement {
16
16
  /**
17
17
  * The status line, or nothing where the collection has content to show.
18
18
  *
19
- * Rendered by the component wherever its rows would be.
19
+ * Rendered by the component wherever its rows would be. `cell` makes the line
20
+ * a row holding one cell of that role, for a table or a grid, whose children
21
+ * may only be rows.
20
22
  */
21
- protected renderStatus(hasContent: boolean): TemplateResult | typeof nothing;
23
+ protected renderStatus(hasContent: boolean, cell?: 'cell' | 'gridcell'): TemplateResult | typeof nothing;
22
24
  /**
23
25
  * The same words for a screen reader, in a region that is always there.
24
26
  *
@@ -42,14 +42,16 @@ export const MixinCollection = (Base) => {
42
42
  super.firstUpdated(changed);
43
43
  this.finishHydration();
44
44
  }
45
- renderStatus(hasContent) {
46
- if (this.loading) {
47
- return html `<p part="loading">${this.loadingText}</p>`;
48
- }
49
- if (hasContent) {
45
+ renderStatus(hasContent, cell) {
46
+ if (!this.loading && hasContent) {
50
47
  return nothing;
51
48
  }
52
- return html `<p part="empty">${this.emptyText}</p>`;
49
+ const text = this.loading ? this.loadingText : this.emptyText;
50
+ const words = cell ? html `<span role=${cell}>${text}</span>` : text;
51
+ const row = cell ? 'row' : nothing;
52
+ return this.loading
53
+ ? html `<p part="loading" role=${row}>${words}</p>`
54
+ : html `<p part="empty" role=${row}>${words}</p>`;
53
55
  }
54
56
  renderLive(hasContent) {
55
57
  const said = this.loading ? this.loadingText : hasContent ? this.announced : this.emptyText;
@@ -20,6 +20,16 @@ export declare class MixinControllerCheckedInterface {
20
20
  * Whether the control starts checked. A form reset returns it to this state.
21
21
  */
22
22
  defaultChecked: boolean;
23
+ /**
24
+ * Whether a reader can see and focus the control and cannot change it. A
25
+ * read-only control still submits its value.
26
+ */
27
+ readOnly: boolean;
28
+ /**
29
+ * Refuses a press on the inner control while the control is read-only,
30
+ * bound to its `click`.
31
+ */
32
+ protected readonly holdReadOnly: (event: Event) => void;
23
33
  /**
24
34
  * Requests a change to `checked`, and returns whether it was applied.
25
35
  *