@rosettadash/web-components 0.1.0 → 0.1.3
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/browser/media.js +461 -39
- package/browser/media.js.map +3 -3
- package/package.json +332 -36
- package/src/domain/i18n/app-language-select/index.d.ts +3 -0
- package/src/domain/i18n/app-language-select/index.js +3 -0
- package/src/domain/i18n/app-language-select/index.js.map +1 -0
- package/src/domain/i18n/app-language-select/parse-locale-options.d.ts +7 -0
- package/src/domain/i18n/app-language-select/parse-locale-options.js +39 -0
- package/src/domain/i18n/app-language-select/parse-locale-options.js.map +1 -0
- package/src/domain/i18n/app-language-select/rd-app-language-select.d.ts +38 -0
- package/src/domain/i18n/app-language-select/rd-app-language-select.js +138 -0
- package/src/domain/i18n/app-language-select/rd-app-language-select.js.map +1 -0
- package/src/domain/i18n/index.d.ts +2 -0
- package/src/domain/i18n/index.js +6 -0
- package/src/domain/i18n/index.js.map +1 -0
- package/src/domain/index.d.ts +6 -0
- package/src/domain/index.js +18 -0
- package/src/domain/index.js.map +1 -0
- package/src/domain/person-invite/index.d.ts +2 -0
- package/src/domain/person-invite/index.js +2 -0
- package/src/domain/person-invite/index.js.map +1 -0
- package/src/domain/person-invite/rd-person-invite.d.ts +17 -0
- package/src/domain/person-invite/rd-person-invite.js +33 -0
- package/src/domain/person-invite/rd-person-invite.js.map +1 -0
- package/src/domain/role-assign/index.d.ts +2 -0
- package/src/domain/role-assign/index.js +2 -0
- package/src/domain/role-assign/index.js.map +1 -0
- package/src/domain/role-assign/rd-role-assign.d.ts +21 -0
- package/src/domain/role-assign/rd-role-assign.js +36 -0
- package/src/domain/role-assign/rd-role-assign.js.map +1 -0
- package/src/domain/role-gate/index.d.ts +2 -0
- package/src/domain/role-gate/index.js +2 -0
- package/src/domain/role-gate/index.js.map +1 -0
- package/src/domain/role-gate/rd-role-gate.d.ts +19 -0
- package/src/domain/role-gate/rd-role-gate.js +31 -0
- package/src/domain/role-gate/rd-role-gate.js.map +1 -0
- package/src/domain/time-preset/index.d.ts +2 -0
- package/src/domain/time-preset/index.js +2 -0
- package/src/domain/time-preset/index.js.map +1 -0
- package/src/domain/time-preset/rd-time-preset.d.ts +23 -0
- package/src/domain/time-preset/rd-time-preset.js +34 -0
- package/src/domain/time-preset/rd-time-preset.js.map +1 -0
- package/src/index.d.ts +5 -5
- package/src/index.js +13 -13
- package/src/index.js.map +1 -1
- package/src/layout/collapsible/index.d.ts +2 -0
- package/src/layout/collapsible/index.js +2 -0
- package/src/layout/collapsible/index.js.map +1 -0
- package/src/layout/collapsible/rd-collapsible.d.ts +21 -0
- package/src/layout/collapsible/rd-collapsible.js +50 -0
- package/src/layout/collapsible/rd-collapsible.js.map +1 -0
- package/src/layout/flex/index.d.ts +2 -0
- package/src/layout/flex/index.js +2 -0
- package/src/layout/flex/index.js.map +1 -0
- package/src/layout/flex/rd-flex-layout.d.ts +17 -0
- package/src/layout/flex/rd-flex-layout.js +24 -0
- package/src/layout/flex/rd-flex-layout.js.map +1 -0
- package/src/layout/grid/index.d.ts +2 -0
- package/src/layout/grid/index.js +2 -0
- package/src/layout/grid/index.js.map +1 -0
- package/src/layout/grid/rd-grid-layout.d.ts +17 -0
- package/src/layout/grid/rd-grid-layout.js +24 -0
- package/src/layout/grid/rd-grid-layout.js.map +1 -0
- package/src/layout/index.d.ts +9 -0
- package/src/layout/index.js +27 -0
- package/src/layout/index.js.map +1 -0
- package/src/layout/modal/index.d.ts +2 -0
- package/src/layout/modal/index.js +2 -0
- package/src/layout/modal/index.js.map +1 -0
- package/src/layout/modal/rd-modal-layout.d.ts +20 -0
- package/src/layout/modal/rd-modal-layout.js +40 -0
- package/src/layout/modal/rd-modal-layout.js.map +1 -0
- package/src/layout/scroll-region/index.d.ts +2 -0
- package/src/layout/scroll-region/index.js +2 -0
- package/src/layout/scroll-region/index.js.map +1 -0
- package/src/layout/scroll-region/rd-scroll-region.d.ts +17 -0
- package/src/layout/scroll-region/rd-scroll-region.js +26 -0
- package/src/layout/scroll-region/rd-scroll-region.js.map +1 -0
- package/src/layout/tabs/index.d.ts +2 -0
- package/src/layout/tabs/index.js +2 -0
- package/src/layout/tabs/index.js.map +1 -0
- package/src/layout/tabs/rd-tabs-layout.d.ts +23 -0
- package/src/layout/tabs/rd-tabs-layout.js +34 -0
- package/src/layout/tabs/rd-tabs-layout.js.map +1 -0
- package/src/lib/element-utils.js +3 -0
- package/src/lib/element-utils.js.map +1 -1
- package/src/lib/rosetta-atom-element.d.ts +23 -0
- package/src/lib/rosetta-atom-element.js +104 -0
- package/src/lib/rosetta-atom-element.js.map +1 -0
- package/src/lib/shadow-base.js +3 -0
- package/src/lib/shadow-base.js.map +1 -1
- package/src/lib/shadow-resources.js +7 -2
- package/src/lib/shadow-resources.js.map +1 -1
- package/src/logic/index.d.ts +2 -0
- package/src/logic/index.js +6 -0
- package/src/logic/index.js.map +1 -0
- package/src/logic/timer/index.d.ts +2 -0
- package/src/logic/timer/index.js +2 -0
- package/src/logic/timer/index.js.map +1 -0
- package/src/logic/timer/rd-timer.d.ts +18 -0
- package/src/logic/timer/rd-timer.js +24 -0
- package/src/logic/timer/rd-timer.js.map +1 -0
- package/src/visual/chart/bar/index.d.ts +2 -0
- package/src/visual/chart/bar/index.js +2 -0
- package/src/visual/chart/bar/index.js.map +1 -0
- package/src/visual/chart/bar/rd-bar-chart.d.ts +21 -0
- package/src/visual/chart/bar/rd-bar-chart.js +83 -0
- package/src/visual/chart/bar/rd-bar-chart.js.map +1 -0
- package/src/visual/chart/line/index.d.ts +2 -0
- package/src/visual/chart/line/index.js +2 -0
- package/src/visual/chart/line/index.js.map +1 -0
- package/src/visual/chart/line/rd-line-chart.d.ts +22 -0
- package/src/visual/chart/line/rd-line-chart.js +105 -0
- package/src/visual/chart/line/rd-line-chart.js.map +1 -0
- package/src/visual/chart/pie/index.d.ts +2 -0
- package/src/visual/chart/pie/index.js +2 -0
- package/src/visual/chart/pie/index.js.map +1 -0
- package/src/visual/chart/pie/rd-pie-chart.d.ts +15 -0
- package/src/visual/chart/pie/rd-pie-chart.js +23 -0
- package/src/visual/chart/pie/rd-pie-chart.js.map +1 -0
- package/src/visual/detail/index.d.ts +2 -0
- package/src/visual/detail/index.js +2 -0
- package/src/visual/detail/index.js.map +1 -0
- package/src/visual/detail/rd-detail-panel.d.ts +16 -0
- package/src/visual/detail/rd-detail-panel.js +24 -0
- package/src/visual/detail/rd-detail-panel.js.map +1 -0
- package/src/visual/display/3d-bar-chart/index.d.ts +2 -0
- package/src/visual/display/3d-bar-chart/index.js +2 -0
- package/src/visual/display/3d-bar-chart/index.js.map +1 -0
- package/src/visual/display/3d-bar-chart/rd-three-bar-chart.d.ts +16 -0
- package/src/visual/display/3d-bar-chart/rd-three-bar-chart.js +24 -0
- package/src/visual/display/3d-bar-chart/rd-three-bar-chart.js.map +1 -0
- package/src/visual/display/3d-geo-globe/globe-view.d.ts +86 -0
- package/src/visual/display/3d-geo-globe/globe-view.js +235 -0
- package/src/visual/display/3d-geo-globe/globe-view.js.map +1 -0
- package/src/visual/display/3d-geo-globe/index.d.ts +3 -0
- package/src/visual/display/3d-geo-globe/index.js +3 -0
- package/src/visual/display/3d-geo-globe/index.js.map +1 -0
- package/src/visual/display/3d-geo-globe/rd-three-geo-globe.d.ts +36 -0
- package/src/visual/display/3d-geo-globe/rd-three-geo-globe.js +330 -0
- package/src/visual/display/3d-geo-globe/rd-three-geo-globe.js.map +1 -0
- package/src/visual/display/3d-gltf-model/index.d.ts +2 -0
- package/src/visual/display/3d-gltf-model/index.js +2 -0
- package/src/visual/display/3d-gltf-model/index.js.map +1 -0
- package/src/visual/display/3d-gltf-model/rd-three-gltf-model.d.ts +16 -0
- package/src/visual/display/3d-gltf-model/rd-three-gltf-model.js +24 -0
- package/src/visual/display/3d-gltf-model/rd-three-gltf-model.js.map +1 -0
- package/src/visual/display/3d-scatter/index.d.ts +2 -0
- package/src/visual/display/3d-scatter/index.js +2 -0
- package/src/visual/display/3d-scatter/index.js.map +1 -0
- package/src/visual/display/3d-scatter/rd-three-scatter-plot.d.ts +16 -0
- package/src/visual/display/3d-scatter/rd-three-scatter-plot.js +24 -0
- package/src/visual/display/3d-scatter/rd-three-scatter-plot.js.map +1 -0
- package/src/visual/display/3d-scene/index.d.ts +2 -0
- package/src/visual/display/3d-scene/index.js +2 -0
- package/src/visual/display/3d-scene/index.js.map +1 -0
- package/src/visual/display/3d-scene/rd-three-scene-point-cloud.d.ts +16 -0
- package/src/visual/display/3d-scene/rd-three-scene-point-cloud.js +24 -0
- package/src/visual/display/3d-scene/rd-three-scene-point-cloud.js.map +1 -0
- package/src/visual/display/geo-map/geo-map-types.d.ts +32 -0
- package/src/visual/display/geo-map/geo-map-types.js +10 -0
- package/src/visual/display/geo-map/geo-map-types.js.map +1 -0
- package/src/visual/display/geo-map/index.d.ts +5 -0
- package/src/visual/display/geo-map/index.js +5 -0
- package/src/visual/display/geo-map/index.js.map +1 -0
- package/src/visual/display/geo-map/parse-center.d.ts +5 -0
- package/src/visual/display/geo-map/parse-center.js +28 -0
- package/src/visual/display/geo-map/parse-center.js.map +1 -0
- package/src/visual/display/geo-map/parse-markers.d.ts +2 -0
- package/src/visual/display/geo-map/parse-markers.js +32 -0
- package/src/visual/display/geo-map/parse-markers.js.map +1 -0
- package/src/visual/display/geo-map/providers/create-adapter.d.ts +2 -0
- package/src/visual/display/geo-map/providers/create-adapter.js +11 -0
- package/src/visual/display/geo-map/providers/create-adapter.js.map +1 -0
- package/src/visual/display/geo-map/providers/google-maps-adapter.d.ts +2 -0
- package/src/visual/display/geo-map/providers/google-maps-adapter.js +63 -0
- package/src/visual/display/geo-map/providers/google-maps-adapter.js.map +1 -0
- package/src/visual/display/geo-map/providers/leaflet-adapter.d.ts +2 -0
- package/src/visual/display/geo-map/providers/leaflet-adapter.js +78 -0
- package/src/visual/display/geo-map/providers/leaflet-adapter.js.map +1 -0
- package/src/visual/display/geo-map/providers/maplibre-adapter.d.ts +2 -0
- package/src/visual/display/geo-map/providers/maplibre-adapter.js +71 -0
- package/src/visual/display/geo-map/providers/maplibre-adapter.js.map +1 -0
- package/src/visual/display/geo-map/providers/provider-utils.d.ts +8 -0
- package/src/visual/display/geo-map/providers/provider-utils.js +28 -0
- package/src/visual/display/geo-map/providers/provider-utils.js.map +1 -0
- package/src/visual/display/geo-map/rd-geo-map.d.ts +48 -0
- package/src/visual/display/geo-map/rd-geo-map.js +219 -0
- package/src/visual/display/geo-map/rd-geo-map.js.map +1 -0
- package/src/visual/display/index.d.ts +7 -0
- package/src/visual/display/index.js +21 -0
- package/src/visual/display/index.js.map +1 -0
- package/src/visual/index.d.ts +34 -0
- package/src/visual/index.js +102 -0
- package/src/visual/index.js.map +1 -0
- package/src/visual/input/checkbox/index.d.ts +2 -0
- package/src/visual/input/checkbox/index.js +2 -0
- package/src/visual/input/checkbox/index.js.map +1 -0
- package/src/visual/input/checkbox/rd-checkbox-input.d.ts +19 -0
- package/src/visual/input/checkbox/rd-checkbox-input.js +32 -0
- package/src/visual/input/checkbox/rd-checkbox-input.js.map +1 -0
- package/src/visual/input/date-range/index.d.ts +2 -0
- package/src/visual/input/date-range/index.js +2 -0
- package/src/visual/input/date-range/index.js.map +1 -0
- package/src/visual/input/date-range/rd-date-range-filter.d.ts +24 -0
- package/src/visual/input/date-range/rd-date-range-filter.js +42 -0
- package/src/visual/input/date-range/rd-date-range-filter.js.map +1 -0
- package/src/visual/input/number/index.d.ts +2 -0
- package/src/visual/input/number/index.js +2 -0
- package/src/visual/input/number/index.js.map +1 -0
- package/src/visual/input/number/rd-number-input.d.ts +22 -0
- package/src/visual/input/number/rd-number-input.js +36 -0
- package/src/visual/input/number/rd-number-input.js.map +1 -0
- package/src/visual/input/select/index.d.ts +2 -0
- package/src/visual/input/select/index.js +2 -0
- package/src/visual/input/select/index.js.map +1 -0
- package/src/visual/input/select/rd-select-input.d.ts +24 -0
- package/src/visual/input/select/rd-select-input.js +37 -0
- package/src/visual/input/select/rd-select-input.js.map +1 -0
- package/src/visual/input/text/index.d.ts +2 -0
- package/src/visual/input/text/index.js +2 -0
- package/src/visual/input/text/index.js.map +1 -0
- package/src/visual/input/text/rd-text-input.d.ts +21 -0
- package/src/visual/input/text/rd-text-input.js +35 -0
- package/src/visual/input/text/rd-text-input.js.map +1 -0
- package/src/visual/input/textarea/index.d.ts +2 -0
- package/src/visual/input/textarea/index.js +2 -0
- package/src/visual/input/textarea/index.js.map +1 -0
- package/src/visual/input/textarea/rd-textarea-input.d.ts +20 -0
- package/src/visual/input/textarea/rd-textarea-input.js +34 -0
- package/src/visual/input/textarea/rd-textarea-input.js.map +1 -0
- package/src/visual/kpi/index.d.ts +2 -0
- package/src/visual/kpi/index.js +2 -0
- package/src/visual/kpi/index.js.map +1 -0
- package/src/visual/kpi/rd-kpi-card.d.ts +18 -0
- package/src/visual/kpi/rd-kpi-card.js +26 -0
- package/src/visual/kpi/rd-kpi-card.js.map +1 -0
- package/src/visual/media/index.d.ts +2 -0
- package/src/visual/media/index.js +6 -0
- package/src/visual/media/index.js.map +1 -1
- package/src/visual/media/live-capture/index.d.ts +2 -0
- package/src/visual/media/live-capture/index.js +2 -0
- package/src/visual/media/live-capture/index.js.map +1 -0
- package/src/visual/media/live-capture/rd-live-capture.d.ts +16 -0
- package/src/visual/media/live-capture/rd-live-capture.js +23 -0
- package/src/visual/media/live-capture/rd-live-capture.js.map +1 -0
- package/src/visual/media/video-source/rd-video-source.d.ts +5 -0
- package/src/visual/media/video-source/rd-video-source.js +101 -18
- package/src/visual/media/video-source/rd-video-source.js.map +1 -1
- package/src/visual/media/youtube-embed/index.d.ts +3 -0
- package/src/visual/media/youtube-embed/index.js +3 -0
- package/src/visual/media/youtube-embed/index.js.map +1 -0
- package/src/visual/media/youtube-embed/parse-youtube-id.d.ts +10 -0
- package/src/visual/media/youtube-embed/parse-youtube-id.js +56 -0
- package/src/visual/media/youtube-embed/parse-youtube-id.js.map +1 -0
- package/src/visual/media/youtube-embed/rd-youtube-embed.d.ts +35 -0
- package/src/visual/media/youtube-embed/rd-youtube-embed.js +121 -0
- package/src/visual/media/youtube-embed/rd-youtube-embed.js.map +1 -0
- package/src/visual/news/article-detail/index.d.ts +2 -0
- package/src/visual/news/article-detail/index.js +2 -0
- package/src/visual/news/article-detail/index.js.map +1 -0
- package/src/visual/news/article-detail/rd-news-article-detail.d.ts +16 -0
- package/src/visual/news/article-detail/rd-news-article-detail.js +24 -0
- package/src/visual/news/article-detail/rd-news-article-detail.js.map +1 -0
- package/src/visual/news/language-select/index.d.ts +2 -0
- package/src/visual/news/language-select/index.js +2 -0
- package/src/visual/news/language-select/index.js.map +1 -0
- package/src/visual/news/language-select/rd-news-language-select.d.ts +23 -0
- package/src/visual/news/language-select/rd-news-language-select.js +37 -0
- package/src/visual/news/language-select/rd-news-language-select.js.map +1 -0
- package/src/visual/news/region-select/index.d.ts +2 -0
- package/src/visual/news/region-select/index.js +2 -0
- package/src/visual/news/region-select/index.js.map +1 -0
- package/src/visual/news/region-select/rd-news-region-select.d.ts +23 -0
- package/src/visual/news/region-select/rd-news-region-select.js +37 -0
- package/src/visual/news/region-select/rd-news-region-select.js.map +1 -0
- package/src/visual/news/results-table/index.d.ts +2 -0
- package/src/visual/news/results-table/index.js +2 -0
- package/src/visual/news/results-table/index.js.map +1 -0
- package/src/visual/news/results-table/rd-news-results-table.d.ts +16 -0
- package/src/visual/news/results-table/rd-news-results-table.js +33 -0
- package/src/visual/news/results-table/rd-news-results-table.js.map +1 -0
- package/src/visual/news/search-box/index.d.ts +2 -0
- package/src/visual/news/search-box/index.js +2 -0
- package/src/visual/news/search-box/index.js.map +1 -0
- package/src/visual/news/search-box/rd-news-search-box.d.ts +19 -0
- package/src/visual/news/search-box/rd-news-search-box.js +42 -0
- package/src/visual/news/search-box/rd-news-search-box.js.map +1 -0
- package/src/visual/news/type-select/index.d.ts +2 -0
- package/src/visual/news/type-select/index.js +2 -0
- package/src/visual/news/type-select/index.js.map +1 -0
- package/src/visual/news/type-select/rd-news-type-select.d.ts +23 -0
- package/src/visual/news/type-select/rd-news-type-select.js +37 -0
- package/src/visual/news/type-select/rd-news-type-select.js.map +1 -0
- package/src/visual/plugin/metric-chip/index.d.ts +2 -0
- package/src/visual/plugin/metric-chip/index.js +2 -0
- package/src/visual/plugin/metric-chip/index.js.map +1 -0
- package/src/visual/plugin/metric-chip/rd-metric-chip.d.ts +16 -0
- package/src/visual/plugin/metric-chip/rd-metric-chip.js +23 -0
- package/src/visual/plugin/metric-chip/rd-metric-chip.js.map +1 -0
- package/src/visual/plugin/status-badge/index.d.ts +2 -0
- package/src/visual/plugin/status-badge/index.js +2 -0
- package/src/visual/plugin/status-badge/index.js.map +1 -0
- package/src/visual/plugin/status-badge/rd-status-badge.d.ts +16 -0
- package/src/visual/plugin/status-badge/rd-status-badge.js +19 -0
- package/src/visual/plugin/status-badge/rd-status-badge.js.map +1 -0
- package/src/visual/skeleton/index.d.ts +2 -0
- package/src/visual/skeleton/index.js +2 -0
- package/src/visual/skeleton/index.js.map +1 -0
- package/src/visual/skeleton/rd-loading-skeleton.d.ts +15 -0
- package/src/visual/skeleton/rd-loading-skeleton.js +20 -0
- package/src/visual/skeleton/rd-loading-skeleton.js.map +1 -0
- package/src/visual/svg/icon/index.d.ts +2 -0
- package/src/visual/svg/icon/index.js +2 -0
- package/src/visual/svg/icon/index.js.map +1 -0
- package/src/visual/svg/icon/rd-svg-icon.d.ts +18 -0
- package/src/visual/svg/icon/rd-svg-icon.js +20 -0
- package/src/visual/svg/icon/rd-svg-icon.js.map +1 -0
- package/src/visual/svg/inline/index.d.ts +2 -0
- package/src/visual/svg/inline/index.js +2 -0
- package/src/visual/svg/inline/index.js.map +1 -0
- package/src/visual/svg/inline/rd-svg-inline.d.ts +17 -0
- package/src/visual/svg/inline/rd-svg-inline.js +20 -0
- package/src/visual/svg/inline/rd-svg-inline.js.map +1 -0
- package/src/visual/table/index.d.ts +2 -0
- package/src/visual/table/index.js +2 -0
- package/src/visual/table/index.js.map +1 -0
- package/src/visual/table/rd-data-table.d.ts +26 -0
- package/src/visual/table/rd-data-table.js +46 -0
- package/src/visual/table/rd-data-table.js.map +1 -0
- package/src/visual/wasm/media/index.d.ts +1 -0
- package/src/visual/wasm/media/index.js +2 -0
- package/src/visual/wasm/media/index.js.map +1 -0
- package/src/visual/wasm/module/index.d.ts +2 -0
- package/src/visual/wasm/module/index.js +2 -0
- package/src/visual/wasm/module/index.js.map +1 -0
- package/src/visual/wasm/module/rd-wasm-module.d.ts +16 -0
- package/src/visual/wasm/module/rd-wasm-module.js +24 -0
- package/src/visual/wasm/module/rd-wasm-module.js.map +1 -0
- package/src/visual/wasm/worker-host/index.d.ts +2 -0
- package/src/visual/wasm/worker-host/index.js +2 -0
- package/src/visual/wasm/worker-host/index.js.map +1 -0
- package/src/visual/wasm/worker-host/rd-wasm-worker-host.d.ts +16 -0
- package/src/visual/wasm/worker-host/rd-wasm-worker-host.js +24 -0
- package/src/visual/wasm/worker-host/rd-wasm-worker-host.js.map +1 -0
- package/src/wasm/wasm-media/rd-wasm-media.d.ts +10 -0
- package/src/wasm/wasm-media/rd-wasm-media.js +182 -41
- package/src/wasm/wasm-media/rd-wasm-media.js.map +1 -1
- package/styles/runtime.css +1609 -0
- package/styles/styles.css +1 -0
- package/styles/tokens.css +9 -0
package/browser/media.js
CHANGED
|
@@ -1,37 +1,56 @@
|
|
|
1
1
|
// packages/core/src/lib/media/equirect-filter.ts
|
|
2
|
-
function buildEquirectFlatCropFilter(options) {
|
|
2
|
+
function buildEquirectFlatCropFilter(options, reverse = false) {
|
|
3
3
|
const cropX = Math.max(0, Math.round(options.cropX));
|
|
4
4
|
const cropY = Math.max(0, Math.round(options.cropY));
|
|
5
5
|
const cropWidth = Math.max(2, Math.round(options.cropWidth));
|
|
6
6
|
const cropHeight = Math.max(2, Math.round(options.cropHeight));
|
|
7
7
|
const outputWidth = Math.max(2, Math.round(options.outputWidth));
|
|
8
8
|
const outputHeight = Math.max(2, Math.round(options.outputHeight));
|
|
9
|
-
|
|
9
|
+
const filter = `crop=${cropWidth}:${cropHeight}:${cropX}:${cropY},scale=${outputWidth}:${outputHeight}`;
|
|
10
|
+
return reverse ? `${filter},reverse` : filter;
|
|
10
11
|
}
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
function roundAngle(value) {
|
|
13
|
+
return Math.round(value * 10) / 10;
|
|
14
|
+
}
|
|
15
|
+
function buildEquirectRectilinearFilter(options, reverse = false) {
|
|
16
|
+
const yaw = roundAngle(Number(options.yaw) || 0);
|
|
17
|
+
const pitch = roundAngle(Number(options.pitch) || 0);
|
|
18
|
+
const roll = roundAngle(Number(options.roll ?? 0) || 0);
|
|
15
19
|
const horizontalFov = Math.max(1, Number(options.horizontalFov) || 90);
|
|
16
20
|
const outputWidth = Math.max(2, Math.round(options.outputWidth));
|
|
17
21
|
const outputHeight = Math.max(2, Math.round(options.outputHeight));
|
|
18
|
-
|
|
22
|
+
const filter = [
|
|
19
23
|
`v360=input=equirect:output=rectilinear:yaw=${yaw}:pitch=${pitch}:roll=${roll}:d_fov=${horizontalFov}`,
|
|
20
24
|
`scale=${outputWidth}:${outputHeight}`
|
|
21
25
|
].join(",");
|
|
26
|
+
return reverse ? `${filter},reverse` : filter;
|
|
22
27
|
}
|
|
23
28
|
function buildEquirectExtractFilter(mode, options) {
|
|
29
|
+
const reverse = Boolean(options.reverse);
|
|
24
30
|
if (mode === "rectilinear") {
|
|
25
|
-
return buildEquirectRectilinearFilter(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
return buildEquirectRectilinearFilter(
|
|
32
|
+
{
|
|
33
|
+
yaw: options.yaw ?? 0,
|
|
34
|
+
pitch: options.pitch ?? 0,
|
|
35
|
+
roll: options.roll ?? 0,
|
|
36
|
+
horizontalFov: options.horizontalFov ?? 90,
|
|
37
|
+
outputWidth: options.outputWidth,
|
|
38
|
+
outputHeight: options.outputHeight
|
|
39
|
+
},
|
|
40
|
+
reverse
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
return buildEquirectFlatCropFilter(
|
|
44
|
+
{
|
|
45
|
+
cropX: options.cropX ?? DEFAULT_EQUIRECT_FLAT_CROP.cropX,
|
|
46
|
+
cropY: options.cropY ?? DEFAULT_EQUIRECT_FLAT_CROP.cropY,
|
|
47
|
+
cropWidth: options.cropWidth ?? DEFAULT_EQUIRECT_FLAT_CROP.cropWidth,
|
|
48
|
+
cropHeight: options.cropHeight ?? DEFAULT_EQUIRECT_FLAT_CROP.cropHeight,
|
|
30
49
|
outputWidth: options.outputWidth,
|
|
31
50
|
outputHeight: options.outputHeight
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
51
|
+
},
|
|
52
|
+
reverse
|
|
53
|
+
);
|
|
35
54
|
}
|
|
36
55
|
var DEFAULT_EQUIRECT_SOURCE = { width: 4096, height: 2048 };
|
|
37
56
|
var DEFAULT_EQUIRECT_FLAT_CROP = {
|
|
@@ -55,6 +74,9 @@ function defineRosettaElement(tagName, ctor, options) {
|
|
|
55
74
|
}
|
|
56
75
|
}
|
|
57
76
|
function readNumber(value, fallback) {
|
|
77
|
+
if (value === null || value === void 0 || value === "") {
|
|
78
|
+
return fallback;
|
|
79
|
+
}
|
|
58
80
|
const next = Number(value);
|
|
59
81
|
return Number.isFinite(next) ? next : fallback;
|
|
60
82
|
}
|
|
@@ -72,9 +94,13 @@ function loadTextResource(relativePath, baseUrl) {
|
|
|
72
94
|
return cached;
|
|
73
95
|
}
|
|
74
96
|
const promise = (async () => {
|
|
75
|
-
const
|
|
97
|
+
const fetchUrl = new URL(relativePath, baseUrl);
|
|
98
|
+
if (relativePath.endsWith(".css")) {
|
|
99
|
+
fetchUrl.searchParams.set("raw", "");
|
|
100
|
+
}
|
|
101
|
+
const response = await fetch(fetchUrl);
|
|
76
102
|
if (!response.ok) {
|
|
77
|
-
throw new Error(`Failed to load ${
|
|
103
|
+
throw new Error(`Failed to load ${fetchUrl.href}: ${response.status}`);
|
|
78
104
|
}
|
|
79
105
|
return response.text();
|
|
80
106
|
})();
|
|
@@ -98,6 +124,9 @@ var SHADOW_ELEMENT_DIRS = {
|
|
|
98
124
|
"rd-link-list": "visual/link-list",
|
|
99
125
|
"rd-video-source": "visual/media/video-source",
|
|
100
126
|
"rd-equirect-viewport": "visual/media/equirect-viewport",
|
|
127
|
+
"rd-youtube-embed": "visual/media/youtube-embed",
|
|
128
|
+
"rd-app-language-select": "domain/i18n/app-language-select",
|
|
129
|
+
"rd-geo-map": "visual/display/geo-map",
|
|
101
130
|
"rd-wasm-media": "wasm/wasm-media",
|
|
102
131
|
"rd-component-name": "catalog/component-name"
|
|
103
132
|
};
|
|
@@ -157,6 +186,9 @@ var RdVideoSourceElement = class extends HTMLElement {
|
|
|
157
186
|
this.resourcesReady = null;
|
|
158
187
|
this.changeListener = null;
|
|
159
188
|
}
|
|
189
|
+
static get observedAttributes() {
|
|
190
|
+
return ["label", "accept", "source-width", "source-height", "presentation", "hint"];
|
|
191
|
+
}
|
|
160
192
|
connectedCallback() {
|
|
161
193
|
if (!this.shadowRoot) {
|
|
162
194
|
this.attachShadow({ mode: "open" });
|
|
@@ -171,6 +203,11 @@ var RdVideoSourceElement = class extends HTMLElement {
|
|
|
171
203
|
this.changeListener = null;
|
|
172
204
|
this.inputEl = null;
|
|
173
205
|
}
|
|
206
|
+
attributeChangedCallback() {
|
|
207
|
+
if (this.resourcesReady) {
|
|
208
|
+
void this.resourcesReady.then(() => this.paint());
|
|
209
|
+
}
|
|
210
|
+
}
|
|
174
211
|
setProperty(name, value) {
|
|
175
212
|
this[name] = value;
|
|
176
213
|
if (this.resourcesReady) {
|
|
@@ -192,6 +229,12 @@ var RdVideoSourceElement = class extends HTMLElement {
|
|
|
192
229
|
get sourceHeight() {
|
|
193
230
|
return readNumber(this.getAttribute("source-height"), DEFAULT_EQUIRECT_SOURCE.height);
|
|
194
231
|
}
|
|
232
|
+
get presentation() {
|
|
233
|
+
return readString(this.getAttribute("presentation"), "default");
|
|
234
|
+
}
|
|
235
|
+
get hint() {
|
|
236
|
+
return readString(this.getAttribute("hint"), "");
|
|
237
|
+
}
|
|
195
238
|
async mountShadow() {
|
|
196
239
|
const root = this.shadowRoot;
|
|
197
240
|
if (!root || root.querySelector(".video-source")) {
|
|
@@ -206,6 +249,7 @@ var RdVideoSourceElement = class extends HTMLElement {
|
|
|
206
249
|
this.inputEl = root.querySelector('[data-ref="input"]');
|
|
207
250
|
this.changeListener = () => this.handleFileSelected();
|
|
208
251
|
this.inputEl?.addEventListener("change", this.changeListener);
|
|
252
|
+
this.paint();
|
|
209
253
|
}
|
|
210
254
|
paint() {
|
|
211
255
|
const root = this.shadowRoot;
|
|
@@ -214,11 +258,46 @@ var RdVideoSourceElement = class extends HTMLElement {
|
|
|
214
258
|
}
|
|
215
259
|
const labelEl = root.querySelector('[data-ref="label"]');
|
|
216
260
|
const metaEl = root.querySelector('[data-ref="meta"]');
|
|
261
|
+
const rootEl = root.querySelector('[data-ref="root"]');
|
|
262
|
+
const headerEl = root.querySelector('[data-ref="header"]');
|
|
263
|
+
const uploadEl = root.querySelector('[data-ref="upload"]');
|
|
264
|
+
const uploadDefaultEl = root.querySelector('[data-ref="upload-default"]');
|
|
265
|
+
const uploadAuthoringEl = root.querySelector('[data-ref="upload-authoring"]');
|
|
266
|
+
const uploadFrameEl = root.querySelector('[data-ref="upload-frame"]');
|
|
267
|
+
const nameEl = root.querySelector('[data-ref="file-name"]');
|
|
268
|
+
const hintEl = root.querySelector('[data-ref="hint"]');
|
|
269
|
+
const isAuthoringSource = this.presentation === "authoring-source";
|
|
270
|
+
const isAuthoringFrame = this.presentation === "authoring-frame";
|
|
271
|
+
const isAuthoring = isAuthoringSource || isAuthoringFrame;
|
|
272
|
+
rootEl?.classList.toggle("video-source--authoring", isAuthoringSource);
|
|
273
|
+
rootEl?.classList.toggle("video-source--authoring-frame", isAuthoringFrame);
|
|
274
|
+
if (headerEl instanceof HTMLElement) {
|
|
275
|
+
headerEl.hidden = isAuthoring;
|
|
276
|
+
}
|
|
277
|
+
if (nameEl instanceof HTMLElement) {
|
|
278
|
+
nameEl.hidden = isAuthoringFrame;
|
|
279
|
+
}
|
|
280
|
+
if (uploadEl instanceof HTMLElement) {
|
|
281
|
+
uploadEl.classList.toggle("video-source__upload--authoring", isAuthoringSource);
|
|
282
|
+
uploadEl.classList.toggle("video-source__upload--authoring-frame", isAuthoringFrame);
|
|
283
|
+
}
|
|
284
|
+
if (uploadDefaultEl instanceof HTMLElement) {
|
|
285
|
+
uploadDefaultEl.hidden = isAuthoring;
|
|
286
|
+
}
|
|
287
|
+
if (uploadAuthoringEl instanceof HTMLElement) {
|
|
288
|
+
uploadAuthoringEl.hidden = !isAuthoringSource;
|
|
289
|
+
}
|
|
290
|
+
if (uploadFrameEl instanceof HTMLElement) {
|
|
291
|
+
uploadFrameEl.hidden = !isAuthoringFrame;
|
|
292
|
+
}
|
|
293
|
+
if (hintEl) {
|
|
294
|
+
hintEl.textContent = this.hint;
|
|
295
|
+
}
|
|
217
296
|
if (labelEl) {
|
|
218
297
|
labelEl.textContent = this.label;
|
|
219
298
|
}
|
|
220
299
|
if (metaEl) {
|
|
221
|
-
metaEl.textContent = `${this.sourceWidth}\xD7${this.sourceHeight}`;
|
|
300
|
+
metaEl.textContent = isAuthoring ? "" : `${this.sourceWidth}\xD7${this.sourceHeight}`;
|
|
222
301
|
}
|
|
223
302
|
const input = root.querySelector('[data-ref="input"]');
|
|
224
303
|
if (input) {
|
|
@@ -231,29 +310,62 @@ var RdVideoSourceElement = class extends HTMLElement {
|
|
|
231
310
|
return;
|
|
232
311
|
}
|
|
233
312
|
const nameEl = this.shadowRoot?.querySelector('[data-ref="file-name"]');
|
|
234
|
-
if (nameEl) {
|
|
313
|
+
if (nameEl && this.presentation !== "authoring-frame") {
|
|
235
314
|
nameEl.textContent = file.name;
|
|
236
315
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
316
|
+
void this.probeVideoDimensions(file).then(({ width, height }) => {
|
|
317
|
+
if (width > 0 && height > 0) {
|
|
318
|
+
this.setAttribute("source-width", String(width));
|
|
319
|
+
this.setAttribute("source-height", String(height));
|
|
320
|
+
const metaEl = this.shadowRoot?.querySelector('[data-ref="meta"]');
|
|
321
|
+
const isAuthoring = this.presentation === "authoring-source" || this.presentation === "authoring-frame";
|
|
322
|
+
if (metaEl && !isAuthoring) {
|
|
323
|
+
metaEl.textContent = `${width}\xD7${height}`;
|
|
324
|
+
}
|
|
325
|
+
const nameElAfter = this.shadowRoot?.querySelector('[data-ref="file-name"]');
|
|
326
|
+
if (nameElAfter && this.presentation === "authoring-source") {
|
|
327
|
+
nameElAfter.textContent = `${file.name} (${width}\xD7${height})`;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
const metadata = {
|
|
331
|
+
name: file.name,
|
|
332
|
+
sourceWidth: width > 0 ? width : this.sourceWidth,
|
|
333
|
+
sourceHeight: height > 0 ? height : this.sourceHeight,
|
|
334
|
+
size: file.size
|
|
335
|
+
};
|
|
336
|
+
this.dispatchEvent(
|
|
337
|
+
new CustomEvent("video-file", {
|
|
338
|
+
detail: { file, metadata },
|
|
339
|
+
bubbles: true,
|
|
340
|
+
composed: true
|
|
341
|
+
})
|
|
342
|
+
);
|
|
343
|
+
this.dispatchEvent(
|
|
344
|
+
new CustomEvent("metadata", {
|
|
345
|
+
detail: metadata,
|
|
346
|
+
bubbles: true,
|
|
347
|
+
composed: true
|
|
348
|
+
})
|
|
349
|
+
);
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
probeVideoDimensions(file) {
|
|
353
|
+
return new Promise((resolve) => {
|
|
354
|
+
const url = URL.createObjectURL(file);
|
|
355
|
+
const video = document.createElement("video");
|
|
356
|
+
video.preload = "metadata";
|
|
357
|
+
video.onloadedmetadata = () => {
|
|
358
|
+
const width = video.videoWidth;
|
|
359
|
+
const height = video.videoHeight;
|
|
360
|
+
URL.revokeObjectURL(url);
|
|
361
|
+
resolve({ width, height });
|
|
362
|
+
};
|
|
363
|
+
video.onerror = () => {
|
|
364
|
+
URL.revokeObjectURL(url);
|
|
365
|
+
resolve({ width: 0, height: 0 });
|
|
366
|
+
};
|
|
367
|
+
video.src = url;
|
|
368
|
+
});
|
|
257
369
|
}
|
|
258
370
|
};
|
|
259
371
|
RdVideoSourceElement.tagName = DB_VIDEO_SOURCE_TAG;
|
|
@@ -467,18 +579,328 @@ function registerRdEquirectViewport() {
|
|
|
467
579
|
defineRosettaElement(RdEquirectViewportElement.tagName, RdEquirectViewportElement);
|
|
468
580
|
}
|
|
469
581
|
|
|
582
|
+
// packages/web-components/src/visual/media/youtube-embed/parse-youtube-id.ts
|
|
583
|
+
function parseYouTubeVideoId(input) {
|
|
584
|
+
if (!input?.trim()) {
|
|
585
|
+
return null;
|
|
586
|
+
}
|
|
587
|
+
const trimmed = input.trim();
|
|
588
|
+
if (/^[a-zA-Z0-9_-]{11}$/.test(trimmed)) {
|
|
589
|
+
return trimmed;
|
|
590
|
+
}
|
|
591
|
+
try {
|
|
592
|
+
const url = new URL(trimmed);
|
|
593
|
+
const host = url.hostname.replace(/^www\./, "");
|
|
594
|
+
if (host === "youtu.be") {
|
|
595
|
+
return url.pathname.slice(1).split("/")[0] || null;
|
|
596
|
+
}
|
|
597
|
+
if (host.includes("youtube.com") || host.includes("youtube-nocookie.com")) {
|
|
598
|
+
const fromQuery = url.searchParams.get("v");
|
|
599
|
+
if (fromQuery) {
|
|
600
|
+
return fromQuery;
|
|
601
|
+
}
|
|
602
|
+
const embedMatch = url.pathname.match(/\/embed\/([^/?]+)/);
|
|
603
|
+
if (embedMatch?.[1]) {
|
|
604
|
+
return embedMatch[1];
|
|
605
|
+
}
|
|
606
|
+
const shortsMatch = url.pathname.match(/\/shorts\/([^/?]+)/);
|
|
607
|
+
if (shortsMatch?.[1]) {
|
|
608
|
+
return shortsMatch[1];
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
} catch {
|
|
612
|
+
return null;
|
|
613
|
+
}
|
|
614
|
+
return null;
|
|
615
|
+
}
|
|
616
|
+
function buildYouTubeEmbedUrl(videoId, params = {}) {
|
|
617
|
+
const search = new URLSearchParams();
|
|
618
|
+
if (params.start != null && params.start > 0) {
|
|
619
|
+
search.set("start", String(Math.floor(params.start)));
|
|
620
|
+
}
|
|
621
|
+
if (params.autoplay) {
|
|
622
|
+
search.set("autoplay", "1");
|
|
623
|
+
}
|
|
624
|
+
if (params.mute) {
|
|
625
|
+
search.set("mute", "1");
|
|
626
|
+
}
|
|
627
|
+
if (params.controls === false) {
|
|
628
|
+
search.set("controls", "0");
|
|
629
|
+
}
|
|
630
|
+
search.set("rel", "0");
|
|
631
|
+
search.set("modestbranding", "1");
|
|
632
|
+
const query = search.toString();
|
|
633
|
+
return `https://www.youtube-nocookie.com/embed/${encodeURIComponent(videoId)}${query ? `?${query}` : ""}`;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// packages/web-components/src/visual/media/youtube-embed/rd-youtube-embed.ts
|
|
637
|
+
var DB_YOUTUBE_EMBED_TAG = "rd-youtube-embed";
|
|
638
|
+
var RdYoutubeEmbedElement = class extends HTMLElement {
|
|
639
|
+
constructor() {
|
|
640
|
+
super(...arguments);
|
|
641
|
+
this.resourcesReady = null;
|
|
642
|
+
}
|
|
643
|
+
static get observedAttributes() {
|
|
644
|
+
return ["video-id", "url", "start", "autoplay", "mute", "controls", "embed-title"];
|
|
645
|
+
}
|
|
646
|
+
connectedCallback() {
|
|
647
|
+
if (!this.shadowRoot) {
|
|
648
|
+
this.attachShadow({ mode: "open" });
|
|
649
|
+
}
|
|
650
|
+
this.resourcesReady = this.mountShadow();
|
|
651
|
+
void this.resourcesReady.then(() => this.paint());
|
|
652
|
+
}
|
|
653
|
+
attributeChangedCallback() {
|
|
654
|
+
if (this.shadowRoot && this.resourcesReady) {
|
|
655
|
+
void this.resourcesReady.then(() => this.paint());
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
setProperty(name, value) {
|
|
659
|
+
this[name] = value;
|
|
660
|
+
if (this.resourcesReady) {
|
|
661
|
+
void this.resourcesReady.then(() => this.paint());
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
whenReady() {
|
|
665
|
+
return this.resourcesReady ?? Promise.resolve();
|
|
666
|
+
}
|
|
667
|
+
get videoId() {
|
|
668
|
+
return readString(this.getAttribute("video-id"), "");
|
|
669
|
+
}
|
|
670
|
+
set videoId(value) {
|
|
671
|
+
if (value) {
|
|
672
|
+
this.setAttribute("video-id", value);
|
|
673
|
+
} else {
|
|
674
|
+
this.removeAttribute("video-id");
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
get url() {
|
|
678
|
+
return readString(this.getAttribute("url"), "");
|
|
679
|
+
}
|
|
680
|
+
set url(value) {
|
|
681
|
+
if (value) {
|
|
682
|
+
this.setAttribute("url", value);
|
|
683
|
+
} else {
|
|
684
|
+
this.removeAttribute("url");
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
get start() {
|
|
688
|
+
return readNumber(this.getAttribute("start"), 0);
|
|
689
|
+
}
|
|
690
|
+
get autoplay() {
|
|
691
|
+
return this.hasAttribute("autoplay");
|
|
692
|
+
}
|
|
693
|
+
get mute() {
|
|
694
|
+
return this.hasAttribute("mute");
|
|
695
|
+
}
|
|
696
|
+
get controls() {
|
|
697
|
+
return !this.hasAttribute("controls") || this.getAttribute("controls") !== "false";
|
|
698
|
+
}
|
|
699
|
+
get embedTitle() {
|
|
700
|
+
return readString(this.getAttribute("embed-title"), "YouTube video");
|
|
701
|
+
}
|
|
702
|
+
set embedTitle(value) {
|
|
703
|
+
if (value) {
|
|
704
|
+
this.setAttribute("embed-title", value);
|
|
705
|
+
} else {
|
|
706
|
+
this.removeAttribute("embed-title");
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
async mountShadow() {
|
|
710
|
+
const root = this.shadowRoot;
|
|
711
|
+
if (!root || root.querySelector('[data-ref="root"]')) {
|
|
712
|
+
return;
|
|
713
|
+
}
|
|
714
|
+
const pair = await loadShadowPairForTag(
|
|
715
|
+
DB_YOUTUBE_EMBED_TAG,
|
|
716
|
+
"./rd-youtube-embed.html",
|
|
717
|
+
"./rd-youtube-embed.css"
|
|
718
|
+
);
|
|
719
|
+
applyShadowMount(root, pair);
|
|
720
|
+
}
|
|
721
|
+
resolveVideoId() {
|
|
722
|
+
return parseYouTubeVideoId(this.videoId) ?? parseYouTubeVideoId(this.url);
|
|
723
|
+
}
|
|
724
|
+
paint() {
|
|
725
|
+
const root = this.shadowRoot;
|
|
726
|
+
if (!root) {
|
|
727
|
+
return;
|
|
728
|
+
}
|
|
729
|
+
const iframe = root.querySelector('[data-ref="iframe"]');
|
|
730
|
+
const empty = root.querySelector('[data-ref="empty"]');
|
|
731
|
+
if (!iframe || !empty) {
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
734
|
+
const id = this.resolveVideoId();
|
|
735
|
+
if (!id) {
|
|
736
|
+
iframe.removeAttribute("src");
|
|
737
|
+
iframe.hidden = true;
|
|
738
|
+
empty.hidden = false;
|
|
739
|
+
return;
|
|
740
|
+
}
|
|
741
|
+
iframe.hidden = false;
|
|
742
|
+
empty.hidden = true;
|
|
743
|
+
iframe.title = this.embedTitle;
|
|
744
|
+
iframe.credentialless = true;
|
|
745
|
+
iframe.src = buildYouTubeEmbedUrl(id, {
|
|
746
|
+
start: this.start,
|
|
747
|
+
autoplay: this.autoplay,
|
|
748
|
+
mute: this.mute,
|
|
749
|
+
controls: this.controls
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
};
|
|
753
|
+
RdYoutubeEmbedElement.tagName = DB_YOUTUBE_EMBED_TAG;
|
|
754
|
+
function registerRdYoutubeEmbed() {
|
|
755
|
+
ensureShadowBase(DB_YOUTUBE_EMBED_TAG);
|
|
756
|
+
defineRosettaElement(DB_YOUTUBE_EMBED_TAG, RdYoutubeEmbedElement);
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
// packages/web-components/src/lib/parse-link-items.ts
|
|
760
|
+
function escapeHtml(value) {
|
|
761
|
+
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
// packages/web-components/src/lib/rosetta-atom-element.ts
|
|
765
|
+
var RosettaAtomElement = class extends HTMLElement {
|
|
766
|
+
constructor() {
|
|
767
|
+
super(...arguments);
|
|
768
|
+
this.eventsWired = false;
|
|
769
|
+
}
|
|
770
|
+
connectedCallback() {
|
|
771
|
+
this.paint();
|
|
772
|
+
if (!this.eventsWired) {
|
|
773
|
+
this.wireEvents();
|
|
774
|
+
this.eventsWired = true;
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
attributeChangedCallback(_name) {
|
|
778
|
+
if (this.isConnected) {
|
|
779
|
+
this.paint();
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
/** Complex props (arrays/objects) synced from framework hosts via setProperty. */
|
|
783
|
+
setProperty(name, value) {
|
|
784
|
+
this[name] = value;
|
|
785
|
+
if (value === void 0 || value === null) {
|
|
786
|
+
this.removeAttribute(name);
|
|
787
|
+
} else if (typeof value === "object") {
|
|
788
|
+
this.setAttribute(name, JSON.stringify(value));
|
|
789
|
+
} else {
|
|
790
|
+
this.setAttribute(name, String(value));
|
|
791
|
+
}
|
|
792
|
+
if (this.isConnected) {
|
|
793
|
+
this.paint();
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
whenReady() {
|
|
797
|
+
return Promise.resolve();
|
|
798
|
+
}
|
|
799
|
+
paint() {
|
|
800
|
+
const preserved = this.preserveLightDomChildren();
|
|
801
|
+
this.innerHTML = this.buildMarkup();
|
|
802
|
+
this.restoreLightDomChildren(preserved);
|
|
803
|
+
this.afterPaint();
|
|
804
|
+
}
|
|
805
|
+
preserveLightDomChildren() {
|
|
806
|
+
const slot = this.querySelector('[data-ref="slot"]');
|
|
807
|
+
if (slot) {
|
|
808
|
+
return [...slot.childNodes];
|
|
809
|
+
}
|
|
810
|
+
return [...this.childNodes];
|
|
811
|
+
}
|
|
812
|
+
restoreLightDomChildren(nodes) {
|
|
813
|
+
const slot = this.querySelector('[data-ref="slot"]');
|
|
814
|
+
if (!slot) {
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
817
|
+
for (const node of nodes) {
|
|
818
|
+
slot.appendChild(node);
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
wireEvents() {
|
|
822
|
+
}
|
|
823
|
+
afterPaint() {
|
|
824
|
+
}
|
|
825
|
+
readAttr(name, fallback = "") {
|
|
826
|
+
return readString(this.getAttribute(name), fallback);
|
|
827
|
+
}
|
|
828
|
+
readBoolAttr(name, fallback = false) {
|
|
829
|
+
if (!this.hasAttribute(name)) {
|
|
830
|
+
return fallback;
|
|
831
|
+
}
|
|
832
|
+
const raw = this.getAttribute(name);
|
|
833
|
+
if (raw === "" || raw === "true") {
|
|
834
|
+
return true;
|
|
835
|
+
}
|
|
836
|
+
if (raw === "false") {
|
|
837
|
+
return false;
|
|
838
|
+
}
|
|
839
|
+
return fallback;
|
|
840
|
+
}
|
|
841
|
+
readNumAttr(name, fallback) {
|
|
842
|
+
return readNumber(this.getAttribute(name), fallback);
|
|
843
|
+
}
|
|
844
|
+
parseJsonAttr(name, fallback) {
|
|
845
|
+
const raw = this.getAttribute(name);
|
|
846
|
+
if (!raw) {
|
|
847
|
+
return fallback;
|
|
848
|
+
}
|
|
849
|
+
try {
|
|
850
|
+
return JSON.parse(raw);
|
|
851
|
+
} catch {
|
|
852
|
+
return fallback;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
esc(value) {
|
|
856
|
+
return escapeHtml(value);
|
|
857
|
+
}
|
|
858
|
+
dispatchDetail(type, detail) {
|
|
859
|
+
this.dispatchEvent(new CustomEvent(type, { detail, bubbles: true, composed: true }));
|
|
860
|
+
}
|
|
861
|
+
};
|
|
862
|
+
|
|
863
|
+
// packages/web-components/src/visual/media/live-capture/rd-live-capture.ts
|
|
864
|
+
var RD_LIVE_CAPTURE_TAG = "rd-live-capture";
|
|
865
|
+
var RdLiveCaptureElement = class extends RosettaAtomElement {
|
|
866
|
+
static get observedAttributes() {
|
|
867
|
+
return ["label"];
|
|
868
|
+
}
|
|
869
|
+
buildMarkup() {
|
|
870
|
+
const label = this.readAttr("label", "Live capture");
|
|
871
|
+
return `
|
|
872
|
+
<section class="rd-media-live-capture" data-testid="rd-media-live-capture">
|
|
873
|
+
<span class="rd-media__label">${this.esc(label)}</span>
|
|
874
|
+
<button type="button" class="rd-button" data-ref="start">Start camera</button>
|
|
875
|
+
<div data-ref="slot"></div>
|
|
876
|
+
</section>`;
|
|
877
|
+
}
|
|
878
|
+
};
|
|
879
|
+
RdLiveCaptureElement.tagName = RD_LIVE_CAPTURE_TAG;
|
|
880
|
+
function registerRdLiveCapture() {
|
|
881
|
+
defineRosettaElement(RD_LIVE_CAPTURE_TAG, RdLiveCaptureElement);
|
|
882
|
+
}
|
|
883
|
+
|
|
470
884
|
// packages/web-components/src/visual/media/index.ts
|
|
471
885
|
function registerRosettaDashMediaElements() {
|
|
472
886
|
registerRdVideoSource();
|
|
473
887
|
registerRdEquirectViewport();
|
|
888
|
+
registerRdYoutubeEmbed();
|
|
889
|
+
registerRdLiveCapture();
|
|
474
890
|
}
|
|
475
891
|
export {
|
|
476
892
|
DB_EQUIRECT_VIEWPORT_TAG,
|
|
477
893
|
DB_VIDEO_SOURCE_TAG,
|
|
894
|
+
DB_YOUTUBE_EMBED_TAG,
|
|
895
|
+
RD_LIVE_CAPTURE_TAG,
|
|
478
896
|
RdEquirectViewportElement,
|
|
897
|
+
RdLiveCaptureElement,
|
|
479
898
|
RdVideoSourceElement,
|
|
899
|
+
RdYoutubeEmbedElement,
|
|
480
900
|
registerRdEquirectViewport,
|
|
901
|
+
registerRdLiveCapture,
|
|
481
902
|
registerRdVideoSource,
|
|
903
|
+
registerRdYoutubeEmbed,
|
|
482
904
|
registerRosettaDashMediaElements
|
|
483
905
|
};
|
|
484
906
|
//# sourceMappingURL=media.js.map
|