{"version":3,"sources":["jsdelivr-header.js","/npm/@matthew-stanley/react-component-library@0.0.4/dist/bundle.js"],"names":[],"mappings":"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","file":"/npm/@matthew-stanley/react-component-library@0.0.4/dist/bundle.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@matthew-stanley/react-component-library@0.0.4/dist/bundle.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar React = require('react');\n\nconst regexOptions = {\r\n    personName: /^[a-zA-Z-]+$/,\r\n    email: /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/,\r\n    postalCode: /^[a-zA-Z0-9äöüÄÖÜ]*$/,\r\n};\n\n// Add Logic to accept Arrays<string>\r\nconst returnTypeOfValidation = (optionalBoolean, validateBoolean) => {\r\n    if (optionalBoolean === true && validateBoolean == false) {\r\n        return 'returnTrue';\r\n    }\r\n    else if (optionalBoolean === true && validateBoolean == true) {\r\n        // Allow Blanks\r\n        // Validate if value is not blank\r\n        return 'acceptBlanks';\r\n    }\r\n    else if (optionalBoolean === false && validateBoolean == false) {\r\n        // Required value, \r\n        // Do not validate\r\n        return 'doesAValueExist';\r\n    }\r\n    else {\r\n        // Catch All - An input value is required & will be validated. \r\n        return 'default';\r\n    }\r\n};\r\n// Check value, let us know if is valid or not\r\nconst isThisValueValid = {\r\n    returnTrue: (value, regex) => { return true; },\r\n    default: (value, regex) => {\r\n        if (regex !== undefined) {\r\n            // Test that value passes regex\r\n            let useRegex;\r\n            let regexOptionsKeys = Object.keys(regexOptions);\r\n            if (typeof regex === 'string') {\r\n                let doesRegexOptionsInclude = regexOptionsKeys.includes(regex);\r\n                doesRegexOptionsInclude ? useRegex = regexOptions[regex] : console.warn('regex option does not exist. Please review');\r\n            }\r\n            else {\r\n                useRegex = regex;\r\n            }\r\n            return useRegex.test(value);\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    },\r\n    acceptBlanks: (value, regex) => {\r\n        if (value === '') {\r\n            return true;\r\n        }\r\n        else {\r\n            let useRegex;\r\n            let regexOptionsKeys = Object.keys(regexOptions);\r\n            if (typeof regex === 'string') {\r\n                let doesRegexOptionsInclude = regexOptionsKeys.includes(regex);\r\n                doesRegexOptionsInclude ? useRegex = regexOptions[regex] : console.warn('regex option does not exist. Please review');\r\n            }\r\n            else {\r\n                useRegex = regex;\r\n            }\r\n            return useRegex.test(value);\r\n        }\r\n    },\r\n    doesAValueExist: (value) => {\r\n        if (value === '' || value === undefined || value === null) {\r\n            return false;\r\n        }\r\n        else {\r\n            return true;\r\n        }\r\n    }\r\n};\n\nfunction styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css_248z = \".ge-errorMessage {\\n  color: red; }\\n\";\nstyleInject(css_248z);\n\n// TODO: Having a componentID is must when using global context - Write errors for that\r\n//Initialize Global Context\r\nconst GlobalContext = React.createContext({});\r\nconst Reducer = (state, action) => {\r\n    switch (action.type) {\r\n        case 'UPDATE_STATE':\r\n            return Object.assign(Object.assign({}, state), action.payload);\r\n        default: return state;\r\n    }\r\n};\r\n// Component\r\nconst Form = ({ formAttributes, children, formID, initialFormState = {}, onSubmit, groupErrors = false, errorMessage = 'Please check form for errors.' }) => {\r\n    const buildState = Object.assign({}, Object.assign({}, initialFormState), {\r\n        formValues: !initialFormState.formValues ? {} : initialFormState.formValues,\r\n        errors: {},\r\n        groupErrors\r\n    });\r\n    // Global Context Work\r\n    const [state, dispatch] = React.useReducer(Reducer, buildState);\r\n    let updateState = (object) => {\r\n        dispatch({\r\n            type: 'UPDATE_STATE',\r\n            payload: object\r\n        });\r\n    };\r\n    const returnRequiredChildrenArray = () => {\r\n        // Filter For Smart Components\r\n        let childrenArray = [];\r\n        const pullReactElements = (array) => {\r\n            if (array) {\r\n                return array.filter((child) => typeof child === 'object' &&\r\n                    (child.props.componentID != undefined && child.props.optional !== true));\r\n            }\r\n            else {\r\n                return children.filter((child) => typeof child === 'object' &&\r\n                    (child.props.componentID != undefined && child.props.optional !== true));\r\n            }\r\n        };\r\n        if (Array.isArray(children)) {\r\n            childrenArray = pullReactElements();\r\n        }\r\n        else {\r\n            childrenArray = pullReactElements([children]);\r\n        }\r\n        return childrenArray;\r\n    };\r\n    const checkRequiredValues = (childrenArray) => {\r\n        /** This object contains key value pairs of required components that are currently undefined.  */\r\n        let errorObject = {};\r\n        childrenArray.forEach((child) => {\r\n            /** A variable containing either the required component's componentID or groupName */\r\n            let key = child.props.componentID || child.props.groupName;\r\n            // Use the key variable to check state for corresponding key & value. If the key does not return a truthy value then that means the input is empty or componentID / groupName has not been correctly set. \r\n            if (state.formValues[key] == ( null)) {\r\n                errorObject[key] = true;\r\n            }\r\n        });\r\n        let newState = Object.assign({}, Object.assign({}, errorObject), Object.assign({}, state.errors));\r\n        updateState({ errors: newState });\r\n        const doesStateContainErrors = () => {\r\n            if (Object.values(newState).includes(true)) {\r\n                return true;\r\n            }\r\n            else {\r\n                return false;\r\n            }\r\n        };\r\n        return doesStateContainErrors();\r\n    };\r\n    const localOnSubmit = (e) => {\r\n        e.preventDefault();\r\n        if (onSubmit && !checkRequiredValues(returnRequiredChildrenArray())) {\r\n            onSubmit({ [formID]: state });\r\n        }\r\n    };\r\n    return React.createElement(GlobalContext.Provider, { value: Object.assign(Object.assign({}, state), { updateState }) },\r\n        React.createElement(\"form\", Object.assign({ id: formID }, formAttributes),\r\n            children,\r\n            (groupErrors && Object.values(state.errors).includes(true)) &&\r\n                React.createElement(\"div\", null,\r\n                    React.createElement(\"p\", { className: \"ge-errorMessage\" }, errorMessage)),\r\n            React.createElement(\"button\", { onClick: e => { localOnSubmit(e); } }, \"Submit\")));\r\n};\n\nvar css_248z$1 = \"* {\\n  box-sizing: border-box;\\n  font-family: Arial, sans-serif;\\n  font-size: 16px; }\\n\";\nstyleInject(css_248z$1);\n\nvar css_248z$2 = \".text-input {\\n  position: relative;\\n  width: fit-content; }\\n  .text-input label {\\n    margin-right: 5px; }\\n  .text-input input {\\n    background-color: white;\\n    border: none;\\n    border-bottom: 1px solid black;\\n    padding: 5px; }\\n    .text-input input:focus {\\n      border: 1px solid black;\\n      outline: none; }\\n  .text-input.error input {\\n    border: 1px solid red; }\\n  .text-input .errorMessage {\\n    color: red;\\n    text-align: left; }\\n\";\nstyleInject(css_248z$2);\n\nconst TextInput = ({ componentID, children, value = '', placeholder = 'Please Enter Value', label = \"Text Input:\", name = label, containerClassName = '', regexType = 'personName', customRegex, errorMessage = 'Error: Please Check Value', onChangeCallback = undefined, inputAttributes, labelAttributes, errorMessageAttributes, validate = true, optional = false, }) => {\r\n    if (componentID == '' || componentID == undefined) {\r\n        console.warn('componentID for TextInput component should be set. Without it data may not be tracked correctly');\r\n    }\r\n    // Initialization \r\n    /** If GlobalContext (Form State) has been initiated, this represents the GlobalContext Object. Default is empty object */\r\n    const Context = React.useContext(GlobalContext);\r\n    /** An IFFE is ran to check if the component exists within a context. The result is stored in the variable */\r\n    const isThisASmartComponent = (() => {\r\n        return Object.keys(Context).length >= 1 ? true : false;\r\n    })();\r\n    const [renderCount, setRenderCount] = React.useState(1);\r\n    let regex = regexType;\r\n    customRegex ? (regex = customRegex) : regex;\r\n    let typeOfValidation = returnTypeOfValidation(optional, validate);\r\n    // Functions\r\n    const handleUpdatingState = (value, isThisValid) => {\r\n        if (isThisASmartComponent) {\r\n            // if this is a smart component update Global Context\r\n            let passedValues = {\r\n                errors: Object.assign(Object.assign({}, Context.errors), { [componentID]: !isThisValid }),\r\n                formValues: Object.assign(Object.assign({}, Context.formValues), { [componentID]: value })\r\n            };\r\n            Context.updateState(Object.assign({}, passedValues));\r\n        }\r\n        else {\r\n            setInputValue(value);\r\n            setError(!isThisValid);\r\n        }\r\n    };\r\n    if (isThisASmartComponent) {\r\n        /** The value for this input. It's default is set to an empty string. Relies on internal state as source of truth unless the component is placed within a form's Context. If a Context exist then that would be the source of truth. */\r\n        var inputValue = Context.formValues[componentID] === undefined ? value : Context.formValues[componentID];\r\n        if (renderCount === 1) {\r\n            typeOfValidation = 'acceptBlanks';\r\n        }\r\n        let doesTheParentHaveAnError = Context.errors[componentID] === true ? Context.errors[componentID] : false;\r\n        let isCurrentValueValid = isThisValueValid[typeOfValidation](inputValue, regex);\r\n        React.useEffect(() => {\r\n            if (!isCurrentValueValid && !doesTheParentHaveAnError) {\r\n                handleUpdatingState(inputValue, isCurrentValueValid);\r\n            }\r\n        });\r\n        /** Boolean that let's the component know if an error exists based on the current validation settings. If a Context exists then that would be the source of truth */\r\n        var errorExist;\r\n        if (doesTheParentHaveAnError || !isCurrentValueValid) {\r\n            errorExist = true;\r\n        }\r\n        else {\r\n            errorExist = false;\r\n        }\r\n    }\r\n    else {\r\n        var [inputValue, setInputValue] = React.useState(value);\r\n        if (validate === true && (renderCount <= 1 && inputValue === '')) {\r\n            var [errorExist, setError] = React.useState(false);\r\n        }\r\n        else if (validate === true) {\r\n            var [errorExist, setError] = React.useState(!isThisValueValid.default(inputValue, regex));\r\n        }\r\n    }\r\n    const onInputValueChange = (e) => {\r\n        if ((e.target.value !== inputValue) || inputValue == '') {\r\n            setRenderCount(renderCount + 1);\r\n            handleUpdatingState(e.target.value, isThisValueValid[typeOfValidation](e.target.value, regex));\r\n            // If user provides onChangeCallback function, we pass information to their function.\r\n            if (onChangeCallback !== undefined) {\r\n                let params = {\r\n                    event: e,\r\n                    value: e.target.value,\r\n                    validate: validate ? isThisValueValid[typeOfValidation](e.target.value, regex) : undefined,\r\n                };\r\n                onChangeCallback(params);\r\n            }\r\n        }\r\n    };\r\n    return (React.createElement(\"div\", { className: `text-input ${containerClassName} ${errorExist ? 'error' : ''}`, onBlur: e => onInputValueChange(e) },\r\n        label !== null && React.createElement(\"label\", Object.assign({ htmlFor: componentID }, labelAttributes), label),\r\n        React.createElement(\"input\", Object.assign({ type: \"text\", id: componentID, placeholder: placeholder, value: inputValue }, inputAttributes, { onChange: (e) => {\r\n                onInputValueChange(e);\r\n            } })),\r\n        children,\r\n        (errorExist === true && !Context.groupErrors) && (React.createElement(\"p\", Object.assign({ className: \"errorMessage\" }, errorMessageAttributes), errorMessage))));\r\n};\n\nexports.Form = Form;\nexports.TextInput = TextInput;\n"]}