@fusion.dev/helix-headless 0.144.0 → 0.146.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +15195 -4240
- package/dist/accordion/item/accordion-item.d.ts +62 -12
- package/dist/accordion/item/accordion-item.js +41 -10
- package/dist/accordion/root/accordion-root.d.ts +14 -5
- package/dist/accordion/root/accordion-root.js +7 -1
- package/dist/announcement/root/announcement-root.d.ts +24 -3
- package/dist/announcement/root/announcement-root.js +39 -2
- package/dist/app-header/root/app-header-root.d.ts +12 -0
- package/dist/app-header/root/app-header-root.js +13 -1
- package/dist/app-header/sectioning.d.ts +9 -0
- package/dist/app-header/sectioning.js +27 -0
- package/dist/avatar/group/avatar-group.d.ts +20 -14
- package/dist/avatar/group/avatar-group.js +17 -19
- package/dist/badge/root/badge-root.d.ts +3 -1
- package/dist/badge/root/badge-root.js +2 -2
- package/dist/bar-chart/root/bar-chart-root.d.ts +18 -1
- package/dist/bar-chart/root/bar-chart-root.js +52 -15
- package/dist/bar-chart/stack.d.ts +15 -0
- package/dist/bar-chart/stack.js +19 -0
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +57 -1
- package/dist/breadcrumbs/root/breadcrumbs-root.js +73 -3
- package/dist/button/root/button-root.d.ts +26 -0
- package/dist/button/root/button-root.js +38 -18
- 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.d.ts +38 -3
- package/dist/canvas/root/canvas-root.js +123 -42
- package/dist/card/root/card-root.d.ts +24 -3
- package/dist/card/root/card-root.js +20 -8
- package/dist/carousel/root/carousel-root.d.ts +133 -4
- package/dist/carousel/root/carousel-root.js +174 -24
- package/dist/carousel/stops.d.ts +20 -0
- package/dist/carousel/stops.js +30 -0
- package/dist/chat/composer/chat-composer.d.ts +38 -6
- package/dist/chat/composer/chat-composer.js +42 -9
- package/dist/chat/message/chat-message.d.ts +32 -1
- package/dist/chat/message/chat-message.js +27 -10
- package/dist/chat/naming.d.ts +26 -0
- package/dist/chat/naming.js +14 -0
- package/dist/chat/root/chat-root.d.ts +58 -0
- package/dist/chat/root/chat-root.js +43 -3
- package/dist/checkbox/root/checkbox-root.d.ts +20 -0
- package/dist/checkbox/root/checkbox-root.js +14 -1
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +8 -2
- package/dist/checkbox-group/root/checkbox-group-root.js +12 -10
- package/dist/checkbox-group/select-all.d.ts +27 -0
- package/dist/checkbox-group/select-all.js +12 -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 +57 -2
- package/dist/code-block/root/code-block-root.js +63 -8
- package/dist/color-input/root/color-input-root.d.ts +3 -0
- package/dist/color-input/root/color-input-root.js +6 -3
- package/dist/color-picker/root/color-picker-root.d.ts +33 -4
- package/dist/color-picker/root/color-picker-root.js +80 -21
- package/dist/color-picker/swatches.d.ts +12 -0
- package/dist/color-picker/swatches.js +26 -0
- package/dist/combobox/root/combobox-root.d.ts +43 -0
- package/dist/combobox/root/combobox-root.js +79 -15
- package/dist/command/root/command-root.d.ts +16 -1
- package/dist/command/root/command-root.js +22 -4
- package/dist/copy-button/root/copy-button-root.d.ts +26 -1
- package/dist/copy-button/root/copy-button-root.js +12 -5
- package/dist/data-table/index.d.ts +1 -1
- package/dist/data-table/index.js +1 -1
- package/dist/data-table/keys.d.ts +24 -0
- package/dist/data-table/keys.js +24 -0
- package/dist/data-table/root/data-table-root.d.ts +170 -13
- package/dist/data-table/root/data-table-root.js +294 -52
- package/dist/data-table/tree.d.ts +55 -0
- package/dist/data-table/tree.js +54 -0
- package/dist/date-input/root/date-input-root.d.ts +3 -1
- package/dist/date-input/root/date-input-root.js +18 -7
- package/dist/date-picker/root/date-picker-root.js +12 -6
- package/dist/description-list/item/description-list-item.d.ts +17 -2
- package/dist/description-list/item/description-list-item.js +15 -2
- package/dist/description-list/root/description-list-root.d.ts +27 -1
- package/dist/description-list/root/description-list-root.js +26 -1
- 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 +48 -1
- package/dist/drawer/reveal.d.ts +8 -0
- package/dist/drawer/reveal.js +1 -0
- package/dist/drawer/root/drawer-root.d.ts +59 -0
- package/dist/drawer/root/drawer-root.js +63 -4
- package/dist/drilldown/item/drilldown-item.d.ts +11 -6
- package/dist/drilldown/item/drilldown-item.js +8 -5
- package/dist/drilldown/root/drilldown-root.d.ts +29 -0
- package/dist/drilldown/root/drilldown-root.js +28 -5
- package/dist/element-events.generated.js +83 -12
- package/dist/empty/root/empty-root.d.ts +3 -1
- package/dist/empty/root/empty-root.js +3 -2
- package/dist/file-input/root/file-input-root.d.ts +69 -6
- package/dist/file-input/root/file-input-root.js +82 -19
- package/dist/file-input/screen.d.ts +2 -1
- package/dist/filter-input/menu/filter-menu.d.ts +5 -0
- package/dist/filter-input/menu/filter-menu.js +16 -4
- package/dist/filter-input/root/filter-input-root.d.ts +30 -6
- package/dist/filter-input/root/filter-input-root.js +1 -1
- package/dist/filter-input/suggest.d.ts +28 -3
- package/dist/filter-input/suggest.js +18 -8
- package/dist/format-date/root/format-date-root.d.ts +9 -16
- package/dist/format-date/root/format-date-root.js +10 -27
- package/dist/heatmap/root/heatmap-root.d.ts +24 -13
- package/dist/heatmap/root/heatmap-root.js +34 -12
- package/dist/icon/root/icon-root.d.ts +12 -1
- package/dist/icon/root/icon-root.js +21 -10
- 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 +5 -1
- package/dist/image/root/image-root.js +10 -2
- package/dist/input/root/input-root.d.ts +13 -3
- package/dist/input/root/input-root.js +12 -3
- package/dist/kbd/root/kbd-root.d.ts +35 -1
- package/dist/kbd/root/kbd-root.js +23 -4
- package/dist/legend/root/legend-root.d.ts +55 -8
- package/dist/legend/root/legend-root.js +55 -13
- package/dist/lightbox/root/lightbox-root.d.ts +49 -6
- package/dist/lightbox/root/lightbox-root.js +86 -19
- package/dist/lightbox/zoom-controller.d.ts +59 -0
- package/dist/lightbox/zoom-controller.js +128 -0
- package/dist/lightbox/zoom.d.ts +22 -0
- package/dist/lightbox/zoom.js +16 -0
- package/dist/line-chart/root/line-chart-root.d.ts +22 -1
- package/dist/line-chart/root/line-chart-root.js +21 -1
- package/dist/list/item/list-item.d.ts +70 -1
- package/dist/list/item/list-item.js +77 -6
- package/dist/list/numbering.d.ts +14 -0
- package/dist/list/numbering.js +8 -0
- package/dist/list/root/list-root.d.ts +155 -9
- package/dist/list/root/list-root.js +246 -4
- package/dist/list/selection.d.ts +49 -0
- package/dist/list/selection.js +30 -0
- package/dist/listbox/root/listbox-root.d.ts +37 -1
- package/dist/listbox/root/listbox-root.js +49 -4
- 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/map/root/map-root.d.ts +6 -2
- package/dist/map/root/map-root.js +5 -2
- package/dist/megamenu/root/megamenu-root.d.ts +62 -0
- package/dist/megamenu/root/megamenu-root.js +90 -5
- package/dist/menu/index.d.ts +1 -0
- package/dist/menu/index.js +1 -0
- package/dist/menu/item/menu-item.d.ts +87 -11
- package/dist/menu/item/menu-item.js +78 -22
- package/dist/menu/root/menu-root.d.ts +39 -1
- package/dist/menu/root/menu-root.js +65 -8
- package/dist/menu/section/menu-section.d.ts +55 -0
- package/dist/menu/section/menu-section.js +60 -0
- package/dist/meter/root/meter-root.d.ts +20 -1
- package/dist/meter/root/meter-root.js +11 -15
- package/dist/navigation/root/navigation-root.d.ts +18 -2
- package/dist/navigation/root/navigation-root.js +29 -3
- package/dist/notifications/root/notifications-root.d.ts +25 -0
- package/dist/notifications/root/notifications-root.js +33 -5
- package/dist/number-input/root/number-input-root.d.ts +17 -8
- package/dist/number-input/root/number-input-root.js +2 -7
- package/dist/object-inspector/root/object-inspector-root.d.ts +161 -32
- package/dist/object-inspector/root/object-inspector-root.js +264 -123
- package/dist/object-inspector/rows.d.ts +75 -0
- package/dist/object-inspector/rows.js +119 -0
- package/dist/option/root/option-root.d.ts +5 -3
- package/dist/outline/levels.d.ts +31 -0
- package/dist/outline/levels.js +23 -0
- package/dist/outline/root/outline-root.d.ts +86 -3
- package/dist/outline/root/outline-root.js +95 -12
- package/dist/pagination/size/pagination-size.d.ts +12 -2
- package/dist/pagination/size/pagination-size.js +20 -5
- package/dist/pin-input/code.d.ts +10 -0
- package/dist/pin-input/code.js +13 -0
- package/dist/pin-input/root/pin-input-root.d.ts +25 -1
- package/dist/pin-input/root/pin-input-root.js +10 -11
- package/dist/popover/hide-outside.d.ts +14 -0
- package/dist/popover/hide-outside.js +41 -0
- package/dist/popover/root/popover-root.d.ts +57 -7
- package/dist/popover/root/popover-root.js +58 -3
- package/dist/progress/root/progress-root.d.ts +20 -0
- package/dist/progress/root/progress-root.js +15 -15
- package/dist/qr-code/export.d.ts +26 -1
- package/dist/qr-code/export.js +14 -0
- package/dist/qr-code/root/qr-code-root.d.ts +19 -5
- package/dist/qr-code/root/qr-code-root.js +58 -9
- 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 +4 -10
- package/dist/radio/group/radio-group.js +5 -10
- package/dist/radio/root/radio-root.d.ts +6 -2
- package/dist/radio/root/radio-root.js +6 -1
- package/dist/rating/root/rating-root.d.ts +10 -5
- package/dist/rating/root/rating-root.js +32 -8
- package/dist/rating/steps.d.ts +7 -0
- package/dist/rating/steps.js +9 -0
- 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 +21 -1
- package/dist/scatter-chart/root/scatter-chart-root.js +30 -17
- package/dist/scroll-area/root/scroll-area-root.d.ts +84 -0
- package/dist/scroll-area/root/scroll-area-root.js +106 -7
- 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 +92 -0
- package/dist/scroll-area/scrollbar.js +33 -0
- package/dist/select/root/select-root.d.ts +15 -0
- package/dist/select/root/select-root.js +18 -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 +41 -4
- package/dist/slider/root/slider-root.js +23 -3
- package/dist/sparkline/readings.d.ts +18 -0
- package/dist/sparkline/readings.js +19 -0
- package/dist/sparkline/root/sparkline-root.d.ts +78 -7
- package/dist/sparkline/root/sparkline-root.js +118 -23
- package/dist/speed-dial/root/speed-dial-root.js +2 -2
- package/dist/splitter/root/splitter-root.d.ts +20 -12
- package/dist/splitter/root/splitter-root.js +226 -203
- package/dist/splitter/snap.d.ts +9 -0
- package/dist/splitter/snap.js +12 -0
- 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 +20 -0
- package/dist/steps/reach.js +15 -0
- package/dist/steps/root/steps-root.d.ts +76 -0
- package/dist/steps/root/steps-root.js +93 -1
- package/dist/steps/step/step.d.ts +45 -2
- package/dist/steps/step/step.js +33 -6
- package/dist/switch/root/switch-root.d.ts +10 -0
- package/dist/table/column/table-column.d.ts +11 -10
- package/dist/table/column/table-column.js +8 -19
- package/dist/table/root/table-root.d.ts +126 -4
- package/dist/table/root/table-root.js +156 -6
- package/dist/table/row/table-row.d.ts +47 -1
- package/dist/table/row/table-row.js +39 -2
- package/dist/tabs/panel/tab-panel.d.ts +22 -5
- package/dist/tabs/panel/tab-panel.js +34 -6
- package/dist/tabs/root/tabs-root.d.ts +37 -1
- package/dist/tabs/root/tabs-root.js +22 -4
- package/dist/tabs/tab/tab.d.ts +41 -4
- package/dist/tabs/tab/tab.js +49 -3
- package/dist/tag/group/tag-group.d.ts +31 -4
- package/dist/tag/group/tag-group.js +46 -7
- package/dist/tag/root/tag-root.js +9 -2
- package/dist/textarea/root/textarea-root.d.ts +28 -1
- package/dist/textarea/root/textarea-root.js +40 -1
- package/dist/time-input/root/time-input-root.d.ts +5 -1
- package/dist/time-input/root/time-input-root.js +16 -8
- package/dist/time-picker/root/time-picker-root.d.ts +18 -4
- package/dist/time-picker/root/time-picker-root.js +7 -10
- 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.d.ts +46 -0
- package/dist/timeline/group/timeline-group.js +37 -0
- package/dist/timeline/index.d.ts +1 -0
- package/dist/timeline/index.js +1 -0
- package/dist/timeline/root/timeline-root.d.ts +10 -3
- package/dist/toast/item/toast-item.d.ts +24 -18
- package/dist/toast/item/toast-item.js +36 -40
- package/dist/toast/root/toast-root.d.ts +6 -0
- package/dist/toast/root/toast-root.js +16 -1
- package/dist/toggle/group/toggle-group.d.ts +24 -3
- package/dist/toggle/group/toggle-group.js +34 -5
- package/dist/toolbar/root/toolbar-root.d.ts +13 -0
- package/dist/toolbar/root/toolbar-root.js +15 -5
- package/dist/tooltip/root/tooltip-root.d.ts +13 -2
- package/dist/tooltip/root/tooltip-root.js +9 -1
- package/dist/tour/back.d.ts +10 -0
- package/dist/tour/back.js +8 -0
- package/dist/tour/root/tour-root.d.ts +30 -2
- package/dist/tour/root/tour-root.js +34 -8
- package/dist/tree/item/tree-item.d.ts +61 -4
- package/dist/tree/item/tree-item.js +92 -20
- package/dist/tree/root/tree-root.d.ts +58 -0
- package/dist/tree/root/tree-root.js +80 -16
- package/dist/tree/selection.d.ts +24 -0
- package/dist/tree/selection.js +13 -0
- package/dist/trend/root/trend-root.d.ts +43 -18
- package/dist/trend/root/trend-root.js +31 -6
- package/dist/video/media-events.d.ts +44 -0
- package/dist/video/media-events.js +35 -0
- package/dist/video/root/video-root.d.ts +117 -18
- package/dist/video/root/video-root.js +93 -47
- 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/order.d.ts +41 -0
- package/dist/video-playlist/order.js +34 -0
- package/dist/video-playlist/root/video-playlist-root.d.ts +77 -3
- package/dist/video-playlist/root/video-playlist-root.js +60 -16
- package/dist/virtual-list/controls.d.ts +4 -0
- package/dist/virtual-list/controls.js +30 -0
- package/dist/virtual-list/fill.d.ts +22 -0
- package/dist/virtual-list/fill.js +23 -0
- package/dist/virtual-list/keys.d.ts +15 -0
- package/dist/virtual-list/keys.js +24 -0
- package/dist/virtual-list/plan.d.ts +49 -0
- package/dist/virtual-list/plan.js +16 -0
- package/dist/virtual-list/root/virtual-list-root.d.ts +259 -26
- package/dist/virtual-list/root/virtual-list-root.js +333 -49
- package/lint.json +1 -1
- package/package.json +8 -8
- package/types/jsx.d.ts +8113 -1394
- package/types/svelte.d.ts +2 -0
- package/types/vue.d.ts +1678 -353
- package/dist/data-table/root/order.d.ts +0 -141
- package/dist/data-table/root/order.js +0 -76
- package/dist/listbox/range.d.ts +0 -17
- package/dist/listbox/range.js +0 -5
- package/dist/tag/selection.d.ts +0 -10
- package/dist/tag/selection.js +0 -12
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
import { HelixElement } from '@fusion.dev/helix-core';
|
|
2
|
-
import { type TemplateResult } from 'lit';
|
|
2
|
+
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
/**
|
|
4
4
|
* @summary An indicator that shows which way a measurement moved, and whether the change is good.
|
|
5
5
|
*
|
|
6
6
|
* @description
|
|
7
|
-
* A trend has three parts: a
|
|
8
|
-
* moved, and a label for the period it moved over. The arrow shows the
|
|
9
|
-
*
|
|
7
|
+
* A trend has three parts: a `movement` of up, down, or neutral, the metric
|
|
8
|
+
* that moved, and a label for the period it moved over. The arrow shows the
|
|
9
|
+
* movement and its color shows whether the change is good. Movement and
|
|
10
10
|
* judgment are separate properties because they are separate facts.
|
|
11
11
|
*
|
|
12
12
|
* `good` is unset by default, so a trend with no judgment is gray. For churn,
|
|
13
13
|
* latency, error rate, cost, and bounce rate, up is bad. Set the metric's
|
|
14
14
|
* polarity once with `good`, and the component picks the color from the
|
|
15
|
-
*
|
|
15
|
+
* movement. The judgment is also a custom state, `better` or `worse`, for a
|
|
16
|
+
* sheet of your own.
|
|
16
17
|
*
|
|
17
|
-
* The
|
|
18
|
+
* The movement is also written as a word, so a screen reader reads it. The
|
|
18
19
|
* styled tier hides `part="direction"` visually and keeps it in the
|
|
19
20
|
* accessibility tree. The words are properties, `up-label` through
|
|
20
|
-
* `worse-label`, so a page in another language can set its own.
|
|
21
|
+
* `worse-label`, so a page in another language can set its own. The arrow and
|
|
22
|
+
* any glyph slotted in its place are hidden from screen readers.
|
|
23
|
+
*
|
|
24
|
+
* Slot one glyph per movement into `up-icon`, `down-icon` and `neutral-icon`,
|
|
25
|
+
* and the trend shows the one that matches; a glyph in `icon` stands in for
|
|
26
|
+
* all three. Inside a `Stat`, put the trend in the stat's `trend` slot so it is
|
|
27
|
+
* read with the figure it qualifies.
|
|
21
28
|
*
|
|
22
29
|
* The metric and the label are bare slots. An element that assigned its own
|
|
23
30
|
* slot on connect would add an attribute to its host after upgrade, which the
|
|
@@ -30,11 +37,17 @@ import { type TemplateResult } from 'lit';
|
|
|
30
37
|
* @documentation https://fusion.dev/helix/components/trend
|
|
31
38
|
*
|
|
32
39
|
* @slot - The metric that moved.
|
|
33
|
-
* @slot icon - Replaces the arrow
|
|
40
|
+
* @slot down-icon - Replaces the arrow while `movement` is `down`. Hidden from screen readers.
|
|
41
|
+
* @slot icon - Replaces the arrow for every movement, such as with a glyph of your own set. Hidden from screen readers, since the movement is also a word.
|
|
34
42
|
* @slot label - The period the metric moved over.
|
|
43
|
+
* @slot neutral-icon - Replaces the bar while the trend has not moved. Hidden from screen readers.
|
|
44
|
+
* @slot up-icon - Replaces the arrow while `movement` is `up`. Hidden from screen readers.
|
|
35
45
|
*
|
|
36
|
-
* @csspart direction - The
|
|
46
|
+
* @csspart direction - The movement as a word, for people who cannot see the arrow.
|
|
37
47
|
* @csspart icon - The arrow.
|
|
48
|
+
*
|
|
49
|
+
* @cssstate better - The trend moved the way `good` names.
|
|
50
|
+
* @cssstate worse - The trend moved against the way `good` names.
|
|
38
51
|
*/
|
|
39
52
|
export declare class HelixHeadlessTrend extends HelixElement {
|
|
40
53
|
/**
|
|
@@ -42,14 +55,11 @@ export declare class HelixHeadlessTrend extends HelixElement {
|
|
|
42
55
|
*/
|
|
43
56
|
betterLabel: string;
|
|
44
57
|
/**
|
|
45
|
-
* Which way the measurement moved.
|
|
58
|
+
* Which way the measurement moved, as `movement` says it.
|
|
46
59
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* `
|
|
50
|
-
* attribute onto the host the moment the element upgrades, and the host is
|
|
51
|
-
* markup the consumer rendered, which React compares against what it rendered
|
|
52
|
-
* and reports as a hydration mismatch.
|
|
60
|
+
* @deprecated Use `movement`. `direction` is a layout on `Stat` and `Flex`,
|
|
61
|
+
* which are written beside a trend, so one word meant two things. Still read
|
|
62
|
+
* when `movement` is absent.
|
|
53
63
|
*/
|
|
54
64
|
direction?: 'down' | 'neutral' | 'up';
|
|
55
65
|
/**
|
|
@@ -57,14 +67,24 @@ export declare class HelixHeadlessTrend extends HelixElement {
|
|
|
57
67
|
*/
|
|
58
68
|
downLabel: string;
|
|
59
69
|
/**
|
|
60
|
-
* Which
|
|
70
|
+
* Which movement counts as an improvement for this metric.
|
|
61
71
|
*
|
|
62
72
|
* Absent states the movement without judging it, which is the honest default:
|
|
63
73
|
* revenue up is good news and latency up is bad news, and only the consumer
|
|
64
74
|
* knows which one this is. Set it once per metric and it holds while the
|
|
65
|
-
*
|
|
75
|
+
* movement changes underneath.
|
|
66
76
|
*/
|
|
67
77
|
good?: 'down' | 'up';
|
|
78
|
+
/**
|
|
79
|
+
* Which way the measurement moved.
|
|
80
|
+
*
|
|
81
|
+
* Absent is neutral, so a trend with nothing to report draws a bar rather
|
|
82
|
+
* than picking a direction. Optional rather than defaulted: a reflecting
|
|
83
|
+
* property with a default writes its attribute onto the host the moment the
|
|
84
|
+
* element upgrades, and the host is markup the consumer rendered, which React
|
|
85
|
+
* compares against what it rendered and reports as a hydration mismatch.
|
|
86
|
+
*/
|
|
87
|
+
movement?: 'down' | 'neutral' | 'up';
|
|
68
88
|
/**
|
|
69
89
|
* The word read out for no move, or for a direction that is not one of the
|
|
70
90
|
* three.
|
|
@@ -90,6 +110,11 @@ export declare class HelixHeadlessTrend extends HelixElement {
|
|
|
90
110
|
content: string;
|
|
91
111
|
viewBox: string;
|
|
92
112
|
}): TemplateResult;
|
|
113
|
+
/** The movement, read from `movement` and then from the old `direction`. */
|
|
114
|
+
private get moved();
|
|
115
|
+
/** Better or worse, or neither when `good` is unset or nothing moved. */
|
|
116
|
+
private get judged();
|
|
117
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
93
118
|
protected render(): TemplateResult;
|
|
94
119
|
}
|
|
95
120
|
declare global {
|
|
@@ -25,7 +25,7 @@ let HelixHeadlessTrend = class HelixHeadlessTrend extends HelixElement {
|
|
|
25
25
|
this.worseLabel = 'worse';
|
|
26
26
|
}
|
|
27
27
|
renderIcon(icon) {
|
|
28
|
-
return html `<slot name="icon"
|
|
28
|
+
return html `<slot aria-hidden="true" name="icon"
|
|
29
29
|
><svg
|
|
30
30
|
aria-hidden="true"
|
|
31
31
|
data-glyph
|
|
@@ -37,12 +37,34 @@ let HelixHeadlessTrend = class HelixHeadlessTrend extends HelixElement {
|
|
|
37
37
|
</svg></slot
|
|
38
38
|
>`;
|
|
39
39
|
}
|
|
40
|
+
get moved() {
|
|
41
|
+
return this.movement ?? this.direction;
|
|
42
|
+
}
|
|
43
|
+
get judged() {
|
|
44
|
+
const moved = this.moved;
|
|
45
|
+
if (!this.good || !moved || !(moved in DIRECTIONS) || moved === 'neutral') {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
return this.good === moved ? 'better' : 'worse';
|
|
49
|
+
}
|
|
50
|
+
willUpdate(changed) {
|
|
51
|
+
super.willUpdate(changed);
|
|
52
|
+
const judged = this.judged;
|
|
53
|
+
this.toggleState('better', judged === 'better');
|
|
54
|
+
this.toggleState('worse', judged === 'worse');
|
|
55
|
+
}
|
|
40
56
|
render() {
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
57
|
+
const moved = this.moved;
|
|
58
|
+
const direction = readDirection(moved);
|
|
59
|
+
const judged = this.judged;
|
|
60
|
+
const judgment = judged ? `, ${judged === 'better' ? this.betterLabel : this.worseLabel}` : '';
|
|
61
|
+
const icon = this.renderIcon(direction.icon);
|
|
62
|
+
const glyph = moved === 'up'
|
|
63
|
+
? html `<slot aria-hidden="true" name="up-icon">${icon}</slot>`
|
|
64
|
+
: moved === 'down'
|
|
65
|
+
? html `<slot aria-hidden="true" name="down-icon">${icon}</slot>`
|
|
66
|
+
: html `<slot aria-hidden="true" name="neutral-icon">${icon}</slot>`;
|
|
67
|
+
return html `${glyph}
|
|
46
68
|
<span part="direction">${`${this[direction.word]}${judgment}`}</span>
|
|
47
69
|
<slot></slot>
|
|
48
70
|
<slot name="label"></slot>`;
|
|
@@ -60,6 +82,9 @@ __decorate([
|
|
|
60
82
|
__decorate([
|
|
61
83
|
property({ reflect: true })
|
|
62
84
|
], HelixHeadlessTrend.prototype, "good", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
property({ reflect: true })
|
|
87
|
+
], HelixHeadlessTrend.prototype, "movement", void 0);
|
|
63
88
|
__decorate([
|
|
64
89
|
property({ attribute: 'unchanged-label' })
|
|
65
90
|
], HelixHeadlessTrend.prototype, "unchangedLabel", void 0);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The media events a player sends on from its inner `<video>`, and how.
|
|
3
|
+
*
|
|
4
|
+
* Separable because the set is a decision about the platform, and nothing in it
|
|
5
|
+
* draws. It is the HTML standard's own summary of the events a media element
|
|
6
|
+
* fires, every one of them, so a consumer who listened on a `<video>` listens
|
|
7
|
+
* on the player with the same names and hears the same things. A shorter list
|
|
8
|
+
* would be one more list for a consumer to learn.
|
|
9
|
+
*
|
|
10
|
+
* None of these crosses a shadow boundary on its own. The video is inside the
|
|
11
|
+
* player's shadow root, so a listener on the element a consumer wrote hears
|
|
12
|
+
* nothing at all without the relay.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Every event a media element fires, by the standard's names, sorted.
|
|
16
|
+
*
|
|
17
|
+
* `resize` is on the list because the standard puts it there: it fires when the
|
|
18
|
+
* video's own width or height changes, which is the moment a consumer sizing
|
|
19
|
+
* something to the picture needs.
|
|
20
|
+
*/
|
|
21
|
+
export declare const MEDIA_EVENTS: readonly ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'resize', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting'];
|
|
22
|
+
/** One of the media events the player relays. */
|
|
23
|
+
export type MediaEventName = (typeof MEDIA_EVENTS)[number];
|
|
24
|
+
/**
|
|
25
|
+
* Hands each media event the video fires to `relay`, and returns what stops
|
|
26
|
+
* it. The player relays through `relayNativeEvent`, which sends the same name
|
|
27
|
+
* with the same `bubbles`, `cancelable` and `composed`.
|
|
28
|
+
*
|
|
29
|
+
* **As the platform sends it, neither bubbling nor composed, which is what
|
|
30
|
+
* makes it reach a React consumer at all.** These names are in react-dom's
|
|
31
|
+
* `nonDelegatedEvents`, which React wires on a `<video>` and never on a custom
|
|
32
|
+
* element, so its root listener hears none of them. `bindReactHandler` closes
|
|
33
|
+
* that for an event that does not bubble, and skips one that does, on the
|
|
34
|
+
* grounds that a bubbling relay already reaches React's delegated listener and
|
|
35
|
+
* binding it again would double every call. A copy sent with `bubbles: true`
|
|
36
|
+
* would land in the branch that refuses to bind, and `onPlay` on the player
|
|
37
|
+
* would be silent.
|
|
38
|
+
*
|
|
39
|
+
* Bound once, after the first render, so the player's own listeners in its
|
|
40
|
+
* template are ahead of it on the same video: what a consumer reads off the
|
|
41
|
+
* player in a handler (`paused`, `volume`, `currentTime`) is already the
|
|
42
|
+
* player's state by the time the copy reaches them.
|
|
43
|
+
*/
|
|
44
|
+
export declare const relayMedia: (video: EventTarget, relay: (event: Event) => void) => (() => void);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const MEDIA_EVENTS = [
|
|
2
|
+
'abort',
|
|
3
|
+
'canplay',
|
|
4
|
+
'canplaythrough',
|
|
5
|
+
'durationchange',
|
|
6
|
+
'emptied',
|
|
7
|
+
'ended',
|
|
8
|
+
'error',
|
|
9
|
+
'loadeddata',
|
|
10
|
+
'loadedmetadata',
|
|
11
|
+
'loadstart',
|
|
12
|
+
'pause',
|
|
13
|
+
'play',
|
|
14
|
+
'playing',
|
|
15
|
+
'progress',
|
|
16
|
+
'ratechange',
|
|
17
|
+
'resize',
|
|
18
|
+
'seeked',
|
|
19
|
+
'seeking',
|
|
20
|
+
'stalled',
|
|
21
|
+
'suspend',
|
|
22
|
+
'timeupdate',
|
|
23
|
+
'volumechange',
|
|
24
|
+
'waiting',
|
|
25
|
+
];
|
|
26
|
+
export const relayMedia = (video, relay) => {
|
|
27
|
+
for (const name of MEDIA_EVENTS) {
|
|
28
|
+
video.addEventListener(name, relay);
|
|
29
|
+
}
|
|
30
|
+
return () => {
|
|
31
|
+
for (const name of MEDIA_EVENTS) {
|
|
32
|
+
video.removeEventListener(name, relay);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
};
|
|
@@ -17,11 +17,22 @@ import '../../menu/index.js';
|
|
|
17
17
|
* not drawn, and the keys below are not bound, so a key press does not seek
|
|
18
18
|
* twice.
|
|
19
19
|
*
|
|
20
|
-
* The keys match other players, and they are bound on the
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
20
|
+
* **Keyboard.** The keys match other players, and they are bound on the
|
|
21
|
+
* element only, so they work while focus is on the player.
|
|
22
|
+
*
|
|
23
|
+
* | Key | What it does |
|
|
24
|
+
* |---|---|
|
|
25
|
+
* | Space, `k` | Plays or pauses. Space on a button presses the button. |
|
|
26
|
+
* | Right, Left | Moves 5 seconds forward or back. |
|
|
27
|
+
* | Shift with Right or Left | Moves 10 seconds forward or back. |
|
|
28
|
+
* | `l`, `j` | Moves 10 seconds forward or back, as the skip buttons do. |
|
|
29
|
+
* | Up, Down | Raises or lowers the volume by a tenth. |
|
|
30
|
+
* | `m` | Mutes or unmutes. |
|
|
31
|
+
* | `f` | Enters or leaves fullscreen. |
|
|
32
|
+
* | Tab | Moves through the controls on the bar. |
|
|
33
|
+
*
|
|
34
|
+
* On the scrubber and the volume slider, the arrow keys, Page Up, Page Down,
|
|
35
|
+
* Home, and End move the slider, as on any range input.
|
|
25
36
|
*
|
|
26
37
|
* `<source>` and `<track>` children are copied into the video. A media element
|
|
27
38
|
* selects resources from its own child nodes, and a slot is one node, so
|
|
@@ -29,6 +40,11 @@ import '../../menu/index.js';
|
|
|
29
40
|
* `readyState` of zero, and it would not play. They are copied so your light
|
|
30
41
|
* DOM stays intact, and are copied again whenever the slot changes.
|
|
31
42
|
*
|
|
43
|
+
* The player sends every media event of its inner video under the same name,
|
|
44
|
+
* without bubbling, as a `<video>` sends it. Listen on the player as you would
|
|
45
|
+
* on a video: `timeupdate`, `volumechange`, `loadedmetadata`, `error`, and the
|
|
46
|
+
* rest.
|
|
47
|
+
*
|
|
32
48
|
* @since 0.1.0
|
|
33
49
|
* @status stable
|
|
34
50
|
* @category media
|
|
@@ -36,15 +52,52 @@ import '../../menu/index.js';
|
|
|
36
52
|
* @documentation https://fusion.dev/helix/components/video
|
|
37
53
|
*
|
|
38
54
|
* @slot - `<source>` and `<track>` elements, which are copied into the video.
|
|
55
|
+
* @slot captions-icon - Replaces the glyph on the captions control.
|
|
39
56
|
* @slot controls - Extra controls, added to the control bar before the fullscreen button.
|
|
57
|
+
* @slot download-icon - Replaces the glyph on the download control, on the bar or in the `overflow` menu.
|
|
58
|
+
* @slot exit-fullscreen-icon - Replaces the glyph on the fullscreen control while the player fills the screen.
|
|
59
|
+
* @slot forward-icon - Replaces the glyph on the control that skips forward, on the bar or in the `overflow` menu.
|
|
60
|
+
* @slot fullscreen-icon - Replaces the glyph on the fullscreen control.
|
|
40
61
|
* @slot header - Content over the top left of the picture, such as a heading and a back button.
|
|
62
|
+
* @slot more-icon - Replaces the glyph on the button that opens the `overflow` menu.
|
|
63
|
+
* @slot mute-icon - Replaces the glyph on the mute control while there is no sound.
|
|
64
|
+
* @slot next-icon - Replaces the glyph on the control that asks for the next video, on the bar or in the `overflow` menu.
|
|
65
|
+
* @slot pause-icon - Replaces the glyph on the play control while the video plays.
|
|
66
|
+
* @slot pip-icon - Replaces the glyph on the picture-in-picture control, on the bar or in the `overflow` menu.
|
|
67
|
+
* @slot play-icon - Replaces the glyph on the play control while the video is paused.
|
|
41
68
|
* @slot poster - Shown over the video until it starts.
|
|
69
|
+
* @slot previous-icon - Replaces the glyph on the control that asks for the previous video, on the bar or in the `overflow` menu.
|
|
70
|
+
* @slot remote-icon - Replaces the glyph on the control that plays on another device, on the bar or in the `overflow` menu.
|
|
71
|
+
* @slot rewind-icon - Replaces the glyph on the control that skips back, on the bar or in the `overflow` menu.
|
|
72
|
+
* @slot speed-icon - Replaces the glyph beside the playback speed in the `overflow` menu. On the bar, the speed is shown as a number.
|
|
73
|
+
* @slot start-icon - Replaces the glyph on the large play button over the picture.
|
|
74
|
+
* @slot volume-icon - Replaces the glyph on the mute control while there is sound.
|
|
42
75
|
*
|
|
43
|
-
* @event {Event}
|
|
76
|
+
* @event {Event} abort - The media stopped loading before it finished, without an error.
|
|
77
|
+
* @event {Event} canplay - Enough has loaded to start playing.
|
|
78
|
+
* @event {Event} canplaythrough - Enough has loaded to play to the end without stopping, at the current rate.
|
|
79
|
+
* @event {Event} durationchange - The duration changed, which it does once the metadata is in.
|
|
80
|
+
* @event {Event} emptied - The media was reset, as when `src` changes.
|
|
81
|
+
* @event {Event} ended - The video reached its end.
|
|
82
|
+
* @event {Event} error - The source could not be loaded or played. The player shows `error-label` as well.
|
|
44
83
|
* @event {HelixNextEvent} helix-next - The next video was requested. Load it in response.
|
|
45
84
|
* @event {HelixPreviousEvent} helix-previous - The previous video was requested. Load it in response.
|
|
46
|
-
* @event {Event}
|
|
47
|
-
* @event {Event}
|
|
85
|
+
* @event {Event} loadeddata - The frame at the current position has loaded.
|
|
86
|
+
* @event {Event} loadedmetadata - The duration and the size of the video are known.
|
|
87
|
+
* @event {Event} loadstart - The video started looking for its media.
|
|
88
|
+
* @event {Event} pause - Playback paused.
|
|
89
|
+
* @event {Event} play - Playback was asked to start.
|
|
90
|
+
* @event {Event} playing - Playback started, or started again after waiting for data.
|
|
91
|
+
* @event {Event} progress - More of the media has downloaded.
|
|
92
|
+
* @event {Event} ratechange - The playback rate changed. Read `playbackRate`.
|
|
93
|
+
* @event {Event} resize - The video's own width or height changed. Read `videoWidth` and `videoHeight`.
|
|
94
|
+
* @event {Event} seeked - A move to a new position finished.
|
|
95
|
+
* @event {Event} seeking - A move to a new position started.
|
|
96
|
+
* @event {Event} stalled - The browser is trying to load more data and none is arriving.
|
|
97
|
+
* @event {Event} suspend - Loading paused on purpose, as when `preload` asks for no more.
|
|
98
|
+
* @event {Event} timeupdate - The position changed. Read `currentTime`.
|
|
99
|
+
* @event {Event} volumechange - The volume or the mute changed. Read `volume` and `muted`.
|
|
100
|
+
* @event {Event} waiting - Playback stopped to wait for more data.
|
|
48
101
|
*
|
|
49
102
|
* @csspart captions - The button that turns captions on and off.
|
|
50
103
|
* @csspart captions-menu - The menu of caption languages, when the video has more than one track.
|
|
@@ -60,8 +113,13 @@ import '../../menu/index.js';
|
|
|
60
113
|
* @csspart cue - The caption currently on screen, drawn by this element.
|
|
61
114
|
* @csspart download - The button that downloads the file, when `extra-controls` includes it.
|
|
62
115
|
* @csspart entry - One row in a menu that the player opens.
|
|
116
|
+
* @csspart entry-end - The trailing column of a row, which holds its shortcut. It is always rendered.
|
|
63
117
|
* @csspart entry-item - The row, which is an `<a>` where `href` is set.
|
|
64
118
|
* @csspart entry-mark - The trailing mark: a check mark when the row is checked, or a caret when it opens a submenu.
|
|
119
|
+
* @csspart entry-shortcut - The key drawn for a row's shortcut. The player's rows set none.
|
|
120
|
+
* @csspart entry-shortcut-kbd - The key inside `entry-shortcut`.
|
|
121
|
+
* @csspart entry-shortcut-key - One key of a row's shortcut chord, inside `entry-shortcut`. The player's rows set none.
|
|
122
|
+
* @csspart entry-shortcut-separator - The `+` between two keys of a row's shortcut, where the platform writes one.
|
|
65
123
|
* @csspart entry-start - The leading column that holds the `start` slot. It is always rendered.
|
|
66
124
|
* @csspart failure - The message shown when the source cannot be played.
|
|
67
125
|
* @csspart forward - The button that skips forward ten seconds.
|
|
@@ -109,10 +167,10 @@ export declare class HelixHeadlessVideo extends HelixElement {
|
|
|
109
167
|
* Whether the video starts playing on its own. Browsers allow this only while
|
|
110
168
|
* it is muted.
|
|
111
169
|
*
|
|
112
|
-
* Forwarded
|
|
113
|
-
* the browser's policy and
|
|
114
|
-
*
|
|
115
|
-
*
|
|
170
|
+
* Forwarded to the video, which decides. Whether an unprompted play is
|
|
171
|
+
* permitted is the browser's policy, and what follows a refused autoplay is a
|
|
172
|
+
* paused player showing its start control, which is the correct thing to be
|
|
173
|
+
* looking at.
|
|
116
174
|
*/
|
|
117
175
|
autoplay: boolean;
|
|
118
176
|
/**
|
|
@@ -282,6 +340,11 @@ export declare class HelixHeadlessVideo extends HelixElement {
|
|
|
282
340
|
* What the control that floats the video over other windows is called.
|
|
283
341
|
*/
|
|
284
342
|
pipLabel: string;
|
|
343
|
+
/**
|
|
344
|
+
* The name of the player when `label` is not set. The player is a group, and
|
|
345
|
+
* this is what a screen reader calls it on arriving.
|
|
346
|
+
*/
|
|
347
|
+
playerLabel: string;
|
|
285
348
|
/**
|
|
286
349
|
* The name of the play control while pressing it would start the video.
|
|
287
350
|
*/
|
|
@@ -340,6 +403,14 @@ export declare class HelixHeadlessVideo extends HelixElement {
|
|
|
340
403
|
* behind a hero, a grid of eight thumbnails, anything where the video is
|
|
341
404
|
* decoration rather than something to start.
|
|
342
405
|
*
|
|
406
|
+
* **It is for the pointer, and the bar's Play is for everyone else.** Both
|
|
407
|
+
* play the video, so a keyboard met two stops called "Play" one after the
|
|
408
|
+
* other and a screen reader read the same button twice. The large one is out
|
|
409
|
+
* of the tab order and hidden from assistive technology while the bar is
|
|
410
|
+
* drawn, which is whenever it is: it shows only while the video is not
|
|
411
|
+
* playing, and the bar does not fade then. A press on it leaves focus on the
|
|
412
|
+
* player, so the keys go on working once it has gone.
|
|
413
|
+
*
|
|
343
414
|
* A value rather than a boolean, so the resting state is the attribute's
|
|
344
415
|
* absence: a boolean defaulting to on would have to be spelled as its own
|
|
345
416
|
* negation.
|
|
@@ -510,14 +581,19 @@ export declare class HelixHeadlessVideo extends HelixElement {
|
|
|
510
581
|
set volume(level: number);
|
|
511
582
|
private get video();
|
|
512
583
|
/**
|
|
513
|
-
* Starts playback,
|
|
584
|
+
* Starts playback, and returns the video's own promise: it settles when
|
|
585
|
+
* playback starts, and rejects when the browser refuses.
|
|
586
|
+
*
|
|
587
|
+
* **A refusal is not reported as an unhandled rejection.** A browser refuses
|
|
588
|
+
* `play()` when nothing the reader did asked for it, and that is a policy
|
|
589
|
+
* answer: what follows is a paused player showing its start control. So the
|
|
590
|
+
* promise is marked handled here, and a caller who awaits it still hears the
|
|
591
|
+
* refusal.
|
|
514
592
|
*
|
|
515
|
-
*
|
|
516
|
-
*
|
|
517
|
-
* a fault. What follows a refused play is a paused player showing its start
|
|
518
|
-
* control, which is the correct thing to be looking at.
|
|
593
|
+
* Before the first render there is no video yet, and the promise waits for
|
|
594
|
+
* one.
|
|
519
595
|
*/
|
|
520
|
-
play(): void
|
|
596
|
+
play(): Promise<void>;
|
|
521
597
|
/** Pauses playback and leaves the current frame showing. */
|
|
522
598
|
pause(): void;
|
|
523
599
|
/**
|
|
@@ -645,6 +721,16 @@ export declare class HelixHeadlessVideo extends HelixElement {
|
|
|
645
721
|
* mouse left resting until the bar faded.
|
|
646
722
|
*/
|
|
647
723
|
private readonly handlePicture;
|
|
724
|
+
/**
|
|
725
|
+
* A press on the large play button plays, and leaves focus on the player.
|
|
726
|
+
*
|
|
727
|
+
* The button takes focus from the press and is gone once the video plays,
|
|
728
|
+
* which drops focus to the page, and the keys bound to the player stop
|
|
729
|
+
* answering. Moved to the stage first, they keep working. The press came from
|
|
730
|
+
* a pointer, the button being out of the tab order, so the stage draws no
|
|
731
|
+
* ring for it.
|
|
732
|
+
*/
|
|
733
|
+
private readonly handleStart;
|
|
648
734
|
/**
|
|
649
735
|
* The keys every player uses, bound to this element rather than the document.
|
|
650
736
|
*
|
|
@@ -716,6 +802,19 @@ export declare class HelixHeadlessVideo extends HelixElement {
|
|
|
716
802
|
private heardMenu;
|
|
717
803
|
protected renderOverflowItem(one: string): TemplateResult;
|
|
718
804
|
protected renderBar(): TemplateResult;
|
|
805
|
+
/**
|
|
806
|
+
* The large play button over the picture, or nothing.
|
|
807
|
+
*
|
|
808
|
+
* Drawn whenever the video is not playing, which is what the mark means:
|
|
809
|
+
* press this to play. Not only before the first play, which would make the
|
|
810
|
+
* mark mean two different things at two moments that are the same state.
|
|
811
|
+
* Every player a reader has used shows it on pause, and the one who paused to
|
|
812
|
+
* study a frame clears it by pressing the thing in the way.
|
|
813
|
+
*
|
|
814
|
+
* Not drawn at all where the browser draws its own controls, since that bar
|
|
815
|
+
* has a play button and two would be two.
|
|
816
|
+
*/
|
|
817
|
+
protected renderStart(): TemplateResult | typeof nothing;
|
|
719
818
|
protected render(): TemplateResult;
|
|
720
819
|
}
|
|
721
820
|
declare global {
|