;\n}\n\nexport type WithDialogProps = P &\n\tPick & {\n\t\tDialogProps?: SetOptional, 'title'>;\n\t};\n\n/**\n * NetX Dialog\n * Provides a consistent animation/experience\n */\nconst DialogPrimitive = React.forwardRef(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tclasses: _classes,\n\t\t\tclassName,\n\t\t\tcontrols,\n\t\t\tdialogActions,\n\t\t\tdisableContentPadding,\n\t\t\tdisabled,\n\t\t\terror,\n\t\t\tfullSize,\n\t\t\tfullScreen: _fullScreen,\n\t\t\tfullScreenWhenMobile,\n\t\t\ticon,\n\t\t\tisWorking,\n\t\t\tloading,\n\t\t\tprogress,\n\t\t\tpreventBackdropClose,\n\t\t\tonClose,\n\t\t\tsecondaryTitle,\n\t\t\tshowSecondaryTitleSkeletonWhileLoading,\n\t\t\t// TODO: severity styling support for 'danger' / 'info' / 'warning' / 'success'\n\t\t\tseverity = 'info',\n\t\t\ttitle,\n\t\t\tDialogActionsProps,\n\t\t\tDialogAlertProps,\n\t\t\tDialogContentProps,\n\t\t\tDialogTitleProps,\n\t\t\t...props\n\t\t}: DialogProps,\n\t\tref,\n\t) => {\n\t\tconst ownerState: DialogOwnerState = {\n\t\t\tclasses: _classes,\n\t\t\tclassName,\n\t\t\tdisableContentPadding,\n\t\t\tfullSize,\n\t\t\tfullScreenWhenMobile,\n\t\t};\n\n\t\tconst classes = useUtilityClasses(ownerState);\n\n\t\tconst theme = useTheme();\n\n\t\tconst smallScreen = useMediaQuery(theme.breakpoints.down('sm'));\n\n\t\tconst fullScreen = _fullScreen || (fullScreenWhenMobile && smallScreen);\n\n\t\tconst handleClose = onClose\n\t\t\t? () => onClose({}, 'escapeKeyDown')\n\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t {\n\t\t\t\t\tif (preventBackdropClose && reason === 'backdropClick') return;\n\t\t\t\t\tonClose?.(event, reason);\n\t\t\t\t}}\n\t\t\t\tTransitionComponent={Transition}\n\t\t\t\t{...props}\n\t\t\t\tTransitionProps={{\n\t\t\t\t\t...props.TransitionProps,\n\t\t\t\t\tonEnter: splitEventHandler(\n\t\t\t\t\t\tprops.TransitionProps?.onEnter,\n\t\t\t\t\t\t// see hack notes above\n\t\t\t\t\t\t() => dialogsOpenCount++,\n\t\t\t\t\t),\n\t\t\t\t\tonExit: splitEventHandler(\n\t\t\t\t\t\tprops.TransitionProps?.onExit,\n\t\t\t\t\t\t// see hack notes above\n\t\t\t\t\t\t// also, never got negative - can't have negative dialogs\n\t\t\t\t\t\t() => (dialogsOpenCount = Math.max(dialogsOpenCount - 1, 0)),\n\t\t\t\t\t),\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{isWorking ? (\n\t\t\t\t\t\n\t\t\t\t) : null}\n\n\t\t\t\t{(title && (\n\t\t\t\t\t\n\t\t\t\t)) ||\n\t\t\t\t\tnull}\n\n\t\t\t\t{error != null ? (\n\t\t\t\t\t{error}\n\t\t\t\t) : null}\n\n\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\n\t\t\t\t{dialogActions && (\n\t\t\t\t\t\n\t\t\t\t\t\t{dialogActions}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t);\n\t},\n);\n\nexport const Dialog = DialogPrimitive;\n\nexport default Dialog;\n","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"id\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base/composeClasses';\nimport Typography from '../Typography';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getDialogTitleUtilityClass } from './dialogTitleClasses';\nimport DialogContext from '../Dialog/DialogContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, getDialogTitleUtilityClass, classes);\n};\nconst DialogTitleRoot = styled(Typography, {\n name: 'MuiDialogTitle',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})({\n padding: '16px 24px',\n flex: '0 0 auto'\n});\nconst DialogTitle = /*#__PURE__*/React.forwardRef(function DialogTitle(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiDialogTitle'\n });\n const {\n className,\n id: idProp\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = props;\n const classes = useUtilityClasses(ownerState);\n const {\n titleId = idProp\n } = React.useContext(DialogContext);\n return /*#__PURE__*/_jsx(DialogTitleRoot, _extends({\n component: \"h2\",\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref,\n variant: \"h6\",\n id: idProp != null ? idProp : titleId\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogTitle.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * @ignore\n */\n id: PropTypes.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogTitle;","import {\n\tgenerateUtilityClass,\n\tgenerateUtilityClasses,\n} from '@netx/core-components/Theme';\n\nexport const DIALOG_TITLE_CLASS_NAME = 'DialogTitle';\nexport const DIALOG_TITLE_CLASS_SLOTS = [\n\t'root',\n\t'actions',\n\t'icon',\n\t'title',\n] as const;\n\nexport type DialogTitleClassSlot = typeof DIALOG_TITLE_CLASS_SLOTS[number];\n\nexport interface DialogTitleClasses {\n\troot: string;\n\tactions: string;\n\ticon: string;\n\ttitle: string;\n\n\thasIcon: string;\n}\n\nexport type DialogTitleClassKey = keyof DialogTitleClasses;\n\nexport const getDialogTitleUtilityClass = (slot: string) =>\n\tgenerateUtilityClass(DIALOG_TITLE_CLASS_NAME, slot);\n\nexport const dialogTitleClasses: DialogTitleClasses = generateUtilityClasses(\n\tDIALOG_TITLE_CLASS_NAME,\n\t['root', 'actions', 'hasIcon', 'icon', 'title'],\n);\n\nexport default dialogTitleClasses;\n","import React from 'react';\nimport {i18n} from '@netx/core-next/locales';\nimport clsx from 'clsx';\nimport {faTimes} from '@fortawesome/pro-solid-svg-icons';\nimport {\n\tDialogTitle as MuiDialogTitle,\n\ttype DialogTitleProps as MuiDialogTitleProps,\n} from '@mui/material';\nimport IconButton from '@netx/core-components/IconButton';\nimport {\n\tcomposeClasses,\n\tstyled,\n\ttype WithClasses,\n\ttype WithMuiPropOverrides,\n} from '@netx/core-components/Theme';\nimport {Title, type TitleProps} from '../Title';\nimport {\n\tdialogTitleClasses,\n\tgetDialogTitleUtilityClass,\n\tDIALOG_TITLE_CLASS_NAME,\n\ttype DialogTitleClasses,\n} from './dialogTitleClasses';\n\ntype DialogTitleOwnerProps = WithClasses<\n\tDialogTitleClasses,\n\t{\n\t\thasIcon?: boolean;\n\t}\n>;\n\nconst useUtilityClasses = (ownerState: DialogTitleOwnerProps) => {\n\tconst {classes, hasIcon} = ownerState;\n\tconst slots = {\n\t\troot: ['root', hasIcon && 'hasIcon'],\n\t\tactions: ['actions'],\n\t\tcontrols: ['controls'],\n\t\ticon: ['icon'],\n\t\ttitle: ['title'],\n\t};\n\treturn composeClasses(slots, getDialogTitleUtilityClass, classes);\n};\n\nconst DialogTitleRoot = styled(MuiDialogTitle, {\n\tname: DIALOG_TITLE_CLASS_NAME,\n\tslot: 'Root',\n})(({theme}) => ({\n\tdisplay: 'flex',\n\talignItems: 'center',\n\toverflow: 'hidden',\n\t[`&.${dialogTitleClasses.hasIcon}`]: {\n\t\tpaddingLeft: theme.spacing(2),\n\t},\n}));\n\nconst DialogTitleText = styled(Title, {\n\tname: DIALOG_TITLE_CLASS_NAME,\n\tslot: 'Title',\n})(({theme}) => ({\n\tflex: '1 1 auto',\n\toverflow: 'hidden',\n}));\n\nconst DialogTitleActions = styled('div', {\n\tname: DIALOG_TITLE_CLASS_NAME,\n\tslot: 'Title',\n})(({theme}) => ({\n\tflex: '0 0 auto',\n\tmarginLeft: theme.spacing(1),\n}));\n\nconst DialogTitleControls = styled('div', {\n\tname: DIALOG_TITLE_CLASS_NAME,\n\tslot: 'Controls',\n})(({theme}) => ({}));\n\nexport type DialogTitleProp =\n\t| string\n\t| {\n\t\t\tprimary: string;\n\t\t\tsecondary?: string;\n\t };\n\nexport interface DialogTitleProps\n\textends Omit<\n\t\t\tWithMuiPropOverrides,\n\t\t\t'classes' | 'variant'\n\t\t>,\n\t\tOmit,\n\t\tWithClasses<\n\t\t\tany,\n\t\t\t{\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tonClose?: () => void;\n\t\t\t\tcontrols?: React.ReactNode;\n\t\t\t}\n\t\t> {}\n\nconst DialogTitleInner = ({\n\tclasses: _classes,\n\tclassName,\n\tactionButton,\n\tcontrols,\n\tdisabled,\n\ticon,\n\tloading,\n\tprimary,\n\tsecondary,\n\tonClose,\n\tPrimaryTitleProps,\n\tSecondaryTitleProps,\n\t...props\n}: DialogTitleProps) => {\n\tconst ownerState: DialogTitleOwnerProps = {\n\t\tclasses: _classes,\n\t\tclassName,\n\t\thasIcon: icon != null,\n\t};\n\n\tconst classes = useUtilityClasses(ownerState);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{controls ? (\n\t\t\t\t\n\t\t\t\t\t{controls}\n\t\t\t\t\n\t\t\t) : null}\n\t\t\t{onClose ? (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : null}\n\t\t\n\t);\n};\n\nexport const DialogTitlePrimitive = DialogTitleInner;\n\nexport const DialogTitle = DialogTitlePrimitive;\n\nexport default DialogTitle;\n","import React from 'react';\nimport {FormHelperText, type FormHelperTextProps} from '@mui/material';\n\nexport interface ErrorFieldProps extends Omit {\n\terror?: string;\n}\n\nexport const ErrorField: React.FunctionComponent = ({\n\terror,\n\t...props\n}) => {\n\tif (!error) return null;\n\n\treturn (\n\t\t\n\t\t\t{error}\n\t\t\n\t);\n};\n\nexport default ErrorField;\n","import {\n\tgenerateUtilityClass,\n\tgenerateUtilityClasses,\n} from '@netx/core-components/Theme';\n\nexport const CHECKBOX_CLASS_NAME = 'Checkbox';\nexport const CHECKBOX_CLASS_SLOTS = ['root'] as const;\n\nexport type CheckboxClassSlot = typeof CHECKBOX_CLASS_SLOTS[number];\n\nexport interface CheckboxClasses {\n\troot: string;\n}\n\nexport type CheckboxClassKey = keyof CheckboxClasses;\n\nexport const getCheckboxUtilityClass = (slot: string) =>\n\tgenerateUtilityClass(CHECKBOX_CLASS_NAME, slot);\n\nexport const checkboxClasses: CheckboxClasses = generateUtilityClasses(\n\tCHECKBOX_CLASS_NAME,\n\t['root'],\n);\n\nexport default checkboxClasses;\n","import React from 'react';\nimport clsx from 'clsx';\nimport {\n\tCheckbox as MuiCheckbox,\n\ttype CheckboxProps as MuiCheckboxProps,\n\tFormControlLabel,\n} from '@mui/material';\nimport {useConstCallback} from '@netx/core-components/hooks/useEvent';\nimport {\n\tcomposeClasses,\n\tstyled,\n\ttype WithClasses,\n} from '@netx/core-components/Theme';\nimport {ErrorField} from '@netx/core-components/ErrorField';\nimport {\n\tcheckboxClasses,\n\tgetCheckboxUtilityClass,\n\tCHECKBOX_CLASS_NAME,\n\ttype CheckboxClasses,\n} from './checkboxClasses';\n\ntype CheckboxOwnerState = WithClasses;\n\nconst useUtilityClasses = (ownerState: CheckboxOwnerState) => {\n\tconst {classes} = ownerState;\n\tconst slots = {\n\t\troot: ['root'],\n\t};\n\treturn composeClasses(slots, getCheckboxUtilityClass, classes);\n};\n\n// TODO: this should extend the checkbox props\n// and have slots for FormControlLabel\nexport interface CheckboxProps\n\textends Omit,\n\t\tWithClasses {\n\terror?: string;\n\thideErrorMessage?: boolean;\n\tlabel: string | React.ReactNode;\n\tref?: React.ForwardedRef;\n}\n\nconst CheckboxRoot = styled('div', {\n\tname: CHECKBOX_CLASS_NAME,\n\tslot: 'Root',\n})(({theme}) => ({\n\tdisplay: 'inline-flex',\n\tflexDirection: 'column',\n}));\n\nexport const CheckboxPrimitive = (\n\t{\n\t\tclasses: _classes,\n\t\tclassName,\n\t\tchecked,\n\t\tdisabled,\n\t\terror,\n\t\tref: _ref,\n\t\thideErrorMessage,\n\t\tlabel,\n\t\tonChange,\n\t\t...props\n\t}: CheckboxProps,\n\tref: React.ForwardedRef,\n) => {\n\tchecked = checked === true;\n\n\tconst ownerState: CheckboxOwnerState = {\n\t\tclasses: _classes,\n\t\tclassName,\n\t};\n\n\tconst classes = useUtilityClasses(ownerState);\n\n\tconst handleChange = useConstCallback(\n\t\t(event: React.ChangeEvent, checked: boolean) => {\n\t\t\t// Sometimes a change event will come through that was not related to\n\t\t\t// interacting directly with the input\n\t\t\t// I cannot seem to recreate this in the tests yet, but this is an\n\t\t\t// important chack\n\t\t\tif (!event) return;\n\t\t\tonChange?.(event, checked);\n\t\t},\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t}\n\t\t\t\tlabel={label}\n\t\t\t/>\n\t\t\t{!hideErrorMessage ? (\n\t\t\t\t\n\t\t\t) : null}\n\t\t\n\t);\n};\n\nexport const Checkbox = React.forwardRef(CheckboxPrimitive) as (\n\tprops: CheckboxProps,\n) => JSX.Element;\n\nexport default Checkbox;\n","import React from 'react';\nimport type {SetRequired} from 'type-fest';\nimport {type FieldValues, type FieldPath} from 'react-hook-form';\nimport {splitEventHandler} from '@netx/core-next/utils';\nimport {useConstCallback} from '@netx/core-components/hooks/useEvent';\nimport {combineRefs} from '@netx/core-components/util';\nimport {Checkbox, type CheckboxProps} from '@netx/core-components/Checkbox';\nimport {\n\tReactHookFormControl,\n\ttype WithReactHookFormControlFieldProps,\n} from '../ReactHookFormControl';\n\nexport interface ReactHookFormCheckboxProps<\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath = FieldPath,\n> extends WithReactHookFormControlFieldProps<\n\t\tSetRequired, 'name'>,\n\t\tTFieldValues,\n\t\tTName\n\t> {}\n\nexport const ReactHookFormCheckboxPrimitive = <\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath = FieldPath,\n>(\n\t{\n\t\tcontrol,\n\t\tControllerProps,\n\t\t...props\n\t}: ReactHookFormCheckboxProps,\n\tref: React.ForwardedRef,\n) => {\n\treturn (\n\t\t\n\t\t\t{...ControllerProps}\n\t\t\tcontrol={control}\n\t\t\tname={props.name as TName}\n\t\t\trender={({field, formState}) => (\n\t\t\t\t\n\t\t\t\t\t\t\tfield.onChange(checked),\n\t\t\t\t\t\t),\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\trules={{\n\t\t\t\trequired: props.required,\n\t\t\t\tvalidate: async (value) => {\n\t\t\t\t\treturn props.required && !value ? i18n.t('i18n.required') : true;\n\t\t\t\t},\n\t\t\t\t...ControllerProps?.rules,\n\t\t\t}}\n\t\t/>\n\t);\n};\n\n/**\n * `react-hook-form` controlled `Checkbox` component\n */\nexport const ReactHookFormCheckbox = React.forwardRef(\n\tReactHookFormCheckboxPrimitive,\n) as <\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath = FieldPath,\n>(\n\tprops: ReactHookFormCheckboxProps,\n) => JSX.Element;\n\nexport default ReactHookFormCheckbox;\n","import React, {useEffect} from 'react';\nimport type {SetRequired} from 'type-fest';\nimport {splitEventHandler} from '@netx/core-next/utils';\nimport {useConstCallback} from '@netx/core-components/hooks/useEvent';\nimport useSharedRef from '@netx/core-components/hooks/useSharedRef';\nimport {Checkbox, type CheckboxProps} from '@netx/core-components/Checkbox';\nimport {useFormInput} from '../hooks';\nimport type {WithLegacyCommonFormFieldProps} from '../types';\n\nexport interface LegacyFormCheckboxProps\n\textends WithLegacyCommonFormFieldProps<\n\t\tOmit, 'form'>\n\t> {\n\tvalue?: boolean;\n}\n\nexport const LegacyFormCheckboxPrimitive = (\n\t{\n\t\terror,\n\t\tform,\n\t\tformFieldOptions,\n\t\tinputRef,\n\t\tonChange,\n\t\t...props\n\t}: LegacyFormCheckboxProps,\n\tref: React.ForwardedRef,\n) => {\n\tconst innerInputRef = useSharedRef(null, [inputRef]);\n\tconst _error = typeof error === 'string' ? error : error?.message;\n\n\tuseFormInput(props.name, props.value, form, {\n\t\trequired: props.required,\n\t\tvalidator: async (value) => {\n\t\t\tif (props.required && !value) {\n\t\t\t\treturn new Error(i18n.t('i18n.required'));\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t...formFieldOptions,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!error) return;\n\t\tinnerInputRef.current?.focus();\n\t}, [error]);\n\n\tconst handleChange = useConstCallback(\n\t\tsplitEventHandler(onChange, (event, value) => {\n\t\t\tform?.setValue(props.name, value);\n\t\t}),\n\t);\n\n\treturn (\n\t\t\n\t);\n};\n\nexport const LegacyFormCheckbox = React.forwardRef(LegacyFormCheckboxPrimitive);\n\nexport default LegacyFormCheckbox;\n","import React from 'react';\nimport type {SetRequired} from 'type-fest';\nimport {\n\ttype FieldValues,\n\ttype FieldPath,\n\ttype PathValue,\n} from 'react-hook-form';\nimport {splitEventHandler} from '@netx/core-next/utils';\nimport {\n\tDateField,\n\ttype DateFieldProps,\n\ttype DateValue,\n} from '@netx/core-components/DateField';\nimport {useConstCallback} from '@netx/core-components/hooks/useEvent';\nimport {combineRefs} from '@netx/core-components/util';\nimport {\n\tReactHookFormControl,\n\ttype WithReactHookFormControlFieldProps,\n} from '../ReactHookFormControl';\n\nexport interface ReactHookFormDateFieldProps<\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath = FieldPath,\n> extends WithReactHookFormControlFieldProps<\n\t\tSetRequired,\n\t\tTFieldValues,\n\t\tTName\n\t> {\n\t/** hook for parsing the value from the form to the input */\n\tparseValueIn?: (value: PathValue) => string;\n\t/** hook for parsing the value from the input to the form */\n\tparseValueOut?: (value: DateValue) => any;\n}\n\nexport const ReactHookFormDateFieldPrimitive = <\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath = FieldPath,\n>(\n\t{\n\t\tcontrol,\n\t\tControllerProps,\n\t\tparseValueIn,\n\t\tparseValueOut,\n\t\t...props\n\t}: ReactHookFormDateFieldProps,\n\tref: React.ForwardedRef,\n) => {\n\treturn (\n\t\t\n\t\t\t{...ControllerProps}\n\t\t\tcontrol={control}\n\t\t\tname={props.name as TName}\n\t\t\trender={({field, formState}) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\t\tfield.onChange(parseValueOut ? parseValueOut(value) : value),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}}\n\t\t\trules={{\n\t\t\t\trequired: props.required,\n\t\t\t\t...ControllerProps?.rules,\n\t\t\t}}\n\t\t/>\n\t);\n};\n\n/**\n * `react-hook-form` controlled `DateField` component\n */\nexport const ReactHookFormDateField = React.forwardRef(\n\tReactHookFormDateFieldPrimitive,\n) as <\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath = FieldPath,\n>(\n\tprops: ReactHookFormDateFieldProps,\n) => JSX.Element;\n\nexport default ReactHookFormDateField;\n","import React from 'react';\nimport type {SetRequired} from 'type-fest';\nimport {splitEventHandler} from '@netx/core-next/utils';\nimport {DateField, type DateFieldProps} from '@netx/core-components/DateField';\nimport {useConstCallback} from '@netx/core-components/hooks/useEvent';\nimport {useSharedRef} from '@netx/core-components/hooks/useSharedRef';\nimport {useFormInput} from '../hooks';\nimport {useErrorFocus} from '../hooks/useErrorFocus';\nimport type {WithLegacyCommonFormFieldProps} from '../types';\n\nexport interface LegacyFormDateFieldProps\n\textends WithLegacyCommonFormFieldProps> {}\n\nexport const LegacyFormDateFieldPrimitive = (\n\t{\n\t\terror,\n\t\tform,\n\t\tformFieldOptions,\n\t\tinputRef,\n\t\tonChange,\n\t\t...props\n\t}: LegacyFormDateFieldProps,\n\tref: React.ForwardedRef,\n) => {\n\tconst innerInputRef = useSharedRef(null, [inputRef]);\n\tconst _error = typeof error === 'string' ? error : error?.message;\n\n\tuseFormInput(props.name, props.value, form, {\n\t\trequired: props.required,\n\t\t...formFieldOptions,\n\t});\n\n\tuseErrorFocus({\n\t\terror: _error,\n\t\tinputRef: innerInputRef,\n\t});\n\n\tconst handleChange = useConstCallback(\n\t\tsplitEventHandler(onChange, (event, value) => {\n\t\t\tform?.setValue(props.name, value);\n\t\t}),\n\t);\n\n\treturn (\n\t\t\n\t);\n};\n\n/**\n * Legacy form wrapper for DateField\n * @deprecated\n */\nexport const LegacyFormDateField = React.forwardRef(\n\tLegacyFormDateFieldPrimitive,\n);\n\nexport default LegacyFormDateField;\n","import {Locales} from '@netx/core-next/locales';\n\nexport const EmailFieldLabel = Locales((i18n) => ({\n\tEMAIL: i18n('i18n.email'),\n}));\n\nexport const EmailFieldError = Locales((i18n) => ({\n\tDUPLICATE: i18n('i18n.emailAddressError_duplicate', {\n\t\tdefaultValue: 'Duplicate email',\n\t}),\n\tSOME_DUPLICATE: (emailAddresses: string[]) =>\n\t\ti18n('i18n.emailAddressError_someDuplicate', {\n\t\t\temailAddresses: emailAddresses.join(', '),\n\t\t\tdefaultValue:\n\t\t\t\t'Some email addresses were already present: __emailAddresses__',\n\t\t}),\n\tSOME_INVALID: (emailAddresses: string[]) =>\n\t\ti18n('i18n.emailAddressError_someInvalid', {\n\t\t\temailAddresses: emailAddresses.join(', '),\n\t\t\tdefaultValue:\n\t\t\t\t'Some email addresses could not be added: __emailAddresses__',\n\t\t}),\n}));\n","import React, {useMemo, useState} from 'react';\nimport type {Optional} from 'utility-types';\nimport {splitEventHandler} from '@netx/core-next/utils';\nimport {useConstCallback} from '@netx/core-components/hooks/useEvent';\nimport {useSnackbar} from '@netx/core-components/Snackbar';\nimport {\n\tAutoListField,\n\ttype AutoListFieldProps,\n} from '@netx/core-components/AutoListField';\nimport {validateEmail} from '@netx/core-components/Form/validators';\nimport {EmailFieldLabel, EmailFieldError} from './locales';\n\nconst options: string[] = [];\n\nexport interface EmailsFieldProps\n\textends Omit<\n\t\tOptional, 'name'>,\n\t\t'onSearch'\n\t> {}\n\nexport const EmailsFieldPrimitive = ({\n\terror,\n\tonChange,\n\t...props\n}: EmailsFieldProps) => {\n\tconst [queryStr, setQueryStr] = useState();\n\tconst snackbar = useSnackbar();\n\tconst [emailAlreadyInList, setEmailAlreadyInList] = useState(false);\n\tconst warning = useMemo(\n\t\t() => (emailAlreadyInList ? EmailFieldError.DUPLICATE : undefined),\n\t\t[emailAlreadyInList],\n\t);\n\n\treturn (\n\t\t\n\t\t\tclearOnClose\n\t\t\tlabel={EmailFieldLabel.EMAIL}\n\t\t\tname=\"email\"\n\t\t\t{...props}\n\t\t\tautoSelect\n\t\t\terror={warning ?? error}\n\t\t\tfreeSolo\n\t\t\tinputValue={queryStr}\n\t\t\toptions={options}\n\t\t\t// until we offer server side lookup\n\t\t\tpopupIcon={null}\n\t\t\tgetOptionDisabled={useConstCallback((option: string) => {\n\t\t\t\treturn (\n\t\t\t\t\tvalidateEmail(option) !== true ||\n\t\t\t\t\tprops.getOptionDisabled?.(option) === true\n\t\t\t\t);\n\t\t\t})}\n\t\t\tonBlur={splitEventHandler(props.onBlur, () =>\n\t\t\t\tsetEmailAlreadyInList(false),\n\t\t\t)}\n\t\t\t// TODO: break out into hook and cleanup\n\t\t\tonChange={(event, value, reason) => {\n\t\t\t\tconst emailAddresses = value\n\t\t\t\t\t.map((val) =>\n\t\t\t\t\t\tval\n\t\t\t\t\t\t\t.split(',')\n\t\t\t\t\t\t\t.map((v) => v.trim())\n\t\t\t\t\t\t\t.filter((v) => v.length),\n\t\t\t\t\t)\n\t\t\t\t\t.flat();\n\t\t\t\tlet validEmailAddresses = emailAddresses.filter(\n\t\t\t\t\t(email) => validateEmail(email) === true,\n\t\t\t\t);\n\t\t\t\tconst findDuplicates = (arr: any[]) =>\n\t\t\t\t\tarr.filter((item, index) => arr.indexOf(item) !== index);\n\t\t\t\tconst duplicateEmails = findDuplicates(validEmailAddresses);\n\t\t\t\tvalidEmailAddresses = [...new Set(validEmailAddresses)];\n\t\t\t\tif (duplicateEmails.length) {\n\t\t\t\t\tsnackbar({\n\t\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\t\tmessage: EmailFieldError.SOME_DUPLICATE(duplicateEmails),\n\t\t\t\t\t});\n\t\t\t\t} else if (emailAddresses.length !== validEmailAddresses.length) {\n\t\t\t\t\tsnackbar({\n\t\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\t\tmessage: EmailFieldError.SOME_INVALID(\n\t\t\t\t\t\t\temailAddresses.filter(\n\t\t\t\t\t\t\t\t(email) => !validEmailAddresses.includes(email),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tsetQueryStr('');\n\t\t\t\tonChange?.(event, validEmailAddresses, reason);\n\t\t\t}}\n\t\t\tonInputChange={useConstCallback(\n\t\t\t\tsplitEventHandler(props.onInputChange, (event, value, reason) => {\n\t\t\t\t\tsetQueryStr(value);\n\t\t\t\t\tvalue !== '' &&\n\t\t\t\t\t\tsetEmailAlreadyInList(props.value?.includes(value) === true);\n\t\t\t\t}),\n\t\t\t)}\n\t\t/>\n\t);\n};\n\n/**\n * Field to support adding multiple email addresses.\n */\nexport const EmailsField = EmailsFieldPrimitive;\n\nexport default EmailsField;\n","import React from 'react';\nimport {i18n} from '@netx/core/i18n';\nimport {\n\ttype FieldValues,\n\ttype FieldPath,\n\ttype PathValue,\n} from 'react-hook-form';\nimport {splitEventHandler} from '@netx/core-next/utils';\nimport {useConstCallback} from '@netx/core-components/hooks/useEvent';\nimport {combineRefs} from '@netx/core-components/util';\nimport {\n\ttype EmailsFieldProps,\n\tEmailsField,\n} from '@netx/core-components/EmailsField';\nimport {\n\tReactHookFormControl,\n\ttype WithReactHookFormControlFieldProps,\n} from '../ReactHookFormControl';\nimport {validateEmail} from '../validators';\n\nexport interface ReactHookFormEmailsFieldProps<\n\tDisableClearable extends boolean = false,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath = FieldPath,\n> extends WithReactHookFormControlFieldProps<\n\t\tEmailsFieldProps,\n\t\tTFieldValues,\n\t\tTName\n\t> {}\n\nexport const ReactHookFormEmailsFieldPrimitive = <\n\tDisableClearable extends boolean = false,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath = FieldPath