@clickview/lite 0.56.3 → 0.56.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/lite",
3
- "version": "0.56.3",
3
+ "version": "0.56.4",
4
4
  "description": "ClickView Lite",
5
5
  "main": "dist/scripts/bundle.js",
6
6
  "types": "dist/projects/lite/src/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5566-083d39b3bc-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/libs/shared/src/apps/clips/components/edit-clip-details/EditClipDetails.tsx","file:///app/packages/projects/lite/src/shared/views/edit-clip-details/EditClipDetailsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} aria-errormessage={`${fieldProps.name}Error`} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback id={`${fieldProps.name}Error`} type='invalid' role='status'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import * as React from 'react';\nimport { Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Clip, CreateOrUpdateClipRequest, Video } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.editClipDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst ClipValidationSchema = Yup.object().shape<CreateOrUpdateClipRequest>({\n name: Yup.string()\n .trim()\n .max(255, () => getPhrase('titleTooLong'))\n .required(() => getPhrase('titleRequired'))\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(16000, () => getPhrase('descriptionTooLong'))\n .default(''),\n\n startTime: Yup.number()\n .required(),\n\n endTime: Yup.number()\n .required(),\n\n status: Yup.mixed<CurationStatus>()\n\n}).noUnknown();\n\ninterface EditClipDetailsFormProps {\n video: Video;\n onClickCancel: () => void;\n isNew?: boolean;\n}\n\nfunction EditClipDetailsForm(props: EditClipDetailsFormProps): React.ReactElement {\n const formikProps = useFormikContextWrapper<CreateOrUpdateClipRequest>();\n\n return (\n <Form>\n <div className='row form-group'>\n <div className='col-5'>\n <VideoThumbnail\n video={{\n _parentVideo: props.video,\n typeId: MasterType.Clip,\n ...formikProps.values as Clip\n }}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n preload\n />\n </div>\n <div className='col-7'>\n <h2 className='h6'>{formikProps.values.name}</h2>\n </div>\n </div>\n <FormField\n label={getPhrase('nameLabel')}\n type='text'\n name='name'\n id ='name'\n placeholder={getPhrase('namePlaceholder')}\n autoFocus\n value={formikProps.values.name}\n />\n <FormField\n label={getPhrase('descriptionLabel')}\n component='textarea'\n name='description'\n id ='description'\n placeholder={getPhrase('descriptionPlaceholder')}\n value={formikProps.values.description}\n />\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.onClickCancel} />\n <PopupButtons.Submit\n isNew={props.isNew}\n text={props.isNew && getPhrase('createClip')}\n variant='dark'\n />\n </PopupButtons>\n </Form>\n );\n}\n\ninterface EditClipDetailsProps {\n video: Video;\n clip: Clip;\n saveClip: (data: CreateOrUpdateClipRequest, onDone: () => void) => void;\n onClickCancel: () => void;\n allowInitialSubmit?: boolean;\n isCopying: boolean;\n}\n\nexport function EditClipDetails(props: EditClipDetailsProps): React.ReactElement {\n return (\n <FormWrapper<CreateOrUpdateClipRequest>\n initialValues={props.clip}\n validationSchema={ClipValidationSchema}\n onSubmit={props.saveClip}\n allowInitialSubmit={props.allowInitialSubmit}\n >\n <EditClipDetailsForm\n video={props.video}\n isNew={!props.clip?.id || props.isCopying}\n onClickCancel={props.onClickCancel}\n />\n </FormWrapper>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { EditClipDetails } from 'libs/shared/apps/clips/components/edit-clip-details/EditClipDetails';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CreateOrUpdateClipRequest, PopupViewProps, Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.editClipDetailsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EditClipDetailsViewProps extends PopupViewProps {\n id?: string;\n videoId?: string;\n startTime?: number;\n endTime?: number;\n isCopying?: boolean;\n}\n\nexport function EditClipDetailsView(props: EditClipDetailsViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const clip = Flight.useBasicFetch<Clip>(!!props.id && ClipRequests.clip(props.id));\n const videoId = clip.data?._parentVideo?.id || props.videoId;\n const video = Flight.useBasicFetch<Video>(!!videoId && VideoRequests.video(videoId));\n\n const startTime = isNaN(props.startTime) ? clip?.data?.startTime : props.startTime;\n const endTime = isNaN(props.endTime) ? clip?.data?.endTime : props.endTime;\n \n function saveClip(data: CreateOrUpdateClipRequest): void {\n const success = (savedClip: Clip) => {\n alerts.success(getPhrase('success', { name: data.name, escapeText: true }));\n\n AnalyticsHelper.logUserAction(\n VideoHelper.getAnalyticsData(clip.data),\n {\n actionType: props.id ? UserAction.Edit : UserAction.Create,\n entity: EntityType.Clip,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ savedClip.id, TextHelper.slugify(savedClip.name) ]\n });\n };\n\n const error = () => {\n alerts.error(getPhrase('error'));\n };\n\n const always = () => {\n props.closePopup();\n };\n\n const request = props.id && !props.isCopying\n ? ClipRequests.updateClip(props.id, data, success, error, always)\n : ClipRequests.createClip(videoId, data, success, error, always);\n\n Flight.fetch(dispatch, request);\n }\n\n if (!props.id && !props.videoId)\n return <></>;\n\n const dataLoaded = !!video.data && (!props.id || !!clip.data);\n\n return (\n <Popup\n title={getPhrase(props.id ? 'editPopupHeading' : 'createPopupHeading')}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded}\n >\n <EditClipDetails\n video={video.data}\n clip={{\n id: clip?.data?.id,\n name: props.isCopying ? `${getPhrase('copyPrefix')} ${clip?.data?.name}` : clip?.data?.name,\n description: clip?.data?.description,\n startTime,\n endTime,\n status: CurationStatus.Published,\n thumbnail: clip?.data?._thumbnail\n }}\n saveClip={saveClip}\n onClickCancel={props.closePopup}\n isCopying={!!props.isCopying}\n allowInitialSubmit\n />\n </Popup>\n );\n}"],"names":["FormCheckbox","props","label","checkboxLabelClassName","checkboxLabelFontWeight","className","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","field","values","fieldName","length","limit","namespace","children","showLoadingSpinner","type","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","size","containerClassName","disabled","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","role","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formikProps","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","getPhrase","LanguageService","ClipValidationSchema","shape","trim","max","required","description","startTime","endTime","status","noUnknown","EditClipDetailsForm","VideoThumbnail","video","_parentVideo","typeId","MasterType","imageOptions","textPosition","ThumbnailTextPosition","preload","placeholder","autoFocus","component","PopupButtons","onClickCancel","isNew","text","variant","EditClipDetails","clip","saveClip","isCopying","EditClipDetailsView","dispatch","alerts","ClipRequests","videoId","data","VideoRequests","isNaN","dataLoaded","Popup","closePopup","CurationStatus","thumbnail","_thumbnail","success","savedClip","escapeText","AnalyticsHelper","VideoHelper","actionType","entity","location","workflowPhase","application","action","args","TextHelper","error","always","request"],"sourceRoot":""}