@srgssr/share-button 0.1.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/LICENSE +21 -0
- package/README.md +242 -0
- package/dist/lang/de.json +21 -0
- package/dist/lang/en.json +21 -0
- package/dist/lang/fr.json +21 -0
- package/dist/lang/it.json +21 -0
- package/dist/lang/rm.json +21 -0
- package/dist/share-button.cjs +24 -0
- package/dist/share-button.cjs.map +1 -0
- package/dist/share-button.js +890 -0
- package/dist/share-button.js.map +1 -0
- package/dist/share-button.min.css +1 -0
- package/dist/share-button.min.css.map +1 -0
- package/dist/share-button.umd.min.js +24 -0
- package/dist/share-button.umd.min.js.map +1 -0
- package/package.json +56 -0
- package/scss/share-button.scss +223 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-button.js","names":["i","e","t","DOMParser","parseFromString","documentElement","SVGElement","Error","a","o","apply","arguments","n","fetch","mode","ok","status","statusText","text","s","c","trim","URL","parse","href","startsWith","l","u","s","e","c","apply","arguments","i","icon","t","iconName","n","options","setIcon","r","el","querySelector","classList","toggle","l","u","add","replaceChildren","d","log","createLogger","f","getComponent","p","constructor","appendIcon","catch","error","buildCSSClass","VERSION","o","registerComponent","m","h","g","createEl","Object","assign","className","player_","options_","experimentalSvgIcons","appendChild","dom","videojs","embedIcon","facebookIcon","linkIcon","linkedinIcon","mailIcon","whatsappIcon","xIcon","SvgComponent","getComponent","log","createLogger","ShareButton","constructor","player","options","on","handleClick","createEl","tag","props","attributes","error","Error","title","target","rel","el","obj","merge","href","getHref","localize","prepend","dom","className","textContent","append","label","setUrlGenerator","generateUrl","generateUrl_","updateHref","url","buildUrl","shareText","_ref","_this$options$shareTe","_this$parentComponent","parentComponent_","document","trigger","type","bubbles","buildCSSClass","handleLanguagechange","$","prototype","options_","FacebookShareButton","icon","iconName","encodeURIComponent","XShareButton","text","LinkedinShareButton","WhatsappShareButton","EmailShareButton","encodedText","CopyLinkShareButton","event","preventDefault","copyText","textToCopy","_navigator$clipboard","navigator","clipboard","writeText","warn","Promise","resolve","catch","EmbedShareButton","buildEmbedCode","registerComponent","videojs","Component","getComponent","ShareButtonCollection","setUrlGenerator","generateUrl","children","forEach","child","_child$setUrlGenerato","call","prototype","options_","className","shareText","undefined","registerComponent","de","en","fr","it","rm","videojs","extendLanguage","code","data","_videojs$options$lang","addLanguage","_objectSpread","options","language","videojs","Component","getComponent","baseUrl","player","component","configuredUrl","window","location","href","url","options","context","getMediaComposition","mediaComposition","getMainChapter","_getMediaComposition","_getMediaComposition$","call","getSubdivisions","_getMediaComposition$2","_getMediaComposition2","_getMediaComposition3","containsTime","segment","time","markIn","markOut","getCurrentSubdivision","filter","blockReason","currentTime","pop","getSourceMediaData","_player$currentSource","currentSource","mediaData","getCurrentMedia","ShareUrlOptions","constructor","render","on","updateOptionsState","createEl","role","localize","selected","defaultOption","entries","toggleClass","length","el","replaceChildren","map","name","option","createOption","includeCurrentTime","Object","isOptionHidden","isHidden","isOptionDisabled","isDisabled","Boolean","disabled","_entries$","preferred","some","checked","_option$title","id","label","dom","className","title","for","append","type","value","textContent","input","$","_this$$","forEach","selectDefaultOption","trigger","_this$player$currentS","_this$player","currentMedia","currentSubdivision","mainChapter","subdivisions","generateUrl","handleLanguagechange","setAttribute","prototype","options_","undefined","episode","URL","searchParams","set","Math","floor","toString","registerComponent","videojs","ModalDialog","getComponent","ShareModal","constructor","player","options","handleOutsideClick","bind","fill","render","dispose","unbindOutsideClick","buildCSSClass","title_","createTitle","urlOptions_","addChild","shareUrlOptions","collection_","shareButtonCollection","on","updateUrlGenerator","handleShare","_this$options$title","title","componentClass","className","update","localize","open","bindOutsideClick","close","setUrlGenerator","generateUrl","document","addEventListener","removeEventListener","event","isOwnClick","el","contains","target","handleLanguagechange","_this$options$title2","_this$options$title3","prototype","options_","pauseOnOpen","temporary","registerComponent","videojs","version","SvgButton","getComponent","log","createLogger","ShareToggle","constructor","player","options","ready","bindShareModal","modal","getChild","warn","on","hide","show","toggleClass","opened","handleClick","event","shareModal","open","Error","buildCSSClass","VERSION","prototype","options_","controlText","iconName","registerComponent"],"sources":["../../web-suite-utils/dist/web-suite-utils.js","../../package.json","../../src/svg-icon-loader.js","../../src/svg-button.js","../../src/svg-component.js","../src/share-button.js","../src/share-button-collection.js","../src/lang/de.json","../src/lang/en.json","../src/lang/fr.json","../src/lang/it.json","../src/lang/rm.json","../src/lang/index.js","../src/share-url-options.js","../src/share-modal.js","../package.json","../src/share-toggle.js"],"sourcesContent":["/**\n * Parses an SVG string into an SVGElement after validating its structure.\n *\n * @param {string} svgString - A raw string expected to contain valid SVG markup.\n * @returns {SVGElement} - The root SVG element parsed from the string.\n * @throws {Error} If the input is not a valid SVG or doesn't have an <svg> root element.\n */\nfunction stringToSvgElement(svgString) {\n const doc = new DOMParser().parseFromString(svgString, 'image/svg+xml');\n const root = doc.documentElement;\n\n if (!(root instanceof SVGElement)) {\n throw new Error('Parsed root is not an SVGElement');\n }\n\n return root;\n}\n\n/**\n * Fetches an SVG from a given URL and parses it into an SVGElement.\n *\n * @param {string} urlString - A URL pointing to an SVG resource.\n * @returns {Promise<SVGElement>} - A promise resolving to the parsed SVG element.\n * @throws {Error} If the fetch fails or the response is not a valid SVG.\n */\nasync function fetchSvgElement(urlString) {\n const res = await fetch(urlString, { mode: 'cors' });\n\n if (!res.ok) {\n throw new Error(`Failed to fetch SVG: ${res.status} ${res.statusText}`);\n }\n\n return stringToSvgElement(await res.text());\n}\n\n/**\n * Parses a string that might be a raw SVG or a URL pointing to an SVG.\n *\n * @param {string} icon - A trimmed string containing either an SVG element or a URL.\n * @returns {Promise<SVGElement>} - A promise resolving to the parsed SVG element.\n * @throws {Error} If the string is neither an SVG nor a valid URL.\n */\nasync function resolveSvgFromString(icon) {\n const trimmed = icon.trim();\n const url = URL.parse(trimmed);\n\n if (url) {\n return await fetchSvgElement(url.href);\n }\n\n if (trimmed.startsWith('<')) {\n return stringToSvgElement(trimmed);\n }\n\n throw new Error(`Provided string is not a URL or an SVG element: ${icon}`);\n}\n\n/**\n * Resolves an icon source to an SVGElement.\n *\n * Accepts:\n * - An actual SVGElement (returned as-is)\n * - A URL object (SVG fetched and parsed)\n * - A string (parsed as a URL or inline SVG)\n *\n * @param {SVGElement | string | URL} icon - The source of the SVG.\n * @returns {Promise<SVGElement>} - A promise resolving to the final SVGElement.\n * @throws {Error} If the input type is invalid or the SVG cannot be resolved.\n */\nexport default async function loadSvgElement(icon) {\n if (icon instanceof SVGElement) {\n return icon;\n }\n\n if (icon instanceof URL) {\n return await fetchSvgElement(icon.href);\n }\n\n if (typeof icon === 'string') {\n return await resolveSvgFromString(icon);\n }\n\n throw new Error(`Invalid icon type provided: ${icon}`);\n}\n","{\n \"name\": \"@srgssr/svg-button\",\n \"version\": \"1.1.3\",\n \"license\": \"MIT\",\n \"author\": \"SRG SSR\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/SRGSSR/pillarbox-web-suite.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"homepage\": \"https://github.com/SRGSSR/pillarbox-web-suite/tree/main/packages/svg-button#readme\",\n \"type\": \"module\",\n \"main\": \"dist/svg-button.cjs\",\n \"browser\": \"dist/svg-button.umd.min.js\",\n \"module\": \"dist/svg-button.js\",\n \"style\": \"./dist/svg-button.min.css\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/svg-button.js\",\n \"require\": \"./dist/svg-button.cjs\"\n },\n \"./*\": \"./*\"\n },\n \"files\": [\n \"dist/*\",\n \"scss/*\"\n ],\n \"keywords\": [\n \"video.js\",\n \"player\"\n ],\n \"scripts\": {\n \"clean\": \"rimraf dist\",\n \"build\": \"npm-run-all clean build:*\",\n \"build:css\": \"sass ./scss/svg-button.scss:dist/svg-button.min.css --style compressed --source-map --load-path node_modules\",\n \"build:lib\": \"vite build --config vite.config.lib.js\",\n \"build:umd\": \"vite build --config vite.config.umd.js\",\n \"github:page\": \"vite build\",\n \"release:ci\": \"semantic-release\",\n \"start\": \" vite --port 4200 --open\",\n \"test\": \"vitest run --coverage --coverage.reporter text\"\n },\n \"dependencies\": {\n \"@srgssr/web-suite-utils\": \"^1.0.0\"\n },\n \"peerDependencies\": {\n \"video.js\": \"^8.0.0\"\n },\n \"devDependencies\": {\n \"@srgssr/pillarbox-web\": \"^1.24.1\"\n }\n}\n","import { loadSvgElement } from '@srgssr/web-suite-utils';\n\n/**\n * Loads and appends an SVG icon into a Video.js component.\n *\n * @param {import('video.js').Component} component - The Video.js component instance.\n */\nexport async function appendSvgIcon(component) {\n const { icon, iconName } = component.options();\n\n if (iconName) component.setIcon(iconName);\n\n const placeholder = component.el().querySelector('.vjs-icon-placeholder');\n\n if (iconName && placeholder) placeholder.classList.toggle(`vjs-icon-${iconName}`, true);\n\n await insertSvgIcon(icon, placeholder);\n}\n\nasync function insertSvgIcon(icon, placeholder) {\n if (!icon || !placeholder) return;\n\n const svg = await loadSvgElement(icon);\n\n svg.classList.add('icon-from-options');\n placeholder.classList.add('vjs-svg-icon');\n placeholder.replaceChildren(svg);\n}\n\n","import videojs from 'video.js';\nimport { version } from '../package.json';\nimport { appendSvgIcon } from './svg-icon-loader.js';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/utils/log.js').default}\n */\nconst log = videojs.log.createLogger('svg-button');\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/component').default}\n */\nconst Button = videojs.getComponent('Button');\n\n/**\n * A helper Video.js button component that supports various strategies\n * for displaying SVG icons.\n *\n * This component is intended to be extended by other custom buttons\n * that want to display an SVG icon via multiple possible inputs:\n *\n * - Raw SVG string\n * - SVGElement instance\n * - URL to an SVG file\n * - icon font via CSS\n * - experimental Video.js SVG icons\n */\nclass SvgButton extends Button {\n\n /**\n * Creates an instance of SvgButton.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object | undefined} options Configuration options for the button.\n * @param {SVGElement|string|URL} [options.icon] An optional icon to be loaded into the button.\n * Can be an SVGElement, a raw SVG string, or a URL to an SVG file.\n * @param {string} [options.iconName] An Optional icon name if using Video.js experimental icon support.\n */\n constructor(player, options) {\n super(player, options);\n\n this.appendIcon().catch((reason) =>\n log.error(`There was a problem loading the provided SVG Icon`, reason));\n }\n\n /**\n * Appends the configured icon to the component element.\n * Uses the {@link appendSvgIcon} helper to handle different icon input formats.\n *\n * Override this function to customize how the SVG icon is appended.\n *\n * @param {Object | undefined} options\n * The parameters used to configure the icon.\n *\n * @param {SVGElement|string|URL} [options.icon]\n * An optional icon to be loaded into the button. Can be an SVGElement,\n * a raw SVG string, or a URL to an SVG file. This will update the\n * current configured icon.\n *\n * @param {string} [options.iconName]\n * A symbolic name for the icon (e.g., `\"play\"`, `\"pause\"`, `\"chromecast\"`).\n * Useful when you want to reference or style icons by name.\n */\n async appendIcon(options = undefined) {\n if (options) {\n const { icon, iconName } = options;\n\n this.options({ icon, iconName });\n }\n\n await appendSvgIcon(this);\n }\n\n /**\n * Builds the CSS class name for the button element.\n *\n * @returns {string} The full CSS class string for this button.\n */\n buildCSSClass() {\n return `vjs-svg-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Static getter for the component version.\n *\n * @returns {string} The current version of the SvgButton component.\n */\n static get VERSION() {\n return version;\n }\n}\n\nvideojs.registerComponent('SvgButton', SvgButton);\n\nexport default SvgButton;\n","import videojs from 'video.js';\nimport { version } from '../package.json';\nimport { appendSvgIcon } from './svg-icon-loader.js';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/utils/log.js').default}\n */\nconst log = videojs.log.createLogger('svg-component');\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/component').default}\n */\nconst Component = videojs.getComponent('Component');\n\n/**\n * A helper Video.js component that supports various strategies\n * for displaying SVG icons.\n *\n * This component is intended to be extended by other custom components\n * that want to display an SVG icon via multiple possible inputs:\n *\n * - Raw SVG string\n * - SVGElement instance\n * - URL to an SVG file\n * - icon font via CSS\n * - experimental Video.js SVG icons\n */\nclass SvgComponent extends Component {\n /**\n * Creates an instance of SvgComponent.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options Configuration options for the component.\n * @param {SVGElement|string|URL} [options.icon] An optional icon to be loaded into the component.\n * Can be an SVGElement, a raw SVG string, or a URL to an SVG file.\n * @param {string} [options.iconName] An Optional icon name if using Video.js experimental icon support.\n */\n constructor(player, options) {\n super(player, options);\n\n this.appendIcon().catch((reason) =>\n log.error(`There was a problem loading the provided SVG Icon`, reason));\n }\n\n /**\n * Appends the configured icon to the component element.\n * Uses the {@link appendSvgIcon} helper to handle different icon input formats.\n *\n * Override this function to customize how the SVG icon is appended.\n *\n * @param {Object | undefined} options\n * The parameters used to configure the icon.\n *\n * @param {SVGElement|string|URL} [options.icon]\n * An optional icon to be loaded into the button. Can be an SVGElement,\n * a raw SVG string, or a URL to an SVG file. This will update the\n * current configured icon.\n *\n * @param {string} [options.iconName]\n * A symbolic name for the icon (e.g., `\"play\"`, `\"pause\"`, `\"chromecast\"`).\n * Useful when you want to reference or style icons by name.\n */\n async appendIcon(options = undefined) {\n if (options) {\n const { icon, iconName } = options;\n\n this.options({ icon, iconName });\n }\n\n await appendSvgIcon(this);\n }\n\n /**\n * Creates the DOM element for this component.\n *\n * This overrides the base `createEl` to:\n * - Apply the component's CSS class.\n * - Add a `.vjs-icon-placeholder` span if experimental SVG icons are not enabled.\n *\n * @param {string} [tag] The HTML tag name to use for the element (defaults to `'div'` if not specified by super).\n * @param {Object} [props={}] An object of element properties (such as `className`).\n * @param {Object} [attributes={}] An object of element attributes (such as `aria-hidden`).\n *\n * @returns {Element} The created DOM element for this component.\n */\n createEl(tag, props = {}, attributes = {}) {\n props = Object.assign({ className: this.buildCSSClass() }, props);\n\n const el = super.createEl(tag, props, attributes);\n\n if (!this.player_.options_.experimentalSvgIcons) {\n el.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-icon-placeholder'\n }, {\n 'aria-hidden': true\n }));\n }\n\n return el;\n }\n\n /**\n * Builds the CSS class name for the component element.\n *\n * @returns {string} The full CSS class string for this component.\n */\n buildCSSClass() {\n return `vjs-svg-component ${super.buildCSSClass()}`;\n }\n\n /**\n * Static getter for the component version.\n *\n * @returns {string} The current version of the SvgComponent component.\n */\n static get VERSION() {\n return version;\n }\n}\n\nvideojs.registerComponent('SvgComponent', SvgComponent);\n\nexport default SvgComponent;\n","import videojs from 'video.js';\nimport '@srgssr/svg-button';\nimport embedIcon from '../assets/embed.svg?raw';\nimport facebookIcon from '../assets/facebook.svg?raw';\nimport linkIcon from '../assets/link.svg?raw';\nimport linkedinIcon from '../assets/linkedin.svg?raw';\nimport mailIcon from '../assets/mail.svg?raw';\nimport whatsappIcon from '../assets/whatsapp.svg?raw';\nimport xIcon from '../assets/x.svg?raw';\n\n/**\n * @ignore\n * @type {typeof import('@srgssr/svg-button').SvgComponent}\n */\nconst SvgComponent = videojs.getComponent('SvgComponent');\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/utils/log.js').default}\n */\nconst log = videojs.log.createLogger('share-button');\n\n/**\n * A platform share button. It receives a generated media URL and wraps it for\n * its own platform. The element is a link so the browser handles the\n * navigation, `target` and `rel` natively.\n */\nclass ShareButton extends SvgComponent {\n /**\n * Creates one platform share button.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The button options.\n * @param {string} [options.label] The visible label displayed below the icon.\n * @param {string} [options.title] The accessible title of the link.\n * @param {SVGElement|string|URL} [options.icon] The icon displayed by the button.\n * @param {string} [options.iconName] The icon name when using Video.js experimental SVG icons.\n * @param {string} [options.target='_blank'] The `target` attribute of the link.\n * @param {string} [options.rel='noopener noreferrer'] The `rel` attribute of the link.\n * @param {string|function(player, button): string} [options.shareText] The text shared alongside the URL.\n * @param {function(url, text, player, button): string} options.buildUrl Builds the platform URL.\n */\n constructor(player, options = {}) {\n super(player, options);\n\n this.on('click', this.handleClick);\n }\n\n /**\n * Creates the link element.\n *\n * @param {string} [tag='a'] The HTML tag name, must be `a`.\n * @param {Object} [props={}] Additional element properties.\n * @param {Object} [attributes={}] Additional element attributes.\n *\n * @returns {HTMLAnchorElement} The created anchor element.\n */\n createEl(tag = 'a', props = {}, attributes = {}) {\n if (tag !== 'a') {\n log.error(`Creating a ShareButton with an HTML element of ${tag} is not supported; the element must be an 'a'`);\n throw new Error(`'${tag}' is not supported for ShareButton`);\n }\n\n const { title, target, rel } = this.options();\n const el = super.createEl(tag, props, videojs.obj.merge({\n href: this.getHref(),\n title: this.localize(title),\n target,\n rel\n }, attributes));\n\n el.prepend(videojs.dom.createEl('span', {\n className: 'vjs-control-text',\n textContent: this.localize(title)\n }));\n el.append(videojs.dom.createEl('span', {\n className: 'vjs-share-button-title',\n textContent: this.localize(this.options().label)\n }));\n\n return el;\n }\n\n /**\n * Receives the URL generator selected by `ShareUrlOptions`.\n *\n * @param {Function} generateUrl The URL generator.\n */\n setUrlGenerator(generateUrl) {\n this.generateUrl_ = generateUrl;\n this.updateHref();\n }\n\n /**\n * Returns the generated media URL, or an empty string when no generator has\n * been provided yet.\n *\n * @returns {string} The generated media URL.\n */\n generateUrl() {\n return typeof this.generateUrl_ === 'function' ? this.generateUrl_() : '';\n }\n\n /**\n * Returns the platform URL built from the generated media URL.\n *\n * @returns {string} The platform URL.\n */\n getHref() {\n const url = this.generateUrl();\n\n if (!url) return '';\n\n try {\n const { buildUrl } = this.options();\n\n return buildUrl(url, this.shareText(), this.player(), this);\n } catch (error) {\n log.error('Error building the share url:', error);\n }\n\n return '';\n }\n\n /**\n * Returns the text shared alongside the URL.\n *\n * @returns {string} The share text.\n */\n shareText() {\n const shareText = this.options().shareText ??\n this.parentComponent_?.options().shareText ??\n document.title;\n\n return typeof shareText === 'function' ?\n shareText(this.player(), this) :\n shareText;\n }\n\n /**\n * Updates the link `href`.\n */\n updateHref() {\n this.el().href = this.getHref();\n }\n\n /**\n * Notifies that a share action happened. The event bubbles so the modal\n * and the player can react to it.\n */\n handleClick() {\n this.trigger({ type: 'share', bubbles: true });\n }\n\n /**\n * Builds the CSS class string for the button.\n *\n * @returns {string} The CSS class string.\n */\n buildCSSClass() {\n return `vjs-share-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Updates the localized texts when the player language changes.\n */\n handleLanguagechange() {\n const { title, label } = this.options();\n\n this.el().title = this.localize(title);\n this.$('.vjs-control-text').textContent = this.localize(title);\n this.$('.vjs-share-button-title').textContent = this.localize(label);\n }\n}\n\nShareButton.prototype.options_ = {\n target: '_blank',\n rel: 'noopener noreferrer',\n buildUrl: url => url\n};\n\n/**\n * Shares the media URL on Facebook.\n */\nclass FacebookShareButton extends ShareButton {}\nFacebookShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-facebook',\n label: 'Facebook',\n title: 'Share on Facebook',\n icon: facebookIcon,\n iconName: 'facebook',\n buildUrl: url =>\n `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}`\n }\n);\n\n/**\n * Shares the media URL and the share text on X.\n */\nclass XShareButton extends ShareButton {}\nXShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-x',\n label: 'X',\n title: 'Share on X',\n icon: xIcon,\n iconName: 'x',\n buildUrl: (url, text) =>\n `https://twitter.com/intent/tweet?url=${encodeURIComponent(url)}&text=${encodeURIComponent(text)}`\n }\n);\n\n/**\n * Shares the media URL on LinkedIn.\n */\nclass LinkedinShareButton extends ShareButton {}\nLinkedinShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-linkedin',\n label: 'LinkedIn',\n title: 'Share on LinkedIn',\n icon: linkedinIcon,\n iconName: 'linkedin',\n buildUrl: url =>\n `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(url)}`\n }\n);\n\n/**\n * Shares the media URL and the share text on WhatsApp.\n */\nclass WhatsappShareButton extends ShareButton {}\nWhatsappShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-whatsapp',\n label: 'WhatsApp',\n title: 'Share on WhatsApp',\n icon: whatsappIcon,\n iconName: 'whatsapp',\n buildUrl: (url, text) =>\n `https://api.whatsapp.com/send?text=${encodeURIComponent(`${text} ${url}`)}`\n }\n);\n\n/**\n * Shares the media URL and the share text through the default mail client.\n */\nclass EmailShareButton extends ShareButton {}\nEmailShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-email',\n label: 'E-mail',\n title: 'Share by email',\n icon: mailIcon,\n iconName: 'email',\n target: '_self',\n buildUrl: (url, text) => {\n const encodedText = encodeURIComponent(text);\n\n return `mailto:?subject=${encodedText}&body=${encodedText}%20${encodeURIComponent(url)}`;\n }\n }\n);\n\n/**\n * A share button that copies the generated media URL to the clipboard instead\n * of opening a platform URL.\n */\nclass CopyLinkShareButton extends ShareButton {\n /**\n * Copies the generated media URL and notifies the share action.\n *\n * @param {Event} event The click event.\n */\n handleClick(event) {\n event.preventDefault();\n this.copyText(this.textToCopy());\n super.handleClick(event);\n }\n\n /**\n * Returns the text copied to the clipboard.\n *\n * @returns {string} The generated media URL.\n */\n textToCopy() {\n return this.generateUrl();\n }\n\n /**\n * Copies text to the system clipboard.\n *\n * @param {string} text The text to copy.\n */\n copyText(text) {\n if (!navigator.clipboard?.writeText) {\n log.warn('Clipboard API is unavailable; the text could not be copied.');\n\n return;\n }\n\n Promise.resolve(navigator.clipboard.writeText(text)).catch(error => {\n log.error('The text could not be copied:', error);\n });\n }\n}\nCopyLinkShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-copy',\n label: 'Copy link',\n title: 'Copy link',\n icon: linkIcon,\n iconName: 'copy-link',\n target: '',\n rel: '',\n buildUrl: () => '#'\n }\n);\n\n/**\n * A share button that copies the embed code of the generated media URL.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The button options, on top of the `ShareButton` ones.\n * @param {function(url, player, button): string} [options.buildEmbedCode] Builds the embed code\n * from the generated media URL.\n */\nclass EmbedShareButton extends CopyLinkShareButton {\n /**\n * Returns the embed code copied to the clipboard.\n *\n * @returns {string} The embed code.\n */\n textToCopy() {\n const { buildEmbedCode } = this.options();\n\n return buildEmbedCode(this.generateUrl(), this.player(), this);\n }\n}\nEmbedShareButton.prototype.options_ = videojs.obj.merge(\n CopyLinkShareButton.prototype.options_,\n {\n className: 'vjs-share-button-embed',\n label: 'Embed',\n title: 'Embed',\n icon: embedIcon,\n iconName: 'embed',\n buildEmbedCode: url =>\n `<iframe src=\"${url}\" width=\"560\" height=\"315\" allowfullscreen></iframe>`\n }\n);\n\nvideojs.registerComponent('ShareButton', ShareButton);\nvideojs.registerComponent('FacebookShareButton', FacebookShareButton);\nvideojs.registerComponent('XShareButton', XShareButton);\nvideojs.registerComponent('LinkedinShareButton', LinkedinShareButton);\nvideojs.registerComponent('WhatsappShareButton', WhatsappShareButton);\nvideojs.registerComponent('EmailShareButton', EmailShareButton);\nvideojs.registerComponent('CopyLinkShareButton', CopyLinkShareButton);\nvideojs.registerComponent('EmbedShareButton', EmbedShareButton);\n\nexport {\n CopyLinkShareButton,\n EmailShareButton,\n EmbedShareButton,\n FacebookShareButton,\n LinkedinShareButton,\n ShareButton,\n WhatsappShareButton,\n XShareButton\n};\n\nexport default ShareButton;\n","import videojs from 'video.js';\nimport './share-button.js';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/component').default}\n */\nconst Component = videojs.getComponent('Component');\n\n/**\n * Holds the platform share buttons. The buttons are declared as default\n * children so integrators can add, remove or configure them through the\n * standard Video.js options.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The collection options.\n * @param {string|function(player, button): string} [options.shareText] The text shared by every\n * button that does not define its own, defaults to the document title.\n * @param {string[]} [options.children] The platform buttons to display. Set one to `false` in the\n * options to remove it.\n */\nclass ShareButtonCollection extends Component {\n /**\n * Passes the selected URL generator to every platform button.\n *\n * @param {Function} generateUrl The URL generator.\n */\n setUrlGenerator(generateUrl) {\n this.children().forEach(child => child.setUrlGenerator?.(generateUrl));\n }\n}\n\nShareButtonCollection.prototype.options_ = {\n className: 'vjs-share-button-collection',\n shareText: undefined,\n children: [\n 'facebookShareButton',\n 'xShareButton',\n 'linkedinShareButton',\n 'whatsappShareButton',\n 'emailShareButton',\n 'copyLinkShareButton',\n 'embedShareButton'\n ]\n};\n\nvideojs.registerComponent('ShareButtonCollection', ShareButtonCollection);\n\nexport default ShareButtonCollection;\n","{\n \"Share\": \"Teilen\",\n \"Sharing type\": \"Art des Teilens\",\n \"Close\": \"Schliessen\",\n \"Share episode\": \"Episode teilen\",\n \"Episode\": \"Episode\",\n \"Share the current position\": \"Aktuelle Position teilen\",\n \"Current position\": \"Aktuelle Position\",\n \"Share on Facebook\": \"Auf Facebook teilen\",\n \"Share on X\": \"Auf X teilen\",\n \"Share on LinkedIn\": \"Auf LinkedIn teilen\",\n \"Share on WhatsApp\": \"Auf WhatsApp teilen\",\n \"Share by email\": \"Per E-Mail teilen\",\n \"Copy link\": \"Link kopieren\",\n \"Embed\": \"Einbetten\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-Mail\"\n}\n","{\n \"Share\": \"Share\",\n \"Sharing type\": \"Sharing type\",\n \"Close\": \"Close\",\n \"Share episode\": \"Share episode\",\n \"Episode\": \"Episode\",\n \"Share the current position\": \"Share the current position\",\n \"Current position\": \"Current position\",\n \"Share on Facebook\": \"Share on Facebook\",\n \"Share on X\": \"Share on X\",\n \"Share on LinkedIn\": \"Share on LinkedIn\",\n \"Share on WhatsApp\": \"Share on WhatsApp\",\n \"Share by email\": \"Share by email\",\n \"Copy link\": \"Copy link\",\n \"Embed\": \"Embed\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-mail\"\n}\n","{\n \"Share\": \"Partager\",\n \"Sharing type\": \"Type de partage\",\n \"Close\": \"Fermer\",\n \"Share episode\": \"Partager l'épisode\",\n \"Episode\": \"Épisode\",\n \"Share the current position\": \"Partager la position courante\",\n \"Current position\": \"Position courante\",\n \"Share on Facebook\": \"Partager sur Facebook\",\n \"Share on X\": \"Partager sur X\",\n \"Share on LinkedIn\": \"Partager sur Linkedin\",\n \"Share on WhatsApp\": \"Partager sur Whatsapp\",\n \"Share by email\": \"Partager par e-mail\",\n \"Copy link\": \"Copier le lien\",\n \"Embed\": \"Embed\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-mail\"\n}\n","{\n \"Share\": \"Condividi\",\n \"Sharing type\": \"Tipo di condivisione\",\n \"Close\": \"Chiudi\",\n \"Share episode\": \"Condividi l'episodio\",\n \"Episode\": \"Episodio\",\n \"Share the current position\": \"Condividi la posizione corrente\",\n \"Current position\": \"Posizione corrente\",\n \"Share on Facebook\": \"Condividi su Facebook\",\n \"Share on X\": \"Condividi su X\",\n \"Share on LinkedIn\": \"Condividi su LinkedIn\",\n \"Share on WhatsApp\": \"Condividi su WhatsApp\",\n \"Share by email\": \"Condividi via e-mail\",\n \"Copy link\": \"Copia il link\",\n \"Embed\": \"Incorpora\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-mail\"\n}\n","{\n \"Share\": \"Cundivider\",\n \"Sharing type\": \"Tip da cundivider\",\n \"Close\": \"Serrar\",\n \"Share episode\": \"Cundivider l'episoda\",\n \"Episode\": \"Episoda\",\n \"Share the current position\": \"Cundivider la posiziun actuala\",\n \"Current position\": \"Posiziun actuala\",\n \"Share on Facebook\": \"Cundivider sin Facebook\",\n \"Share on X\": \"Cundivider sin X\",\n \"Share on LinkedIn\": \"Cundivider sin LinkedIn\",\n \"Share on WhatsApp\": \"Cundivider sin WhatsApp\",\n \"Share by email\": \"Cundivider per e-mail\",\n \"Copy link\": \"Copiar il link\",\n \"Embed\": \"Integrar\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-mail\"\n}\n","import de from './de.json';\nimport en from './en.json';\nimport fr from './fr.json';\nimport it from './it.json';\nimport rm from './rm.json';\nimport videojs from 'video.js';\n\nfunction extendLanguage(code, data) {\n videojs.addLanguage(code, {\n ...videojs.options.language[code] ?? {},\n ...data\n });\n}\n\nextendLanguage('de', de);\nextendLanguage('en', en);\nextendLanguage('fr', fr);\nextendLanguage('it', it);\nextendLanguage('rm', rm);\n","import videojs from 'video.js';\nimport './lang';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/component').default}\n */\nconst Component = videojs.getComponent('Component');\n\nconst baseUrl = (player, component) =>\n configuredUrl(player, component) || window.location.href;\n\nconst configuredUrl = (player, component) => {\n const { url } = component.options();\n\n return typeof url === 'function' ?\n url(player, component, component.context()) :\n url;\n};\n\nconst getMediaComposition = (player) =>\n player.options().mediaComposition;\n\nconst getMainChapter = (player) =>\n getMediaComposition(player)?.getMainChapter?.();\n\nconst getSubdivisions = (player) =>\n getMediaComposition(player)?.getSubdivisions?.() ?? [];\n\nconst containsTime = (segment, time) =>\n time >= segment.markIn / 1000 && time < segment.markOut / 1000;\n\nconst getCurrentSubdivision = (player) =>\n getSubdivisions(player)\n .filter((segment) => !segment.blockReason)\n .filter((segment) => containsTime(segment, player.currentTime()))\n .pop();\n\nconst getSourceMediaData = (player) => player.currentSource()?.mediaData;\n\nconst getCurrentMedia = (player) =>\n getMainChapter(player) ||\n getSourceMediaData(player);\n\n/**\n * A radio group selecting which URL is shared. The selected option generates\n * the media URL that the share buttons wrap for their own platform.\n *\n * The native `change` event of the radio inputs bubbles up to this component\n * element, listen to it to be notified when the selection changes.\n */\nclass ShareUrlOptions extends Component {\n /**\n * Creates the URL option radio group.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The URL option configuration.\n * @param {string|function(player, component, context): string} [options.url] The base URL used to\n * generate the share URLs, defaults to the current page URL.\n * @param {boolean} [options.includeCurrentTime=false] Enables the current position option.\n * @param {string} [options.defaultOption] The initially selected option, `'currentTime'` when the\n * current position is enabled, `'episode'` otherwise.\n * @param {Object} [options.options] The available options, keyed by name. Each one declares a\n * `label`, a `title`, a `generateUrl(player, component)` and optionally `isHidden(player, component)`,\n * `isDisabled(player, component)` or a static `disabled`. Set an entry to `false` to remove it.\n */\n constructor(player, options = {}) {\n super(player, options);\n this.render();\n this.on(this.player(), 'timeupdate', this.updateOptionsState);\n }\n\n /**\n * Creates the component element.\n *\n * @returns {HTMLElement} The radio group element.\n */\n createEl() {\n return super.createEl('div', {}, {\n role: 'radiogroup',\n 'aria-label': this.localize('Sharing type')\n });\n }\n\n /**\n * Renders the enabled options. The group is hidden when there is nothing\n * to choose from.\n *\n * @param {string} [selected] The name of the checked option.\n */\n render(selected = this.defaultOption()) {\n const entries = this.entries();\n\n this.toggleClass('vjs-hidden', entries.length <= 1);\n this.el().replaceChildren(...entries.map(\n ([name, option]) => this.createOption(name, option, name === selected)\n ));\n }\n\n /**\n * Returns the enabled URL option entries.\n *\n * @returns {Array} The enabled `[name, option]` pairs.\n */\n entries() {\n const { options, includeCurrentTime } = this.options();\n\n return Object.entries(options).filter(([name, option]) =>\n option !== false &&\n !this.isOptionHidden(option) &&\n (name !== 'currentTime' || includeCurrentTime));\n }\n\n /**\n * Returns whether an option should be hidden.\n *\n * @param {Object} option The option config.\n *\n * @returns {boolean} True when hidden.\n */\n isOptionHidden(option) {\n return typeof option.isHidden === 'function' ?\n option.isHidden(this.player(), this) :\n false;\n }\n\n /**\n * Returns whether an option is currently disabled.\n *\n * @param {Object} option The option config.\n *\n * @returns {boolean} True when disabled.\n */\n isOptionDisabled(option) {\n return typeof option.isDisabled === 'function' ?\n option.isDisabled(this.player(), this) :\n Boolean(option.disabled);\n }\n\n /**\n * Returns the name of the option checked by default. Disabled options are\n * never selected by default.\n *\n * @returns {string} The default option name.\n */\n defaultOption() {\n const { defaultOption, includeCurrentTime } = this.options();\n const preferred = defaultOption ??\n (includeCurrentTime ? 'currentTime' : 'episode');\n const entries = this.entries()\n .filter(([, option]) => !this.isOptionDisabled(option));\n\n return entries.some(([name]) => name === preferred) ?\n preferred :\n entries[0]?.[0];\n }\n\n /**\n * Creates one radio option.\n *\n * @param {string} name The option name.\n * @param {Object} option The option configuration.\n * @param {boolean} checked Whether the option is checked.\n *\n * @returns {HTMLLabelElement} The option label wrapping the radio input.\n */\n createOption(name, option, checked) {\n const id = `${this.id()}_${name}`;\n const label = videojs.dom.createEl('label', {\n className: 'vjs-share-url-option-label',\n title: this.localize(option.title ?? option.label)\n }, { for: id });\n\n label.append(\n videojs.dom.createEl('input', {\n className: 'vjs-share-url-option-input',\n checked,\n disabled: this.isOptionDisabled(option)\n }, {\n id,\n type: 'radio',\n name: `${this.id()}_url_option`,\n value: name\n }),\n videojs.dom.createEl('span', {\n textContent: this.localize(option.label)\n })\n );\n\n return label;\n }\n\n /**\n * Returns the radio input of an option.\n *\n * @param {string} name The option name.\n *\n * @returns {HTMLInputElement|null} The radio input, when rendered.\n */\n input(name) {\n return this.$(`.vjs-share-url-option-input[value=\"${name}\"]`);\n }\n\n /**\n * Returns the name of the selected option.\n *\n * @returns {string|undefined} The selected option name.\n */\n selected() {\n return this.$('.vjs-share-url-option-input:checked')?.value;\n }\n\n /**\n * Refreshes the disabled state of the rendered options, falling back to the\n * default option when the selected one becomes disabled.\n */\n updateOptionsState() {\n this.entries().forEach(([name, option]) => {\n const input = this.input(name);\n\n if (input) input.disabled = this.isOptionDisabled(option);\n });\n\n const selected = this.options().options[this.selected()];\n\n if (selected && this.isOptionDisabled(selected)) {\n this.selectDefaultOption();\n }\n }\n\n /**\n * Selects the current default URL option.\n */\n selectDefaultOption() {\n const input = this.input(this.defaultOption());\n\n if (!input) return;\n\n input.checked = true;\n this.trigger('change');\n }\n\n /**\n * Returns media information available to URL builders.\n *\n * @returns {Object} The current media context.\n */\n context() {\n const currentMedia = getCurrentMedia(this.player());\n\n return {\n currentMedia,\n currentSource: this.player().currentSource?.(),\n currentSubdivision: getCurrentSubdivision(this.player()),\n currentTime: this.player().currentTime(),\n mainChapter: getMainChapter(this.player()),\n mediaData: getSourceMediaData(this.player()),\n subdivisions: getSubdivisions(this.player()),\n title: currentMedia?.title\n };\n }\n\n /**\n * Generates the share URL of the selected option.\n *\n * @returns {string} The share URL.\n */\n generateUrl() {\n const option = this.options().options[this.selected()];\n\n return option ? option.generateUrl(this.player(), this) : '';\n }\n\n /**\n * Re-renders the options with the current language, keeping the selection.\n */\n handleLanguagechange() {\n this.el().setAttribute('aria-label', this.localize('Sharing type'));\n this.render(this.selected());\n }\n}\n\nShareUrlOptions.prototype.options_ = {\n className: 'vjs-share-url-options',\n defaultOption: undefined,\n includeCurrentTime: false,\n url: undefined,\n options: {\n episode: {\n label: 'Episode',\n title: 'Share episode',\n generateUrl: (player, component) => baseUrl(player, component)\n },\n currentTime: {\n label: 'Current position',\n title: 'Share the current position',\n generateUrl: (player, component) => {\n const url = new URL(baseUrl(player, component));\n\n url.searchParams.set('startTime', Math.floor(player.currentTime()));\n\n return url.toString();\n }\n }\n }\n};\n\nvideojs.registerComponent('ShareUrlOptions', ShareUrlOptions);\n\nexport default ShareUrlOptions;\n","import videojs from 'video.js';\nimport './lang';\nimport './share-button-collection.js';\nimport './share-url-options.js';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/modal-dialog').default}\n */\nconst ModalDialog = videojs.getComponent('ModalDialog');\n\n/**\n * A small share modal anchored to the top-right corner of the player.\n */\nclass ShareModal extends ModalDialog {\n /**\n * Creates an instance of ShareModal.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The modal options, on top of the `ModalDialog` ones.\n * @param {string} [options.title='Share'] The title displayed at the top of the modal.\n * @param {boolean} [options.pauseOnOpen=false] Whether opening the modal pauses the player.\n * @param {boolean} [options.temporary=false] Whether the modal is disposed once closed.\n * @param {Object} [options.shareUrlOptions={}] The `ShareUrlOptions` child configuration.\n * @param {Object} [options.shareButtonCollection={}] The `ShareButtonCollection` child configuration.\n */\n constructor(player, options = {}) {\n super(player, options);\n\n this.handleOutsideClick = this.handleOutsideClick.bind(this);\n this.fill();\n this.render();\n }\n\n /**\n * Cleans up the modal and removes its event listeners.\n */\n dispose() {\n this.unbindOutsideClick();\n super.dispose();\n }\n\n /**\n * Builds the CSS class string for the modal.\n *\n * @returns {string} The CSS class string.\n */\n buildCSSClass() {\n return `vjs-share-modal ${super.buildCSSClass()}`;\n }\n\n /**\n * Renders the modal content.\n */\n render() {\n this.title_ = this.createTitle();\n this.urlOptions_ = this.addChild(\n 'ShareUrlOptions',\n this.options().shareUrlOptions\n );\n this.collection_ = this.addChild(\n 'ShareButtonCollection',\n this.options().shareButtonCollection\n );\n\n this.on(this.urlOptions_, 'change', this.updateUrlGenerator);\n this.on('share', this.handleShare);\n this.updateUrlGenerator();\n }\n\n /**\n * Creates the modal title.\n *\n * @returns {Component} The title component.\n */\n createTitle() {\n const title = this.addChild('ShareModalTitle', {\n componentClass: 'TitleBar',\n className: 'vjs-share-title'\n });\n\n title.update({\n title: this.localize(this.options().title ?? 'Share')\n });\n\n return title;\n }\n\n /**\n * Opens the modal.\n */\n open() {\n super.open();\n this.bindOutsideClick();\n this.updateUrlGenerator();\n }\n\n /**\n * Closes the modal.\n */\n close() {\n this.unbindOutsideClick();\n super.close();\n }\n\n /**\n * Updates the collection URL generator.\n */\n updateUrlGenerator() {\n this.collection_.setUrlGenerator(() => this.urlOptions_.generateUrl());\n }\n\n /**\n * Closes the modal after a share action. The `share` event bubbles from the\n * platform buttons.\n */\n handleShare() {\n this.close();\n }\n\n /**\n * Binds the outside click listener.\n */\n bindOutsideClick() {\n document.addEventListener('pointerdown', this.handleOutsideClick);\n }\n\n /**\n * Removes the outside click listener.\n */\n unbindOutsideClick() {\n document.removeEventListener('pointerdown', this.handleOutsideClick);\n }\n\n /**\n * Closes the modal when clicking outside the share modal.\n *\n * @param {PointerEvent} event The pointer event.\n */\n handleOutsideClick(event) {\n if (this.isOwnClick(event)) return;\n\n this.close();\n }\n\n /**\n * Returns whether the click happened inside the share modal.\n *\n * @param {PointerEvent} event The pointer event.\n *\n * @returns {boolean} True when the click belongs to the share modal.\n */\n isOwnClick(event) {\n return this.el().contains(event.target);\n }\n\n handleLanguagechange() {\n this.el().title = this.localize(this.options().title ?? 'Share');\n this.title_.update({\n title: this.localize(this.options().title ?? 'Share')\n });\n }\n}\n\nShareModal.prototype.options_ = {\n pauseOnOpen: false,\n temporary: false,\n title: 'Share',\n shareUrlOptions: {},\n shareButtonCollection: {}\n};\n\nvideojs.registerComponent('ShareModal', ShareModal);\n\nexport default ShareModal;\n","{\n \"name\": \"@srgssr/share-button\",\n \"version\": \"0.0.1\",\n \"license\": \"MIT\",\n \"author\": \"SRG SSR\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/SRGSSR/pillarbox-web-suite.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"homepage\": \"https://github.com/SRGSSR/pillarbox-web-suite/tree/main/packages/share-button#readme\",\n \"type\": \"module\",\n \"main\": \"dist/share-button.cjs\",\n \"browser\": \"dist/share-button.umd.min.js\",\n \"module\": \"dist/share-button.js\",\n \"style\": \"./dist/share-button.min.css\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/share-button.js\",\n \"require\": \"./dist/share-button.cjs\"\n },\n \"./*\": \"./*\"\n },\n \"files\": [\n \"dist/*\",\n \"scss/*\"\n ],\n \"keywords\": [\n \"video.js\",\n \"player\",\n \"share\",\n \"videojs-component\"\n ],\n \"scripts\": {\n \"clean\": \"rimraf dist\",\n \"build\": \"npm-run-all clean build:*\",\n \"build:css\": \"sass ./scss/share-button.scss:dist/share-button.min.css --style compressed --source-map --load-path node_modules\",\n \"build:lib\": \"vite build --config vite.config.lib.js\",\n \"build:umd\": \"vite build --config vite.config.umd.js\",\n \"github:page\": \"vite build\",\n \"release:ci\": \"semantic-release\",\n \"start\": \" vite --port 4200 --open\",\n \"test\": \"vitest run --silent --coverage --coverage.reporter text\"\n },\n \"dependencies\": {\n \"@srgssr/svg-button\": \"^1.1.3\"\n },\n \"peerDependencies\": {\n \"video.js\": \"^8.0.0\"\n },\n \"devDependencies\": {\n \"@srgssr/pillarbox-web\": \"^1.36.1\"\n }\n}\n","import videojs from 'video.js';\nimport '@srgssr/svg-button';\nimport { version } from '../package.json';\n\n/**\n * @ignore\n * @type {typeof import('@srgssr/svg-button').SvgButton}\n */\nconst SvgButton = videojs.getComponent('SvgButton');\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/utils/log.js').default}\n */\nconst log = videojs.log.createLogger('share-toggle');\n\n/**\n * A Video.js button that opens the share modal. The button follows the modal\n * state: it is hidden while the modal is open and shown again once closed.\n */\nclass ShareToggle extends SvgButton {\n /**\n * Creates an instance of ShareToggle.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The button options, on top of the `SvgButton` ones.\n * @param {string} [options.controlText='Share'] The accessible text of the button.\n * @param {SVGElement|string|URL} [options.icon] The icon displayed by the button.\n * @param {string} [options.iconName='share'] The icon name when using Video.js experimental SVG icons.\n */\n constructor(player, options = {}) {\n super(player, options);\n\n // The modal may be initialized after this button depending on the order\n // of the player options, defer the binding until the player is ready.\n this.player().ready(() => this.bindShareModal());\n }\n\n /**\n * Listens to the share modal lifecycle events to follow its state.\n */\n bindShareModal() {\n const modal = this.player().getChild('ShareModal');\n\n if (!modal) {\n log.warn('ShareToggle requires a ShareModal child on the player');\n\n return;\n }\n\n this.on(modal, 'modalopen', this.hide);\n this.on(modal, 'modalclose', this.show);\n this.toggleClass('vjs-hidden', modal.opened());\n }\n\n /**\n * Handles click events on the ShareToggle by opening the share modal.\n *\n * @param {Event} event The click event.\n */\n handleClick(event) {\n super.handleClick(event);\n this.shareModal().open();\n }\n\n /**\n * Returns the modal controlled by this toggle.\n *\n * @returns {import('./share-modal.js').default} The share modal.\n */\n shareModal() {\n const modal = this.player().getChild('ShareModal');\n\n if (!modal) {\n throw new Error('ShareToggle requires a ShareModal child on the player');\n }\n\n return modal;\n }\n\n /**\n * Builds the CSS class string for the toggle.\n *\n * @returns {string} The CSS class string.\n */\n buildCSSClass() {\n return `vjs-share-toggle ${super.buildCSSClass()}`;\n }\n\n /**\n * Returns the package version.\n *\n * @returns {string} The current package version.\n */\n static get VERSION() {\n return version;\n }\n}\n\nShareToggle.prototype.options_ = {\n controlText: 'Share',\n iconName: 'share'\n};\n\nvideojs.registerComponent('ShareToggle', ShareToggle);\n\nexport default ShareToggle;\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import'@srgssr/svg-button/dist/svg-button.min.css';.vjs-share-modal.vjs-modal-dialog{position:absolute;z-index:50;pointer-events:none;inset:.666em 1.333em auto auto}.vjs-share-modal.vjs-modal-dialog:not(.vjs-hidden){position:absolute;display:flex;align-items:center;height:100%;padding:.6em 0;background:rgba(22,22,22,.95);border-radius:.4em;inset:0}.vjs-share-toggle.vjs-control.vjs-button{position:absolute;top:.666em;right:1.333em;color:#fff;visibility:visible;cursor:pointer;opacity:1;transition:visibility .1s,opacity .1s}.video-js.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-share-toggle.vjs-control.vjs-button{opacity:0;transition:visibility 1s,opacity 1s;pointer-events:none}.vjs-share-modal .vjs-modal-dialog-content{position:relative;top:auto;left:auto;width:100%;max-width:28em;height:auto;max-height:100%;margin:auto;padding:1.4em 1.2em 3.7em;overflow:hidden;border-radius:.4em;pointer-events:auto}.vjs-share-modal .vjs-close-button{position:absolute;top:.45em;right:max(1.333em,(100% - 28em)/2 + 1.333em);z-index:2;display:none;width:2.6em;height:2.4em;padding:0;color:#fff;font-size:1.1em;line-height:2.4em;text-decoration:none;cursor:pointer;pointer-events:auto}.vjs-share-modal.vjs-modal-dialog:not(.vjs-hidden) .vjs-close-button{display:block}.vjs-share-modal .vjs-close-button .vjs-svg-icon{width:1.35em;height:1.35em}.vjs-share-title{font-weight:500;font-size:1.1em;line-height:22px}.vjs-share-modal .vjs-title-bar.vjs-share-title{padding-bottom:0;padding-left:0;background:none}.vjs-share-url-options{display:flex;gap:.5rem;margin:1.1em 0}.vjs-share-url-option-label{display:flex;align-items:center;width:auto;margin-right:1em;font-size:.8em;line-height:1.2em;outline:none;cursor:pointer}.vjs-share-url-option-input:focus-visible,.vjs-share-button:focus-visible{outline:2px solid #fff;outline-offset:2px}.vjs-share-url-option-input{width:1.2em;height:1.2em;margin:0 .3em .1em 0;background-color:#333;border:.1em solid #fff;border-radius:50%;cursor:pointer;appearance:none}.vjs-share-url-option-input:checked{background-image:radial-gradient(circle, #fff 0 42%, transparent 44%)}.vjs-share-button-collection{display:flex;flex-wrap:wrap;gap:.9em 0;align-items:flex-start;justify-content:center}.vjs-share-button-collection .vjs-share-button{display:flex;flex:0 0 25%;flex-direction:column;align-items:center;margin:1.2em 0 0;color:#fff;text-decoration:none;outline:none;cursor:pointer}.vjs-share-button .vjs-icon-placeholder{display:flex;flex:none;align-items:center;justify-content:center;width:1.6em;height:1.6em;font-size:2em;background-color:#333;border-radius:50%}.vjs-share-button .vjs-icon-placeholder svg{display:block;width:.8em;height:.8em}.vjs-share-button-title{display:none;order:1;text-align:center}.vjs-layout-medium .vjs-share-modal.vjs-modal-dialog:not(.vjs-hidden),.vjs-layout-large .vjs-share-modal.vjs-modal-dialog:not(.vjs-hidden),.vjs-layout-x-large .vjs-share-modal.vjs-modal-dialog:not(.vjs-hidden){width:fit-content;max-width:calc(100% - 3.2em);height:auto;padding:0;inset:1em 1.5em auto auto}.vjs-layout-medium .vjs-share-modal .vjs-modal-dialog-content,.vjs-layout-large .vjs-share-modal .vjs-modal-dialog-content,.vjs-layout-x-large .vjs-share-modal .vjs-modal-dialog-content{bottom:0;left:0;width:fit-content;max-width:100%;padding:1.4em 1.2em 2em;overflow:hidden;pointer-events:auto}.vjs-layout-medium .vjs-share-title,.vjs-layout-large .vjs-share-title,.vjs-layout-x-large .vjs-share-title{margin-top:0}.vjs-layout-medium .vjs-share-url-options,.vjs-layout-large .vjs-share-url-options,.vjs-layout-x-large .vjs-share-url-options{margin-top:1.3rem;margin-bottom:1.9em}.vjs-layout-medium .vjs-share-modal .vjs-close-button,.vjs-layout-large .vjs-share-modal .vjs-close-button,.vjs-layout-x-large .vjs-share-modal .vjs-close-button{inset:.45em .55em auto auto}.vjs-layout-large .vjs-share-button-title,.vjs-layout-x-large .vjs-share-button-title{display:block;margin-top:.8em;font-size:1.1em;line-height:1.4em}/*# sourceMappingURL=share-button.min.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../scss/share-button.scss"],"names":[],"mappings":"AAAQ,oDAER,kCACE,kBACA,WACA,oBACA,+BAGF,mDACE,kBACA,aACA,mBACA,YACA,eACA,8BACA,mBACA,QAGF,yCACE,kBACA,WACA,cACA,WACA,mBACA,eACA,UACA,sCAGF,iGACE,UACA,oCACA,oBAGF,2CACE,kBACA,SACA,UACA,WACA,eACA,YACA,gBACA,YACA,0BACA,gBACA,mBACA,oBAGF,mCACE,kBACA,UACA,6CAIA,UACA,aACA,YACA,aACA,UACA,WACA,gBACA,kBACA,qBACA,eACA,oBAGF,qEACE,cAGF,iDACE,aACA,cAGF,iBACE,gBACA,gBACA,iBAGF,gDACE,iBACA,eACA,gBAGF,uBACE,aACA,UACA,eAGF,4BACE,aACA,mBACA,WACA,iBACA,eACA,kBACA,aACA,eAGF,0EAEE,uBACA,mBAGF,4BACE,YACA,aACA,qBACA,sBACA,uBACA,kBACA,eACA,gBAGF,oCACE,sEAGF,6BACE,aACA,eACA,WACA,uBACA,uBAGF,+CACE,aACA,aACA,sBACA,mBACA,iBACA,WACA,qBACA,aACA,eAGF,wCACE,aACA,UACA,mBACA,uBACA,YACA,aACA,cACA,sBACA,kBAGF,4CACE,cACA,WACA,YAGF,wBACE,aACA,QACA,kBAGF,kNAGE,kBACA,6BACA,YACA,UACA,0BAGF,0LAGE,SACA,OACA,kBACA,eACA,wBACA,gBACA,oBAGF,4GAGE,aAGF,8HAGE,kBACA,oBAGF,kKAGE,4BAGF,sFAEE,cACA,gBACA,gBACA","file":"share-button.min.css"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("video.js")):typeof define==`function`&&define.amd?define([`exports`,`video.js`],t):t((e=typeof globalThis<`u`?globalThis:e||self).ShareButton={},e.videojs)})(this,function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var n,r,i,a=Object.create,o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyNames,l=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty;function d(e,t){this.v=e,this.k=t}function f(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function p(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){f(a,r,i,o,s,`next`,e)}function s(e){f(a,r,i,o,s,`throw`,e)}o(void 0)})}}function m(e){var t,n;function r(t,n){try{var a=e[t](n),o=a.value,s=o instanceof d;Promise.resolve(s?o.v:o).then(function(n){if(s){var c=t===`return`?`return`:`next`;if(!o.k||n.done)return r(c,n);n=e[c](n).value}i(a.done?`return`:`normal`,n)},function(e){r(`throw`,e)})}catch(e){i(`throw`,e)}}function i(e,i){switch(e){case`return`:t.resolve({value:i,done:!0});break;case`throw`:t.reject(i);break;default:t.resolve({value:i,done:!1})}(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,i){return new Promise(function(a,o){var s={key:e,arg:i,resolve:a,reject:o,next:null};n?n=n.next=s:(t=n=s,r(e,i))})},typeof e.return!=`function`&&(this.return=void 0)}function h(e){let t=new DOMParser().parseFromString(e,`image/svg+xml`).documentElement;if(!(t instanceof SVGElement))throw Error(`Parsed root is not an SVGElement`);return t}function g(e){return _.apply(this,arguments)}function _(){return _=p(function*(e){let t=yield fetch(e,{mode:`cors`});if(!t.ok)throw Error(`Failed to fetch SVG: ${t.status} ${t.statusText}`);return h(yield t.text())}),_.apply(this,arguments)}function v(){return v=p(function*(e){let t=e.trim(),n=URL.parse(t);if(n)return yield g(n.href);if(t.startsWith(`<`))return h(t);throw Error(`Provided string is not a URL or an SVG element: ${e}`)}),v.apply(this,arguments)}function y(){return y=p(function*(e){if(e instanceof SVGElement)return e;if(e instanceof URL)return yield g(e.href);if(typeof e==`string`)return yield function(e){return v.apply(this,arguments)}(e);throw Error(`Invalid icon type provided: ${e}`)}),y.apply(this,arguments)}function ee(e,t){this.v=e,this.k=t}function b(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function x(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){b(a,r,i,o,s,`next`,e)}function s(e){b(a,r,i,o,s,`throw`,e)}o(void 0)})}}function S(e){var t,n;function r(t,n){try{var a=e[t](n),o=a.value,s=o instanceof ee;Promise.resolve(s?o.v:o).then(function(n){if(s){var c=t===`return`?`return`:`next`;if(!o.k||n.done)return r(c,n);n=e[c](n).value}i(a.done?`return`:`normal`,n)},function(e){r(`throw`,e)})}catch(e){i(`throw`,e)}}function i(e,i){switch(e){case`return`:t.resolve({value:i,done:!0});break;case`throw`:t.reject(i);break;default:t.resolve({value:i,done:!1})}(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,i){return new Promise(function(a,o){var s={key:e,arg:i,resolve:a,reject:o,next:null};n?n=n.next=s:(t=n=s,r(e,i))})},typeof e.return!=`function`&&(this.return=void 0)}r=1,i=(n=t)==null?{}:a(l(n)),t=((e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i,a=c(t),l=0,d=a.length;l<d;l++)i=a[l],u.call(e,i)||i===n||o(e,i,{get:(e=>t[e]).bind(null,i),enumerable:!(r=s(t,i))||r.enumerable});return e})(!r&&n&&n.__esModule&&u.call(n,`default`)?i:o(i,`default`,{value:n,enumerable:!0}),n),m.prototype[typeof Symbol==`function`&&Symbol.asyncIterator||`@@asyncIterator`]=function(){return this},m.prototype.next=function(e){return this._invoke(`next`,e)},m.prototype.throw=function(e){return this._invoke(`throw`,e)},m.prototype.return=function(e){return this._invoke(`return`,e)},S.prototype[typeof Symbol==`function`&&Symbol.asyncIterator||`@@asyncIterator`]=function(){return this},S.prototype.next=function(e){return this._invoke(`next`,e)},S.prototype.throw=function(e){return this._invoke(`throw`,e)},S.prototype.return=function(e){return this._invoke(`return`,e)};var C=`1.1.3`;function w(e){return T.apply(this,arguments)}function T(){return T=x(function*(e){let{icon:t,iconName:n}=e.options();n&&e.setIcon(n);let r=e.el().querySelector(`.vjs-icon-placeholder`);n&&r&&r.classList.toggle(`vjs-icon-${n}`,!0),yield function(e,t){return E.apply(this,arguments)}(t,r)}),T.apply(this,arguments)}function E(){return E=x(function*(e,t){if(!e||!t)return;let n=yield function(e){return y.apply(this,arguments)}(e);n.classList.add(`icon-from-options`),t.classList.add(`vjs-svg-icon`),t.replaceChildren(n)}),E.apply(this,arguments)}var te=t.default.log.createLogger(`svg-button`),ne=t.default.getComponent(`Button`);t.default.registerComponent(`SvgButton`,class extends ne{constructor(e,t){super(e,t),this.appendIcon().catch(e=>te.error(`There was a problem loading the provided SVG Icon`,e))}appendIcon(){var e=this;return x(function*(t=void 0){if(t){let{icon:n,iconName:r}=t;e.options({icon:n,iconName:r})}yield w(e)}).apply(this,arguments)}buildCSSClass(){return`vjs-svg-button ${super.buildCSSClass()}`}static get VERSION(){return C}});var D=t.default.log.createLogger(`svg-component`),O=t.default.getComponent(`Component`);t.default.registerComponent(`SvgComponent`,class extends O{constructor(e,t){super(e,t),this.appendIcon().catch(e=>D.error(`There was a problem loading the provided SVG Icon`,e))}appendIcon(){var e=this;return x(function*(t=void 0){if(t){let{icon:n,iconName:r}=t;e.options({icon:n,iconName:r})}yield w(e)}).apply(this,arguments)}createEl(e,n={},r={}){n=Object.assign({className:this.buildCSSClass()},n);let i=super.createEl(e,n,r);return this.player_.options_.experimentalSvgIcons||i.appendChild(t.default.dom.createEl(`span`,{className:`vjs-icon-placeholder`},{"aria-hidden":!0})),i}buildCSSClass(){return`vjs-svg-component ${super.buildCSSClass()}`}static get VERSION(){return C}});var re=t.default.getComponent(`SvgComponent`),k=t.default.log.createLogger(`share-button`),A=class extends re{constructor(e,t={}){super(e,t),this.on(`click`,this.handleClick)}createEl(e=`a`,n={},r={}){if(e!==`a`)throw k.error(`Creating a ShareButton with an HTML element of ${e} is not supported; the element must be an 'a'`),Error(`'${e}' is not supported for ShareButton`);let{title:i,target:a,rel:o}=this.options(),s=super.createEl(e,n,t.default.obj.merge({href:this.getHref(),title:this.localize(i),target:a,rel:o},r));return s.prepend(t.default.dom.createEl(`span`,{className:`vjs-control-text`,textContent:this.localize(i)})),s.append(t.default.dom.createEl(`span`,{className:`vjs-share-button-title`,textContent:this.localize(this.options().label)})),s}setUrlGenerator(e){this.generateUrl_=e,this.updateHref()}generateUrl(){return typeof this.generateUrl_==`function`?this.generateUrl_():``}getHref(){let e=this.generateUrl();if(!e)return``;try{let{buildUrl:t}=this.options();return t(e,this.shareText(),this.player(),this)}catch(e){k.error(`Error building the share url:`,e)}return``}shareText(){let e=this.options().shareText??this.parentComponent_?.options().shareText??document.title;return typeof e==`function`?e(this.player(),this):e}updateHref(){this.el().href=this.getHref()}handleClick(){this.trigger({type:`share`,bubbles:!0})}buildCSSClass(){return`vjs-share-button ${super.buildCSSClass()}`}handleLanguagechange(){let{title:e,label:t}=this.options();this.el().title=this.localize(e),this.$(`.vjs-control-text`).textContent=this.localize(e),this.$(`.vjs-share-button-title`).textContent=this.localize(t)}};A.prototype.options_={target:`_blank`,rel:`noopener noreferrer`,buildUrl:e=>e};var j=class extends A{};j.prototype.options_=t.default.obj.merge(A.prototype.options_,{className:`vjs-share-button-facebook`,label:`Facebook`,title:`Share on Facebook`,icon:`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M11.9998 2C6.47711 2 2 6.49365 2 12.0367C2 16.7436 5.22874 20.6932 9.58425 21.778V15.104H7.52229V12.0367H9.58425V10.7151C9.58425 7.29899 11.1246 5.7156 14.4662 5.7156C15.0997 5.7156 16.1929 5.84046 16.6401 5.96491V8.74509C16.4041 8.7202 15.9941 8.70775 15.4849 8.70775C13.8454 8.70775 13.2118 9.33123 13.2118 10.952V12.0367H16.4781L15.9169 15.104H13.2118V22C18.1633 21.3998 22 17.1683 22 12.0367C21.9996 6.49365 17.5225 2 11.9998 2Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
4
|
+
`,iconName:`facebook`,buildUrl:e=>`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(e)}`});var M=class extends A{};M.prototype.options_=t.default.obj.merge(A.prototype.options_,{className:`vjs-share-button-x`,label:`X`,title:`Share on X`,icon:`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
5
|
+
<path d="M17.1761 3.86484H19.9362L13.9061 10.7568L21 20.1352H15.4456L11.0951 14.4472L6.11723 20.1352H3.35544L9.80517 12.7635L3 3.86484H8.69545L12.6279 9.06384L17.1761 3.86484ZM16.2073 18.4831H17.7368L7.86441 5.43013H6.2232L16.2073 18.4831Z" fill="currentColor"/>
|
|
6
|
+
</svg>
|
|
7
|
+
`,iconName:`x`,buildUrl:(e,t)=>`https://twitter.com/intent/tweet?url=${encodeURIComponent(e)}&text=${encodeURIComponent(t)}`});var N=class extends A{};N.prototype.options_=t.default.obj.merge(A.prototype.options_,{className:`vjs-share-button-linkedin`,label:`LinkedIn`,title:`Share on LinkedIn`,icon:`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
8
|
+
<path d="M19.6676 3H4.32891C3.59414 3 3 3.58008 3 4.29727V19.6992C3 20.4164 3.59414 21 4.32891 21H19.6676C20.4023 21 21 20.4164 21 19.7027V4.29727C21 3.58008 20.4023 3 19.6676 3ZM8.34023 18.3387H5.66836V9.74648H8.34023V18.3387ZM7.0043 8.57578C6.14648 8.57578 5.45391 7.8832 5.45391 7.02891C5.45391 6.17461 6.14648 5.48203 7.0043 5.48203C7.85859 5.48203 8.55117 6.17461 8.55117 7.02891C8.55117 7.87969 7.85859 8.57578 7.0043 8.57578ZM18.3387 18.3387H15.6703V14.1621C15.6703 13.1672 15.6527 11.884 14.2816 11.884C12.893 11.884 12.682 12.9703 12.682 14.0918V18.3387H10.0172V9.74648H12.5766V10.9207H12.6117C12.9668 10.2457 13.8387 9.53203 15.1359 9.53203C17.8395 9.53203 18.3387 11.3109 18.3387 13.6242V18.3387Z" fill="currentColor"/>
|
|
9
|
+
</svg>
|
|
10
|
+
`,iconName:`linkedin`,buildUrl:e=>`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(e)}`});var P=class extends A{};P.prototype.options_=t.default.obj.merge(A.prototype.options_,{className:`vjs-share-button-whatsapp`,label:`WhatsApp`,title:`Share on WhatsApp`,icon:`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
11
|
+
<path d="M9.43542 6.84128C9.55792 6.83128 9.67129 6.90302 9.72351 7.01413L10.8641 9.43307C10.918 9.54745 10.8939 9.68347 10.8046 9.77292L9.95496 10.6235C9.77112 10.8073 9.71708 11.0936 9.84363 11.3208C10.1539 11.8772 10.5712 12.4137 11.0546 12.9067C11.5475 13.3899 12.0833 13.8077 12.6395 14.1176C12.8666 14.2441 13.1527 14.19 13.3368 14.0063L14.1874 13.1557C14.2768 13.0664 14.4128 13.043 14.5272 13.0971L16.9462 14.2368C17.0573 14.289 17.129 14.4027 17.119 14.5249C17.0928 14.8433 16.9651 15.4815 16.3934 16.0532C14.7798 17.6669 11.8822 15.8421 11.7616 15.77C11.0486 15.3869 10.3709 14.8741 9.72839 14.2319C9.08625 13.5897 8.57333 12.9117 8.19031 12.1987C8.11602 12.0755 6.29465 9.18098 7.9071 7.56784C8.4788 6.99614 9.11696 6.86746 9.43542 6.84128Z" fill="currentColor"/>
|
|
12
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1844 1.77682C17.7071 1.77691 22.1844 6.25418 22.1844 11.7768C22.1844 17.2994 17.707 21.7767 12.1844 21.7768C10.4429 21.7768 8.8058 21.331 7.37976 20.5483L2.18445 21.7768L3.51648 16.7661C2.66957 15.2978 2.18447 13.5937 2.18445 11.7768C2.18445 6.25413 6.66175 1.77682 12.1844 1.77682ZM12.1844 3.56784C7.65091 3.56784 3.97546 7.24328 3.97546 11.7768C3.97555 13.5246 4.52177 15.1448 5.453 16.476L4.59265 19.4096L7.66199 18.6284C8.95882 19.4862 10.5133 19.9848 12.1844 19.9848C16.7178 19.9848 20.3932 16.3101 20.3934 11.7768C20.3934 7.24333 16.7179 3.56792 12.1844 3.56784Z" fill="currentColor"/>
|
|
13
|
+
</svg>
|
|
14
|
+
`,iconName:`whatsapp`,buildUrl:(e,t)=>`https://api.whatsapp.com/send?text=${encodeURIComponent(`${t} ${e}`)}`});var F=class extends A{};F.prototype.options_=t.default.obj.merge(A.prototype.options_,{className:`vjs-share-button-email`,label:`E-mail`,title:`Share by email`,icon:`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
15
|
+
<path d="M20.4977 7.42209L16.2293 10.4005L18.6764 12.6899C18.9809 12.9749 18.9991 13.4556 18.7175 13.7639C18.4359 14.0721 17.9609 14.0913 17.6563 13.8064L14.9617 11.2854L13.5513 12.2712C13.0954 12.5897 12.554 12.7602 12 12.7602C11.5155 12.7601 11.0411 12.6299 10.6248 12.384L10.4497 12.2712L9.03736 11.2854L6.3437 13.8064C6.03906 14.0911 5.56401 14.072 5.28247 13.7639C5.00105 13.4556 5.01997 12.9748 5.32453 12.6899L7.76976 10.4014L3.50235 7.42209V16.9917C3.50235 17.1703 3.54436 17.2543 3.56886 17.2916C3.59646 17.3335 3.6388 17.3715 3.70383 17.4044C3.77174 17.4387 3.84877 17.4595 3.9151 17.4707C3.94627 17.476 3.97073 17.4786 3.98455 17.4796H20.0164C20.1927 17.4796 20.275 17.4371 20.3118 17.4123C20.3532 17.3844 20.3908 17.3416 20.4233 17.2757C20.4572 17.207 20.4778 17.129 20.4888 17.0619L20.4977 16.9917V7.42209ZM11.3026 11.0201C11.5074 11.1631 11.7512 11.2398 12 11.2398C12.249 11.2398 12.4925 11.1633 12.6974 11.0201L19.145 6.52036H4.85505L11.3026 11.0201ZM22 16.9926V17.0312C21.9994 17.0493 21.998 17.0724 21.9961 17.0995C21.9923 17.1539 21.9847 17.2272 21.9707 17.3124C21.9432 17.479 21.8872 17.7128 21.7672 17.9557C21.6456 18.2019 21.4506 18.4713 21.1451 18.6773C20.8352 18.8864 20.4559 18.9999 20.0164 19H3.94542C3.92756 18.9994 3.90484 18.998 3.87793 18.996C3.82433 18.9922 3.75263 18.9845 3.66862 18.9703C3.50386 18.9425 3.27213 18.886 3.03189 18.7644C2.78862 18.6413 2.52248 18.444 2.31886 18.1349C2.1122 17.8211 2 17.4366 2 16.9917V7.00834V6.99251C2.0001 6.98593 2.00068 6.97781 2.00098 6.96875C2.00157 6.95068 2.00199 6.92766 2.00391 6.90045C2.00774 6.84621 2.01536 6.77363 2.02934 6.68863C2.05681 6.52185 2.1136 6.28746 2.23376 6.04426C2.3554 5.7981 2.54946 5.52872 2.85485 5.32268C3.16497 5.11348 3.54483 5 3.98455 5H20.0321L20.1221 5.00396C20.1758 5.00784 20.2482 5.0155 20.3324 5.02969C20.4971 5.05749 20.7279 5.11508 20.9681 5.23657C21.2113 5.35964 21.4775 5.55607 21.6811 5.8651C21.8879 6.17895 22 6.56333 22 7.00834V16.9926Z" fill="currentColor"/>
|
|
16
|
+
</svg>
|
|
17
|
+
`,iconName:`email`,target:`_self`,buildUrl:(e,t)=>{let n=encodeURIComponent(t);return`mailto:?subject=${n}&body=${n}%20${encodeURIComponent(e)}`}});var I=class extends A{handleClick(e){e.preventDefault(),this.copyText(this.textToCopy()),super.handleClick(e)}textToCopy(){return this.generateUrl()}copyText(e){var t;(t=navigator.clipboard)!=null&&t.writeText?Promise.resolve(navigator.clipboard.writeText(e)).catch(e=>{k.error(`The text could not be copied:`,e)}):k.warn(`Clipboard API is unavailable; the text could not be copied.`)}};I.prototype.options_=t.default.obj.merge(A.prototype.options_,{className:`vjs-share-button-copy`,label:`Copy link`,title:`Copy link`,icon:`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="16" viewBox="0 0 20 16" fill="none">
|
|
18
|
+
<path d="M0 11.1868C0 9.93044 0.454022 8.71396 1.27952 7.80719L5.1937 3.50612C5.97826 2.64245 7.04411 2.1225 8.18285 2.07243C9.32194 2.02234 10.4248 2.44794 11.2731 3.24311C12.1194 4.03644 12.6508 5.13866 12.7785 6.32406C12.9062 7.50926 12.6237 8.70981 11.9762 9.6878C11.7452 10.0368 11.277 10.131 10.9304 9.89841C10.5839 9.66575 10.4902 9.1943 10.7213 8.84538C11.1667 8.17245 11.3697 7.3301 11.279 6.4882C11.1884 5.64639 10.8133 4.88638 10.246 4.35447C9.68055 3.82442 8.96667 3.55859 8.24864 3.59016C7.53029 3.62176 6.83545 3.95007 6.30726 4.53145H6.30628L2.39112 8.83253V8.83352C1.83239 9.44735 1.50832 10.2928 1.50832 11.1868C1.50833 12.0808 1.83238 12.9262 2.39112 13.54C2.948 14.1516 3.68867 14.4813 4.44543 14.4813C5.20216 14.4813 5.94286 14.1516 6.49973 13.54L7.26371 12.7005C7.5451 12.3915 8.02213 12.3709 8.32916 12.6541C8.63609 12.9374 8.65748 13.4177 8.3763 13.7269L7.61133 14.5663C6.78375 15.4753 5.6466 16 4.44543 16C3.24424 16 2.10711 15.4753 1.27952 14.5663C0.45401 13.6595 6.74243e-06 12.4431 0 11.1868ZM18.4917 4.47608C18.4916 3.69176 18.1823 2.93947 17.6315 2.38487C17.0807 1.83027 16.3335 1.51878 15.5546 1.51872C14.7757 1.51872 14.0285 1.83036 13.4777 2.38487L12.862 3.00482C12.5675 3.30107 12.09 3.30112 11.7956 3.00482C11.5011 2.70835 11.5013 2.2276 11.7956 1.93103L12.4113 1.31109C13.245 0.471754 14.3756 0 15.5546 0C16.7336 5.7788e-05 17.8642 0.47167 18.6979 1.31109C19.5316 2.1505 19.9999 3.28897 20 4.47608C20 5.66317 19.5315 6.80163 18.6979 7.64108L14.7827 11.5842L14.7818 11.5832C13.9911 12.3804 12.9313 12.8485 11.8132 12.8933C10.6952 12.938 9.60145 12.557 8.75043 11.8255C7.89928 11.0938 7.35289 10.0653 7.22149 8.94624C7.09016 7.82725 7.38328 6.69946 8.04144 5.78816C8.28642 5.44902 8.75826 5.37442 9.09511 5.62106C9.43162 5.86774 9.50579 6.34195 9.26106 6.681C8.82617 7.28316 8.63317 8.02887 8.71999 8.76826C8.80684 9.50759 9.16714 10.1872 9.72946 10.6706C10.2917 11.1539 11.0146 11.4051 11.7533 11.3756C12.4921 11.346 13.1929 11.0373 13.7153 10.5104H13.7163L17.6315 6.5673C18.1822 6.01266 18.4917 5.26038 18.4917 4.47608Z" fill="currentColor"/>
|
|
19
|
+
</svg>
|
|
20
|
+
`,iconName:`copy-link`,target:``,rel:``,buildUrl:()=>`#`});var L=class extends I{textToCopy(){let{buildEmbedCode:e}=this.options();return e(this.generateUrl(),this.player(),this)}};L.prototype.options_=t.default.obj.merge(I.prototype.options_,{className:`vjs-share-button-embed`,label:`Embed`,title:`Embed`,icon:`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
21
|
+
<path d="M5.91929 7.72199C6.2117 7.42625 6.68666 7.42625 6.97907 7.72199C7.27116 8.01767 7.27116 8.49717 6.97907 8.79285L3.80752 11.9995L6.97907 15.2072C7.27116 15.5028 7.27116 15.9823 6.97907 16.278C6.68666 16.5738 6.2117 16.5738 5.91929 16.278L2.21931 12.5359C1.9269 12.2402 1.9269 11.7598 2.21931 11.4641L5.91929 7.72199ZM17.0212 7.72199C17.3136 7.4263 17.7876 7.42628 18.08 7.72199L21.7809 11.4651C22.0729 11.7608 22.0732 12.2403 21.7809 12.5359L18.08 16.278C17.7876 16.5738 17.3136 16.5738 17.0212 16.278C16.7288 15.9823 16.7288 15.5029 17.0212 15.2072L20.1918 11.9995L17.0212 8.79285C16.7288 8.49711 16.7288 8.01772 17.0212 7.72199ZM13.1808 7.9192C13.3657 7.54512 13.8151 7.39297 14.185 7.58C14.5549 7.76704 14.7044 8.22254 14.5194 8.59662L10.8194 16.0818C10.6345 16.4555 10.1849 16.6067 9.81524 16.42C9.44548 16.233 9.29518 15.7784 9.47985 15.4044L13.1808 7.9192Z" fill="currentColor"/>
|
|
22
|
+
</svg>
|
|
23
|
+
`,iconName:`embed`,buildEmbedCode:e=>`<iframe src="${e}" width="560" height="315" allowfullscreen></iframe>`}),t.default.registerComponent(`ShareButton`,A),t.default.registerComponent(`FacebookShareButton`,j),t.default.registerComponent(`XShareButton`,M),t.default.registerComponent(`LinkedinShareButton`,N),t.default.registerComponent(`WhatsappShareButton`,P),t.default.registerComponent(`EmailShareButton`,F),t.default.registerComponent(`CopyLinkShareButton`,I),t.default.registerComponent(`EmbedShareButton`,L);var ie=t.default.getComponent(`Component`),R=class extends ie{setUrlGenerator(e){this.children().forEach(t=>t.setUrlGenerator?.call(t,e))}};function ae(e,t){this.v=e,this.k=t}function z(e,t,n){return(t=function(e){var t=function(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}(e,`string`);return typeof t==`symbol`?t:t+``}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function V(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?B(Object(n),!0).forEach(function(t){z(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):B(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function H(e){var t,n;function r(t,n){try{var a=e[t](n),o=a.value,s=o instanceof ae;Promise.resolve(s?o.v:o).then(function(n){if(s){var c=t===`return`?`return`:`next`;if(!o.k||n.done)return r(c,n);n=e[c](n).value}i(a.done?`return`:`normal`,n)},function(e){r(`throw`,e)})}catch(e){i(`throw`,e)}}function i(e,i){switch(e){case`return`:t.resolve({value:i,done:!0});break;case`throw`:t.reject(i);break;default:t.resolve({value:i,done:!1})}(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,i){return new Promise(function(a,o){var s={key:e,arg:i,resolve:a,reject:o,next:null};n?n=n.next=s:(t=n=s,r(e,i))})},typeof e.return!=`function`&&(this.return=void 0)}R.prototype.options_={className:`vjs-share-button-collection`,shareText:void 0,children:[`facebookShareButton`,`xShareButton`,`linkedinShareButton`,`whatsappShareButton`,`emailShareButton`,`copyLinkShareButton`,`embedShareButton`]},t.default.registerComponent(`ShareButtonCollection`,R),H.prototype[typeof Symbol==`function`&&Symbol.asyncIterator||`@@asyncIterator`]=function(){return this},H.prototype.next=function(e){return this._invoke(`next`,e)},H.prototype.throw=function(e){return this._invoke(`throw`,e)},H.prototype.return=function(e){return this._invoke(`return`,e)};var oe={Share:`Share`,"Sharing type":`Sharing type`,Close:`Close`,"Share episode":`Share episode`,Episode:`Episode`,"Share the current position":`Share the current position`,"Current position":`Current position`,"Share on Facebook":`Share on Facebook`,"Share on X":`Share on X`,"Share on LinkedIn":`Share on LinkedIn`,"Share on WhatsApp":`Share on WhatsApp`,"Share by email":`Share by email`,"Copy link":`Copy link`,Embed:`Embed`,Facebook:`Facebook`,X:`X`,LinkedIn:`LinkedIn`,WhatsApp:`WhatsApp`,"E-mail":`E-mail`},se={Share:`Partager`,"Sharing type":`Type de partage`,Close:`Fermer`,"Share episode":`Partager l'épisode`,Episode:`Épisode`,"Share the current position":`Partager la position courante`,"Current position":`Position courante`,"Share on Facebook":`Partager sur Facebook`,"Share on X":`Partager sur X`,"Share on LinkedIn":`Partager sur Linkedin`,"Share on WhatsApp":`Partager sur Whatsapp`,"Share by email":`Partager par e-mail`,"Copy link":`Copier le lien`,Embed:`Embed`,Facebook:`Facebook`,X:`X`,LinkedIn:`LinkedIn`,WhatsApp:`WhatsApp`,"E-mail":`E-mail`},U={Share:`Condividi`,"Sharing type":`Tipo di condivisione`,Close:`Chiudi`,"Share episode":`Condividi l'episodio`,Episode:`Episodio`,"Share the current position":`Condividi la posizione corrente`,"Current position":`Posizione corrente`,"Share on Facebook":`Condividi su Facebook`,"Share on X":`Condividi su X`,"Share on LinkedIn":`Condividi su LinkedIn`,"Share on WhatsApp":`Condividi su WhatsApp`,"Share by email":`Condividi via e-mail`,"Copy link":`Copia il link`,Embed:`Incorpora`,Facebook:`Facebook`,X:`X`,LinkedIn:`LinkedIn`,WhatsApp:`WhatsApp`,"E-mail":`E-mail`},W={Share:`Cundivider`,"Sharing type":`Tip da cundivider`,Close:`Serrar`,"Share episode":`Cundivider l'episoda`,Episode:`Episoda`,"Share the current position":`Cundivider la posiziun actuala`,"Current position":`Posiziun actuala`,"Share on Facebook":`Cundivider sin Facebook`,"Share on X":`Cundivider sin X`,"Share on LinkedIn":`Cundivider sin LinkedIn`,"Share on WhatsApp":`Cundivider sin WhatsApp`,"Share by email":`Cundivider per e-mail`,"Copy link":`Copiar il link`,Embed:`Integrar`,Facebook:`Facebook`,X:`X`,LinkedIn:`LinkedIn`,WhatsApp:`WhatsApp`,"E-mail":`E-mail`};function G(e,n){t.default.addLanguage(e,V(V({},t.default.options.language[e]??{}),n))}G(`de`,{Share:`Teilen`,"Sharing type":`Art des Teilens`,Close:`Schliessen`,"Share episode":`Episode teilen`,Episode:`Episode`,"Share the current position":`Aktuelle Position teilen`,"Current position":`Aktuelle Position`,"Share on Facebook":`Auf Facebook teilen`,"Share on X":`Auf X teilen`,"Share on LinkedIn":`Auf LinkedIn teilen`,"Share on WhatsApp":`Auf WhatsApp teilen`,"Share by email":`Per E-Mail teilen`,"Copy link":`Link kopieren`,Embed:`Einbetten`,Facebook:`Facebook`,X:`X`,LinkedIn:`LinkedIn`,WhatsApp:`WhatsApp`,"E-mail":`E-Mail`}),G(`en`,oe),G(`fr`,se),G(`it`,U),G(`rm`,W);var ce=t.default.getComponent(`Component`),K=(e,t)=>le(e,t)||window.location.href,le=(e,t)=>{let{url:n}=t.options();return typeof n==`function`?n(e,t,t.context()):n},q=e=>e.options().mediaComposition,J=e=>{var t,n;return(t=q(e))==null||(n=t.getMainChapter)==null?void 0:n.call(t)},Y=e=>{var t,n;return((t=q(e))==null||(n=t.getSubdivisions)==null?void 0:n.call(t))??[]},ue=e=>Y(e).filter(e=>!e.blockReason).filter(t=>((e,t)=>t>=e.markIn/1e3&&t<e.markOut/1e3)(t,e.currentTime())).pop(),X=e=>e.currentSource()?.mediaData,Z=class extends ce{constructor(e,t={}){super(e,t),this.render(),this.on(this.player(),`timeupdate`,this.updateOptionsState)}createEl(){return super.createEl(`div`,{},{role:`radiogroup`,"aria-label":this.localize(`Sharing type`)})}render(e=this.defaultOption()){let t=this.entries();this.toggleClass(`vjs-hidden`,t.length<=1),this.el().replaceChildren(...t.map(([t,n])=>this.createOption(t,n,t===e)))}entries(){let{options:e,includeCurrentTime:t}=this.options();return Object.entries(e).filter(([e,n])=>!1!==n&&!this.isOptionHidden(n)&&(e!==`currentTime`||t))}isOptionHidden(e){return typeof e.isHidden==`function`&&e.isHidden(this.player(),this)}isOptionDisabled(e){return typeof e.isDisabled==`function`?e.isDisabled(this.player(),this):!!e.disabled}defaultOption(){let{defaultOption:e,includeCurrentTime:t}=this.options(),n=e??(t?`currentTime`:`episode`),r=this.entries().filter(([,e])=>!this.isOptionDisabled(e));return r.some(([e])=>e===n)?n:r[0]?.[0]}createOption(e,n,r){let i=`${this.id()}_${e}`,a=t.default.dom.createEl(`label`,{className:`vjs-share-url-option-label`,title:this.localize(n.title??n.label)},{for:i});return a.append(t.default.dom.createEl(`input`,{className:`vjs-share-url-option-input`,checked:r,disabled:this.isOptionDisabled(n)},{id:i,type:`radio`,name:`${this.id()}_url_option`,value:e}),t.default.dom.createEl(`span`,{textContent:this.localize(n.label)})),a}input(e){return this.$(`.vjs-share-url-option-input[value="${e}"]`)}selected(){return this.$(`.vjs-share-url-option-input:checked`)?.value}updateOptionsState(){this.entries().forEach(([e,t])=>{let n=this.input(e);n&&(n.disabled=this.isOptionDisabled(t))});let e=this.options().options[this.selected()];e&&this.isOptionDisabled(e)&&this.selectDefaultOption()}selectDefaultOption(){let e=this.input(this.defaultOption());e&&(e.checked=!0,this.trigger(`change`))}context(){var e;let t=(n=this.player(),J(n)||X(n));var n;return{currentMedia:t,currentSource:(e=this.player()).currentSource?.call(e),currentSubdivision:ue(this.player()),currentTime:this.player().currentTime(),mainChapter:J(this.player()),mediaData:X(this.player()),subdivisions:Y(this.player()),title:t?.title}}generateUrl(){let e=this.options().options[this.selected()];return e?e.generateUrl(this.player(),this):``}handleLanguagechange(){this.el().setAttribute(`aria-label`,this.localize(`Sharing type`)),this.render(this.selected())}};Z.prototype.options_={className:`vjs-share-url-options`,defaultOption:void 0,includeCurrentTime:!1,url:void 0,options:{episode:{label:`Episode`,title:`Share episode`,generateUrl:(e,t)=>K(e,t)},currentTime:{label:`Current position`,title:`Share the current position`,generateUrl:(e,t)=>{let n=new URL(K(e,t));return n.searchParams.set(`startTime`,Math.floor(e.currentTime())),n.toString()}}}},t.default.registerComponent(`ShareUrlOptions`,Z);var de=t.default.getComponent(`ModalDialog`),Q=class extends de{constructor(e,t={}){super(e,t),this.handleOutsideClick=this.handleOutsideClick.bind(this),this.fill(),this.render()}dispose(){this.unbindOutsideClick(),super.dispose()}buildCSSClass(){return`vjs-share-modal ${super.buildCSSClass()}`}render(){this.title_=this.createTitle(),this.urlOptions_=this.addChild(`ShareUrlOptions`,this.options().shareUrlOptions),this.collection_=this.addChild(`ShareButtonCollection`,this.options().shareButtonCollection),this.on(this.urlOptions_,`change`,this.updateUrlGenerator),this.on(`share`,this.handleShare),this.updateUrlGenerator()}createTitle(){let e=this.addChild(`ShareModalTitle`,{componentClass:`TitleBar`,className:`vjs-share-title`});return e.update({title:this.localize(this.options().title??`Share`)}),e}open(){super.open(),this.bindOutsideClick(),this.updateUrlGenerator()}close(){this.unbindOutsideClick(),super.close()}updateUrlGenerator(){this.collection_.setUrlGenerator(()=>this.urlOptions_.generateUrl())}handleShare(){this.close()}bindOutsideClick(){document.addEventListener(`pointerdown`,this.handleOutsideClick)}unbindOutsideClick(){document.removeEventListener(`pointerdown`,this.handleOutsideClick)}handleOutsideClick(e){this.isOwnClick(e)||this.close()}isOwnClick(e){return this.el().contains(e.target)}handleLanguagechange(){this.el().title=this.localize(this.options().title??`Share`),this.title_.update({title:this.localize(this.options().title??`Share`)})}};Q.prototype.options_={pauseOnOpen:!1,temporary:!1,title:`Share`,shareUrlOptions:{},shareButtonCollection:{}},t.default.registerComponent(`ShareModal`,Q);var fe=t.default.getComponent(`SvgButton`),pe=t.default.log.createLogger(`share-toggle`),$=class extends fe{constructor(e,t={}){super(e,t),this.player().ready(()=>this.bindShareModal())}bindShareModal(){let e=this.player().getChild(`ShareModal`);e?(this.on(e,`modalopen`,this.hide),this.on(e,`modalclose`,this.show),this.toggleClass(`vjs-hidden`,e.opened())):pe.warn(`ShareToggle requires a ShareModal child on the player`)}handleClick(e){super.handleClick(e),this.shareModal().open()}shareModal(){let e=this.player().getChild(`ShareModal`);if(!e)throw Error(`ShareToggle requires a ShareModal child on the player`);return e}buildCSSClass(){return`vjs-share-toggle ${super.buildCSSClass()}`}static get VERSION(){return`0.0.1`}};$.prototype.options_={controlText:`Share`,iconName:`share`},t.default.registerComponent(`ShareToggle`,$),e.ShareButton=A,e.ShareButtonCollection=R,e.ShareModal=Q,e.ShareToggle=$,e.ShareUrlOptions=Z});
|
|
24
|
+
//# sourceMappingURL=share-button.umd.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-button.umd.min.js","names":["i","e","t","DOMParser","parseFromString","documentElement","SVGElement","Error","a","o","apply","arguments","n","fetch","mode","ok","status","statusText","text","s","c","trim","URL","parse","href","startsWith","l","u","s","e","c","apply","arguments","i","icon","t","iconName","n","options","setIcon","r","el","querySelector","classList","toggle","l","u","add","replaceChildren","d","log","createLogger","f","getComponent","p","constructor","appendIcon","catch","error","buildCSSClass","VERSION","o","registerComponent","m","h","g","createEl","Object","assign","className","player_","options_","experimentalSvgIcons","appendChild","dom","videojs","embedIcon","facebookIcon","linkIcon","linkedinIcon","mailIcon","whatsappIcon","xIcon","SvgComponent","getComponent","log","createLogger","ShareButton","constructor","player","options","on","handleClick","createEl","tag","props","attributes","error","Error","title","target","rel","el","obj","merge","href","getHref","localize","prepend","dom","className","textContent","append","label","setUrlGenerator","generateUrl","generateUrl_","updateHref","url","buildUrl","shareText","_ref","_this$options$shareTe","_this$parentComponent","parentComponent_","document","trigger","type","bubbles","buildCSSClass","handleLanguagechange","$","prototype","options_","FacebookShareButton","icon","iconName","encodeURIComponent","XShareButton","text","LinkedinShareButton","WhatsappShareButton","EmailShareButton","encodedText","CopyLinkShareButton","event","preventDefault","copyText","textToCopy","_navigator$clipboard","navigator","clipboard","writeText","warn","Promise","resolve","catch","EmbedShareButton","buildEmbedCode","registerComponent","videojs","Component","getComponent","ShareButtonCollection","setUrlGenerator","generateUrl","children","forEach","child","_child$setUrlGenerato","call","prototype","options_","className","shareText","undefined","registerComponent","de","en","fr","it","rm","videojs","extendLanguage","code","data","_videojs$options$lang","addLanguage","_objectSpread","options","language","videojs","Component","getComponent","baseUrl","player","component","configuredUrl","window","location","href","url","options","context","getMediaComposition","mediaComposition","getMainChapter","_getMediaComposition","_getMediaComposition$","call","getSubdivisions","_getMediaComposition$2","_getMediaComposition2","_getMediaComposition3","containsTime","segment","time","markIn","markOut","getCurrentSubdivision","filter","blockReason","currentTime","pop","getSourceMediaData","_player$currentSource","currentSource","mediaData","getCurrentMedia","ShareUrlOptions","constructor","render","on","updateOptionsState","createEl","role","localize","selected","defaultOption","entries","toggleClass","length","el","replaceChildren","map","name","option","createOption","includeCurrentTime","Object","isOptionHidden","isHidden","isOptionDisabled","isDisabled","Boolean","disabled","_entries$","preferred","some","checked","_option$title","id","label","dom","className","title","for","append","type","value","textContent","input","$","_this$$","forEach","selectDefaultOption","trigger","_this$player$currentS","_this$player","currentMedia","currentSubdivision","mainChapter","subdivisions","generateUrl","handleLanguagechange","setAttribute","prototype","options_","undefined","episode","URL","searchParams","set","Math","floor","toString","registerComponent","videojs","ModalDialog","getComponent","ShareModal","constructor","player","options","handleOutsideClick","bind","fill","render","dispose","unbindOutsideClick","buildCSSClass","title_","createTitle","urlOptions_","addChild","shareUrlOptions","collection_","shareButtonCollection","on","updateUrlGenerator","handleShare","_this$options$title","title","componentClass","className","update","localize","open","bindOutsideClick","close","setUrlGenerator","generateUrl","document","addEventListener","removeEventListener","event","isOwnClick","el","contains","target","handleLanguagechange","_this$options$title2","_this$options$title3","prototype","options_","pauseOnOpen","temporary","registerComponent","videojs","version","SvgButton","getComponent","log","createLogger","ShareToggle","constructor","player","options","ready","bindShareModal","modal","getChild","warn","on","hide","show","toggleClass","opened","handleClick","event","shareModal","open","Error","buildCSSClass","VERSION","prototype","options_","controlText","iconName","registerComponent"],"sources":["../../web-suite-utils/dist/web-suite-utils.js","../../package.json","../../src/svg-icon-loader.js","../../src/svg-button.js","../../src/svg-component.js","../src/share-button.js","../src/share-button-collection.js","../src/lang/de.json","../src/lang/en.json","../src/lang/fr.json","../src/lang/it.json","../src/lang/rm.json","../src/lang/index.js","../src/share-url-options.js","../src/share-modal.js","../package.json","../src/share-toggle.js"],"sourcesContent":["/**\n * Parses an SVG string into an SVGElement after validating its structure.\n *\n * @param {string} svgString - A raw string expected to contain valid SVG markup.\n * @returns {SVGElement} - The root SVG element parsed from the string.\n * @throws {Error} If the input is not a valid SVG or doesn't have an <svg> root element.\n */\nfunction stringToSvgElement(svgString) {\n const doc = new DOMParser().parseFromString(svgString, 'image/svg+xml');\n const root = doc.documentElement;\n\n if (!(root instanceof SVGElement)) {\n throw new Error('Parsed root is not an SVGElement');\n }\n\n return root;\n}\n\n/**\n * Fetches an SVG from a given URL and parses it into an SVGElement.\n *\n * @param {string} urlString - A URL pointing to an SVG resource.\n * @returns {Promise<SVGElement>} - A promise resolving to the parsed SVG element.\n * @throws {Error} If the fetch fails or the response is not a valid SVG.\n */\nasync function fetchSvgElement(urlString) {\n const res = await fetch(urlString, { mode: 'cors' });\n\n if (!res.ok) {\n throw new Error(`Failed to fetch SVG: ${res.status} ${res.statusText}`);\n }\n\n return stringToSvgElement(await res.text());\n}\n\n/**\n * Parses a string that might be a raw SVG or a URL pointing to an SVG.\n *\n * @param {string} icon - A trimmed string containing either an SVG element or a URL.\n * @returns {Promise<SVGElement>} - A promise resolving to the parsed SVG element.\n * @throws {Error} If the string is neither an SVG nor a valid URL.\n */\nasync function resolveSvgFromString(icon) {\n const trimmed = icon.trim();\n const url = URL.parse(trimmed);\n\n if (url) {\n return await fetchSvgElement(url.href);\n }\n\n if (trimmed.startsWith('<')) {\n return stringToSvgElement(trimmed);\n }\n\n throw new Error(`Provided string is not a URL or an SVG element: ${icon}`);\n}\n\n/**\n * Resolves an icon source to an SVGElement.\n *\n * Accepts:\n * - An actual SVGElement (returned as-is)\n * - A URL object (SVG fetched and parsed)\n * - A string (parsed as a URL or inline SVG)\n *\n * @param {SVGElement | string | URL} icon - The source of the SVG.\n * @returns {Promise<SVGElement>} - A promise resolving to the final SVGElement.\n * @throws {Error} If the input type is invalid or the SVG cannot be resolved.\n */\nexport default async function loadSvgElement(icon) {\n if (icon instanceof SVGElement) {\n return icon;\n }\n\n if (icon instanceof URL) {\n return await fetchSvgElement(icon.href);\n }\n\n if (typeof icon === 'string') {\n return await resolveSvgFromString(icon);\n }\n\n throw new Error(`Invalid icon type provided: ${icon}`);\n}\n","{\n \"name\": \"@srgssr/svg-button\",\n \"version\": \"1.1.3\",\n \"license\": \"MIT\",\n \"author\": \"SRG SSR\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/SRGSSR/pillarbox-web-suite.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"homepage\": \"https://github.com/SRGSSR/pillarbox-web-suite/tree/main/packages/svg-button#readme\",\n \"type\": \"module\",\n \"main\": \"dist/svg-button.cjs\",\n \"browser\": \"dist/svg-button.umd.min.js\",\n \"module\": \"dist/svg-button.js\",\n \"style\": \"./dist/svg-button.min.css\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/svg-button.js\",\n \"require\": \"./dist/svg-button.cjs\"\n },\n \"./*\": \"./*\"\n },\n \"files\": [\n \"dist/*\",\n \"scss/*\"\n ],\n \"keywords\": [\n \"video.js\",\n \"player\"\n ],\n \"scripts\": {\n \"clean\": \"rimraf dist\",\n \"build\": \"npm-run-all clean build:*\",\n \"build:css\": \"sass ./scss/svg-button.scss:dist/svg-button.min.css --style compressed --source-map --load-path node_modules\",\n \"build:lib\": \"vite build --config vite.config.lib.js\",\n \"build:umd\": \"vite build --config vite.config.umd.js\",\n \"github:page\": \"vite build\",\n \"release:ci\": \"semantic-release\",\n \"start\": \" vite --port 4200 --open\",\n \"test\": \"vitest run --coverage --coverage.reporter text\"\n },\n \"dependencies\": {\n \"@srgssr/web-suite-utils\": \"^1.0.0\"\n },\n \"peerDependencies\": {\n \"video.js\": \"^8.0.0\"\n },\n \"devDependencies\": {\n \"@srgssr/pillarbox-web\": \"^1.24.1\"\n }\n}\n","import { loadSvgElement } from '@srgssr/web-suite-utils';\n\n/**\n * Loads and appends an SVG icon into a Video.js component.\n *\n * @param {import('video.js').Component} component - The Video.js component instance.\n */\nexport async function appendSvgIcon(component) {\n const { icon, iconName } = component.options();\n\n if (iconName) component.setIcon(iconName);\n\n const placeholder = component.el().querySelector('.vjs-icon-placeholder');\n\n if (iconName && placeholder) placeholder.classList.toggle(`vjs-icon-${iconName}`, true);\n\n await insertSvgIcon(icon, placeholder);\n}\n\nasync function insertSvgIcon(icon, placeholder) {\n if (!icon || !placeholder) return;\n\n const svg = await loadSvgElement(icon);\n\n svg.classList.add('icon-from-options');\n placeholder.classList.add('vjs-svg-icon');\n placeholder.replaceChildren(svg);\n}\n\n","import videojs from 'video.js';\nimport { version } from '../package.json';\nimport { appendSvgIcon } from './svg-icon-loader.js';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/utils/log.js').default}\n */\nconst log = videojs.log.createLogger('svg-button');\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/component').default}\n */\nconst Button = videojs.getComponent('Button');\n\n/**\n * A helper Video.js button component that supports various strategies\n * for displaying SVG icons.\n *\n * This component is intended to be extended by other custom buttons\n * that want to display an SVG icon via multiple possible inputs:\n *\n * - Raw SVG string\n * - SVGElement instance\n * - URL to an SVG file\n * - icon font via CSS\n * - experimental Video.js SVG icons\n */\nclass SvgButton extends Button {\n\n /**\n * Creates an instance of SvgButton.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object | undefined} options Configuration options for the button.\n * @param {SVGElement|string|URL} [options.icon] An optional icon to be loaded into the button.\n * Can be an SVGElement, a raw SVG string, or a URL to an SVG file.\n * @param {string} [options.iconName] An Optional icon name if using Video.js experimental icon support.\n */\n constructor(player, options) {\n super(player, options);\n\n this.appendIcon().catch((reason) =>\n log.error(`There was a problem loading the provided SVG Icon`, reason));\n }\n\n /**\n * Appends the configured icon to the component element.\n * Uses the {@link appendSvgIcon} helper to handle different icon input formats.\n *\n * Override this function to customize how the SVG icon is appended.\n *\n * @param {Object | undefined} options\n * The parameters used to configure the icon.\n *\n * @param {SVGElement|string|URL} [options.icon]\n * An optional icon to be loaded into the button. Can be an SVGElement,\n * a raw SVG string, or a URL to an SVG file. This will update the\n * current configured icon.\n *\n * @param {string} [options.iconName]\n * A symbolic name for the icon (e.g., `\"play\"`, `\"pause\"`, `\"chromecast\"`).\n * Useful when you want to reference or style icons by name.\n */\n async appendIcon(options = undefined) {\n if (options) {\n const { icon, iconName } = options;\n\n this.options({ icon, iconName });\n }\n\n await appendSvgIcon(this);\n }\n\n /**\n * Builds the CSS class name for the button element.\n *\n * @returns {string} The full CSS class string for this button.\n */\n buildCSSClass() {\n return `vjs-svg-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Static getter for the component version.\n *\n * @returns {string} The current version of the SvgButton component.\n */\n static get VERSION() {\n return version;\n }\n}\n\nvideojs.registerComponent('SvgButton', SvgButton);\n\nexport default SvgButton;\n","import videojs from 'video.js';\nimport { version } from '../package.json';\nimport { appendSvgIcon } from './svg-icon-loader.js';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/utils/log.js').default}\n */\nconst log = videojs.log.createLogger('svg-component');\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/component').default}\n */\nconst Component = videojs.getComponent('Component');\n\n/**\n * A helper Video.js component that supports various strategies\n * for displaying SVG icons.\n *\n * This component is intended to be extended by other custom components\n * that want to display an SVG icon via multiple possible inputs:\n *\n * - Raw SVG string\n * - SVGElement instance\n * - URL to an SVG file\n * - icon font via CSS\n * - experimental Video.js SVG icons\n */\nclass SvgComponent extends Component {\n /**\n * Creates an instance of SvgComponent.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options Configuration options for the component.\n * @param {SVGElement|string|URL} [options.icon] An optional icon to be loaded into the component.\n * Can be an SVGElement, a raw SVG string, or a URL to an SVG file.\n * @param {string} [options.iconName] An Optional icon name if using Video.js experimental icon support.\n */\n constructor(player, options) {\n super(player, options);\n\n this.appendIcon().catch((reason) =>\n log.error(`There was a problem loading the provided SVG Icon`, reason));\n }\n\n /**\n * Appends the configured icon to the component element.\n * Uses the {@link appendSvgIcon} helper to handle different icon input formats.\n *\n * Override this function to customize how the SVG icon is appended.\n *\n * @param {Object | undefined} options\n * The parameters used to configure the icon.\n *\n * @param {SVGElement|string|URL} [options.icon]\n * An optional icon to be loaded into the button. Can be an SVGElement,\n * a raw SVG string, or a URL to an SVG file. This will update the\n * current configured icon.\n *\n * @param {string} [options.iconName]\n * A symbolic name for the icon (e.g., `\"play\"`, `\"pause\"`, `\"chromecast\"`).\n * Useful when you want to reference or style icons by name.\n */\n async appendIcon(options = undefined) {\n if (options) {\n const { icon, iconName } = options;\n\n this.options({ icon, iconName });\n }\n\n await appendSvgIcon(this);\n }\n\n /**\n * Creates the DOM element for this component.\n *\n * This overrides the base `createEl` to:\n * - Apply the component's CSS class.\n * - Add a `.vjs-icon-placeholder` span if experimental SVG icons are not enabled.\n *\n * @param {string} [tag] The HTML tag name to use for the element (defaults to `'div'` if not specified by super).\n * @param {Object} [props={}] An object of element properties (such as `className`).\n * @param {Object} [attributes={}] An object of element attributes (such as `aria-hidden`).\n *\n * @returns {Element} The created DOM element for this component.\n */\n createEl(tag, props = {}, attributes = {}) {\n props = Object.assign({ className: this.buildCSSClass() }, props);\n\n const el = super.createEl(tag, props, attributes);\n\n if (!this.player_.options_.experimentalSvgIcons) {\n el.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-icon-placeholder'\n }, {\n 'aria-hidden': true\n }));\n }\n\n return el;\n }\n\n /**\n * Builds the CSS class name for the component element.\n *\n * @returns {string} The full CSS class string for this component.\n */\n buildCSSClass() {\n return `vjs-svg-component ${super.buildCSSClass()}`;\n }\n\n /**\n * Static getter for the component version.\n *\n * @returns {string} The current version of the SvgComponent component.\n */\n static get VERSION() {\n return version;\n }\n}\n\nvideojs.registerComponent('SvgComponent', SvgComponent);\n\nexport default SvgComponent;\n","import videojs from 'video.js';\nimport '@srgssr/svg-button';\nimport embedIcon from '../assets/embed.svg?raw';\nimport facebookIcon from '../assets/facebook.svg?raw';\nimport linkIcon from '../assets/link.svg?raw';\nimport linkedinIcon from '../assets/linkedin.svg?raw';\nimport mailIcon from '../assets/mail.svg?raw';\nimport whatsappIcon from '../assets/whatsapp.svg?raw';\nimport xIcon from '../assets/x.svg?raw';\n\n/**\n * @ignore\n * @type {typeof import('@srgssr/svg-button').SvgComponent}\n */\nconst SvgComponent = videojs.getComponent('SvgComponent');\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/utils/log.js').default}\n */\nconst log = videojs.log.createLogger('share-button');\n\n/**\n * A platform share button. It receives a generated media URL and wraps it for\n * its own platform. The element is a link so the browser handles the\n * navigation, `target` and `rel` natively.\n */\nclass ShareButton extends SvgComponent {\n /**\n * Creates one platform share button.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The button options.\n * @param {string} [options.label] The visible label displayed below the icon.\n * @param {string} [options.title] The accessible title of the link.\n * @param {SVGElement|string|URL} [options.icon] The icon displayed by the button.\n * @param {string} [options.iconName] The icon name when using Video.js experimental SVG icons.\n * @param {string} [options.target='_blank'] The `target` attribute of the link.\n * @param {string} [options.rel='noopener noreferrer'] The `rel` attribute of the link.\n * @param {string|function(player, button): string} [options.shareText] The text shared alongside the URL.\n * @param {function(url, text, player, button): string} options.buildUrl Builds the platform URL.\n */\n constructor(player, options = {}) {\n super(player, options);\n\n this.on('click', this.handleClick);\n }\n\n /**\n * Creates the link element.\n *\n * @param {string} [tag='a'] The HTML tag name, must be `a`.\n * @param {Object} [props={}] Additional element properties.\n * @param {Object} [attributes={}] Additional element attributes.\n *\n * @returns {HTMLAnchorElement} The created anchor element.\n */\n createEl(tag = 'a', props = {}, attributes = {}) {\n if (tag !== 'a') {\n log.error(`Creating a ShareButton with an HTML element of ${tag} is not supported; the element must be an 'a'`);\n throw new Error(`'${tag}' is not supported for ShareButton`);\n }\n\n const { title, target, rel } = this.options();\n const el = super.createEl(tag, props, videojs.obj.merge({\n href: this.getHref(),\n title: this.localize(title),\n target,\n rel\n }, attributes));\n\n el.prepend(videojs.dom.createEl('span', {\n className: 'vjs-control-text',\n textContent: this.localize(title)\n }));\n el.append(videojs.dom.createEl('span', {\n className: 'vjs-share-button-title',\n textContent: this.localize(this.options().label)\n }));\n\n return el;\n }\n\n /**\n * Receives the URL generator selected by `ShareUrlOptions`.\n *\n * @param {Function} generateUrl The URL generator.\n */\n setUrlGenerator(generateUrl) {\n this.generateUrl_ = generateUrl;\n this.updateHref();\n }\n\n /**\n * Returns the generated media URL, or an empty string when no generator has\n * been provided yet.\n *\n * @returns {string} The generated media URL.\n */\n generateUrl() {\n return typeof this.generateUrl_ === 'function' ? this.generateUrl_() : '';\n }\n\n /**\n * Returns the platform URL built from the generated media URL.\n *\n * @returns {string} The platform URL.\n */\n getHref() {\n const url = this.generateUrl();\n\n if (!url) return '';\n\n try {\n const { buildUrl } = this.options();\n\n return buildUrl(url, this.shareText(), this.player(), this);\n } catch (error) {\n log.error('Error building the share url:', error);\n }\n\n return '';\n }\n\n /**\n * Returns the text shared alongside the URL.\n *\n * @returns {string} The share text.\n */\n shareText() {\n const shareText = this.options().shareText ??\n this.parentComponent_?.options().shareText ??\n document.title;\n\n return typeof shareText === 'function' ?\n shareText(this.player(), this) :\n shareText;\n }\n\n /**\n * Updates the link `href`.\n */\n updateHref() {\n this.el().href = this.getHref();\n }\n\n /**\n * Notifies that a share action happened. The event bubbles so the modal\n * and the player can react to it.\n */\n handleClick() {\n this.trigger({ type: 'share', bubbles: true });\n }\n\n /**\n * Builds the CSS class string for the button.\n *\n * @returns {string} The CSS class string.\n */\n buildCSSClass() {\n return `vjs-share-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Updates the localized texts when the player language changes.\n */\n handleLanguagechange() {\n const { title, label } = this.options();\n\n this.el().title = this.localize(title);\n this.$('.vjs-control-text').textContent = this.localize(title);\n this.$('.vjs-share-button-title').textContent = this.localize(label);\n }\n}\n\nShareButton.prototype.options_ = {\n target: '_blank',\n rel: 'noopener noreferrer',\n buildUrl: url => url\n};\n\n/**\n * Shares the media URL on Facebook.\n */\nclass FacebookShareButton extends ShareButton {}\nFacebookShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-facebook',\n label: 'Facebook',\n title: 'Share on Facebook',\n icon: facebookIcon,\n iconName: 'facebook',\n buildUrl: url =>\n `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}`\n }\n);\n\n/**\n * Shares the media URL and the share text on X.\n */\nclass XShareButton extends ShareButton {}\nXShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-x',\n label: 'X',\n title: 'Share on X',\n icon: xIcon,\n iconName: 'x',\n buildUrl: (url, text) =>\n `https://twitter.com/intent/tweet?url=${encodeURIComponent(url)}&text=${encodeURIComponent(text)}`\n }\n);\n\n/**\n * Shares the media URL on LinkedIn.\n */\nclass LinkedinShareButton extends ShareButton {}\nLinkedinShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-linkedin',\n label: 'LinkedIn',\n title: 'Share on LinkedIn',\n icon: linkedinIcon,\n iconName: 'linkedin',\n buildUrl: url =>\n `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(url)}`\n }\n);\n\n/**\n * Shares the media URL and the share text on WhatsApp.\n */\nclass WhatsappShareButton extends ShareButton {}\nWhatsappShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-whatsapp',\n label: 'WhatsApp',\n title: 'Share on WhatsApp',\n icon: whatsappIcon,\n iconName: 'whatsapp',\n buildUrl: (url, text) =>\n `https://api.whatsapp.com/send?text=${encodeURIComponent(`${text} ${url}`)}`\n }\n);\n\n/**\n * Shares the media URL and the share text through the default mail client.\n */\nclass EmailShareButton extends ShareButton {}\nEmailShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-email',\n label: 'E-mail',\n title: 'Share by email',\n icon: mailIcon,\n iconName: 'email',\n target: '_self',\n buildUrl: (url, text) => {\n const encodedText = encodeURIComponent(text);\n\n return `mailto:?subject=${encodedText}&body=${encodedText}%20${encodeURIComponent(url)}`;\n }\n }\n);\n\n/**\n * A share button that copies the generated media URL to the clipboard instead\n * of opening a platform URL.\n */\nclass CopyLinkShareButton extends ShareButton {\n /**\n * Copies the generated media URL and notifies the share action.\n *\n * @param {Event} event The click event.\n */\n handleClick(event) {\n event.preventDefault();\n this.copyText(this.textToCopy());\n super.handleClick(event);\n }\n\n /**\n * Returns the text copied to the clipboard.\n *\n * @returns {string} The generated media URL.\n */\n textToCopy() {\n return this.generateUrl();\n }\n\n /**\n * Copies text to the system clipboard.\n *\n * @param {string} text The text to copy.\n */\n copyText(text) {\n if (!navigator.clipboard?.writeText) {\n log.warn('Clipboard API is unavailable; the text could not be copied.');\n\n return;\n }\n\n Promise.resolve(navigator.clipboard.writeText(text)).catch(error => {\n log.error('The text could not be copied:', error);\n });\n }\n}\nCopyLinkShareButton.prototype.options_ = videojs.obj.merge(\n ShareButton.prototype.options_,\n {\n className: 'vjs-share-button-copy',\n label: 'Copy link',\n title: 'Copy link',\n icon: linkIcon,\n iconName: 'copy-link',\n target: '',\n rel: '',\n buildUrl: () => '#'\n }\n);\n\n/**\n * A share button that copies the embed code of the generated media URL.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The button options, on top of the `ShareButton` ones.\n * @param {function(url, player, button): string} [options.buildEmbedCode] Builds the embed code\n * from the generated media URL.\n */\nclass EmbedShareButton extends CopyLinkShareButton {\n /**\n * Returns the embed code copied to the clipboard.\n *\n * @returns {string} The embed code.\n */\n textToCopy() {\n const { buildEmbedCode } = this.options();\n\n return buildEmbedCode(this.generateUrl(), this.player(), this);\n }\n}\nEmbedShareButton.prototype.options_ = videojs.obj.merge(\n CopyLinkShareButton.prototype.options_,\n {\n className: 'vjs-share-button-embed',\n label: 'Embed',\n title: 'Embed',\n icon: embedIcon,\n iconName: 'embed',\n buildEmbedCode: url =>\n `<iframe src=\"${url}\" width=\"560\" height=\"315\" allowfullscreen></iframe>`\n }\n);\n\nvideojs.registerComponent('ShareButton', ShareButton);\nvideojs.registerComponent('FacebookShareButton', FacebookShareButton);\nvideojs.registerComponent('XShareButton', XShareButton);\nvideojs.registerComponent('LinkedinShareButton', LinkedinShareButton);\nvideojs.registerComponent('WhatsappShareButton', WhatsappShareButton);\nvideojs.registerComponent('EmailShareButton', EmailShareButton);\nvideojs.registerComponent('CopyLinkShareButton', CopyLinkShareButton);\nvideojs.registerComponent('EmbedShareButton', EmbedShareButton);\n\nexport {\n CopyLinkShareButton,\n EmailShareButton,\n EmbedShareButton,\n FacebookShareButton,\n LinkedinShareButton,\n ShareButton,\n WhatsappShareButton,\n XShareButton\n};\n\nexport default ShareButton;\n","import videojs from 'video.js';\nimport './share-button.js';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/component').default}\n */\nconst Component = videojs.getComponent('Component');\n\n/**\n * Holds the platform share buttons. The buttons are declared as default\n * children so integrators can add, remove or configure them through the\n * standard Video.js options.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The collection options.\n * @param {string|function(player, button): string} [options.shareText] The text shared by every\n * button that does not define its own, defaults to the document title.\n * @param {string[]} [options.children] The platform buttons to display. Set one to `false` in the\n * options to remove it.\n */\nclass ShareButtonCollection extends Component {\n /**\n * Passes the selected URL generator to every platform button.\n *\n * @param {Function} generateUrl The URL generator.\n */\n setUrlGenerator(generateUrl) {\n this.children().forEach(child => child.setUrlGenerator?.(generateUrl));\n }\n}\n\nShareButtonCollection.prototype.options_ = {\n className: 'vjs-share-button-collection',\n shareText: undefined,\n children: [\n 'facebookShareButton',\n 'xShareButton',\n 'linkedinShareButton',\n 'whatsappShareButton',\n 'emailShareButton',\n 'copyLinkShareButton',\n 'embedShareButton'\n ]\n};\n\nvideojs.registerComponent('ShareButtonCollection', ShareButtonCollection);\n\nexport default ShareButtonCollection;\n","{\n \"Share\": \"Teilen\",\n \"Sharing type\": \"Art des Teilens\",\n \"Close\": \"Schliessen\",\n \"Share episode\": \"Episode teilen\",\n \"Episode\": \"Episode\",\n \"Share the current position\": \"Aktuelle Position teilen\",\n \"Current position\": \"Aktuelle Position\",\n \"Share on Facebook\": \"Auf Facebook teilen\",\n \"Share on X\": \"Auf X teilen\",\n \"Share on LinkedIn\": \"Auf LinkedIn teilen\",\n \"Share on WhatsApp\": \"Auf WhatsApp teilen\",\n \"Share by email\": \"Per E-Mail teilen\",\n \"Copy link\": \"Link kopieren\",\n \"Embed\": \"Einbetten\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-Mail\"\n}\n","{\n \"Share\": \"Share\",\n \"Sharing type\": \"Sharing type\",\n \"Close\": \"Close\",\n \"Share episode\": \"Share episode\",\n \"Episode\": \"Episode\",\n \"Share the current position\": \"Share the current position\",\n \"Current position\": \"Current position\",\n \"Share on Facebook\": \"Share on Facebook\",\n \"Share on X\": \"Share on X\",\n \"Share on LinkedIn\": \"Share on LinkedIn\",\n \"Share on WhatsApp\": \"Share on WhatsApp\",\n \"Share by email\": \"Share by email\",\n \"Copy link\": \"Copy link\",\n \"Embed\": \"Embed\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-mail\"\n}\n","{\n \"Share\": \"Partager\",\n \"Sharing type\": \"Type de partage\",\n \"Close\": \"Fermer\",\n \"Share episode\": \"Partager l'épisode\",\n \"Episode\": \"Épisode\",\n \"Share the current position\": \"Partager la position courante\",\n \"Current position\": \"Position courante\",\n \"Share on Facebook\": \"Partager sur Facebook\",\n \"Share on X\": \"Partager sur X\",\n \"Share on LinkedIn\": \"Partager sur Linkedin\",\n \"Share on WhatsApp\": \"Partager sur Whatsapp\",\n \"Share by email\": \"Partager par e-mail\",\n \"Copy link\": \"Copier le lien\",\n \"Embed\": \"Embed\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-mail\"\n}\n","{\n \"Share\": \"Condividi\",\n \"Sharing type\": \"Tipo di condivisione\",\n \"Close\": \"Chiudi\",\n \"Share episode\": \"Condividi l'episodio\",\n \"Episode\": \"Episodio\",\n \"Share the current position\": \"Condividi la posizione corrente\",\n \"Current position\": \"Posizione corrente\",\n \"Share on Facebook\": \"Condividi su Facebook\",\n \"Share on X\": \"Condividi su X\",\n \"Share on LinkedIn\": \"Condividi su LinkedIn\",\n \"Share on WhatsApp\": \"Condividi su WhatsApp\",\n \"Share by email\": \"Condividi via e-mail\",\n \"Copy link\": \"Copia il link\",\n \"Embed\": \"Incorpora\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-mail\"\n}\n","{\n \"Share\": \"Cundivider\",\n \"Sharing type\": \"Tip da cundivider\",\n \"Close\": \"Serrar\",\n \"Share episode\": \"Cundivider l'episoda\",\n \"Episode\": \"Episoda\",\n \"Share the current position\": \"Cundivider la posiziun actuala\",\n \"Current position\": \"Posiziun actuala\",\n \"Share on Facebook\": \"Cundivider sin Facebook\",\n \"Share on X\": \"Cundivider sin X\",\n \"Share on LinkedIn\": \"Cundivider sin LinkedIn\",\n \"Share on WhatsApp\": \"Cundivider sin WhatsApp\",\n \"Share by email\": \"Cundivider per e-mail\",\n \"Copy link\": \"Copiar il link\",\n \"Embed\": \"Integrar\",\n \"Facebook\": \"Facebook\",\n \"X\": \"X\",\n \"LinkedIn\": \"LinkedIn\",\n \"WhatsApp\": \"WhatsApp\",\n \"E-mail\": \"E-mail\"\n}\n","import de from './de.json';\nimport en from './en.json';\nimport fr from './fr.json';\nimport it from './it.json';\nimport rm from './rm.json';\nimport videojs from 'video.js';\n\nfunction extendLanguage(code, data) {\n videojs.addLanguage(code, {\n ...videojs.options.language[code] ?? {},\n ...data\n });\n}\n\nextendLanguage('de', de);\nextendLanguage('en', en);\nextendLanguage('fr', fr);\nextendLanguage('it', it);\nextendLanguage('rm', rm);\n","import videojs from 'video.js';\nimport './lang';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/component').default}\n */\nconst Component = videojs.getComponent('Component');\n\nconst baseUrl = (player, component) =>\n configuredUrl(player, component) || window.location.href;\n\nconst configuredUrl = (player, component) => {\n const { url } = component.options();\n\n return typeof url === 'function' ?\n url(player, component, component.context()) :\n url;\n};\n\nconst getMediaComposition = (player) =>\n player.options().mediaComposition;\n\nconst getMainChapter = (player) =>\n getMediaComposition(player)?.getMainChapter?.();\n\nconst getSubdivisions = (player) =>\n getMediaComposition(player)?.getSubdivisions?.() ?? [];\n\nconst containsTime = (segment, time) =>\n time >= segment.markIn / 1000 && time < segment.markOut / 1000;\n\nconst getCurrentSubdivision = (player) =>\n getSubdivisions(player)\n .filter((segment) => !segment.blockReason)\n .filter((segment) => containsTime(segment, player.currentTime()))\n .pop();\n\nconst getSourceMediaData = (player) => player.currentSource()?.mediaData;\n\nconst getCurrentMedia = (player) =>\n getMainChapter(player) ||\n getSourceMediaData(player);\n\n/**\n * A radio group selecting which URL is shared. The selected option generates\n * the media URL that the share buttons wrap for their own platform.\n *\n * The native `change` event of the radio inputs bubbles up to this component\n * element, listen to it to be notified when the selection changes.\n */\nclass ShareUrlOptions extends Component {\n /**\n * Creates the URL option radio group.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The URL option configuration.\n * @param {string|function(player, component, context): string} [options.url] The base URL used to\n * generate the share URLs, defaults to the current page URL.\n * @param {boolean} [options.includeCurrentTime=false] Enables the current position option.\n * @param {string} [options.defaultOption] The initially selected option, `'currentTime'` when the\n * current position is enabled, `'episode'` otherwise.\n * @param {Object} [options.options] The available options, keyed by name. Each one declares a\n * `label`, a `title`, a `generateUrl(player, component)` and optionally `isHidden(player, component)`,\n * `isDisabled(player, component)` or a static `disabled`. Set an entry to `false` to remove it.\n */\n constructor(player, options = {}) {\n super(player, options);\n this.render();\n this.on(this.player(), 'timeupdate', this.updateOptionsState);\n }\n\n /**\n * Creates the component element.\n *\n * @returns {HTMLElement} The radio group element.\n */\n createEl() {\n return super.createEl('div', {}, {\n role: 'radiogroup',\n 'aria-label': this.localize('Sharing type')\n });\n }\n\n /**\n * Renders the enabled options. The group is hidden when there is nothing\n * to choose from.\n *\n * @param {string} [selected] The name of the checked option.\n */\n render(selected = this.defaultOption()) {\n const entries = this.entries();\n\n this.toggleClass('vjs-hidden', entries.length <= 1);\n this.el().replaceChildren(...entries.map(\n ([name, option]) => this.createOption(name, option, name === selected)\n ));\n }\n\n /**\n * Returns the enabled URL option entries.\n *\n * @returns {Array} The enabled `[name, option]` pairs.\n */\n entries() {\n const { options, includeCurrentTime } = this.options();\n\n return Object.entries(options).filter(([name, option]) =>\n option !== false &&\n !this.isOptionHidden(option) &&\n (name !== 'currentTime' || includeCurrentTime));\n }\n\n /**\n * Returns whether an option should be hidden.\n *\n * @param {Object} option The option config.\n *\n * @returns {boolean} True when hidden.\n */\n isOptionHidden(option) {\n return typeof option.isHidden === 'function' ?\n option.isHidden(this.player(), this) :\n false;\n }\n\n /**\n * Returns whether an option is currently disabled.\n *\n * @param {Object} option The option config.\n *\n * @returns {boolean} True when disabled.\n */\n isOptionDisabled(option) {\n return typeof option.isDisabled === 'function' ?\n option.isDisabled(this.player(), this) :\n Boolean(option.disabled);\n }\n\n /**\n * Returns the name of the option checked by default. Disabled options are\n * never selected by default.\n *\n * @returns {string} The default option name.\n */\n defaultOption() {\n const { defaultOption, includeCurrentTime } = this.options();\n const preferred = defaultOption ??\n (includeCurrentTime ? 'currentTime' : 'episode');\n const entries = this.entries()\n .filter(([, option]) => !this.isOptionDisabled(option));\n\n return entries.some(([name]) => name === preferred) ?\n preferred :\n entries[0]?.[0];\n }\n\n /**\n * Creates one radio option.\n *\n * @param {string} name The option name.\n * @param {Object} option The option configuration.\n * @param {boolean} checked Whether the option is checked.\n *\n * @returns {HTMLLabelElement} The option label wrapping the radio input.\n */\n createOption(name, option, checked) {\n const id = `${this.id()}_${name}`;\n const label = videojs.dom.createEl('label', {\n className: 'vjs-share-url-option-label',\n title: this.localize(option.title ?? option.label)\n }, { for: id });\n\n label.append(\n videojs.dom.createEl('input', {\n className: 'vjs-share-url-option-input',\n checked,\n disabled: this.isOptionDisabled(option)\n }, {\n id,\n type: 'radio',\n name: `${this.id()}_url_option`,\n value: name\n }),\n videojs.dom.createEl('span', {\n textContent: this.localize(option.label)\n })\n );\n\n return label;\n }\n\n /**\n * Returns the radio input of an option.\n *\n * @param {string} name The option name.\n *\n * @returns {HTMLInputElement|null} The radio input, when rendered.\n */\n input(name) {\n return this.$(`.vjs-share-url-option-input[value=\"${name}\"]`);\n }\n\n /**\n * Returns the name of the selected option.\n *\n * @returns {string|undefined} The selected option name.\n */\n selected() {\n return this.$('.vjs-share-url-option-input:checked')?.value;\n }\n\n /**\n * Refreshes the disabled state of the rendered options, falling back to the\n * default option when the selected one becomes disabled.\n */\n updateOptionsState() {\n this.entries().forEach(([name, option]) => {\n const input = this.input(name);\n\n if (input) input.disabled = this.isOptionDisabled(option);\n });\n\n const selected = this.options().options[this.selected()];\n\n if (selected && this.isOptionDisabled(selected)) {\n this.selectDefaultOption();\n }\n }\n\n /**\n * Selects the current default URL option.\n */\n selectDefaultOption() {\n const input = this.input(this.defaultOption());\n\n if (!input) return;\n\n input.checked = true;\n this.trigger('change');\n }\n\n /**\n * Returns media information available to URL builders.\n *\n * @returns {Object} The current media context.\n */\n context() {\n const currentMedia = getCurrentMedia(this.player());\n\n return {\n currentMedia,\n currentSource: this.player().currentSource?.(),\n currentSubdivision: getCurrentSubdivision(this.player()),\n currentTime: this.player().currentTime(),\n mainChapter: getMainChapter(this.player()),\n mediaData: getSourceMediaData(this.player()),\n subdivisions: getSubdivisions(this.player()),\n title: currentMedia?.title\n };\n }\n\n /**\n * Generates the share URL of the selected option.\n *\n * @returns {string} The share URL.\n */\n generateUrl() {\n const option = this.options().options[this.selected()];\n\n return option ? option.generateUrl(this.player(), this) : '';\n }\n\n /**\n * Re-renders the options with the current language, keeping the selection.\n */\n handleLanguagechange() {\n this.el().setAttribute('aria-label', this.localize('Sharing type'));\n this.render(this.selected());\n }\n}\n\nShareUrlOptions.prototype.options_ = {\n className: 'vjs-share-url-options',\n defaultOption: undefined,\n includeCurrentTime: false,\n url: undefined,\n options: {\n episode: {\n label: 'Episode',\n title: 'Share episode',\n generateUrl: (player, component) => baseUrl(player, component)\n },\n currentTime: {\n label: 'Current position',\n title: 'Share the current position',\n generateUrl: (player, component) => {\n const url = new URL(baseUrl(player, component));\n\n url.searchParams.set('startTime', Math.floor(player.currentTime()));\n\n return url.toString();\n }\n }\n }\n};\n\nvideojs.registerComponent('ShareUrlOptions', ShareUrlOptions);\n\nexport default ShareUrlOptions;\n","import videojs from 'video.js';\nimport './lang';\nimport './share-button-collection.js';\nimport './share-url-options.js';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/modal-dialog').default}\n */\nconst ModalDialog = videojs.getComponent('ModalDialog');\n\n/**\n * A small share modal anchored to the top-right corner of the player.\n */\nclass ShareModal extends ModalDialog {\n /**\n * Creates an instance of ShareModal.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The modal options, on top of the `ModalDialog` ones.\n * @param {string} [options.title='Share'] The title displayed at the top of the modal.\n * @param {boolean} [options.pauseOnOpen=false] Whether opening the modal pauses the player.\n * @param {boolean} [options.temporary=false] Whether the modal is disposed once closed.\n * @param {Object} [options.shareUrlOptions={}] The `ShareUrlOptions` child configuration.\n * @param {Object} [options.shareButtonCollection={}] The `ShareButtonCollection` child configuration.\n */\n constructor(player, options = {}) {\n super(player, options);\n\n this.handleOutsideClick = this.handleOutsideClick.bind(this);\n this.fill();\n this.render();\n }\n\n /**\n * Cleans up the modal and removes its event listeners.\n */\n dispose() {\n this.unbindOutsideClick();\n super.dispose();\n }\n\n /**\n * Builds the CSS class string for the modal.\n *\n * @returns {string} The CSS class string.\n */\n buildCSSClass() {\n return `vjs-share-modal ${super.buildCSSClass()}`;\n }\n\n /**\n * Renders the modal content.\n */\n render() {\n this.title_ = this.createTitle();\n this.urlOptions_ = this.addChild(\n 'ShareUrlOptions',\n this.options().shareUrlOptions\n );\n this.collection_ = this.addChild(\n 'ShareButtonCollection',\n this.options().shareButtonCollection\n );\n\n this.on(this.urlOptions_, 'change', this.updateUrlGenerator);\n this.on('share', this.handleShare);\n this.updateUrlGenerator();\n }\n\n /**\n * Creates the modal title.\n *\n * @returns {Component} The title component.\n */\n createTitle() {\n const title = this.addChild('ShareModalTitle', {\n componentClass: 'TitleBar',\n className: 'vjs-share-title'\n });\n\n title.update({\n title: this.localize(this.options().title ?? 'Share')\n });\n\n return title;\n }\n\n /**\n * Opens the modal.\n */\n open() {\n super.open();\n this.bindOutsideClick();\n this.updateUrlGenerator();\n }\n\n /**\n * Closes the modal.\n */\n close() {\n this.unbindOutsideClick();\n super.close();\n }\n\n /**\n * Updates the collection URL generator.\n */\n updateUrlGenerator() {\n this.collection_.setUrlGenerator(() => this.urlOptions_.generateUrl());\n }\n\n /**\n * Closes the modal after a share action. The `share` event bubbles from the\n * platform buttons.\n */\n handleShare() {\n this.close();\n }\n\n /**\n * Binds the outside click listener.\n */\n bindOutsideClick() {\n document.addEventListener('pointerdown', this.handleOutsideClick);\n }\n\n /**\n * Removes the outside click listener.\n */\n unbindOutsideClick() {\n document.removeEventListener('pointerdown', this.handleOutsideClick);\n }\n\n /**\n * Closes the modal when clicking outside the share modal.\n *\n * @param {PointerEvent} event The pointer event.\n */\n handleOutsideClick(event) {\n if (this.isOwnClick(event)) return;\n\n this.close();\n }\n\n /**\n * Returns whether the click happened inside the share modal.\n *\n * @param {PointerEvent} event The pointer event.\n *\n * @returns {boolean} True when the click belongs to the share modal.\n */\n isOwnClick(event) {\n return this.el().contains(event.target);\n }\n\n handleLanguagechange() {\n this.el().title = this.localize(this.options().title ?? 'Share');\n this.title_.update({\n title: this.localize(this.options().title ?? 'Share')\n });\n }\n}\n\nShareModal.prototype.options_ = {\n pauseOnOpen: false,\n temporary: false,\n title: 'Share',\n shareUrlOptions: {},\n shareButtonCollection: {}\n};\n\nvideojs.registerComponent('ShareModal', ShareModal);\n\nexport default ShareModal;\n","{\n \"name\": \"@srgssr/share-button\",\n \"version\": \"0.0.1\",\n \"license\": \"MIT\",\n \"author\": \"SRG SSR\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/SRGSSR/pillarbox-web-suite.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"homepage\": \"https://github.com/SRGSSR/pillarbox-web-suite/tree/main/packages/share-button#readme\",\n \"type\": \"module\",\n \"main\": \"dist/share-button.cjs\",\n \"browser\": \"dist/share-button.umd.min.js\",\n \"module\": \"dist/share-button.js\",\n \"style\": \"./dist/share-button.min.css\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/share-button.js\",\n \"require\": \"./dist/share-button.cjs\"\n },\n \"./*\": \"./*\"\n },\n \"files\": [\n \"dist/*\",\n \"scss/*\"\n ],\n \"keywords\": [\n \"video.js\",\n \"player\",\n \"share\",\n \"videojs-component\"\n ],\n \"scripts\": {\n \"clean\": \"rimraf dist\",\n \"build\": \"npm-run-all clean build:*\",\n \"build:css\": \"sass ./scss/share-button.scss:dist/share-button.min.css --style compressed --source-map --load-path node_modules\",\n \"build:lib\": \"vite build --config vite.config.lib.js\",\n \"build:umd\": \"vite build --config vite.config.umd.js\",\n \"github:page\": \"vite build\",\n \"release:ci\": \"semantic-release\",\n \"start\": \" vite --port 4200 --open\",\n \"test\": \"vitest run --silent --coverage --coverage.reporter text\"\n },\n \"dependencies\": {\n \"@srgssr/svg-button\": \"^1.1.3\"\n },\n \"peerDependencies\": {\n \"video.js\": \"^8.0.0\"\n },\n \"devDependencies\": {\n \"@srgssr/pillarbox-web\": \"^1.36.1\"\n }\n}\n","import videojs from 'video.js';\nimport '@srgssr/svg-button';\nimport { version } from '../package.json';\n\n/**\n * @ignore\n * @type {typeof import('@srgssr/svg-button').SvgButton}\n */\nconst SvgButton = videojs.getComponent('SvgButton');\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/utils/log.js').default}\n */\nconst log = videojs.log.createLogger('share-toggle');\n\n/**\n * A Video.js button that opens the share modal. The button follows the modal\n * state: it is hidden while the modal is open and shown again once closed.\n */\nclass ShareToggle extends SvgButton {\n /**\n * Creates an instance of ShareToggle.\n *\n * @param {import('video.js/dist/types/player.js').default} player The player instance.\n * @param {Object} options The button options, on top of the `SvgButton` ones.\n * @param {string} [options.controlText='Share'] The accessible text of the button.\n * @param {SVGElement|string|URL} [options.icon] The icon displayed by the button.\n * @param {string} [options.iconName='share'] The icon name when using Video.js experimental SVG icons.\n */\n constructor(player, options = {}) {\n super(player, options);\n\n // The modal may be initialized after this button depending on the order\n // of the player options, defer the binding until the player is ready.\n this.player().ready(() => this.bindShareModal());\n }\n\n /**\n * Listens to the share modal lifecycle events to follow its state.\n */\n bindShareModal() {\n const modal = this.player().getChild('ShareModal');\n\n if (!modal) {\n log.warn('ShareToggle requires a ShareModal child on the player');\n\n return;\n }\n\n this.on(modal, 'modalopen', this.hide);\n this.on(modal, 'modalclose', this.show);\n this.toggleClass('vjs-hidden', modal.opened());\n }\n\n /**\n * Handles click events on the ShareToggle by opening the share modal.\n *\n * @param {Event} event The click event.\n */\n handleClick(event) {\n super.handleClick(event);\n this.shareModal().open();\n }\n\n /**\n * Returns the modal controlled by this toggle.\n *\n * @returns {import('./share-modal.js').default} The share modal.\n */\n shareModal() {\n const modal = this.player().getChild('ShareModal');\n\n if (!modal) {\n throw new Error('ShareToggle requires a ShareModal child on the player');\n }\n\n return modal;\n }\n\n /**\n * Builds the CSS class string for the toggle.\n *\n * @returns {string} The CSS class string.\n */\n buildCSSClass() {\n return `vjs-share-toggle ${super.buildCSSClass()}`;\n }\n\n /**\n * Returns the package version.\n *\n * @returns {string} The current package version.\n */\n static get VERSION() {\n return version;\n }\n}\n\nShareToggle.prototype.options_ = {\n controlText: 'Share',\n iconName: 'share'\n};\n\nvideojs.registerComponent('ShareToggle', ShareToggle);\n\nexport default ShareToggle;\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@srgssr/share-button",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"author": "SRG SSR",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/SRGSSR/pillarbox-web-suite.git"
|
|
9
|
+
},
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/SRGSSR/pillarbox-web-suite/tree/main/packages/share-button#readme",
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "dist/share-button.cjs",
|
|
16
|
+
"browser": "dist/share-button.umd.min.js",
|
|
17
|
+
"module": "dist/share-button.js",
|
|
18
|
+
"style": "./dist/share-button.min.css",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"import": "./dist/share-button.js",
|
|
22
|
+
"require": "./dist/share-button.cjs"
|
|
23
|
+
},
|
|
24
|
+
"./*": "./*"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist/*",
|
|
28
|
+
"scss/*"
|
|
29
|
+
],
|
|
30
|
+
"keywords": [
|
|
31
|
+
"video.js",
|
|
32
|
+
"player",
|
|
33
|
+
"share",
|
|
34
|
+
"videojs-component"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"clean": "rimraf dist",
|
|
38
|
+
"build": "npm-run-all clean build:*",
|
|
39
|
+
"build:css": "sass ./scss/share-button.scss:dist/share-button.min.css --style compressed --source-map --load-path node_modules",
|
|
40
|
+
"build:lib": "vite build --config vite.config.lib.js",
|
|
41
|
+
"build:umd": "vite build --config vite.config.umd.js",
|
|
42
|
+
"github:page": "vite build",
|
|
43
|
+
"release:ci": "semantic-release",
|
|
44
|
+
"start": " vite --port 4200 --open",
|
|
45
|
+
"test": "vitest run --silent --coverage --coverage.reporter text"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@srgssr/svg-button": "^1.1.3"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"video.js": "^8.0.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@srgssr/pillarbox-web": "^1.36.1"
|
|
55
|
+
}
|
|
56
|
+
}
|