bitmovin-player-ui 4.20.2 → 4.21.1
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/AGENTS.md +61 -0
- package/CHANGELOG.md +17 -0
- package/dist/css/bitmovinplayer-ui.css +1 -1
- package/dist/css/bitmovinplayer-ui.css.map +1 -1
- package/dist/js/bitmovinplayer-ui.js +1 -1
- package/dist/js/bitmovinplayer-ui.js.map +1 -1
- package/dist/js/framework/components/Component.d.ts +1 -0
- package/dist/js/framework/components/Component.js +3 -0
- package/dist/js/framework/components/settings/DynamicSettingsPanelItem.js +1 -9
- package/dist/js/framework/main.d.ts +1 -0
- package/dist/js/framework/main.js +2 -22
- package/dist/js/framework/polyfills.d.ts +21 -0
- package/dist/js/framework/polyfills.js +60 -0
- package/dist/js/framework/utils/AdBreakTracker.js +6 -2
- package/dist/js/framework/utils/BrowserUtils.js +1 -3
- package/docs/classes/AdClickOverlay.html +28 -28
- package/docs/classes/AdControlBar.html +31 -31
- package/docs/classes/AdCounterLabel.html +31 -31
- package/docs/classes/AdMessageLabel.html +31 -31
- package/docs/classes/AdSkipButton.html +27 -27
- package/docs/classes/AdStatusOverlay.html +31 -31
- package/docs/classes/AirPlayToggleButton.html +35 -35
- package/docs/classes/AudioQualitySelectBox.html +41 -41
- package/docs/classes/AudioTrackListBox.html +39 -39
- package/docs/classes/AudioTrackSelectBox.html +41 -41
- package/docs/classes/BackgroundColorSelectBox.html +41 -41
- package/docs/classes/BackgroundOpacitySelectBox.html +41 -41
- package/docs/classes/BrowserUtils.html +2 -2
- package/docs/classes/BufferingOverlay.html +31 -31
- package/docs/classes/Button.html +27 -27
- package/docs/classes/CaptionToggleButton.html +35 -35
- package/docs/classes/CastStatusOverlay.html +31 -31
- package/docs/classes/CastToggleButton.html +35 -35
- package/docs/classes/CastUIContainer.html +31 -31
- package/docs/classes/CharacterEdgeColorSelectBox.html +41 -41
- package/docs/classes/CharacterEdgeSelectBox.html +41 -41
- package/docs/classes/ClickOverlay.html +28 -28
- package/docs/classes/CloseButton.html +27 -27
- package/docs/classes/Component.html +25 -25
- package/docs/classes/Container.html +31 -31
- package/docs/classes/ContextMenu.html +39 -39
- package/docs/classes/ControlBar.html +31 -31
- package/docs/classes/DismissClickOverlay.html +31 -31
- package/docs/classes/DynamicSettingsPanelItem.html +34 -34
- package/docs/classes/EcoModeContainer.html +32 -32
- package/docs/classes/EcoModeToggleButton.html +35 -35
- package/docs/classes/ErrorMessageOverlay.html +31 -31
- package/docs/classes/FontColorSelectBox.html +41 -41
- package/docs/classes/FontFamilySelectBox.html +41 -41
- package/docs/classes/FontOpacitySelectBox.html +41 -41
- package/docs/classes/FontSizeSelectBox.html +41 -41
- package/docs/classes/FontStyleSelectBox.html +41 -41
- package/docs/classes/FullscreenToggleButton.html +35 -35
- package/docs/classes/HugePlaybackToggleButton.html +35 -35
- package/docs/classes/HugeReplayButton.html +27 -27
- package/docs/classes/I18n.html +2 -2
- package/docs/classes/Icon.html +25 -25
- package/docs/classes/InteractiveContextMenuItem.html +34 -34
- package/docs/classes/InteractiveSettingsPanelItem.html +34 -34
- package/docs/classes/ItemSelectionList.html +41 -41
- package/docs/classes/Label.html +31 -31
- package/docs/classes/ListBox.html +39 -39
- package/docs/classes/ListSelector.html +41 -41
- package/docs/classes/MetadataLabel.html +31 -31
- package/docs/classes/NavigationGroup.html +11 -11
- package/docs/classes/PersistentPreferencesToggleButton.html +35 -35
- package/docs/classes/PictureInPictureToggleButton.html +35 -35
- package/docs/classes/PlaybackSpeedSelectBox.html +41 -41
- package/docs/classes/PlaybackTimeLabel.html +32 -32
- package/docs/classes/PlaybackToggleButton.html +35 -35
- package/docs/classes/PlaybackToggleOverlay.html +31 -31
- package/docs/classes/PlayerContextMenu.html +39 -39
- package/docs/classes/PlayerInsightsPanel.html +39 -39
- package/docs/classes/PlayerUtils.LiveStreamDetector.html +2 -2
- package/docs/classes/PlayerUtils.TimeShiftAvailabilityDetector.html +2 -2
- package/docs/classes/PlayerWrapper.html +4 -4
- package/docs/classes/QuickSeekButton.html +27 -27
- package/docs/classes/RecommendationItem.html +25 -25
- package/docs/classes/RecommendationOverlay.html +31 -31
- package/docs/classes/ReplayButton.html +27 -27
- package/docs/classes/RootNavigationGroup.html +11 -11
- package/docs/classes/SeekBar.html +36 -36
- package/docs/classes/SeekBarLabel.html +35 -35
- package/docs/classes/SelectBox.html +41 -41
- package/docs/classes/SettingsPanel.html +39 -39
- package/docs/classes/SettingsPanelItem.html +33 -33
- package/docs/classes/SettingsPanelNavigationGroup.html +11 -11
- package/docs/classes/SettingsPanelNavigationGroupConfig.html +2 -2
- package/docs/classes/SettingsPanelPage.html +33 -33
- package/docs/classes/SettingsPanelPageBackButton.html +29 -29
- package/docs/classes/SettingsPanelPageNavigatorButton.html +29 -29
- package/docs/classes/SettingsPanelPageOpenButton.html +29 -29
- package/docs/classes/SettingsPanelSelectOption.html +34 -34
- package/docs/classes/SettingsPanelSeparator.html +31 -31
- package/docs/classes/SettingsToggleButton.html +35 -35
- package/docs/classes/ShadowDomManager.html +2 -2
- package/docs/classes/SmallCenteredPlaybackToggleButton.html +35 -35
- package/docs/classes/Spacer.html +25 -25
- package/docs/classes/SpatialNavigation.html +4 -4
- package/docs/classes/SubtitleListBox.html +39 -39
- package/docs/classes/SubtitleOverlay.html +31 -31
- package/docs/classes/SubtitleSelectBox.html +41 -41
- package/docs/classes/SubtitleSettingSelectBox.html +41 -41
- package/docs/classes/SubtitleSettingsPanelPage.html +33 -33
- package/docs/classes/SubtitleSettingsResetButton.html +27 -27
- package/docs/classes/TitleBar.html +31 -31
- package/docs/classes/ToggleButton.html +35 -35
- package/docs/classes/ToggleSettingsPanelItem.html +34 -34
- package/docs/classes/TouchControlOverlay.html +31 -31
- package/docs/classes/TvNoiseCanvas.html +25 -25
- package/docs/classes/UIContainer.html +31 -31
- package/docs/classes/UIInstanceManager.html +16 -16
- package/docs/classes/UIManager.html +17 -17
- package/docs/classes/UIPreferencesManager.html +5 -5
- package/docs/classes/VRToggleButton.html +35 -35
- package/docs/classes/VideoQualitySelectBox.html +42 -42
- package/docs/classes/VolumeControlButton.html +33 -33
- package/docs/classes/VolumeSlider.html +36 -36
- package/docs/classes/VolumeToggleButton.html +35 -35
- package/docs/classes/Watermark.html +28 -28
- package/docs/classes/WindowColorSelectBox.html +41 -41
- package/docs/classes/WindowOpacitySelectBox.html +41 -41
- package/docs/enums/ButtonStyle.html +5 -5
- package/docs/enums/LabelStyle.html +4 -4
- package/docs/enums/MetadataLabelContent.html +3 -3
- package/docs/enums/NavigationDirection.html +2 -2
- package/docs/enums/PlaybackTimeLabelMode.html +5 -5
- package/docs/enums/PlayerUtils.PlayerState.html +2 -2
- package/docs/enums/UIComponentLayoutOverride.html +2 -2
- package/docs/enums/UIUtils.KeyCode.html +2 -2
- package/docs/enums/UIVariantIdentifier.html +2 -2
- package/docs/enums/ViewMode.html +3 -3
- package/docs/functions/ArrayUtils.remove.html +1 -1
- package/docs/functions/ErrorUtils.defaultMobileV3ErrorMessageTranslator.html +1 -1
- package/docs/functions/PlayerUtils.clampValueToRange.html +1 -1
- package/docs/functions/PlayerUtils.getCurrentTimeRelativeToSeekableRange.html +1 -1
- package/docs/functions/PlayerUtils.getSeekableRangeRespectingLive.html +1 -1
- package/docs/functions/PlayerUtils.getSeekableRangeStart.html +1 -1
- package/docs/functions/PlayerUtils.getState.html +1 -1
- package/docs/functions/PlayerUtils.isTimeShiftAvailable.html +1 -1
- package/docs/functions/StorageUtils.getItem.html +1 -1
- package/docs/functions/StorageUtils.getObject.html +1 -1
- package/docs/functions/StorageUtils.removeItem.html +1 -1
- package/docs/functions/StorageUtils.setItem.html +1 -1
- package/docs/functions/StorageUtils.setObject.html +1 -1
- package/docs/functions/StorageUtils.setStorageApiDisabled.html +1 -1
- package/docs/functions/StringUtils.replaceAdMessagePlaceholders.html +1 -1
- package/docs/functions/StringUtils.secondsToText.html +1 -1
- package/docs/functions/StringUtils.secondsToTime.html +1 -1
- package/docs/functions/UIFactory.buildCastReceiverUI.html +1 -1
- package/docs/functions/UIFactory.buildSmallScreenUI.html +1 -1
- package/docs/functions/UIFactory.buildSubtitleUI.html +1 -1
- package/docs/functions/UIFactory.buildTvUI.html +1 -1
- package/docs/functions/UIFactory.buildUI.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.ads.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.castReceiver.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.emptyState.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.main.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.smallScreen.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.smallScreenAds.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.subtitle.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.tv.html +1 -1
- package/docs/functions/UIFactory.defaultLayouts.tvAds.html +1 -1
- package/docs/functions/UIUtils.traverseTree.html +1 -1
- package/docs/interfaces/ActiveUiChangedArgs.html +3 -3
- package/docs/interfaces/AdControlBarConfig.html +12 -12
- package/docs/interfaces/AdSkipButtonConfig.html +16 -16
- package/docs/interfaces/AudioTrackListBoxConfig.html +19 -19
- package/docs/interfaces/BufferingOverlayConfig.html +13 -13
- package/docs/interfaces/ButtonConfig.html +14 -14
- package/docs/interfaces/ClickOverlayConfig.html +15 -15
- package/docs/interfaces/CloseButtonConfig.html +15 -15
- package/docs/interfaces/ComponentConfig.html +11 -11
- package/docs/interfaces/ComponentFocusChangedEventArgs.html +2 -2
- package/docs/interfaces/ComponentHoverChangedEventArgs.html +2 -2
- package/docs/interfaces/ContainerConfig.html +12 -12
- package/docs/interfaces/ContextMenuConfig.html +17 -17
- package/docs/interfaces/ControlBarConfig.html +12 -12
- package/docs/interfaces/DismissClickOverlayConfig.html +14 -14
- package/docs/interfaces/DynamicSettingsPanelItemConfig.html +19 -19
- package/docs/interfaces/ErrorMessageMap.html +1 -1
- package/docs/interfaces/ErrorMessageOverlayConfig.html +13 -13
- package/docs/interfaces/ErrorMessageTranslator.html +1 -1
- package/docs/interfaces/ExternalRecommendationLink.html +3 -3
- package/docs/interfaces/InteractiveContextMenuItemConfig.html +18 -18
- package/docs/interfaces/InternalUIConfig.html +26 -26
- package/docs/interfaces/LabelConfig.html +14 -14
- package/docs/interfaces/ListBoxConfig.html +20 -20
- package/docs/interfaces/ListItem.html +2 -2
- package/docs/interfaces/ListItemFilter.html +1 -1
- package/docs/interfaces/ListItemLabelTranslator.html +1 -1
- package/docs/interfaces/ListSelectorConfig.html +12 -12
- package/docs/interfaces/LocalizationConfig.html +5 -5
- package/docs/interfaces/MetadataLabelConfig.html +15 -15
- package/docs/interfaces/PlaybackTimeLabelConfig.html +16 -16
- package/docs/interfaces/PlaybackToggleButtonConfig.html +19 -19
- package/docs/interfaces/PlaybackToggleOverlayConfig.html +13 -13
- package/docs/interfaces/PlayerContextMenuConfig.html +18 -18
- package/docs/interfaces/PlayerInsightsPanelConfig.html +18 -18
- package/docs/interfaces/PlayerUtils.LiveStreamDetectorEventArgs.html +2 -2
- package/docs/interfaces/PlayerUtils.TimeShiftAvailabilityChangedArgs.html +2 -2
- package/docs/interfaces/QuickSeekButtonConfig.html +15 -15
- package/docs/interfaces/RecommendationConfig.html +4 -4
- package/docs/interfaces/RecommendationItemConfig.html +12 -12
- package/docs/interfaces/RecommendationsApi.html +4 -4
- package/docs/interfaces/SeekBarConfig.html +19 -19
- package/docs/interfaces/SeekBarLabelConfig.html +12 -12
- package/docs/interfaces/SeekBarMarker.html +2 -2
- package/docs/interfaces/SeekPreviewArgs.html +3 -3
- package/docs/interfaces/SeekPreviewEventArgs.html +4 -4
- package/docs/interfaces/SettingsPanelConfig.html +17 -17
- package/docs/interfaces/SettingsPanelItemConfig.html +17 -17
- package/docs/interfaces/SettingsPanelPageConfig.html +13 -13
- package/docs/interfaces/SettingsPanelPageNavigatorConfig.html +17 -17
- package/docs/interfaces/SettingsPanelSelectOptionConfig.html +18 -18
- package/docs/interfaces/SettingsPanelSeparatorConfig.html +12 -12
- package/docs/interfaces/SettingsPanelState.html +2 -2
- package/docs/interfaces/SettingsToggleButtonConfig.html +20 -20
- package/docs/interfaces/ShadowDomConfig.html +4 -4
- package/docs/interfaces/SubtitleListBoxConfig.html +19 -19
- package/docs/interfaces/SubtitleOverlayConfig.html +14 -14
- package/docs/interfaces/SubtitleSettingSelectBoxConfig.html +12 -12
- package/docs/interfaces/SubtitleSettingsPanelPageConfig.html +13 -13
- package/docs/interfaces/TimelineMarker.html +6 -6
- package/docs/interfaces/TimelineMarkersApi.html +4 -4
- package/docs/interfaces/TitleBarConfig.html +13 -13
- package/docs/interfaces/ToggleButtonConfig.html +18 -18
- package/docs/interfaces/ToggleSettingsPanelItemConfig.html +17 -17
- package/docs/interfaces/TouchControlOverlayConfig.html +17 -17
- package/docs/interfaces/UIComponentConfigMap.html +2 -2
- package/docs/interfaces/UIComponentConfigOverrides.html +10 -10
- package/docs/interfaces/UIComponentLayoutOverrideMap.html +2 -2
- package/docs/interfaces/UIComponentLayoutOverrides.html +10 -10
- package/docs/interfaces/UIConditionContext.html +10 -10
- package/docs/interfaces/UIConditionResolver.html +1 -1
- package/docs/interfaces/UIConfig.html +24 -24
- package/docs/interfaces/UIContainerConfig.html +17 -17
- package/docs/interfaces/UIUtils.TreeTraversalCallback.html +1 -1
- package/docs/interfaces/UIVariant.html +5 -5
- package/docs/interfaces/UIVariantFactory.html +4 -4
- package/docs/interfaces/ViewModeChangedEventArgs.html +2 -2
- package/docs/interfaces/Vocabularies.html +1 -1
- package/docs/interfaces/Vocabulary.html +2 -2
- package/docs/interfaces/VolumeControlButtonConfig.html +14 -14
- package/docs/interfaces/VolumeSliderConfig.html +21 -21
- package/docs/interfaces/WatermarkConfig.html +15 -15
- package/docs/interfaces/WrappedPlayer.html +2 -2
- package/docs/media/CHANGELOG.md +17 -0
- package/docs/types/CustomVocabulary.html +1 -1
- package/docs/types/ListItemComparator.html +1 -1
- package/docs/types/LocalizableText.html +1 -1
- package/docs/types/Localizer.html +1 -1
- package/docs/variables/ErrorUtils.defaultErrorMessages.html +1 -1
- package/docs/variables/ErrorUtils.defaultWebErrorMessageTranslator.html +1 -1
- package/docs/variables/StringUtils.FORMAT_HHMMSS.html +1 -1
- package/docs/variables/StringUtils.FORMAT_MMSS.html +1 -1
- package/docs/variables/i18n.html +1 -1
- package/docs/variables/version.html +1 -1
- package/package.json +5 -2
- package/playwright.config.ts +34 -0
- package/src/scss/components/settings/_settings-panel-item.scss +20 -0
- package/src/scss/components/settings/_settings-panel.scss +3 -2
- package/src/ts/components/Component.ts +3 -0
- package/src/ts/components/settings/DynamicSettingsPanelItem.ts +2 -9
- package/src/ts/main.ts +2 -24
- package/src/ts/polyfills.ts +66 -0
- package/src/ts/utils/AdBreakTracker.ts +6 -2
- package/src/ts/utils/BrowserUtils.ts +1 -5
- package/test/browser/README.md +98 -0
- package/test/browser/control-bar-layout.pw.ts +73 -0
- package/test/browser/harness.ts +243 -0
- package/test/browser/helpers/control-bar.ts +149 -0
- package/test/browser/playback-toggle.pw.ts +18 -0
- package/test/browser/tsconfig.json +13 -0
- package/test/browser/ui-variants.pw.ts +11 -0
package/AGENTS.md
CHANGED
|
@@ -94,6 +94,8 @@ export interface UIComponentConfigMap {
|
|
|
94
94
|
|
|
95
95
|
- Use targeted checks while iterating:
|
|
96
96
|
- `npx jest <spec> --runInBand`
|
|
97
|
+
- `npm run test:browser` for browser-dependent UI behavior (see below)
|
|
98
|
+
- `npm run typecheck:browser` while iterating on the Playwright harness or specs
|
|
97
99
|
- `npm run lint-ts`
|
|
98
100
|
- `npm run lint-sass`
|
|
99
101
|
- `npx tsc --noEmit`
|
|
@@ -103,3 +105,62 @@ export interface UIComponentConfigMap {
|
|
|
103
105
|
- For Android or iOS SDK impact, record what was manually checked. If mobile SDK verification was needed but not possible in the current environment, say that explicitly and do not treat browser checks as equivalent.
|
|
104
106
|
- Treat `npm run docs` by exit code; TypeDoc warnings can be acceptable when the command exits `0`.
|
|
105
107
|
- For merge conflicts, confirm real unresolved conflicts with `git ls-files -u`; text searches for conflict markers can hit false positives in this repo.
|
|
108
|
+
|
|
109
|
+
## Browser Integration Tests
|
|
110
|
+
|
|
111
|
+
Choose the test level that can observe the behavior being changed:
|
|
112
|
+
|
|
113
|
+
- Use Jest for pure logic and component behavior that jsdom models faithfully.
|
|
114
|
+
- Use Playwright in `test/browser/` when correctness depends on real layout or computed styles,
|
|
115
|
+
focus, keyboard or pointer input, browser APIs, Shadow DOM, generated markup, or multiple UI
|
|
116
|
+
components responding to player events. Do not rely on Jest-only coverage for those changes.
|
|
117
|
+
- The Playwright harness uses the built UI against a deterministic stub player. It does not cover
|
|
118
|
+
real playback, streams, networking, decoding, or mobile SDK bridges. Full-player browser system
|
|
119
|
+
tests may also use Playwright, but exercise those real dependencies instead of this stub; verify
|
|
120
|
+
mobile SDK bridges in their platform environments.
|
|
121
|
+
|
|
122
|
+
Run browser integration tests with `npm run test:browser`. Structure scenarios as
|
|
123
|
+
Arrange–Act–Assert when that makes the phases clearer; comments naming the phases are not required.
|
|
124
|
+
Use role- or label-based locators and Playwright's web-first assertions for interactive behavior.
|
|
125
|
+
Raw CSS selectors and `page.evaluate()` are appropriate when measuring geometry or another browser
|
|
126
|
+
property that has no user-facing locator.
|
|
127
|
+
|
|
128
|
+
Rules that keep these tests deterministic. Follow them or the suite gets disabled:
|
|
129
|
+
|
|
130
|
+
- **Import `test` and `expect` from `test/browser/harness.ts`**, not from `@playwright/test`. The
|
|
131
|
+
harness fails a test on any uncaught page error, so a stub player that has drifted from the real
|
|
132
|
+
API fails instead of leaving a partial DOM that can produce false positives.
|
|
133
|
+
- **Drive player behavior through the typed controller returned by `mountUi()`.** When a scenario
|
|
134
|
+
needs a player operation the controller does not expose, add only that operation together with
|
|
135
|
+
the state changes and events the real player produces. Do not access harness browser globals from
|
|
136
|
+
specs, and do not add speculative controller APIs for hypothetical future tests.
|
|
137
|
+
- **Keep the generic mount generic.** Layout- or feature-specific readiness assertions and DOM
|
|
138
|
+
measurement helpers belong in `test/browser/helpers/`; they must not make unrelated UIFactory
|
|
139
|
+
layouts depend on the default control bar.
|
|
140
|
+
- **Keep every test isolated.** Mount a fresh UI in each test and do not share mutable page or player
|
|
141
|
+
state between tests.
|
|
142
|
+
- **No sleeping and no retries.** Use web-first assertions for observable UI changes and fire
|
|
143
|
+
deterministic player events for state transitions. `retries` remains `0` so flakiness is visible.
|
|
144
|
+
- **No real streams, CDN, or video decode.** Keep those in full-player system tests, which may also
|
|
145
|
+
use Playwright but do not use this deterministic stub-backed harness. Real media dependencies are
|
|
146
|
+
the main sources of flake in player browser tests.
|
|
147
|
+
- **Prove every new test can fail.** Break the behavior it guards, observe the expected red result,
|
|
148
|
+
then restore the behavior and watch it pass.
|
|
149
|
+
|
|
150
|
+
Additional rules for layout and sizing tests:
|
|
151
|
+
|
|
152
|
+
- **Never assert absolute pixel values.** Fonts render differently across operating systems, so
|
|
153
|
+
`expect(width).toBe(73)` passes locally and fails in CI. Assert relationships instead: unchanged
|
|
154
|
+
between two measurements, never grew, fits inside the parent, one element wider than another.
|
|
155
|
+
- **Compare a measurement to another measurement**, taken in the same browser in the same run.
|
|
156
|
+
That is what makes the assertion portable.
|
|
157
|
+
- **Measure the elements that can actually change.** Container rows are full-width by construction,
|
|
158
|
+
so comparing only those passes no matter how badly the controls inside them resize. Walk
|
|
159
|
+
descendants, and when checking that children fit a row, find the flex container that actually
|
|
160
|
+
distributes the space rather than the wrapper around it.
|
|
161
|
+
- **An empty measurement must fail, not pass.** A helper that returns `{}` or `[]` when its selector
|
|
162
|
+
matches nothing makes "nothing is wrong" indistinguishable from "nothing was measured". Throw when
|
|
163
|
+
the subject is missing, and assert that each test measured something.
|
|
164
|
+
- **Cover both host-page worlds** when a change touches sizing: with and without a global
|
|
165
|
+
`box-sizing: border-box` reset. Most real pages have one, our demo page has one via Bootstrap,
|
|
166
|
+
and plenty of customer pages do not. `mountUi(page, { hostReset })` switches between them.
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
7
7
|
|
|
8
|
+
## [4.21.1] - 2026-09-17
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- The UI failing to load on legacy platforms such as webOS 3.x when required polyfills were not yet installed.
|
|
13
|
+
|
|
14
|
+
## [4.21.0] - 2026-09-10
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- The selected subtitle track label no longer includes the number of available tracks.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Long option names causing settings panels to overflow or setting labels to become unreadable.
|
|
23
|
+
- Ad count in `AdCounterLabel` no longer increases incorrectly when used on mobile SDKs.
|
|
24
|
+
|
|
8
25
|
## [4.20.2] - 2026-09-03
|
|
9
26
|
|
|
10
27
|
### Fixed
|