{"version":3,"file":"Input-CfAljZUS.mjs","sources":["../../admin/src/utils/getVideoProviderAndUid.ts","../../admin/src/components/Field/Input.tsx"],"sourcesContent":["const getVideoProviderAndUid = (url: string) => {\n    if (url.includes('vimeo')) {\n        const regExp =\n            /^https?:\\/\\/(?:www\\.)?vimeo\\.com\\/(?:(?:channels\\/[\\w]+\\/)|(groups\\/[\\w]+\\/videos\\/))?(\\d+)(?:\\/([\\w]+))?/;\n        const match = url.match(regExp);\n        if (match && match[2]) {\n            return {\n                provider: 'vimeo',\n                providerUid: match[2],\n                privacyHash: match[3] || null,\n            };\n        }\n    }\n\n    if (url.includes('youtube') || url.includes('youtu.be')) {\n        const standardRegExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\/)|(\\?v=|\\&v=))([^#\\&\\?]{11}).*/;\n        const shortRegExp = /youtube\\.com\\/shorts\\/([a-zA-Z0-9_-]{11})/;\n\n        const standardMatch = url.match(standardRegExp);\n        if (standardMatch && standardMatch[8].length === 11) {\n            return {\n                provider: 'youtube',\n                providerUid: standardMatch[8],\n            };\n        }\n\n        const shortsMatch = url.match(shortRegExp);\n        if (shortsMatch && shortsMatch[1]) {\n            return {\n                provider: 'youtube',\n                providerUid: shortsMatch[1],\n            };\n        }\n    }\n\n    if (url.includes('facebook')) {\n        return {\n            provider: 'facebook',\n            providerUid: url,\n        };\n    }\n\n    return null;\n};\n\nexport { getVideoProviderAndUid };\n","import React, { useState, useEffect, ChangeEvent } from 'react';\nimport { Box, Flex, Field } from '@strapi/design-system';\nimport { getVideoProviderAndUid } from '../../utils/getVideoProviderAndUid';\nimport { useIntl } from 'react-intl';\nimport { getTranslation } from '../../utils/getTranslation';\n\ninterface VideoInputProps {\n    intlLabel: Record<any, any>;\n    onChange: (e: any) => void;\n    attribute: Record<any, any>;\n    name: string;\n    disabled?: boolean;\n    error?: string;\n    labelAction?: Record<any, any>;\n    required?: boolean;\n    value?: any;\n    [key: string]: any;\n}\n\nconst VideoInput = ({ attribute, name, onChange, value, intlLabel, intlDescription }: VideoInputProps) => {\n    const [providerUid, setProviderUid] = useState<string | null>(null);\n    const [privacyHash, setPrivacyHash] = useState<string | null>(null);\n    const [provider, setProvider] = useState<string | null>(null);\n    const [videoUrl, setVideoUrl] = useState<string | null>(null);\n    const [invalidUrl, setInvalidUrl] = useState(false);\n    const { formatMessage } = useIntl();\n\n    // Load data from value on page load\n    useEffect(() => {\n        let initialValue;\n\n        if (typeof value === 'object') {\n            initialValue = value;\n        } else {\n            try {\n                initialValue = JSON.parse(value);\n            } catch (e) {\n                initialValue = {};\n            }\n        }\n        if (initialValue?.privacyHash) {\n            setPrivacyHash(initialValue.privacyHash);\n        }\n\n        if (initialValue?.url) {\n            setVideoUrl(initialValue.url);\n            if (initialValue.provider && initialValue.providerUid) {\n                setInvalidUrl(false);\n                setProvider(initialValue.provider);\n                setProviderUid(initialValue.providerUid);\n            } else {\n                setInvalidUrl(true);\n            }\n        }\n    }, [value]);\n\n    const onInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n        setVideoUrl(e.target.value || '');\n        if (e.target.value) {\n            const data = getVideoProviderAndUid(e.target.value);\n\n            if (e.target.value.length > 0) {\n                setInvalidUrl(true);\n            }\n\n            if (data?.provider && data?.providerUid) {\n                setInvalidUrl(false);\n                setProvider(data.provider);\n                setProviderUid(data.providerUid);\n            }\n\n            if (data?.privacyHash) {\n                setPrivacyHash(data.privacyHash);\n            }\n\n            const valueObj = {\n                url: e.target.value,\n                provider: data?.provider || '',\n                providerUid: data?.providerUid || '',\n                privacyHash: data?.privacyHash || '',\n            };\n\n            onChange({\n                target: {\n                    name,\n                    value: JSON.stringify(valueObj),\n                    type: attribute.type,\n                },\n            });\n        } else {\n            setInvalidUrl(false);\n            const valueObj = {\n                url: '',\n                provider: undefined,\n                providerUid: undefined,\n                privacyHash: undefined,\n            };\n            onChange({\n                target: {\n                    name,\n                    value: JSON.stringify(valueObj),\n                    type: attribute.type,\n                },\n            });\n        }\n    };\n\n    const fieldLabel = intlLabel\n        ? formatMessage(intlLabel)\n        : formatMessage({ id: getTranslation('video-field.label'), defaultMessage: 'Video' });\n    const fieldDescription = intlDescription\n        ? formatMessage(intlDescription)\n        : formatMessage({ id: getTranslation('video-field.title'), defaultMessage: 'Video url' });\n\n    const fieldPlaceholder = formatMessage({\n        id: getTranslation('video-field.placeholder'),\n        defaultMessage: 'eg. https://vimeo.com/123456789',\n    });\n    const fieldErrorMessage = formatMessage({\n        id: getTranslation('video-field.invalid.url'),\n        defaultMessage: 'Invalid video url',\n    });\n\n    return (\n        <Box>\n            <Field.Root id={name} hint={fieldDescription} error={invalidUrl ? fieldErrorMessage : undefined}>\n                <Field.Label>{fieldLabel}</Field.Label>\n                <Field.Input\n                    type=\"text\"\n                    name={name}\n                    value={videoUrl}\n                    onChange={onInputChange}\n                    placeholder={fieldPlaceholder}\n                />\n                <Field.Hint />\n                <Field.Error />\n            </Field.Root>\n\n            {provider && providerUid && (\n                <Flex paddingTop={4} justifyContent={'center'}>\n                    {provider === 'vimeo' && (\n                        <iframe\n                            src={`https://player.vimeo.com/video/${providerUid}${privacyHash ? '/' + privacyHash : ''}`}\n                            referrerPolicy=\"strict-origin-when-cross-origin\"\n                            allow=\"autoplay; fullscreen; picture-in-picture\"\n                            allowFullScreen\n                            height={200}\n                            style={{ border: 0 }}\n                        ></iframe>\n                    )}\n                    {provider === 'youtube' && (\n                        <iframe\n                            src={`https://www.youtube-nocookie.com/embed/${providerUid}`}\n                            referrerPolicy=\"strict-origin-when-cross-origin\"\n                            allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n                            allowFullScreen\n                            height={200}\n                            style={{ border: 0 }}\n                        ></iframe>\n                    )}\n                    {provider === 'facebook' && (\n                        <iframe\n                            src={`https://www.facebook.com/plugins/video.php?href=${providerUid}&show_text=false&t=0`}\n                            referrerPolicy=\"strict-origin-when-cross-origin\"\n                            allow=\"autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share\"\n                            allowFullScreen\n                            height={200}\n                            style={{ border: 0 }}\n                        />\n                    )}\n                </Flex>\n            )}\n        </Box>\n    );\n};\n\nexport default VideoInput;\n"],"names":[],"mappings":"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"}