@fusion.dev/helix-headless 0.148.0 → 0.149.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +6966 -1798
- package/dist/announcement/root/announcement-root.d.ts +5 -0
- package/dist/announcement/root/announcement-root.js +5 -2
- package/dist/area-chart/root/area-chart-root.d.ts +11 -0
- package/dist/area-chart/root/area-chart-root.js +20 -7
- package/dist/avatar/group/avatar-group.d.ts +10 -2
- package/dist/avatar/group/avatar-group.js +10 -5
- package/dist/badge/count.d.ts +6 -1
- package/dist/badge/count.js +3 -3
- package/dist/badge/root/badge-root.d.ts +6 -2
- package/dist/badge/root/badge-root.js +3 -3
- package/dist/bar-chart/root/bar-chart-root.d.ts +13 -1
- package/dist/bar-chart/root/bar-chart-root.js +17 -4
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +8 -1
- package/dist/breadcrumbs/root/breadcrumbs-root.js +5 -2
- package/dist/button/root/button-root.d.ts +10 -1
- package/dist/button/root/button-root.js +3 -2
- package/dist/button-group/root/button-group-root.d.ts +3 -0
- package/dist/button-group/root/button-group-root.js +2 -2
- package/dist/callout/root/callout-root.d.ts +16 -2
- package/dist/callout/root/callout-root.js +16 -4
- package/dist/canvas/describe.d.ts +10 -0
- package/dist/canvas/describe.js +9 -0
- package/dist/canvas/neighbor.d.ts +17 -0
- package/dist/canvas/neighbor.js +1 -0
- package/dist/canvas/node/canvas-node.js +3 -2
- package/dist/canvas/root/canvas-root.d.ts +65 -8
- package/dist/canvas/root/canvas-root.js +115 -49
- package/dist/carousel/root/carousel-root.d.ts +5 -0
- package/dist/carousel/root/carousel-root.js +16 -5
- package/dist/chat/composer/chat-composer.d.ts +5 -0
- package/dist/chat/composer/chat-composer.js +4 -1
- package/dist/chat/message/chat-message.d.ts +9 -5
- package/dist/chat/message/chat-message.js +8 -4
- package/dist/chat/naming.js +2 -2
- package/dist/chat/root/chat-root.d.ts +27 -1
- package/dist/chat/root/chat-root.js +37 -9
- package/dist/checkbox/root/checkbox-root.d.ts +11 -0
- package/dist/checkbox/root/checkbox-root.js +8 -2
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +11 -0
- package/dist/checkbox-group/root/checkbox-group-root.js +11 -3
- package/dist/code-block/root/code-block-root.d.ts +12 -2
- package/dist/code-block/root/code-block-root.js +12 -2
- package/dist/color-input/root/color-input-root.d.ts +13 -0
- package/dist/color-input/root/color-input-root.js +18 -5
- package/dist/color-picker/root/color-picker-root.d.ts +19 -3
- package/dist/color-picker/root/color-picker-root.js +47 -13
- package/dist/combobox/root/combobox-root.d.ts +36 -7
- package/dist/combobox/root/combobox-root.js +37 -12
- package/dist/command/root/command-root.d.ts +15 -6
- package/dist/command/root/command-root.js +9 -4
- package/dist/copy-button/root/copy-button-root.d.ts +5 -0
- package/dist/copy-button/root/copy-button-root.js +7 -2
- package/dist/data-table/root/data-table-root.d.ts +171 -29
- package/dist/data-table/root/data-table-root.js +268 -118
- package/dist/date-input/root/date-input-root.d.ts +32 -9
- package/dist/date-input/root/date-input-root.js +66 -44
- package/dist/date-picker/root/date-picker-root.d.ts +38 -15
- package/dist/date-picker/root/date-picker-root.js +52 -33
- package/dist/dialog/root/dialog-root.d.ts +12 -1
- package/dist/dialog/root/dialog-root.js +11 -4
- package/dist/donut-chart/root/donut-chart-root.d.ts +5 -0
- package/dist/donut-chart/root/donut-chart-root.js +8 -5
- package/dist/drawer/root/drawer-root.d.ts +12 -1
- package/dist/drawer/root/drawer-root.js +9 -2
- package/dist/drilldown/root/drilldown-root.d.ts +5 -0
- package/dist/drilldown/root/drilldown-root.js +4 -1
- package/dist/element-events.generated.js +25 -3
- package/dist/file-input/root/file-input-root.d.ts +18 -3
- package/dist/file-input/root/file-input-root.js +34 -17
- package/dist/filter-input/chip/filter-chip.d.ts +13 -0
- package/dist/filter-input/chip/filter-chip.js +6 -1
- package/dist/filter-input/menu/filter-menu.d.ts +5 -0
- package/dist/filter-input/menu/filter-menu.js +3 -1
- package/dist/filter-input/root/filter-input-root.d.ts +20 -3
- package/dist/filter-input/root/filter-input-root.js +8 -4
- package/dist/format-date/root/format-date-root.d.ts +20 -2
- package/dist/format-date/root/format-date-root.js +5 -2
- package/dist/graph/root/graph-model.d.ts +11 -0
- package/dist/graph/root/graph-model.js +4 -0
- package/dist/graph/root/graph-root.d.ts +78 -9
- package/dist/graph/root/graph-root.js +124 -27
- package/dist/heatmap/root/heatmap-root.d.ts +25 -4
- package/dist/heatmap/root/heatmap-root.js +27 -7
- package/dist/icon-button/root/icon-button-root.d.ts +5 -0
- package/dist/icon-button/root/icon-button-root.js +1 -0
- package/dist/input/root/input-root.d.ts +5 -0
- package/dist/input/root/input-root.js +4 -1
- package/dist/lightbox/root/lightbox-root.d.ts +14 -4
- package/dist/lightbox/root/lightbox-root.js +25 -7
- package/dist/line-chart/root/line-chart-root.d.ts +5 -0
- package/dist/line-chart/root/line-chart-root.js +4 -2
- package/dist/list/item/list-item.d.ts +32 -0
- package/dist/list/item/list-item.js +34 -7
- package/dist/list/root/list-root.d.ts +87 -0
- package/dist/list/root/list-root.js +112 -2
- package/dist/listbox/reorder/index.d.ts +1 -0
- package/dist/listbox/reorder/index.js +4 -0
- package/dist/listbox/reorder/listbox-reorder.d.ts +83 -0
- package/dist/listbox/reorder/listbox-reorder.js +151 -0
- package/dist/listbox/root/listbox-root.d.ts +68 -11
- package/dist/listbox/root/listbox-root.js +41 -9
- package/dist/loader/root/loader-root.d.ts +5 -0
- package/dist/loader/root/loader-root.js +3 -1
- package/dist/map/area/map-area.d.ts +5 -0
- package/dist/map/area/map-area.js +3 -1
- package/dist/map/buildings/map-buildings.d.ts +5 -0
- package/dist/map/buildings/map-buildings.js +3 -1
- package/dist/map/contours/map-contours.d.ts +5 -0
- package/dist/map/contours/map-contours.js +3 -1
- package/dist/map/landcover/map-landcover.d.ts +5 -0
- package/dist/map/landcover/map-landcover.js +3 -1
- package/dist/map/marker/map-marker.d.ts +16 -1
- package/dist/map/marker/map-marker.js +13 -5
- package/dist/map/points/map-points.d.ts +5 -0
- package/dist/map/points/map-points.js +6 -4
- package/dist/map/position/map-position.d.ts +5 -0
- package/dist/map/position/map-position.js +3 -1
- package/dist/map/raster/map-raster.d.ts +5 -0
- package/dist/map/raster/map-raster.js +3 -1
- package/dist/map/root/map-root.d.ts +33 -14
- package/dist/map/root/map-root.js +59 -22
- package/dist/map/route/map-route.d.ts +5 -0
- package/dist/map/route/map-route.js +3 -1
- package/dist/map/terrain/map-terrain.d.ts +5 -0
- package/dist/map/terrain/map-terrain.js +3 -1
- package/dist/menu/root/menu-root.d.ts +5 -0
- package/dist/menu/root/menu-root.js +3 -1
- package/dist/meter/root/meter-root.d.ts +16 -3
- package/dist/meter/root/meter-root.js +12 -5
- package/dist/navigation/root/navigation-root.d.ts +5 -0
- package/dist/navigation/root/navigation-root.js +3 -1
- package/dist/notifications/notification/notification.d.ts +5 -0
- package/dist/notifications/notification/notification.js +3 -1
- package/dist/notifications/root/notifications-root.d.ts +8 -0
- package/dist/notifications/root/notifications-root.js +10 -2
- package/dist/number-input/root/number-input-root.d.ts +21 -8
- package/dist/number-input/root/number-input-root.js +26 -11
- package/dist/object-inspector/root/object-inspector-root.d.ts +51 -12
- package/dist/object-inspector/root/object-inspector-root.js +21 -20
- package/dist/outline/root/outline-root.d.ts +5 -0
- package/dist/outline/root/outline-root.js +3 -1
- package/dist/pagination/root/pagination-root.d.ts +7 -1
- package/dist/pagination/root/pagination-root.js +16 -7
- package/dist/pagination/size/pagination-size.d.ts +7 -3
- package/dist/pagination/size/pagination-size.js +4 -2
- package/dist/pagination/summary/pagination-summary.d.ts +8 -6
- package/dist/pagination/summary/pagination-summary.js +4 -9
- package/dist/pin-input/code.d.ts +6 -6
- package/dist/pin-input/code.js +1 -5
- package/dist/pin-input/root/pin-input-root.d.ts +9 -3
- package/dist/pin-input/root/pin-input-root.js +6 -2
- package/dist/popover/root/popover-root.d.ts +12 -2
- package/dist/popover/root/popover-root.js +10 -4
- package/dist/progress/root/progress-root.d.ts +7 -2
- package/dist/progress/root/progress-root.js +5 -2
- package/dist/qr-code/name.d.ts +3 -2
- package/dist/qr-code/name.js +2 -2
- package/dist/qr-code/root/qr-code-root.d.ts +12 -2
- package/dist/qr-code/root/qr-code-root.js +9 -2
- package/dist/radio/group/radio-group.d.ts +11 -0
- package/dist/radio/group/radio-group.js +8 -2
- package/dist/rating/root/rating-root.d.ts +12 -1
- package/dist/rating/root/rating-root.js +10 -3
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +20 -2
- package/dist/scatter-chart/root/scatter-chart-root.js +20 -5
- package/dist/select/root/select-root.d.ts +11 -0
- package/dist/select/root/select-root.js +13 -3
- package/dist/skip-link/root/skip-link-root.d.ts +5 -0
- package/dist/skip-link/root/skip-link-root.js +3 -1
- package/dist/slider/root/slider-root.d.ts +7 -2
- package/dist/slider/root/slider-root.js +11 -5
- package/dist/sparkline/readings.d.ts +15 -5
- package/dist/sparkline/readings.js +3 -3
- package/dist/sparkline/root/sparkline-root.d.ts +9 -4
- package/dist/sparkline/root/sparkline-root.js +9 -3
- package/dist/speed-dial/root/speed-dial-root.d.ts +5 -0
- package/dist/speed-dial/root/speed-dial-root.js +4 -1
- package/dist/splitter/root/splitter-root.d.ts +6 -1
- package/dist/splitter/root/splitter-root.js +9 -4
- package/dist/steps/root/steps-root.d.ts +9 -2
- package/dist/steps/root/steps-root.js +6 -3
- package/dist/steps/step/step.d.ts +12 -0
- package/dist/steps/step/step.js +11 -2
- package/dist/switch/root/switch-root.d.ts +11 -0
- package/dist/switch/root/switch-root.js +8 -2
- package/dist/table/column/table-column.d.ts +11 -4
- package/dist/table/column/table-column.js +15 -10
- package/dist/table/grid-controller.d.ts +8 -3
- package/dist/table/grid-controller.js +17 -11
- package/dist/table/root/table-root.d.ts +107 -5
- package/dist/table/root/table-root.js +122 -20
- package/dist/table/row/table-row.d.ts +42 -0
- package/dist/table/row/table-row.js +40 -1
- package/dist/tabs/root/tabs-root.d.ts +5 -0
- package/dist/tabs/root/tabs-root.js +3 -1
- package/dist/tag/group/tag-group.d.ts +5 -0
- package/dist/tag/group/tag-group.js +3 -1
- package/dist/tag/root/tag-root.d.ts +14 -1
- package/dist/tag/root/tag-root.js +11 -8
- package/dist/textarea/root/textarea-root.d.ts +5 -0
- package/dist/textarea/root/textarea-root.js +3 -1
- package/dist/time-input/root/time-input-root.d.ts +14 -7
- package/dist/time-input/root/time-input-root.js +43 -32
- package/dist/time-picker/root/time-picker-root.d.ts +15 -7
- package/dist/time-picker/root/time-picker-root.js +25 -12
- package/dist/toast/item/toast-item.d.ts +7 -0
- package/dist/toast/item/toast-item.js +1 -0
- package/dist/toast/root/toast-root.d.ts +9 -1
- package/dist/toast/root/toast-root.js +5 -4
- package/dist/toolbar/root/toolbar-root.d.ts +5 -0
- package/dist/toolbar/root/toolbar-root.js +5 -2
- package/dist/tooltip/root/tooltip-root.d.ts +27 -17
- package/dist/tour/root/tour-root.d.ts +8 -2
- package/dist/tour/root/tour-root.js +4 -2
- package/dist/tour/stop/tour-stop.d.ts +5 -0
- package/dist/tour/stop/tour-stop.js +6 -1
- package/dist/tree/grip.d.ts +5 -0
- package/dist/tree/grip.js +1 -0
- package/dist/tree/item/tree-item.d.ts +24 -0
- package/dist/tree/item/tree-item.js +27 -5
- package/dist/tree/root/tree-root.d.ts +66 -1
- package/dist/tree/root/tree-root.js +77 -5
- package/dist/trend/root/trend-root.d.ts +20 -4
- package/dist/trend/root/trend-root.js +20 -5
- package/dist/video/root/video-root.d.ts +12 -3
- package/dist/video/root/video-root.js +41 -14
- package/dist/video-playlist/menu/video-playlist-menu.d.ts +5 -0
- package/dist/video-playlist/menu/video-playlist-menu.js +3 -1
- package/dist/video-playlist/root/video-playlist-root.d.ts +5 -0
- package/dist/video-playlist/root/video-playlist-root.js +3 -1
- package/dist/virtual-list/root/virtual-list-root.d.ts +19 -3
- package/dist/virtual-list/root/virtual-list-root.js +5 -2
- package/lint.json +1 -1
- package/package.json +7 -6
- package/types/jsx.d.ts +4014 -1862
- package/types/vue.d.ts +1266 -624
- package/types/words.d.ts +3280 -0
- package/dist/toast/hotkey.d.ts +0 -22
- package/dist/toast/hotkey.js +0 -23
|
@@ -95,6 +95,11 @@ declare const HelixHeadlessFileInput_base: (new (...args: any[]) => import("@fus
|
|
|
95
95
|
* @cssstate invalid - The control has an error to show, from the browser's validation or from your `feedback`.
|
|
96
96
|
*/
|
|
97
97
|
export declare class HelixHeadlessFileInput extends HelixHeadlessFileInput_base {
|
|
98
|
+
/**
|
|
99
|
+
* The key this family's words are registered under, its styled tag:
|
|
100
|
+
* `registerWords('de', { 'helix-file-input': { triggerLabel: 'Dateien auswählen' } })`.
|
|
101
|
+
*/
|
|
102
|
+
static words: string;
|
|
98
103
|
protected readonly aria: AriaForwardController;
|
|
99
104
|
/**
|
|
100
105
|
* Which files the picker offers and a drop takes, as a native `accept` list.
|
|
@@ -108,6 +113,11 @@ export declare class HelixHeadlessFileInput extends HelixHeadlessFileInput_base
|
|
|
108
113
|
* `{count}` filled in.
|
|
109
114
|
*/
|
|
110
115
|
addedText: string;
|
|
116
|
+
/**
|
|
117
|
+
* A file's size under a kilobyte. `{count}` is how many bytes, written in
|
|
118
|
+
* the locale, and each language writes the forms it has.
|
|
119
|
+
*/
|
|
120
|
+
bytesLabel: string;
|
|
111
121
|
/**
|
|
112
122
|
* Which camera or microphone a mobile picker should offer, if any.
|
|
113
123
|
*/
|
|
@@ -118,9 +128,9 @@ export declare class HelixHeadlessFileInput extends HelixHeadlessFileInput_base
|
|
|
118
128
|
*/
|
|
119
129
|
directory: boolean;
|
|
120
130
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
131
|
+
* The locale the words, the sizes, and the numbers and lists in sentences
|
|
132
|
+
* are in, as a BCP 47 tag such as `pl`. Empty reads the nearest `lang`, then
|
|
133
|
+
* the browser's language.
|
|
124
134
|
*/
|
|
125
135
|
locale: string;
|
|
126
136
|
/**
|
|
@@ -219,6 +229,11 @@ export declare class HelixHeadlessFileInput extends HelixHeadlessFileInput_base
|
|
|
219
229
|
* count is written as the language writes a number.
|
|
220
230
|
*/
|
|
221
231
|
private listed;
|
|
232
|
+
/**
|
|
233
|
+
* A name about one file: `{name}` filled in, or the file's name after a
|
|
234
|
+
* page's label that has no `{name}`.
|
|
235
|
+
*/
|
|
236
|
+
private aboutFile;
|
|
222
237
|
/** The element slotted into `remove-icon`, one copy per row's remove button. */
|
|
223
238
|
private readonly removeIcon;
|
|
224
239
|
private readonly handleRemoveIcon;
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { AriaForwardController, customElement, drawIcon, drawStatus,
|
|
7
|
+
import { AriaForwardController, customElement, drawIcon, drawStatus, formatWords, HelixBeforeChangeEvent, HelixFormElement, HelixRejectEvent, labelWith, MixinField, requestChange, restoreValue, SlottedGlyph, StatusController, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { trash } from '@fusion.dev/helix-icons';
|
|
9
9
|
import { nothing } from 'lit';
|
|
10
10
|
import { property, state } from 'lit/decorators.js';
|
|
@@ -12,19 +12,19 @@ import { html } from 'lit/static-html.js';
|
|
|
12
12
|
import { screenFiles } from '../screen.js';
|
|
13
13
|
import { barOf, saysStatus } from '../status.js';
|
|
14
14
|
import '../../tag/index.js';
|
|
15
|
-
const size = (bytes, locale) => {
|
|
16
|
-
const units = ['
|
|
15
|
+
const size = (bytes, locale, inBytes) => {
|
|
16
|
+
const units = ['', 'KB', 'MB', 'GB', 'TB'];
|
|
17
17
|
let value = bytes;
|
|
18
18
|
let step = 0;
|
|
19
19
|
while (value >= 1024 && step < units.length - 1) {
|
|
20
20
|
value /= 1024;
|
|
21
21
|
step += 1;
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
const
|
|
27
|
-
return `${written} ${
|
|
23
|
+
if (step === 0) {
|
|
24
|
+
return inBytes(value);
|
|
25
|
+
}
|
|
26
|
+
const written = new Intl.NumberFormat(locale || undefined, { maximumFractionDigits: 1 }).format(value);
|
|
27
|
+
return `${written} ${units[step]}`;
|
|
28
28
|
};
|
|
29
29
|
const kind = (file) => {
|
|
30
30
|
const extension = /\.([a-z0-9]{1,6})$/i.exec(file.name)?.[1];
|
|
@@ -43,6 +43,7 @@ let HelixHeadlessFileInput = class HelixHeadlessFileInput extends MixinField(Hel
|
|
|
43
43
|
});
|
|
44
44
|
this.accept = '';
|
|
45
45
|
this.addedText = 'Added: {names}';
|
|
46
|
+
this.bytesLabel = '{count, plural, one {# byte} other {# bytes}}';
|
|
46
47
|
this.directory = false;
|
|
47
48
|
this.locale = '';
|
|
48
49
|
this.multiple = false;
|
|
@@ -107,6 +108,7 @@ let HelixHeadlessFileInput = class HelixHeadlessFileInput extends MixinField(Hel
|
|
|
107
108
|
});
|
|
108
109
|
};
|
|
109
110
|
}
|
|
111
|
+
static { this.words = 'helix-file-input'; }
|
|
110
112
|
setFileStatus(file, status) {
|
|
111
113
|
const was = this.statuses.get(file);
|
|
112
114
|
if (status) {
|
|
@@ -150,9 +152,9 @@ let HelixHeadlessFileInput = class HelixHeadlessFileInput extends MixinField(Hel
|
|
|
150
152
|
this.dispatchEvent(new HelixRejectEvent({ files: refused }));
|
|
151
153
|
}
|
|
152
154
|
const words = [
|
|
153
|
-
applied && !picked && added.length > 0 ? this.listed(
|
|
155
|
+
applied && !picked && added.length > 0 ? this.listed('addedText', added) : '',
|
|
154
156
|
refused.length > 0
|
|
155
|
-
? this.listed(
|
|
157
|
+
? this.listed('rejectedText', refused.map((one) => one.file))
|
|
156
158
|
: '',
|
|
157
159
|
].filter((one) => one !== '');
|
|
158
160
|
if (words.length > 0) {
|
|
@@ -160,11 +162,16 @@ let HelixHeadlessFileInput = class HelixHeadlessFileInput extends MixinField(Hel
|
|
|
160
162
|
}
|
|
161
163
|
}
|
|
162
164
|
listed(sentence, files) {
|
|
163
|
-
return
|
|
164
|
-
count:
|
|
165
|
-
names: new Intl.ListFormat(this
|
|
165
|
+
return formatWords(this, sentence, {
|
|
166
|
+
count: files.length,
|
|
167
|
+
names: new Intl.ListFormat(wordsLocale(this), { style: 'short', type: 'unit' }).format(files.map((file) => file.name)),
|
|
166
168
|
});
|
|
167
169
|
}
|
|
170
|
+
aboutFile(label, name) {
|
|
171
|
+
return this[label].includes('{name}')
|
|
172
|
+
? formatWords(this, label, { name })
|
|
173
|
+
: labelWith(this[label], 'name', name);
|
|
174
|
+
}
|
|
168
175
|
removeMark(at) {
|
|
169
176
|
return this.removeIcon.copyFor(at) ?? drawIcon(trash);
|
|
170
177
|
}
|
|
@@ -180,7 +187,7 @@ let HelixHeadlessFileInput = class HelixHeadlessFileInput extends MixinField(Hel
|
|
|
180
187
|
removeAt(at) {
|
|
181
188
|
const gone = this.files[at];
|
|
182
189
|
if (gone && this.commit(this.files.filter((_, index) => index !== at))) {
|
|
183
|
-
this.status.say(
|
|
190
|
+
this.status.say(formatWords(this, 'removedText', { name: gone.name }));
|
|
184
191
|
}
|
|
185
192
|
}
|
|
186
193
|
commit(next) {
|
|
@@ -262,7 +269,7 @@ let HelixHeadlessFileInput = class HelixHeadlessFileInput extends MixinField(Hel
|
|
|
262
269
|
}
|
|
263
270
|
renderMeta(file) {
|
|
264
271
|
return html `<${this.tag('tag')} part="size"
|
|
265
|
-
exportparts="cell: size-cell, dismiss: size-dismiss, dismiss-mark: size-dismiss-mark, label: size-label, link: size-link, start: size-start">${size(file.size, this
|
|
272
|
+
exportparts="cell: size-cell, dismiss: size-dismiss, dismiss-mark: size-dismiss-mark, label: size-label, link: size-link, start: size-start">${size(file.size, wordsLocale(this), (count) => formatWords(this, 'bytesLabel', { count }))}</${this.tag('tag')}>
|
|
266
273
|
<${this.tag('tag')}
|
|
267
274
|
part="kind"
|
|
268
275
|
exportparts="cell: kind-cell, dismiss: kind-dismiss, dismiss-mark: kind-dismiss-mark, label: kind-label, link: kind-link, start: kind-start">${kind(file)}</${this.tag('tag')}>`;
|
|
@@ -280,7 +287,7 @@ let HelixHeadlessFileInput = class HelixHeadlessFileInput extends MixinField(Hel
|
|
|
280
287
|
part="progress"
|
|
281
288
|
max="1"
|
|
282
289
|
value=${bar === 'unmeasured' ? nothing : bar}
|
|
283
|
-
aria-label=${
|
|
290
|
+
aria-label=${this.aboutFile('progressLabel', file.name)}
|
|
284
291
|
></progress>`}${status.text ? html `<span part="status-text">${status.text}</span>` : nothing}</span
|
|
285
292
|
>`;
|
|
286
293
|
}
|
|
@@ -345,7 +352,7 @@ let HelixHeadlessFileInput = class HelixHeadlessFileInput extends MixinField(Hel
|
|
|
345
352
|
<button
|
|
346
353
|
part="remove"
|
|
347
354
|
type="button"
|
|
348
|
-
aria-label=${
|
|
355
|
+
aria-label=${this.aboutFile('removeLabel', file.name)}
|
|
349
356
|
data-at=${at}
|
|
350
357
|
?disabled=${this.isDisabled}
|
|
351
358
|
@click=${this.handleRemove}
|
|
@@ -361,8 +368,13 @@ __decorate([
|
|
|
361
368
|
property()
|
|
362
369
|
], HelixHeadlessFileInput.prototype, "accept", void 0);
|
|
363
370
|
__decorate([
|
|
371
|
+
words,
|
|
364
372
|
property({ attribute: 'added-text' })
|
|
365
373
|
], HelixHeadlessFileInput.prototype, "addedText", void 0);
|
|
374
|
+
__decorate([
|
|
375
|
+
words,
|
|
376
|
+
property({ attribute: 'bytes-label' })
|
|
377
|
+
], HelixHeadlessFileInput.prototype, "bytesLabel", void 0);
|
|
366
378
|
__decorate([
|
|
367
379
|
property()
|
|
368
380
|
], HelixHeadlessFileInput.prototype, "capture", void 0);
|
|
@@ -382,15 +394,19 @@ __decorate([
|
|
|
382
394
|
property({ reflect: true, type: Boolean })
|
|
383
395
|
], HelixHeadlessFileInput.prototype, "multiple", void 0);
|
|
384
396
|
__decorate([
|
|
397
|
+
words,
|
|
385
398
|
property({ attribute: 'progress-label' })
|
|
386
399
|
], HelixHeadlessFileInput.prototype, "progressLabel", void 0);
|
|
387
400
|
__decorate([
|
|
401
|
+
words,
|
|
388
402
|
property({ attribute: 'rejected-text' })
|
|
389
403
|
], HelixHeadlessFileInput.prototype, "rejectedText", void 0);
|
|
390
404
|
__decorate([
|
|
405
|
+
words,
|
|
391
406
|
property({ attribute: 'removed-text' })
|
|
392
407
|
], HelixHeadlessFileInput.prototype, "removedText", void 0);
|
|
393
408
|
__decorate([
|
|
409
|
+
words,
|
|
394
410
|
property({ attribute: 'remove-label' })
|
|
395
411
|
], HelixHeadlessFileInput.prototype, "removeLabel", void 0);
|
|
396
412
|
__decorate([
|
|
@@ -400,6 +416,7 @@ __decorate([
|
|
|
400
416
|
property({ attribute: false })
|
|
401
417
|
], HelixHeadlessFileInput.prototype, "transformFiles", void 0);
|
|
402
418
|
__decorate([
|
|
419
|
+
words,
|
|
403
420
|
property({ attribute: 'trigger-label' })
|
|
404
421
|
], HelixHeadlessFileInput.prototype, "triggerLabel", void 0);
|
|
405
422
|
__decorate([
|
|
@@ -63,6 +63,19 @@ declare const HelixHeadlessFilterChip_base: (new (...args: any[]) => import("@fu
|
|
|
63
63
|
* @csspart values - The values the field is compared to.
|
|
64
64
|
*/
|
|
65
65
|
export declare class HelixHeadlessFilterChip extends HelixHeadlessFilterChip_base {
|
|
66
|
+
/**
|
|
67
|
+
* The key this family's words are registered under, its styled tag:
|
|
68
|
+
* `registerWords('de', { 'helix-filter-chip': { dismissLabel: 'Filter entfernen' } })`.
|
|
69
|
+
*/
|
|
70
|
+
static words: string;
|
|
71
|
+
/**
|
|
72
|
+
* The remove button's name, read by screen readers. The chip's own words
|
|
73
|
+
* follow it, so several chips are told apart.
|
|
74
|
+
*
|
|
75
|
+
* "Remove filter" rather than the mixin's "Dismiss", for the reason `Tag`
|
|
76
|
+
* gives its own: taking a filter out of a set is a different act from
|
|
77
|
+
* closing a message.
|
|
78
|
+
*/
|
|
66
79
|
dismissLabel: string;
|
|
67
80
|
/**
|
|
68
81
|
* The name of the field the filter is on, as shown on the chip.
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { customElement, HelixElement, labelWith, MixinDismissible, slottedWords, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { customElement, HelixElement, labelWith, MixinDismissible, slottedWords, words, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { x } from '@fusion.dev/helix-icons';
|
|
9
9
|
import { html, nothing } from 'lit';
|
|
10
10
|
import { property } from 'lit/decorators.js';
|
|
@@ -16,6 +16,7 @@ let HelixHeadlessFilterChip = class HelixHeadlessFilterChip extends MixinDismiss
|
|
|
16
16
|
this.label = '';
|
|
17
17
|
this.operatorLabel = '';
|
|
18
18
|
}
|
|
19
|
+
static { this.words = 'helix-filter-chip'; }
|
|
19
20
|
get removeName() {
|
|
20
21
|
const read = (slot, fallback) => (this.childrenKnown && slottedWords(this, [slot])) || fallback;
|
|
21
22
|
const words = [read('field', this.label), read('operator', this.operatorLabel), read('', '')]
|
|
@@ -51,6 +52,10 @@ let HelixHeadlessFilterChip = class HelixHeadlessFilterChip extends MixinDismiss
|
|
|
51
52
|
: nothing}`;
|
|
52
53
|
}
|
|
53
54
|
};
|
|
55
|
+
__decorate([
|
|
56
|
+
words,
|
|
57
|
+
property({ attribute: 'dismiss-label' })
|
|
58
|
+
], HelixHeadlessFilterChip.prototype, "dismissLabel", void 0);
|
|
54
59
|
__decorate([
|
|
55
60
|
property()
|
|
56
61
|
], HelixHeadlessFilterChip.prototype, "label", void 0);
|
|
@@ -85,6 +85,11 @@ import '../../menu/index.js';
|
|
|
85
85
|
* @csspart menu-title - The name of the field whose page is showing.
|
|
86
86
|
*/
|
|
87
87
|
export declare class HelixHeadlessFilterMenu extends HelixElement {
|
|
88
|
+
/**
|
|
89
|
+
* The key this family's words are registered under, its styled tag:
|
|
90
|
+
* `registerWords('de', { 'helix-filter-menu': { label: 'Filtern' } })`.
|
|
91
|
+
*/
|
|
92
|
+
static words: string;
|
|
88
93
|
/**
|
|
89
94
|
* The menu's name, read by screen readers.
|
|
90
95
|
*/
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { customElement, HelixElement, HelixFacetEvent } from '@fusion.dev/helix-core';
|
|
7
|
+
import { customElement, HelixElement, HelixFacetEvent, words } from '@fusion.dev/helix-core';
|
|
8
8
|
import { nothing } from 'lit';
|
|
9
9
|
import { property } from 'lit/decorators.js';
|
|
10
10
|
import { html } from 'lit/static-html.js';
|
|
@@ -55,6 +55,7 @@ let HelixHeadlessFilterMenu = class HelixHeadlessFilterMenu extends HelixElement
|
|
|
55
55
|
this.apply(field, [...ticked]);
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
|
+
static { this.words = 'helix-filter-menu'; }
|
|
58
59
|
get fields() {
|
|
59
60
|
return this.knownChildren.filter((child) => child instanceof HelixHeadlessFilterField);
|
|
60
61
|
}
|
|
@@ -203,6 +204,7 @@ let HelixHeadlessFilterMenu = class HelixHeadlessFilterMenu extends HelixElement
|
|
|
203
204
|
}
|
|
204
205
|
};
|
|
205
206
|
__decorate([
|
|
207
|
+
words,
|
|
206
208
|
property()
|
|
207
209
|
], HelixHeadlessFilterMenu.prototype, "label", void 0);
|
|
208
210
|
HelixHeadlessFilterMenu = __decorate([
|
|
@@ -132,6 +132,11 @@ declare const HelixHeadlessFilterInput_base: (new (...args: any[]) => import("@f
|
|
|
132
132
|
* @cssstate open - The suggestions are open.
|
|
133
133
|
*/
|
|
134
134
|
export declare class HelixHeadlessFilterInput extends HelixHeadlessFilterInput_base {
|
|
135
|
+
/**
|
|
136
|
+
* The key this family's words are registered under, its styled tag:
|
|
137
|
+
* `registerWords('de', { 'helix-filter-input': { clearLabel: 'Leeren' } })`.
|
|
138
|
+
*/
|
|
139
|
+
static words: string;
|
|
135
140
|
protected readonly aria: AriaForwardController;
|
|
136
141
|
/** Typed, so every keystroke is announced. See `announcesInput`. */
|
|
137
142
|
protected readonly announcesInput = true;
|
|
@@ -161,9 +166,21 @@ export declare class HelixHeadlessFilterInput extends HelixHeadlessFilterInput_b
|
|
|
161
166
|
* Not a label: it goes when typing starts.
|
|
162
167
|
*/
|
|
163
168
|
placeholder: string;
|
|
164
|
-
/**
|
|
165
|
-
|
|
166
|
-
|
|
169
|
+
/**
|
|
170
|
+
* What a reader hears for one suggestion, where `suggestions-label` should
|
|
171
|
+
* not say it. `{count}` is the count.
|
|
172
|
+
*
|
|
173
|
+
* @deprecated Write every form in `suggestions-label`, as `{count, plural,
|
|
174
|
+
* one {# suggestion} other {# suggestions}}`. Removed in the next major
|
|
175
|
+
* version.
|
|
176
|
+
*/
|
|
177
|
+
suggestionLabel?: string;
|
|
178
|
+
/**
|
|
179
|
+
* What a reader hears as the panel opens on its suggestions. `{count}` is
|
|
180
|
+
* how many, written in the locale, and each language writes the forms it
|
|
181
|
+
* has: `{count, plural, one {# sugestia} few {# sugestie} many {# sugestii}
|
|
182
|
+
* other {# sugestii}}`.
|
|
183
|
+
*/
|
|
167
184
|
suggestionsLabel: string;
|
|
168
185
|
/** The live region, rendered from the first count said. */
|
|
169
186
|
private readonly status;
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { AriaForwardController, countLabel, customElement, drawIcon, drawStatus, HelixFacetEvent, HelixFormElement, holdCaret, MixinControllerOpen, MixinControllerValue, MixinField, MixinTokens, PopoverController, restoreValue, StatusController, scrollItemIntoView, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { AriaForwardController, countLabel, customElement, drawIcon, drawStatus, formatWords, HelixFacetEvent, HelixFormElement, holdCaret, MixinControllerOpen, MixinControllerValue, MixinField, MixinTokens, PopoverController, restoreValue, StatusController, scrollItemIntoView, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { x } from '@fusion.dev/helix-icons';
|
|
9
9
|
import { html, nothing } from 'lit';
|
|
10
10
|
import { property, state } from 'lit/decorators.js';
|
|
@@ -25,8 +25,7 @@ let HelixHeadlessFilterInput = class HelixHeadlessFilterInput extends MixinContr
|
|
|
25
25
|
this.clearLabel = 'Clear';
|
|
26
26
|
this.filterSuggestions = false;
|
|
27
27
|
this.placeholder = '';
|
|
28
|
-
this.
|
|
29
|
-
this.suggestionsLabel = '{count} suggestions';
|
|
28
|
+
this.suggestionsLabel = '{count, plural, one {# suggestion} other {# suggestions}}';
|
|
30
29
|
this.status = new StatusController(this);
|
|
31
30
|
this.saidCount = -1;
|
|
32
31
|
this.narrowed = new Set();
|
|
@@ -161,6 +160,7 @@ let HelixHeadlessFilterInput = class HelixHeadlessFilterInput extends MixinContr
|
|
|
161
160
|
this.over = this.hideOverflow(this.tokens);
|
|
162
161
|
};
|
|
163
162
|
}
|
|
163
|
+
static { this.words = 'helix-filter-input'; }
|
|
164
164
|
narrow() {
|
|
165
165
|
const term = this.filterSuggestions
|
|
166
166
|
? currentTerm(this.value, this.control?.selectionStart ?? this.value.length)
|
|
@@ -186,7 +186,9 @@ let HelixHeadlessFilterInput = class HelixHeadlessFilterInput extends MixinContr
|
|
|
186
186
|
if (count < 0) {
|
|
187
187
|
return;
|
|
188
188
|
}
|
|
189
|
-
this.status.sayNow(
|
|
189
|
+
this.status.sayNow(this.suggestionLabel
|
|
190
|
+
? countLabel(count, this.suggestionLabel, this.suggestionsLabel, wordsLocale(this))
|
|
191
|
+
: formatWords(this, 'suggestionsLabel', { count }));
|
|
190
192
|
}
|
|
191
193
|
formValue() {
|
|
192
194
|
const entries = (this.tokens?.assignedElements({ flatten: true }) ?? [])
|
|
@@ -443,6 +445,7 @@ __decorate([
|
|
|
443
445
|
property({ type: Boolean })
|
|
444
446
|
], HelixHeadlessFilterInput.prototype, "clearable", void 0);
|
|
445
447
|
__decorate([
|
|
448
|
+
words,
|
|
446
449
|
property({ attribute: 'clear-label' })
|
|
447
450
|
], HelixHeadlessFilterInput.prototype, "clearLabel", void 0);
|
|
448
451
|
__decorate([
|
|
@@ -455,6 +458,7 @@ __decorate([
|
|
|
455
458
|
property({ attribute: 'suggestion-label' })
|
|
456
459
|
], HelixHeadlessFilterInput.prototype, "suggestionLabel", void 0);
|
|
457
460
|
__decorate([
|
|
461
|
+
words,
|
|
458
462
|
property({ attribute: 'suggestions-label' })
|
|
459
463
|
], HelixHeadlessFilterInput.prototype, "suggestionsLabel", void 0);
|
|
460
464
|
__decorate([
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HelixElement } from '@fusion.dev/helix-core';
|
|
1
|
+
import { type DateCalendar, HelixElement } from '@fusion.dev/helix-core';
|
|
2
2
|
import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
/**
|
|
4
4
|
* @summary A timestamp, formatted for the user's locale.
|
|
@@ -43,6 +43,11 @@ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
|
43
43
|
* Picker format their dates, so a reader west of UTC sees August 4 and not
|
|
44
44
|
* August 3.
|
|
45
45
|
*
|
|
46
|
+
* **A date is written in a calendar Date Picker draws**: the locale's own
|
|
47
|
+
* where its months are the Gregorian months, as `th-TH` writes 2569 for 2026,
|
|
48
|
+
* and `gregory` where they are not, as for `fa-IR`. `calendar` picks one of
|
|
49
|
+
* the five.
|
|
50
|
+
*
|
|
46
51
|
* @since 0.1.0
|
|
47
52
|
* @status stable
|
|
48
53
|
* @category typography
|
|
@@ -65,6 +70,16 @@ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
|
65
70
|
* @cssstate past - An `elapsed` or `relative` reading of a moment gone, such as "3 hours ago".
|
|
66
71
|
*/
|
|
67
72
|
export declare class HelixHeadlessFormatDate extends HelixElement {
|
|
73
|
+
/**
|
|
74
|
+
* The calendar a date is written in: `gregory`, `buddhist`, `japanese`,
|
|
75
|
+
* `roc`, or `iso8601`, the calendars Date Picker and Date Input draw.
|
|
76
|
+
*
|
|
77
|
+
* Absent is the locale's own where it is one of the five, such as
|
|
78
|
+
* `buddhist` for `th-TH`, and `gregory` for every other, such as `persian`
|
|
79
|
+
* for `fa-IR`, so a date written here reads as the same date a Date Picker
|
|
80
|
+
* beside it shows.
|
|
81
|
+
*/
|
|
82
|
+
calendar?: DateCalendar;
|
|
68
83
|
/**
|
|
69
84
|
* The timestamp, in any format `Date` can parse.
|
|
70
85
|
*
|
|
@@ -147,7 +162,10 @@ export declare class HelixHeadlessFormatDate extends HelixElement {
|
|
|
147
162
|
* Shoelace and Web Awesome read it, then the runtime's own.
|
|
148
163
|
*/
|
|
149
164
|
locale: string;
|
|
150
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* The locale the words are written in, `locale` or the page's `lang`, with
|
|
167
|
+
* the calendar.
|
|
168
|
+
*/
|
|
151
169
|
private get language();
|
|
152
170
|
/**
|
|
153
171
|
* How the minute is written, where a time of day is shown.
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { customElement, elapsedTime, HelixElement,
|
|
7
|
+
import { calendarLocale, customElement, elapsedTime, HelixElement, RelativeClockController, relativeTime, wordsLocale, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { html, nothing } from 'lit';
|
|
9
9
|
import { property } from 'lit/decorators.js';
|
|
10
10
|
import { drawFields } from '../fields.js';
|
|
@@ -29,7 +29,7 @@ let HelixHeadlessFormatDate = class HelixHeadlessFormatDate extends HelixElement
|
|
|
29
29
|
this.written = '';
|
|
30
30
|
}
|
|
31
31
|
get language() {
|
|
32
|
-
return
|
|
32
|
+
return calendarLocale(wordsLocale(this), this.calendar);
|
|
33
33
|
}
|
|
34
34
|
get dateOnly() {
|
|
35
35
|
return DATE_ONLY.test(this.source);
|
|
@@ -120,6 +120,9 @@ let HelixHeadlessFormatDate = class HelixHeadlessFormatDate extends HelixElement
|
|
|
120
120
|
return html `<time part="time" datetime=${datetime} aria-label=${spoken} title=${whole}>${this.readingAt(moment, now).text}</time>`;
|
|
121
121
|
}
|
|
122
122
|
};
|
|
123
|
+
__decorate([
|
|
124
|
+
property()
|
|
125
|
+
], HelixHeadlessFormatDate.prototype, "calendar", void 0);
|
|
123
126
|
__decorate([
|
|
124
127
|
property()
|
|
125
128
|
], HelixHeadlessFormatDate.prototype, "date", void 0);
|
|
@@ -87,6 +87,17 @@ export declare const within: (adjacency: Adjacency, from: string, depth: number)
|
|
|
87
87
|
* its order instead.
|
|
88
88
|
*/
|
|
89
89
|
export declare const entriesOf: (sorted: readonly GraphNode[], adjacency: Adjacency, active: string, query: string, shown?: ReadonlySet<string>) => Entry[];
|
|
90
|
+
/**
|
|
91
|
+
* The row the keyboard stays on once the rows are read again from changed
|
|
92
|
+
* notes or links: the row of the note it was on, `id`, wherever that note now
|
|
93
|
+
* is, or, where the note was taken away, the row at `at` that took its place,
|
|
94
|
+
* the last row where the list grew shorter than that.
|
|
95
|
+
*
|
|
96
|
+
* **The reader stays where they were.** A graph a page feeds as things happen
|
|
97
|
+
* changes its notes every few seconds, and a cursor sent to the top on each
|
|
98
|
+
* change threw a reader moving through the list back to its first row.
|
|
99
|
+
*/
|
|
100
|
+
export declare const cursorAfter: (entries: readonly Entry[], id: string | undefined, at: number) => number;
|
|
90
101
|
/** The notes in the order of their names, as the page's language orders words. */
|
|
91
102
|
export declare const sortedOf: (nodes: readonly GraphNode[], lang?: string) => GraphNode[];
|
|
92
103
|
/** One group the notes are in, as the legend names it. */
|
|
@@ -69,6 +69,10 @@ export const entriesOf = (sorted, adjacency, active, query, shown) => {
|
|
|
69
69
|
}
|
|
70
70
|
return [...first, ...neighbors, ...rest];
|
|
71
71
|
};
|
|
72
|
+
export const cursorAfter = (entries, id, at) => {
|
|
73
|
+
const found = id === undefined ? -1 : entries.findIndex((entry) => entry.node.id === id);
|
|
74
|
+
return found >= 0 ? found : Math.max(0, Math.min(at, entries.length - 1));
|
|
75
|
+
};
|
|
72
76
|
export const sortedOf = (nodes, lang) => {
|
|
73
77
|
const collator = new Intl.Collator(lang || undefined, { numeric: true, sensitivity: 'base' });
|
|
74
78
|
return [...nodes].sort((one, other) => collator.compare(nameOf(one), nameOf(other)));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type GraphSignalDetail, HelixElement, type
|
|
1
|
+
import { type GraphSignalDetail, HelixElement, type ViewportPanDetail, type ViewportZoomDetail } from '@fusion.dev/helix-core';
|
|
2
2
|
import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import { type GraphLink, type GraphNode } from './graph-model.js';
|
|
4
4
|
declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.dev/helix-core").ViewportElement) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerActiveInterface) & typeof HelixElement;
|
|
@@ -54,11 +54,11 @@ declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.
|
|
|
54
54
|
* @event {HelixBeforeActivateEvent} helix-before-activate - A note is about to be selected. Cancelable: cancel it to keep the selection in your own state.
|
|
55
55
|
* @event {HelixGraphFilterEvent} helix-graph-filter - A group in the legend was pressed, to show or hide its notes. The detail's `hidden` is every group that would be hidden. Cancelable: cancel it to keep the groups as they were, or to set `hiddenGroups` yourself.
|
|
56
56
|
* @event {HelixGraphLayoutEvent} helix-graph-layout - A layout settled, with where it put each note, sent by `laidOut()`. Keep the positions and pass them back as each note's `x` and `y`, and `z` where a renderer draws in three dimensions.
|
|
57
|
-
* @event {HelixGraphPanEvent} helix-graph-pan - A pan button or arrow key was pressed. `connectGraph` moves the drawing
|
|
57
|
+
* @event {HelixGraphPanEvent} helix-graph-pan - A pan button or arrow key was pressed. `connectGraph` moves the drawing, then calls `moved()`.
|
|
58
58
|
* @event {HelixGraphPartChangeEvent} helix-graph-part-change - The notes, the links, the selection, the depth or the gestures changed. Used by `connectGraph`; pages do not need to listen for it.
|
|
59
59
|
* @event {HelixGraphReadyEvent} helix-graph-ready - The graph has been drawn whole, laid out and settled. Sent each time `drawn()` says it is drawn after it was not.
|
|
60
60
|
* @event {HelixGraphSignalEvent} helix-graph-signal - Something passed between two notes, sent by `signal()`. Used by `connectGraph`; pages do not need to listen for it.
|
|
61
|
-
* @event {HelixGraphZoomEvent} helix-graph-zoom - A zoom button or key was pressed. `connectGraph` zooms the drawing
|
|
61
|
+
* @event {HelixGraphZoomEvent} helix-graph-zoom - A zoom button or key was pressed. `connectGraph` zooms the drawing, then calls `moved()`.
|
|
62
62
|
*
|
|
63
63
|
* @csspart after - The room the notes after those drawn would take, so the list scrolls its whole length.
|
|
64
64
|
* @csspart before - The room the notes before those drawn would take.
|
|
@@ -77,7 +77,7 @@ declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.
|
|
|
77
77
|
* @csspart legend-item-hidden - A group in the legend whose notes are hidden.
|
|
78
78
|
* @csspart legend-swatch - The mark in a group's color, before its name.
|
|
79
79
|
* @csspart list - The list of notes, which draws only the rows in view.
|
|
80
|
-
* @csspart live - What screen readers hear when a search changes
|
|
80
|
+
* @csspart live - What screen readers hear: how many notes there are when a search or the legend changes it, and which way the drawing went after a key or a control moved it.
|
|
81
81
|
* @csspart note - One note in the list.
|
|
82
82
|
* @csspart note-cursor - The note the keyboard is on in the list.
|
|
83
83
|
* @csspart note-linked - A note linked to or from the selected one.
|
|
@@ -110,13 +110,36 @@ declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.
|
|
|
110
110
|
* @cssstate using - A graph with `gestures="activate"` has been pressed and has the gestures.
|
|
111
111
|
*/
|
|
112
112
|
export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
|
|
113
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* The key this family's words are registered under, its styled tag:
|
|
115
|
+
* `registerWords('de', { 'helix-graph': { searchLabel: 'Notiz suchen' } })`.
|
|
116
|
+
*/
|
|
117
|
+
static words: string;
|
|
118
|
+
/**
|
|
119
|
+
* The hint shown when the graph, waiting to be pressed with
|
|
120
|
+
* `gestures="activate"`, is scrolled or swiped over.
|
|
121
|
+
*/
|
|
122
|
+
activateHintLabel: string;
|
|
123
|
+
/**
|
|
124
|
+
* The name of the group of controls, read by screen readers, which names
|
|
125
|
+
* what the controls drive rather than the mechanism.
|
|
126
|
+
*/
|
|
127
|
+
controlsLabel: string;
|
|
128
|
+
/**
|
|
129
|
+
* What the list says of how many notes it holds. `{count}` is the count,
|
|
130
|
+
* written in the locale, and each language writes the forms it has.
|
|
131
|
+
*/
|
|
114
132
|
countLabel: string;
|
|
115
133
|
/**
|
|
116
134
|
* How many links from the selected note to show, for its local graph. Unset
|
|
117
135
|
* shows every note. The list holds what the drawing shows.
|
|
118
136
|
*/
|
|
119
137
|
depth?: number;
|
|
138
|
+
/**
|
|
139
|
+
* The graph's name where `label` is empty and the host has no
|
|
140
|
+
* `aria-label`.
|
|
141
|
+
*/
|
|
142
|
+
fallbackLabel: string;
|
|
120
143
|
/** The groups turned off in the legend, by name, whose notes neither the drawing nor the list shows. A property, never an attribute. */
|
|
121
144
|
hiddenGroups: readonly string[];
|
|
122
145
|
/**
|
|
@@ -139,6 +162,14 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
|
|
|
139
162
|
links: readonly GraphLink[];
|
|
140
163
|
/** How a note that links to the selected one is described, with `{note}`. */
|
|
141
164
|
linksToLabel: string;
|
|
165
|
+
/** What screen readers hear once the drawing has moved down, after `moved()`. */
|
|
166
|
+
movedDownLabel: string;
|
|
167
|
+
/** What screen readers hear once the drawing has moved left, after `moved()`. */
|
|
168
|
+
movedLeftLabel: string;
|
|
169
|
+
/** What screen readers hear once the drawing has moved right, after `moved()`. */
|
|
170
|
+
movedRightLabel: string;
|
|
171
|
+
/** What screen readers hear once the drawing has moved up, after `moved()`. */
|
|
172
|
+
movedUpLabel: string;
|
|
142
173
|
/** The notes. A property, never an attribute. */
|
|
143
174
|
nodes: readonly GraphNode[];
|
|
144
175
|
/**
|
|
@@ -153,6 +184,19 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
|
|
|
153
184
|
searchLabel: string;
|
|
154
185
|
/** How the selected note is described in the list. */
|
|
155
186
|
selectedLabel: string;
|
|
187
|
+
/** The hint shown when one finger swipes over the graph with `gestures="cooperative"`. */
|
|
188
|
+
twoFingerHintLabel: string;
|
|
189
|
+
/** The line shown while the graph, with `gestures="activate"`, has the gestures. */
|
|
190
|
+
usingLabel: string;
|
|
191
|
+
/**
|
|
192
|
+
* The hint shown when the wheel scrolls past the graph with
|
|
193
|
+
* `gestures="cooperative"`. `{key}` is ⌘ on a Mac and Ctrl elsewhere.
|
|
194
|
+
*/
|
|
195
|
+
wheelHintLabel: string;
|
|
196
|
+
/** What screen readers hear once the drawing has zoomed in, after `moved()`. */
|
|
197
|
+
zoomedInLabel: string;
|
|
198
|
+
/** What screen readers hear once the drawing has zoomed out, after `moved()`. */
|
|
199
|
+
zoomedOutLabel: string;
|
|
156
200
|
/** What the search field holds. */
|
|
157
201
|
private query;
|
|
158
202
|
/** The row the keyboard is on, as an index into the list. */
|
|
@@ -175,8 +219,15 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
|
|
|
175
219
|
private groups;
|
|
176
220
|
/** Whether the graph has been drawn whole, which `drawn()` says. */
|
|
177
221
|
private whole;
|
|
178
|
-
/**
|
|
222
|
+
/** What the live region says now. */
|
|
179
223
|
private said;
|
|
224
|
+
/**
|
|
225
|
+
* Which way a reader last asked the drawing to go, by a key or a control,
|
|
226
|
+
* until `moved()` says it went: a side, `in` or `out`.
|
|
227
|
+
*/
|
|
228
|
+
private asked;
|
|
229
|
+
/** Whether the next change of the list's rows is one a reader asked for by the legend, whose count is then said. */
|
|
230
|
+
private countAsked;
|
|
180
231
|
private readonly virtualize;
|
|
181
232
|
/**
|
|
182
233
|
* @internal The notes the drawing shows, which `connectGraph` reads: those
|
|
@@ -217,16 +268,34 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
|
|
|
217
268
|
signal(from: string, to: string, options?: {
|
|
218
269
|
tone?: GraphSignalDetail['tone'];
|
|
219
270
|
}): void;
|
|
271
|
+
/**
|
|
272
|
+
* Says the drawing moved the way a reader asked, by a key or a control:
|
|
273
|
+
* the live region says "Moved right" or "Zoomed in" in the frame's words.
|
|
274
|
+
* Called by `connectGraph` once the renderer has moved; a page answering
|
|
275
|
+
* `helix-graph-pan` and `helix-graph-zoom` itself calls it once its view
|
|
276
|
+
* has moved.
|
|
277
|
+
*
|
|
278
|
+
* **Said once the drawing has moved, and only then.** The frame asks and
|
|
279
|
+
* the renderer moves, so a frame with nothing to answer it says nothing: a
|
|
280
|
+
* move said that never happened is worse than silence.
|
|
281
|
+
*/
|
|
282
|
+
moved(): void;
|
|
283
|
+
/**
|
|
284
|
+
* Puts words in the live region. **The same words twice differ by a space
|
|
285
|
+
* no reader hears**, since a region whose text does not change is not read
|
|
286
|
+
* again, and a second "Moved left" is news as much as the first.
|
|
287
|
+
*/
|
|
288
|
+
private say;
|
|
289
|
+
protected firstUpdated(changed: PropertyValues): void;
|
|
220
290
|
protected willUpdate(changed: PropertyValues): void;
|
|
221
291
|
protected updated(changed: PropertyValues): void;
|
|
292
|
+
/** The pan request, and the side it goes to, which `moved()` then says. */
|
|
222
293
|
protected panEvent(detail: ViewportPanDetail): Event;
|
|
294
|
+
/** The zoom request, and which way it goes, which `moved()` then says. */
|
|
223
295
|
protected zoomEvent(detail: ViewportZoomDetail): Event;
|
|
224
296
|
protected get restingControls(): string;
|
|
225
|
-
protected get restingControlsLabel(): string;
|
|
226
297
|
/** Which gestures the renderer takes, which `connectGraph` hears from here. */
|
|
227
298
|
protected gesturesChanged(): void;
|
|
228
|
-
/** What the graph says about its gestures where the page does not say it. */
|
|
229
|
-
protected get restingGestureLabels(): ViewportGestureLabels;
|
|
230
299
|
/** How many notes the list holds, in the page's numbers. */
|
|
231
300
|
private countText;
|
|
232
301
|
/** How a row stands to the selected note, in words, or nothing where it does not. */
|