@fusion.dev/helix-headless 0.145.0 → 0.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +12286 -4281
- package/dist/accordion/item/accordion-item.d.ts +51 -18
- package/dist/accordion/item/accordion-item.js +45 -13
- package/dist/accordion/root/accordion-root.d.ts +16 -7
- package/dist/accordion/root/accordion-root.js +3 -3
- package/dist/announcement/root/announcement-root.d.ts +16 -6
- package/dist/announcement/root/announcement-root.js +37 -7
- package/dist/app-header/root/app-header-root.d.ts +7 -2
- package/dist/app-header/root/app-header-root.js +9 -1
- package/dist/app-header/sectioning.d.ts +3 -1
- package/dist/app-header/sectioning.js +3 -2
- package/dist/area-chart/root/area-chart-root.d.ts +18 -1
- package/dist/area-chart/root/area-chart-root.js +11 -3
- package/dist/avatar/group/avatar-group.d.ts +20 -14
- package/dist/avatar/group/avatar-group.js +17 -19
- package/dist/avatar/root/avatar-root.d.ts +31 -1
- package/dist/avatar/root/avatar-root.js +11 -1
- package/dist/badge/root/badge-root.d.ts +60 -7
- package/dist/badge/root/badge-root.js +89 -6
- package/dist/bar-chart/root/bar-chart-root.d.ts +18 -1
- package/dist/bar-chart/root/bar-chart-root.js +48 -20
- package/dist/bar-chart/stack.d.ts +25 -0
- package/dist/bar-chart/stack.js +27 -0
- package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +14 -0
- package/dist/breadcrumbs/breadcrumb/breadcrumb.js +12 -2
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +25 -0
- package/dist/breadcrumbs/root/breadcrumbs-root.js +51 -4
- package/dist/button/root/button-root.d.ts +50 -38
- package/dist/button/root/button-root.js +42 -53
- package/dist/button/submitter.d.ts +27 -0
- package/dist/button/submitter.js +25 -0
- package/dist/button-group/root/button-group-root.d.ts +2 -1
- package/dist/button-group/root/button-group-root.js +5 -1
- package/dist/canvas/node/canvas-node.d.ts +4 -3
- package/dist/canvas/node/canvas-node.js +3 -2
- package/dist/canvas/root/canvas-root.js +2 -2
- package/dist/card/root/card-root.d.ts +36 -4
- package/dist/card/root/card-root.js +29 -10
- package/dist/carousel/root/carousel-root.d.ts +43 -4
- package/dist/carousel/root/carousel-root.js +40 -12
- package/dist/carousel/stops.d.ts +20 -0
- package/dist/carousel/stops.js +30 -0
- package/dist/chat/message/chat-message.js +5 -4
- package/dist/chat/naming.d.ts +5 -1
- package/dist/chat/naming.js +4 -2
- package/dist/chat/root/chat-root.d.ts +40 -4
- package/dist/chat/root/chat-root.js +32 -6
- package/dist/checkbox/root/checkbox-root.d.ts +20 -0
- package/dist/checkbox/root/checkbox-root.js +18 -7
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +8 -2
- package/dist/checkbox-group/root/checkbox-group-root.js +14 -11
- package/dist/checkbox-group/select-all.d.ts +21 -0
- package/dist/checkbox-group/select-all.js +7 -0
- package/dist/code-block/highlight.d.ts +15 -0
- package/dist/code-block/highlight.js +4 -0
- package/dist/code-block/root/code-block-root.d.ts +79 -10
- package/dist/code-block/root/code-block-root.js +74 -5
- package/dist/color-input/root/color-input-root.d.ts +14 -0
- package/dist/color-input/root/color-input-root.js +17 -7
- package/dist/color-picker/channels.js +1 -2
- package/dist/color-picker/root/color-picker-root.d.ts +53 -16
- package/dist/color-picker/root/color-picker-root.js +155 -46
- package/dist/color-picker/wheel.d.ts +17 -0
- package/dist/color-picker/wheel.js +6 -0
- package/dist/combobox/root/combobox-root.d.ts +56 -0
- package/dist/combobox/root/combobox-root.js +92 -15
- package/dist/command/root/command-root.d.ts +19 -2
- package/dist/command/root/command-root.js +24 -23
- package/dist/copy-button/root/copy-button-root.d.ts +21 -1
- package/dist/copy-button/root/copy-button-root.js +16 -4
- package/dist/data-table/index.d.ts +1 -1
- package/dist/data-table/index.js +1 -1
- package/dist/data-table/keys.d.ts +6 -0
- package/dist/data-table/keys.js +14 -0
- package/dist/data-table/root/data-table-root.d.ts +27 -18
- package/dist/data-table/root/data-table-root.js +31 -57
- package/dist/data-table/tree.d.ts +16 -1
- package/dist/data-table/tree.js +2 -3
- package/dist/date-input/root/date-input-root.d.ts +11 -2
- package/dist/date-input/root/date-input-root.js +26 -12
- package/dist/date-picker/root/date-picker-root.d.ts +14 -9
- package/dist/date-picker/root/date-picker-root.js +33 -22
- package/dist/description-list/item/description-list-item.d.ts +18 -4
- package/dist/description-list/item/description-list-item.js +8 -4
- package/dist/dialog/description.js +15 -1
- package/dist/dialog/root/dialog-root.d.ts +8 -2
- package/dist/dialog/root/dialog-root.js +16 -1
- package/dist/divider/root/divider-root.d.ts +3 -0
- package/dist/divider/root/divider-root.js +2 -1
- package/dist/donut-chart/root/donut-chart-root.d.ts +31 -0
- package/dist/donut-chart/root/donut-chart-root.js +55 -1
- package/dist/donut-chart/slice-label.d.ts +35 -0
- package/dist/donut-chart/slice-label.js +11 -0
- package/dist/drawer/reveal.d.ts +8 -0
- package/dist/drawer/reveal.js +1 -0
- package/dist/drawer/root/drawer-root.d.ts +63 -2
- package/dist/drawer/root/drawer-root.js +75 -4
- package/dist/drilldown/item/drilldown-item.d.ts +21 -1
- package/dist/drilldown/item/drilldown-item.js +40 -5
- package/dist/drilldown/root/drilldown-root.d.ts +21 -3
- package/dist/drilldown/root/drilldown-root.js +22 -3
- package/dist/element-events.generated.js +35 -6
- package/dist/empty/root/empty-root.d.ts +34 -2
- package/dist/empty/root/empty-root.js +26 -4
- package/dist/file-input/root/file-input-root.d.ts +99 -8
- package/dist/file-input/root/file-input-root.js +120 -22
- package/dist/file-input/screen.d.ts +2 -1
- package/dist/file-input/status.d.ts +24 -0
- package/dist/file-input/status.js +10 -0
- package/dist/filter-input/chip/filter-chip.d.ts +23 -0
- package/dist/filter-input/chip/filter-chip.js +11 -2
- package/dist/filter-input/menu/filter-menu.d.ts +2 -0
- package/dist/filter-input/menu/filter-menu.js +12 -4
- package/dist/filter-input/root/filter-input-root.d.ts +38 -6
- package/dist/filter-input/root/filter-input-root.js +18 -28
- package/dist/filter-input/suggest.d.ts +28 -3
- package/dist/filter-input/suggest.js +18 -8
- package/dist/format-date/options.d.ts +3 -4
- package/dist/format-date/options.js +2 -2
- package/dist/format-date/root/format-date-root.d.ts +27 -17
- package/dist/format-date/root/format-date-root.js +27 -48
- package/dist/heatmap/root/buckets.d.ts +21 -0
- package/dist/heatmap/root/buckets.js +34 -0
- package/dist/heatmap/root/heatmap-root.d.ts +83 -11
- package/dist/heatmap/root/heatmap-root.js +104 -12
- package/dist/icon/index.d.ts +1 -1
- package/dist/icon/index.js +1 -1
- package/dist/icon/registry.d.ts +26 -1
- package/dist/icon/registry.js +12 -1
- package/dist/icon/root/icon-root.d.ts +25 -1
- package/dist/icon/root/icon-root.js +44 -12
- package/dist/icon/root/index.d.ts +1 -1
- package/dist/icon/root/index.js +1 -1
- package/dist/icon/settle.d.ts +7 -0
- package/dist/icon/settle.js +10 -0
- package/dist/icon-button/root/icon-button-root.d.ts +2 -0
- package/dist/image/root/image-root.d.ts +14 -1
- package/dist/image/root/image-root.js +7 -2
- package/dist/input/root/input-root.d.ts +34 -3
- package/dist/input/root/input-root.js +17 -4
- package/dist/kbd/keys.d.ts +29 -0
- package/dist/kbd/keys.js +52 -0
- package/dist/kbd/root/kbd-root.d.ts +52 -1
- package/dist/kbd/root/kbd-root.js +40 -47
- package/dist/legend/hidden-series.d.ts +10 -2
- package/dist/legend/hidden-series.js +5 -2
- package/dist/legend/root/legend-root.d.ts +77 -12
- package/dist/legend/root/legend-root.js +71 -17
- package/dist/lightbox/root/lightbox-root.d.ts +98 -10
- package/dist/lightbox/root/lightbox-root.js +153 -18
- package/dist/lightbox/zoom-controller.d.ts +59 -0
- package/dist/lightbox/zoom-controller.js +128 -0
- package/dist/lightbox/zoom.d.ts +24 -0
- package/dist/lightbox/zoom.js +18 -0
- package/dist/line-chart/root/line-chart-root.d.ts +38 -1
- package/dist/line-chart/root/line-chart-root.js +31 -3
- package/dist/list/item/list-item.d.ts +2 -0
- package/dist/list/item/list-item.js +11 -2
- package/dist/list/root/list-root.d.ts +70 -13
- package/dist/list/root/list-root.js +91 -13
- package/dist/list/selection.d.ts +54 -7
- package/dist/list/selection.js +32 -7
- package/dist/listbox/root/listbox-root.d.ts +44 -4
- package/dist/listbox/root/listbox-root.js +72 -34
- package/dist/loader/busy.d.ts +10 -0
- package/dist/loader/busy.js +11 -0
- package/dist/loader/root/loader-root.d.ts +9 -2
- package/dist/loader/root/loader-root.js +23 -3
- package/dist/megamenu/hand-over.d.ts +75 -0
- package/dist/megamenu/hand-over.js +67 -0
- package/dist/megamenu/root/megamenu-root.d.ts +80 -15
- package/dist/megamenu/root/megamenu-root.js +76 -19
- package/dist/menu/item/menu-item.d.ts +51 -2
- package/dist/menu/item/menu-item.js +50 -26
- package/dist/menu/root/menu-root.d.ts +17 -0
- package/dist/menu/root/menu-root.js +2 -2
- package/dist/meter/root/meter-root.d.ts +62 -1
- package/dist/meter/root/meter-root.js +38 -16
- package/dist/navigation/root/navigation-root.d.ts +2 -1
- package/dist/navigation/root/navigation-root.js +2 -2
- package/dist/notifications/root/notifications-root.d.ts +20 -4
- package/dist/notifications/root/notifications-root.js +30 -8
- package/dist/number-input/grain.d.ts +28 -0
- package/dist/number-input/grain.js +14 -0
- package/dist/number-input/root/number-input-root.d.ts +34 -9
- package/dist/number-input/root/number-input-root.js +31 -25
- package/dist/object-inspector/root/object-inspector-root.d.ts +88 -33
- package/dist/object-inspector/root/object-inspector-root.js +134 -92
- package/dist/object-inspector/rows.d.ts +18 -0
- package/dist/object-inspector/rows.js +33 -0
- package/dist/option/index.d.ts +1 -0
- package/dist/option/index.js +1 -0
- package/dist/option/root/option-root.d.ts +5 -3
- package/dist/option/separator/option-separator.d.ts +30 -0
- package/dist/option/separator/option-separator.js +21 -0
- package/dist/outline/root/outline-root.d.ts +30 -0
- package/dist/outline/root/outline-root.js +17 -13
- package/dist/pagination/size/pagination-size.d.ts +6 -0
- package/dist/pagination/size/pagination-size.js +5 -3
- package/dist/pin-input/code.d.ts +37 -0
- package/dist/pin-input/code.js +25 -0
- package/dist/pin-input/root/pin-input-root.d.ts +116 -115
- package/dist/pin-input/root/pin-input-root.js +163 -155
- package/dist/popover/hide-outside.d.ts +14 -0
- package/dist/popover/hide-outside.js +34 -0
- package/dist/popover/root/popover-root.d.ts +64 -8
- package/dist/popover/root/popover-root.js +67 -4
- package/dist/progress/root/progress-root.d.ts +47 -0
- package/dist/progress/root/progress-root.js +34 -16
- package/dist/qr-code/export.d.ts +45 -1
- package/dist/qr-code/export.js +28 -0
- package/dist/qr-code/name.d.ts +11 -0
- package/dist/qr-code/name.js +7 -0
- package/dist/qr-code/root/qr-code-root.d.ts +36 -11
- package/dist/qr-code/root/qr-code-root.js +58 -11
- package/dist/quote/marks.d.ts +8 -0
- package/dist/quote/marks.js +5 -0
- package/dist/quote/root/quote-root.d.ts +14 -2
- package/dist/quote/root/quote-root.js +23 -1
- package/dist/radio/group/radio-group.d.ts +15 -0
- package/dist/radio/root/radio-root.d.ts +6 -2
- package/dist/radio/root/radio-root.js +7 -2
- package/dist/rating/root/rating-root.d.ts +30 -12
- package/dist/rating/root/rating-root.js +27 -27
- package/dist/scatter-chart/fit.d.ts +15 -0
- package/dist/scatter-chart/fit.js +35 -0
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +51 -1
- package/dist/scatter-chart/root/scatter-chart-root.js +64 -24
- package/dist/scroll-area/root/scroll-area-root.d.ts +22 -51
- package/dist/scroll-area/root/scroll-area-root.js +57 -173
- package/dist/scroll-area/scrollbar-controller.d.ts +111 -0
- package/dist/scroll-area/scrollbar-controller.js +172 -0
- package/dist/scroll-area/scrollbar.d.ts +27 -8
- package/dist/scroll-area/scrollbar.js +10 -1
- package/dist/select/align.d.ts +47 -0
- package/dist/select/align.js +7 -0
- package/dist/select/root/select-root.d.ts +71 -0
- package/dist/select/root/select-root.js +78 -6
- package/dist/skeleton/root/skeleton-root.d.ts +3 -0
- package/dist/skeleton/root/skeleton-root.js +4 -2
- package/dist/skip-link/root/skip-link-root.js +2 -2
- package/dist/slider/root/slider-root.d.ts +59 -5
- package/dist/slider/root/slider-root.js +45 -3
- package/dist/sparkline/readings.d.ts +36 -0
- package/dist/sparkline/readings.js +36 -0
- package/dist/sparkline/root/sparkline-root.d.ts +121 -7
- package/dist/sparkline/root/sparkline-root.js +160 -26
- package/dist/speed-dial/item/speed-dial-item.d.ts +1 -1
- package/dist/speed-dial/item/speed-dial-item.js +2 -2
- package/dist/speed-dial/root/speed-dial-root.d.ts +6 -0
- package/dist/speed-dial/root/speed-dial-root.js +11 -3
- package/dist/splitter/root/splitter-root.d.ts +10 -12
- package/dist/splitter/root/splitter-root.js +211 -204
- package/dist/stat/root/stat-root.d.ts +14 -5
- package/dist/stat/root/stat-root.js +21 -5
- package/dist/steps/reach.d.ts +5 -0
- package/dist/steps/reach.js +3 -0
- package/dist/steps/root/steps-root.d.ts +56 -3
- package/dist/steps/root/steps-root.js +50 -6
- package/dist/steps/step/step.d.ts +8 -0
- package/dist/steps/step/step.js +8 -3
- package/dist/switch/root/switch-root.d.ts +10 -0
- package/dist/table/column/table-column.d.ts +6 -10
- package/dist/table/column/table-column.js +8 -20
- package/dist/table/root/table-root.d.ts +31 -10
- package/dist/table/root/table-root.js +14 -18
- package/dist/table/row/table-row.d.ts +24 -0
- package/dist/table/row/table-row.js +37 -1
- package/dist/tabs/panel/tab-panel.d.ts +16 -3
- package/dist/tabs/panel/tab-panel.js +34 -5
- package/dist/tabs/root/tabs-root.d.ts +17 -3
- package/dist/tabs/root/tabs-root.js +1 -1
- package/dist/tabs/tab/tab.d.ts +5 -0
- package/dist/tabs/tab/tab.js +5 -2
- package/dist/tag/group/tag-group.d.ts +44 -5
- package/dist/tag/group/tag-group.js +60 -9
- package/dist/tag/root/tag-root.js +9 -2
- package/dist/textarea/root/textarea-root.d.ts +41 -2
- package/dist/textarea/root/textarea-root.js +39 -1
- package/dist/time-input/root/time-input-root.d.ts +10 -2
- package/dist/time-input/root/time-input-root.js +24 -13
- package/dist/time-picker/root/time-picker-root.d.ts +28 -17
- package/dist/time-picker/root/time-picker-root.js +18 -29
- package/dist/time-picker/wheel-name.d.ts +9 -0
- package/dist/time-picker/wheel-name.js +15 -0
- package/dist/timeline/group/timeline-group.js +2 -2
- package/dist/toast/item/toast-item.d.ts +16 -3
- package/dist/toast/item/toast-item.js +22 -6
- package/dist/toast/root/toast-root.d.ts +34 -4
- package/dist/toast/root/toast-root.js +74 -13
- package/dist/toast/words.d.ts +12 -0
- package/dist/toast/words.js +25 -0
- package/dist/toggle/group/toggle-group.d.ts +52 -7
- package/dist/toggle/group/toggle-group.js +58 -44
- package/dist/toggle/root/toggle-root.js +2 -4
- package/dist/toolbar/root/toolbar-root.d.ts +21 -5
- package/dist/toolbar/root/toolbar-root.js +52 -8
- package/dist/tooltip/root/tooltip-root.d.ts +20 -3
- package/dist/tooltip/root/tooltip-root.js +18 -1
- package/dist/tour/back.d.ts +10 -0
- package/dist/tour/back.js +8 -0
- package/dist/tour/root/tour-root.d.ts +45 -2
- package/dist/tour/root/tour-root.js +53 -8
- package/dist/tour/stop/tour-stop.d.ts +3 -0
- package/dist/tour/stop/tour-stop.js +3 -3
- package/dist/tree/item/tree-item.d.ts +7 -3
- package/dist/tree/item/tree-item.js +3 -0
- package/dist/tree/root/tree-root.d.ts +24 -3
- package/dist/tree/root/tree-root.js +32 -13
- package/dist/tree/selection.js +2 -15
- package/dist/trend/figure.d.ts +16 -0
- package/dist/trend/figure.js +8 -0
- package/dist/trend/root/trend-root.d.ts +83 -19
- package/dist/trend/root/trend-root.js +59 -8
- package/dist/video/media-events.d.ts +13 -18
- package/dist/video/media-events.js +1 -5
- package/dist/video/root/extra-controls.d.ts +12 -0
- package/dist/video/root/extra-controls.js +6 -2
- package/dist/video/root/video-root.d.ts +23 -6
- package/dist/video/root/video-root.js +19 -10
- package/dist/video-playlist/menu/video-playlist-menu.d.ts +2 -0
- package/dist/video-playlist/menu/video-playlist-menu.js +2 -1
- package/dist/video-playlist/root/video-playlist-root.d.ts +17 -1
- package/dist/video-playlist/root/video-playlist-root.js +3 -0
- package/dist/virtual-list/fill.d.ts +11 -8
- package/dist/virtual-list/fill.js +10 -17
- package/dist/virtual-list/keys.d.ts +16 -7
- package/dist/virtual-list/keys.js +17 -6
- package/dist/virtual-list/plan.d.ts +65 -0
- package/dist/virtual-list/plan.js +27 -0
- package/dist/virtual-list/root/virtual-list-root.d.ts +136 -13
- package/dist/virtual-list/root/virtual-list-root.js +218 -51
- package/lint.json +1 -1
- package/package.json +8 -8
- package/types/jsx.d.ts +7441 -1458
- package/types/svelte.d.ts +1 -0
- package/types/vue.d.ts +1501 -326
- package/dist/chat/relative-clock.d.ts +0 -39
- package/dist/chat/relative-clock.js +0 -31
- package/dist/data-table/root/order.d.ts +0 -141
- package/dist/data-table/root/order.js +0 -76
- package/dist/tag/selection.d.ts +0 -10
- package/dist/tag/selection.js +0 -12
|
@@ -4,19 +4,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { CopyController, capturePointer, colorName, customElement, drawIcon, fillTemplate, formatColor, HelixFormElement, HelixSampleEndEvent, HelixSampleStartEvent, hostAria, hueName, isRtl, MixinControllerValue, parseColor, splitValues, toCss, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { CopyController, capturePointer, clamp, colorName, customElement, drawIcon, fillTemplate, formatColor, formatNumber, HelixFormElement, HelixSampleEndEvent, HelixSampleStartEvent, hostAria, hueName, isRtl, KeyboardNavigationController, localeOf, MixinControllerValue, MixinPickerFeedback, parseColor, rovingStop, splitValues, toCss, wordsConverter, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { eyedropper } from '@fusion.dev/helix-icons';
|
|
9
9
|
import { nothing } from 'lit';
|
|
10
10
|
import { property, state } from 'lit/decorators.js';
|
|
11
11
|
import { live } from 'lit/directives/live.js';
|
|
12
12
|
import { html } from 'lit/static-html.js';
|
|
13
13
|
import { channelFields, writeChannel } from '../channels.js';
|
|
14
|
+
import { hueAt } from '../wheel.js';
|
|
14
15
|
import '../../button/index.js';
|
|
15
16
|
import '../../button-group/index.js';
|
|
16
17
|
import '../../slider/index.js';
|
|
17
18
|
const FORMATS = ['hex', 'rgb', 'hsl'];
|
|
18
19
|
const START = { alpha: 100, brightness: 100, hue: 0, saturation: 100 };
|
|
19
|
-
let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinControllerValue(HelixFormElement) {
|
|
20
|
+
let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinPickerFeedback(MixinControllerValue(HelixFormElement)) {
|
|
20
21
|
constructor() {
|
|
21
22
|
super(...arguments);
|
|
22
23
|
this.alpha = false;
|
|
@@ -31,7 +32,6 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
31
32
|
this.formatLabel = 'Syntax: {format}. Change it.';
|
|
32
33
|
this.greenLabel = 'Green';
|
|
33
34
|
this.hueLabel = 'Hue';
|
|
34
|
-
this.invalid = false;
|
|
35
35
|
this.lightnessLabel = 'Lightness';
|
|
36
36
|
this.noEyedropper = false;
|
|
37
37
|
this.noFormat = false;
|
|
@@ -45,6 +45,7 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
45
45
|
this.swatches = '';
|
|
46
46
|
this.toolsLabel = 'Color tools';
|
|
47
47
|
this.valueLabel = 'Color';
|
|
48
|
+
this.wheel = false;
|
|
48
49
|
this.sampling = false;
|
|
49
50
|
this.owned = false;
|
|
50
51
|
this.announcesInput = true;
|
|
@@ -79,11 +80,39 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
79
80
|
this.copier = new CopyController(this);
|
|
80
81
|
this.handleSwatch = (preset) => {
|
|
81
82
|
const parsed = parseColor(preset);
|
|
82
|
-
if (parsed) {
|
|
83
|
+
if (!parsed) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const format = this.format ?? 'hex';
|
|
87
|
+
const fields = channelFields(preset, parsed, format, this.alpha);
|
|
88
|
+
const first = fields[0];
|
|
89
|
+
const exact = first && writeChannel(fields, format, this.alpha, first.channel, first.value);
|
|
90
|
+
if (exact) {
|
|
91
|
+
this.takeWritten(exact);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
83
94
|
this.move(parsed);
|
|
84
|
-
this.settle();
|
|
85
95
|
}
|
|
96
|
+
this.settle();
|
|
86
97
|
};
|
|
98
|
+
this.swatchKeys = new KeyboardNavigationController(this, {
|
|
99
|
+
items: () => [
|
|
100
|
+
...(this.renderRoot?.querySelectorAll('[part="swatches"] [part="swatch"]') ??
|
|
101
|
+
[]),
|
|
102
|
+
].map((swatch, index) => ({
|
|
103
|
+
contains: (node) => swatch === node,
|
|
104
|
+
disabled: false,
|
|
105
|
+
focusItem: () => {
|
|
106
|
+
this.swatchAt = index;
|
|
107
|
+
swatch.focus();
|
|
108
|
+
},
|
|
109
|
+
select: () => { },
|
|
110
|
+
selected: false,
|
|
111
|
+
})),
|
|
112
|
+
origin: 'focus',
|
|
113
|
+
selects: () => false,
|
|
114
|
+
wrap: false,
|
|
115
|
+
});
|
|
87
116
|
this.handleFormat = () => {
|
|
88
117
|
if (this.readOnly) {
|
|
89
118
|
return;
|
|
@@ -141,20 +170,45 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
141
170
|
const down = Math.min(1, Math.max(0, (event.clientY - box.top) / box.height));
|
|
142
171
|
this.move({ brightness: Math.round((1 - down) * 100), saturation: Math.round(across * 100) });
|
|
143
172
|
};
|
|
173
|
+
this.handleWheelPointer = (event) => {
|
|
174
|
+
const wheel = event.currentTarget;
|
|
175
|
+
const grid = this.partNamed('grid');
|
|
176
|
+
if (this.isDisabled || (grid && event.composedPath().includes(grid))) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (event.type === 'pointerup' || event.type === 'pointercancel') {
|
|
180
|
+
if (wheel.hasPointerCapture(event.pointerId)) {
|
|
181
|
+
this.settle();
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (event.type === 'pointerdown') {
|
|
186
|
+
capturePointer(wheel, event.pointerId);
|
|
187
|
+
this.partNamed('wheel-hue')?.focus();
|
|
188
|
+
}
|
|
189
|
+
else if (!wheel.hasPointerCapture(event.pointerId)) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
event.preventDefault();
|
|
193
|
+
const box = wheel.getBoundingClientRect();
|
|
194
|
+
if (box.width > 0 && box.height > 0) {
|
|
195
|
+
this.move({ hue: hueAt(event.clientX, event.clientY, box) });
|
|
196
|
+
}
|
|
197
|
+
};
|
|
144
198
|
this.handleAreaKeydown = (event) => {
|
|
145
199
|
if (this.isDisabled || this.readOnly) {
|
|
146
200
|
return;
|
|
147
201
|
}
|
|
148
202
|
const color = this.color;
|
|
149
203
|
const along = isRtl(this) ? -1 : 1;
|
|
150
|
-
const
|
|
204
|
+
const held = (at) => clamp(at, 0, 100);
|
|
151
205
|
const moves = {
|
|
152
|
-
ArrowDown: { brightness:
|
|
153
|
-
ArrowLeft: { saturation:
|
|
154
|
-
ArrowRight: { saturation:
|
|
155
|
-
ArrowUp: { brightness:
|
|
156
|
-
PageDown: { brightness:
|
|
157
|
-
PageUp: { brightness:
|
|
206
|
+
ArrowDown: { brightness: held(color.brightness - 1) },
|
|
207
|
+
ArrowLeft: { saturation: held(color.saturation - along) },
|
|
208
|
+
ArrowRight: { saturation: held(color.saturation + along) },
|
|
209
|
+
ArrowUp: { brightness: held(color.brightness + 1) },
|
|
210
|
+
PageDown: { brightness: held(color.brightness - 10) },
|
|
211
|
+
PageUp: { brightness: held(color.brightness + 10) },
|
|
158
212
|
};
|
|
159
213
|
const next = moves[event.key];
|
|
160
214
|
if (!next) {
|
|
@@ -297,9 +351,10 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
297
351
|
part="channel"
|
|
298
352
|
exportparts="control: channel-control, feedback: channel-feedback, field: channel-field,
|
|
299
353
|
hint: channel-hint, label: channel-label, marker: channel-marker,
|
|
300
|
-
marker-label: channel-marker-label, markers: channel-markers, output: channel-output
|
|
354
|
+
marker-label: channel-marker-label, markers: channel-markers, output: channel-output,
|
|
355
|
+
tooltip: channel-tooltip, tooltips: channel-tooltips"
|
|
301
356
|
data-channel=${channel}
|
|
302
|
-
aria-invalid=${this.
|
|
357
|
+
aria-invalid=${this.marked ? 'true' : nothing}
|
|
303
358
|
label=${label}
|
|
304
359
|
max=${max}
|
|
305
360
|
min="0"
|
|
@@ -337,7 +392,6 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
337
392
|
}
|
|
338
393
|
willUpdate(changed) {
|
|
339
394
|
super.willUpdate(changed);
|
|
340
|
-
this.internals.ariaInvalid = this.invalid ? 'true' : null;
|
|
341
395
|
const outside = [...(this.internals.labels ?? [])];
|
|
342
396
|
hostAria(this.internals, { labelledBy: outside, role: outside.length > 0 ? 'group' : '' });
|
|
343
397
|
if (!this.hydrating) {
|
|
@@ -349,7 +403,7 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
349
403
|
${this.sampling && !this.noEyedropper
|
|
350
404
|
? html `<${this.tag('button')}
|
|
351
405
|
part="eyedropper"
|
|
352
|
-
exportparts="button: eyedropper-button, live: eyedropper-live, text: eyedropper-text"
|
|
406
|
+
exportparts="button: eyedropper-button, live: eyedropper-live, spinner: eyedropper-spinner, text: eyedropper-text"
|
|
353
407
|
label=${this.eyedropperLabel}
|
|
354
408
|
?disabled=${this.isDisabled}
|
|
355
409
|
@click=${this.handleEyeDropper}
|
|
@@ -361,7 +415,7 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
361
415
|
? nothing
|
|
362
416
|
: html `<${this.tag('button')}
|
|
363
417
|
part="format"
|
|
364
|
-
exportparts="button: format-button, live: format-live, text: format-text"
|
|
418
|
+
exportparts="button: format-button, live: format-live, spinner: format-spinner, text: format-text"
|
|
365
419
|
label=${fillTemplate(this.formatLabel, { format: this.format ?? 'hex' })}
|
|
366
420
|
?disabled=${this.isDisabled}
|
|
367
421
|
@click=${this.handleFormat}
|
|
@@ -370,16 +424,49 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
370
424
|
</${this.tag('button')}>`}
|
|
371
425
|
</${this.tag('button-group')}>`;
|
|
372
426
|
}
|
|
427
|
+
renderSwatches(painted) {
|
|
428
|
+
const presets = this.presets;
|
|
429
|
+
const chosen = presets.map((preset) => {
|
|
430
|
+
const parsed = parseColor(preset);
|
|
431
|
+
return parsed !== null && toCss(parsed) === painted;
|
|
432
|
+
});
|
|
433
|
+
const indexes = presets.map((_, index) => index);
|
|
434
|
+
const stop = rovingStop(indexes, this.swatchAt, { selected: (index) => chosen[index] === true });
|
|
435
|
+
return html `<div
|
|
436
|
+
part="swatches"
|
|
437
|
+
role="listbox"
|
|
438
|
+
aria-label=${this.presetsLabel}
|
|
439
|
+
aria-orientation="horizontal"
|
|
440
|
+
>
|
|
441
|
+
${presets.map((preset, index) => {
|
|
442
|
+
const parsed = parseColor(preset);
|
|
443
|
+
return html `<button
|
|
444
|
+
part="swatch"
|
|
445
|
+
type="button"
|
|
446
|
+
role="option"
|
|
447
|
+
tabindex=${index === stop ? '0' : '-1'}
|
|
448
|
+
aria-label=${parsed ? colorName(parsed, this.colorWords, localeOf(this)) : preset}
|
|
449
|
+
aria-selected=${chosen[index] ? 'true' : 'false'}
|
|
450
|
+
style="--color-picker-swatch: ${preset}"
|
|
451
|
+
?disabled=${this.isDisabled}
|
|
452
|
+
@click=${() => {
|
|
453
|
+
this.swatchAt = index;
|
|
454
|
+
this.handleSwatch(preset);
|
|
455
|
+
}}
|
|
456
|
+
></button>`;
|
|
457
|
+
})}
|
|
458
|
+
</div>`;
|
|
459
|
+
}
|
|
373
460
|
render() {
|
|
374
461
|
const color = this.color;
|
|
375
462
|
const painted = toCss(color);
|
|
376
|
-
const named = colorName(color, this.colorWords, this
|
|
463
|
+
const named = colorName(color, this.colorWords, localeOf(this));
|
|
377
464
|
const both = `${this.saturationLabel} ${color.saturation}%, ${this.brightnessLabel} ${color.brightness}%, ${named}`;
|
|
378
465
|
const reversed = `${this.brightnessLabel} ${color.brightness}%, ${this.saturationLabel} ${color.saturation}%, ${named}`;
|
|
379
|
-
const hue = hueName({ alpha: 100, brightness: 100, hue: color.hue, saturation: 100 }, this.colorWords, this
|
|
466
|
+
const hue = hueName({ alpha: 100, brightness: 100, hue: color.hue, saturation: 100 }, this.colorWords, localeOf(this));
|
|
380
467
|
const owner = this.getAttribute('aria-label')?.trim();
|
|
381
468
|
const axisName = (channel) => (owner ? `${owner}, ${channel}` : channel);
|
|
382
|
-
|
|
469
|
+
const area = html `<div
|
|
383
470
|
part="grid"
|
|
384
471
|
style="--color-picker-hue: ${color.hue}; --color-picker-saturation: ${color.saturation}%; --color-picker-brightness: ${color.brightness}%"
|
|
385
472
|
@pointerdown=${this.handleGridPointer}
|
|
@@ -394,8 +481,9 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
394
481
|
min="0"
|
|
395
482
|
max="100"
|
|
396
483
|
aria-label=${axisName(this.saturationLabel)}
|
|
484
|
+
aria-describedby=${this.feedback === '' ? nothing : 'feedback'}
|
|
397
485
|
aria-valuetext=${both}
|
|
398
|
-
aria-invalid=${this.
|
|
486
|
+
aria-invalid=${this.marked ? 'true' : nothing}
|
|
399
487
|
.value=${String(color.saturation)}
|
|
400
488
|
?disabled=${this.isDisabled}
|
|
401
489
|
@input=${(event) => this.takeArea('saturation', event)}
|
|
@@ -409,14 +497,43 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
409
497
|
max="100"
|
|
410
498
|
tabindex="-1"
|
|
411
499
|
aria-label=${axisName(this.brightnessLabel)}
|
|
500
|
+
aria-describedby=${this.feedback === '' ? nothing : 'feedback'}
|
|
412
501
|
aria-valuetext=${reversed}
|
|
413
|
-
aria-invalid=${this.
|
|
502
|
+
aria-invalid=${this.marked ? 'true' : nothing}
|
|
414
503
|
.value=${String(color.brightness)}
|
|
415
504
|
?disabled=${this.isDisabled}
|
|
416
505
|
@input=${(event) => this.takeArea('brightness', event)}
|
|
417
506
|
@change=${() => this.settle()}
|
|
418
507
|
/>
|
|
419
|
-
</div
|
|
508
|
+
</div>`;
|
|
509
|
+
return html `${this.wheel
|
|
510
|
+
? html `<div
|
|
511
|
+
part="wheel"
|
|
512
|
+
style="--color-picker-hue: ${color.hue}"
|
|
513
|
+
@pointerdown=${this.handleWheelPointer}
|
|
514
|
+
@pointermove=${this.handleWheelPointer}
|
|
515
|
+
@pointerup=${this.handleWheelPointer}
|
|
516
|
+
@pointercancel=${this.handleWheelPointer}
|
|
517
|
+
>
|
|
518
|
+
${''}
|
|
519
|
+
<input
|
|
520
|
+
part="wheel-hue"
|
|
521
|
+
type="range"
|
|
522
|
+
min="0"
|
|
523
|
+
max="360"
|
|
524
|
+
dir="ltr"
|
|
525
|
+
aria-label=${axisName(this.hueLabel)}
|
|
526
|
+
aria-describedby=${this.feedback === '' ? nothing : 'feedback'}
|
|
527
|
+
aria-valuetext=${`${color.hue}, ${hue}`}
|
|
528
|
+
aria-invalid=${this.marked ? 'true' : nothing}
|
|
529
|
+
.value=${String(color.hue)}
|
|
530
|
+
?disabled=${this.isDisabled}
|
|
531
|
+
@input=${(event) => this.takeArea('hue', event)}
|
|
532
|
+
@change=${() => this.settle()}
|
|
533
|
+
/>
|
|
534
|
+
${area}
|
|
535
|
+
</div>`
|
|
536
|
+
: area}
|
|
420
537
|
|
|
421
538
|
<div part="controls" style="--color-picker-hue: ${color.hue}; --color-picker-swatch: ${painted}">
|
|
422
539
|
<button
|
|
@@ -430,8 +547,10 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
430
547
|
@click=${() => this.copier.copy(this.value)}
|
|
431
548
|
></button>
|
|
432
549
|
<div part="channels">
|
|
433
|
-
${this.renderChannel('hue', this.hueLabel, 360, color.hue, `{value}, ${hue}`)}
|
|
434
|
-
${this.alpha
|
|
550
|
+
${this.wheel ? nothing : this.renderChannel('hue', this.hueLabel, 360, color.hue, `{value}, ${hue}`)}
|
|
551
|
+
${this.alpha
|
|
552
|
+
? this.renderChannel('alpha', this.opacityLabel, 100, color.alpha, formatNumber(color.alpha / 100, localeOf(this), { style: 'percent' }))
|
|
553
|
+
: nothing}
|
|
435
554
|
</div>
|
|
436
555
|
</div>
|
|
437
556
|
${this.channelFields ? this.renderFields(color) : nothing}
|
|
@@ -447,7 +566,8 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
447
566
|
part="value"
|
|
448
567
|
type="text"
|
|
449
568
|
aria-label=${this.valueLabel}
|
|
450
|
-
aria-
|
|
569
|
+
aria-describedby=${this.feedback === '' ? nothing : 'feedback'}
|
|
570
|
+
aria-invalid=${this.marked ? 'true' : nothing}
|
|
451
571
|
autocomplete=${this.autocomplete || nothing}
|
|
452
572
|
spellcheck="false"
|
|
453
573
|
.value=${this.value}
|
|
@@ -462,22 +582,8 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
|
|
|
462
582
|
${this.tools ? html `${this.renderTools()}` : nothing}
|
|
463
583
|
</div>
|
|
464
584
|
|
|
465
|
-
${this.presets.length === 0
|
|
466
|
-
|
|
467
|
-
: html `<div part="swatches" role="group" aria-label=${this.presetsLabel}>
|
|
468
|
-
${this.presets.map((preset) => {
|
|
469
|
-
const parsed = parseColor(preset);
|
|
470
|
-
return html `<button
|
|
471
|
-
part="swatch"
|
|
472
|
-
type="button"
|
|
473
|
-
aria-label=${parsed ? colorName(parsed, this.colorWords, this.lang) : preset}
|
|
474
|
-
aria-pressed=${parsed !== null && toCss(parsed) === painted ? 'true' : 'false'}
|
|
475
|
-
style="--color-picker-swatch: ${preset}"
|
|
476
|
-
?disabled=${this.isDisabled}
|
|
477
|
-
@click=${() => this.handleSwatch(preset)}
|
|
478
|
-
></button>`;
|
|
479
|
-
})}
|
|
480
|
-
</div>`}`;
|
|
585
|
+
${this.presets.length === 0 ? nothing : this.renderSwatches(painted)}
|
|
586
|
+
${this.renderPickerFeedback()}`;
|
|
481
587
|
}
|
|
482
588
|
};
|
|
483
589
|
__decorate([
|
|
@@ -499,7 +605,7 @@ __decorate([
|
|
|
499
605
|
property({ attribute: 'channel-fields', type: Boolean })
|
|
500
606
|
], HelixHeadlessColorPicker.prototype, "channelFields", void 0);
|
|
501
607
|
__decorate([
|
|
502
|
-
property({ attribute: 'color-words',
|
|
608
|
+
property({ attribute: 'color-words', converter: wordsConverter })
|
|
503
609
|
], HelixHeadlessColorPicker.prototype, "colorWords", void 0);
|
|
504
610
|
__decorate([
|
|
505
611
|
property({ attribute: 'copied-label' })
|
|
@@ -522,9 +628,6 @@ __decorate([
|
|
|
522
628
|
__decorate([
|
|
523
629
|
property({ attribute: 'hue-label' })
|
|
524
630
|
], HelixHeadlessColorPicker.prototype, "hueLabel", void 0);
|
|
525
|
-
__decorate([
|
|
526
|
-
property({ reflect: true, type: Boolean })
|
|
527
|
-
], HelixHeadlessColorPicker.prototype, "invalid", void 0);
|
|
528
631
|
__decorate([
|
|
529
632
|
property({ attribute: 'lightness-label' })
|
|
530
633
|
], HelixHeadlessColorPicker.prototype, "lightnessLabel", void 0);
|
|
@@ -567,12 +670,18 @@ __decorate([
|
|
|
567
670
|
__decorate([
|
|
568
671
|
property({ attribute: 'value-missing-message' })
|
|
569
672
|
], HelixHeadlessColorPicker.prototype, "valueMissingMessage", void 0);
|
|
673
|
+
__decorate([
|
|
674
|
+
property({ reflect: true, type: Boolean })
|
|
675
|
+
], HelixHeadlessColorPicker.prototype, "wheel", void 0);
|
|
570
676
|
__decorate([
|
|
571
677
|
state()
|
|
572
678
|
], HelixHeadlessColorPicker.prototype, "moved", void 0);
|
|
573
679
|
__decorate([
|
|
574
680
|
state()
|
|
575
681
|
], HelixHeadlessColorPicker.prototype, "sampling", void 0);
|
|
682
|
+
__decorate([
|
|
683
|
+
state()
|
|
684
|
+
], HelixHeadlessColorPicker.prototype, "swatchAt", void 0);
|
|
576
685
|
HelixHeadlessColorPicker = __decorate([
|
|
577
686
|
customElement('helix-headless-color-picker')
|
|
578
687
|
], HelixHeadlessColorPicker);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** A box on the screen, as `getBoundingClientRect` gives one. */
|
|
2
|
+
export interface WheelBox {
|
|
3
|
+
height: number;
|
|
4
|
+
left: number;
|
|
5
|
+
top: number;
|
|
6
|
+
width: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The hue at a point on a hue wheel: degrees clockwise from the top, 0 to
|
|
10
|
+
* 359, the way React Aria's ColorWheel and every paint program lay hue out.
|
|
11
|
+
*
|
|
12
|
+
* Measured from the box's center, so a press anywhere in the wheel answers,
|
|
13
|
+
* not only one on the ring: the ring is the target a reader aims at, and a
|
|
14
|
+
* press a little inside it still means the hue in that direction. Clockwise
|
|
15
|
+
* whatever the writing direction, since a circle has no line of text.
|
|
16
|
+
*/
|
|
17
|
+
export declare const hueAt: (x: number, y: number, box: WheelBox) => number;
|
|
@@ -43,11 +43,13 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
|
|
|
43
43
|
* @slot - The options.
|
|
44
44
|
* @slot empty - What the list shows when typing hides every option, for content richer than `empty-text`.
|
|
45
45
|
* @slot end - After the text, for a unit or a clear button.
|
|
46
|
+
* @slot error - What the list shows while `load-error` is set, for content richer than its text.
|
|
46
47
|
* @slot feedback - The message that says what is wrong, for content richer than a string. It shows while there is a message.
|
|
47
48
|
* @slot hint - The hint, for content richer than plain text.
|
|
48
49
|
* @slot indicator - Replaces the caret that shows the field opens a list.
|
|
49
50
|
* @slot label - The label, for content richer than plain text.
|
|
50
51
|
* @slot loading - What the list shows while the options load, for content richer than `loading-text`.
|
|
52
|
+
* @slot no-results - What the list shows when typing hides every option, for content richer than `no-results-text`.
|
|
51
53
|
* @slot start - Before the text, for an icon.
|
|
52
54
|
*
|
|
53
55
|
* @event {Event} change - Fired after the value changes.
|
|
@@ -56,6 +58,7 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
|
|
|
56
58
|
* @event {HelixBeforeOpenEvent} helix-before-open - Fired before the panel opens. Cancelable: cancel it to keep the panel closed.
|
|
57
59
|
* @event {HelixCreateEvent} helix-create - Fired when the user adds a value that is not in the list. Cancelable.
|
|
58
60
|
* @event {HelixFilterEvent} helix-filter - Fired as the user types, with the text the list is filtered by. Cancelable: cancel it to leave the list unfiltered and do the filtering yourself.
|
|
61
|
+
* @event {HelixLoadMoreEvent} helix-load-more - Fired once the list is scrolled within a screen of its end, once for each number of options, and not while `loading` is set. Add the next page and set `loading` while you fetch it.
|
|
59
62
|
* @event {Event} input - Fired after the value changes.
|
|
60
63
|
* @event {ToggleEvent} toggle - Fired when the panel opens or closes, with `newState` and `oldState`.
|
|
61
64
|
*
|
|
@@ -69,6 +72,7 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
|
|
|
69
72
|
* @csspart label - The label above the field.
|
|
70
73
|
* @csspart listbox - The list inside the panel.
|
|
71
74
|
* @csspart listbox-empty - Shown when a filter has hidden everything.
|
|
75
|
+
* @csspart listbox-error - Shown while `load-error` is set.
|
|
72
76
|
* @csspart listbox-feedback - The inner list's error message.
|
|
73
77
|
* @csspart listbox-filter-icon - The icon beside the list's filter field.
|
|
74
78
|
* @csspart listbox-filter-mark - The glyph beside the filter field, where none is slotted.
|
|
@@ -90,7 +94,9 @@ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusi
|
|
|
90
94
|
* @csspart tag-start - The category before the label.
|
|
91
95
|
* @csspart tags - The row of chosen options, when `multiple` is set.
|
|
92
96
|
*
|
|
97
|
+
* @cssstate error - While `load-error` is set.
|
|
93
98
|
* @cssstate invalid - The control has an error to show, from the browser's validation or from your `feedback`.
|
|
99
|
+
* @cssstate no-results - What was typed hid every option of a list that has some.
|
|
94
100
|
* @cssstate open - While the list is open.
|
|
95
101
|
*/
|
|
96
102
|
export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
|
|
@@ -133,10 +139,26 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
|
|
|
133
139
|
* Text shown when the filter hides every option.
|
|
134
140
|
*/
|
|
135
141
|
emptyText: string;
|
|
142
|
+
/**
|
|
143
|
+
* How long typing rests before the list is narrowed and `helix-filter` is
|
|
144
|
+
* sent, in milliseconds.
|
|
145
|
+
*
|
|
146
|
+
* For options filtered on a server, where `helix-filter` starts a request: a
|
|
147
|
+
* delay sends one request for a word instead of one per letter. The arrow
|
|
148
|
+
* keys, Enter and Escape narrow at once on what was typed. `0` narrows on
|
|
149
|
+
* every keystroke. See Listbox's `filter-delay`.
|
|
150
|
+
*/
|
|
151
|
+
filterDelay: number;
|
|
136
152
|
/**
|
|
137
153
|
* The list's name, read by screen readers. The list has no visible name.
|
|
138
154
|
*/
|
|
139
155
|
listLabel: string;
|
|
156
|
+
/**
|
|
157
|
+
* What the list says when its options could not be loaded, such as after a
|
|
158
|
+
* request to a server fails. Empty is no error. Passed to the list, which
|
|
159
|
+
* shows it under any options there are and tells screen readers.
|
|
160
|
+
*/
|
|
161
|
+
loadError: string;
|
|
140
162
|
/**
|
|
141
163
|
* Whether the options are still loading.
|
|
142
164
|
*
|
|
@@ -168,6 +190,18 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
|
|
|
168
190
|
* element is responsible for.
|
|
169
191
|
*/
|
|
170
192
|
multiple: boolean;
|
|
193
|
+
/**
|
|
194
|
+
* The text shown when typing hides every one of the options, where there are
|
|
195
|
+
* some. Absent, `empty-text` shows. See Listbox's `no-results-text`.
|
|
196
|
+
*/
|
|
197
|
+
noResultsText?: string;
|
|
198
|
+
/**
|
|
199
|
+
* What opens the list: `input`, typing or pressing Down; `focus`, also
|
|
200
|
+
* arriving in the field, by Tab or a press; or `manual`, only Down, Alt+Down
|
|
201
|
+
* or a press on the caret, so typing narrows a list the reader has asked
|
|
202
|
+
* for. React Aria's `menuTrigger`.
|
|
203
|
+
*/
|
|
204
|
+
openOn: 'focus' | 'input' | 'manual';
|
|
171
205
|
/**
|
|
172
206
|
* Text shown while nothing has been chosen.
|
|
173
207
|
*/
|
|
@@ -302,6 +336,17 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
|
|
|
302
336
|
* is a thing a consumer may do.
|
|
303
337
|
*/
|
|
304
338
|
private get showing();
|
|
339
|
+
/**
|
|
340
|
+
* The list's `error` and `no-results` states on the host too, so a page
|
|
341
|
+
* styles the whole control from them, as WA's combobox and its status slots
|
|
342
|
+
* allow. The list keeps its own, which only a stylesheet inside this shadow
|
|
343
|
+
* root could reach.
|
|
344
|
+
*
|
|
345
|
+
* Read once the list has drawn the filter, since `hidden` is what the
|
|
346
|
+
* filter writes onto an option: a filter that hid every option of a list
|
|
347
|
+
* that has some, with nothing loading.
|
|
348
|
+
*/
|
|
349
|
+
private markStatus;
|
|
305
350
|
/**
|
|
306
351
|
* What the create row would add, or nothing where there is nothing to add.
|
|
307
352
|
*
|
|
@@ -358,6 +403,17 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
|
|
|
358
403
|
*/
|
|
359
404
|
private moveAroundCreate;
|
|
360
405
|
private readonly handleInput;
|
|
406
|
+
/**
|
|
407
|
+
* Arriving in the field opens the list where `open-on` is `focus`, unless
|
|
408
|
+
* this element is handing focus back to it as the list closes.
|
|
409
|
+
*/
|
|
410
|
+
private readonly handleFocus;
|
|
411
|
+
/** Whether `close` is putting focus back in the field, which opens nothing. */
|
|
412
|
+
private refocusing;
|
|
413
|
+
/** The narrowing waiting out `filterDelay`, if any. */
|
|
414
|
+
private readonly narrowing;
|
|
415
|
+
/** Narrows the list to what was typed, and finds the completion in what is left. */
|
|
416
|
+
private narrow;
|
|
361
417
|
/**
|
|
362
418
|
* The words of the first option the typing begins, or nothing.
|
|
363
419
|
*
|