"use strict"; exports.id = 7901; exports.ids = [7901]; exports.modules = { /***/ 7901: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { // EXPORTS __webpack_require__.d(__webpack_exports__, { "Z": () => (/* binding */ FormInput) }); // EXTERNAL MODULE: external "react/jsx-runtime" var jsx_runtime_ = __webpack_require__(997); // EXTERNAL MODULE: external "react" var external_react_ = __webpack_require__(6689); var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_); ;// CONCATENATED MODULE: ./functions/frontend/numberFormat.js // @ts-check /** * @param {object} param0 * @param {string | number} param0.value * @param {"string" | "raw"} [param0.format] */ function numberFormat({ value , format }) { let finalValue; if (!value) return 0; try { switch(format){ case "string": finalValue = value.toString().replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","); break; case "raw": finalValue = parseInt(value.toString().replace(/\D/g, "")); break; default: finalValue = parseInt(value.toString().replace(/\D/g, "")); break; } } catch (error) { finalValue = 0; console.log(error); } return finalValue; } ;// CONCATENATED MODULE: ./functions/frontend/numberFormatFloat.js // @ts-check /** * @param {object} param0 * @param {string | number} param0.value * @param {"string" | "raw"} [param0.format] * @param {number} [param0.decimals] */ function numberFormatFloat({ value , format , decimals }) { let finalValue; const negativeValuePrefix = value?.toString()?.match(/^\-/) ? "-" : ""; try { switch(format){ case "string": const finalValueSidesArray = value.toString().split("."); finalValue = negativeValuePrefix + finalValueSidesArray[0].toString().replace(/[^0-9\.]/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (finalValueSidesArray[1] ? decimals ? `.${finalValueSidesArray[1].substring(0, decimals)}` : `.${finalValueSidesArray[1].substring(0, 2)}` : ""); break; case "raw": finalValue = parseFloat(negativeValuePrefix + value.toString().replace(/[^0-9\.]/g, "")); break; default: finalValue = parseFloat(negativeValuePrefix + value.toString().replace(/[^0-9\.]/g, "")); break; } } catch (error) { finalValue = 0; console.log(error); } return finalValue; } ;// CONCATENATED MODULE: ./components/form/FormInput.jsx // @ts-check /** * ============================================================================== * Imports * ============================================================================== */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ let /** @type {any} */ incrementTimeout, /** @type {any} */ incrementInterval; /** * Form Input * ============================================================================== * @param {Object} props - Server props * @param {string} [props.title] * @param {string} [props.name] * @param {string} [props.defaultValue] * @param {string} [props.placeholder] * @param {string} [props.autoComplete] * @param {(e: Event) => void} [props.onInputHandler] * @param {boolean} [props.required] * @param {string} [props.inputType] * @param {React.Dispatch>} [props.setAlert] * @param {React.Dispatch>} [props.setValue] - A react state dispatch function to set * the current number value * @param {string} [props.prefix] * @param {number} [props.minValue] * @param {number} [props.maxValue] * @param {boolean?} [props.encrypted] * @param {boolean?} [props.numberText] * @param {string} [props.appendCurrency] * @param {{current: *}} [props.elementRef] * @param {(e: Event) => void} [props.onChangeHandler] * @param {string} [props.value] * @param {number} [props.step] * @param {boolean} [props.decimal] * @param {string} [props.pattern] * @param {string} [props.info] * @param {string} [props.id] * @param {string} [props.fontSize] - Eg. "20px" * @param {string} [props.maxWidth] - Eg. "200px" */ function FormInput(props) { try { /** * Destructure Props * * @abstract Destructure Props */ const { title , name , defaultValue , placeholder , autoComplete , onInputHandler , required , inputType , setAlert , prefix , minValue , maxValue , encrypted , numberText , appendCurrency , elementRef , onChangeHandler , value , step , decimal , pattern , info , fontSize , maxWidth , setValue , id , } = props; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Get Contexts * * @abstract { React.useContext } */ //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Javascript Variables * * @abstract Non hook variables and functions */ function inputChangeHangler(/** @type {any} */ e) { if (e.target.value.match(/./)) { e.target.classList.remove("warning"); setAlert && setAlert(null); } else if (e.target.required) { e.target.classList.add("warning"); } if (numberText) { e.target.value = e.target.value.toString().match(/^0+$/) ? "0" : e.target.value.toString().replace(decimal ? /[^0-9\.]/g : /\D/g, "").replace(/^0*/, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","); } if (onInputHandler) onInputHandler(e); if (onChangeHandler) onChangeHandler(e); } function toggleDropdown(/** @type {any} */ e) { if (e.type.match(/enter/i) && window.innerWidth < 1200) { return; } const infoWrapper = e.target.closest(".info-wrapper"); const dropdown = infoWrapper.querySelector(".info-dropdown"); if (e.type.match(/leave/i) && !dropdown.classList.contains("hidden")) { dropdown.classList.add("hidden"); return; } else if (e.type.match(/leave/i) && dropdown.classList.contains("hidden")) { return; } if (!infoWrapper) { dropdown.classList.add("hidden"); return; } if (dropdown.classList.contains("hidden")) { dropdown.classList.remove("hidden"); return; } dropdown.classList.add("hidden"); } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ /** @type {React.MutableRefObject} */ const currentElementRef = elementRef ? elementRef : external_react_default().useRef(); //////////////////////////////////////// function decrementNumber(/** @type {any} */ e) { const newValue = decimal ? parseFloat(numberFormatFloat({ value: currentElementRef.current?.value || 0 }).toString()) - (step ? parseFloat(step.toString()) : 20) : parseInt(numberFormat({ value: currentElementRef.current.value }).toString()) - (step ? step : 20); const currentNumberValue = decimal ? numberFormatFloat({ value: newValue, format: "raw" }) : numberFormat({ value: newValue, format: "raw" }); if (minValue && typeof currentNumberValue == "number" && currentNumberValue < minValue) return; currentElementRef.current.value = decimal ? parseFloat(numberFormatFloat({ value: newValue, format: "raw" }).toString()).toFixed(typeof decimal === "number" ? decimal : 2) : numberFormat({ value: newValue, format: "string" }).toString(); if (setValue) setValue(currentElementRef.current.value); } function incrementNumber(/** @type {any} */ e) { const newValue = decimal ? parseFloat(numberFormatFloat({ value: currentElementRef.current.value }).toString()) + (step ? parseFloat(step.toString()) : 20) : parseInt(numberFormat({ value: currentElementRef.current.value }).toString()) + (step ? step : 20); const newFormattedValue = decimal ? parseFloat(numberFormatFloat({ value: newValue, format: "raw" }).toString()).toFixed(typeof decimal === "number" ? decimal : 2) : numberFormat({ value: newValue, format: "string" }); const currentNumberValue = decimal ? parseFloat(numberFormatFloat({ value: newFormattedValue, format: "raw" }).toString()) : parseInt(numberFormat({ value: newFormattedValue, format: "raw" }).toString()); if (maxValue && currentNumberValue > maxValue) return; currentElementRef.current.value = newFormattedValue.toString(); if (setValue) setValue(currentElementRef.current.value); } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Function Return * * @abstract Main Function Return */ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "form-input-wrapper flex flex-col items-start gap-0.5 w-full relative", style: { ...maxWidth ? { maxWidth: maxWidth } : {} }, children: [ title && /*#__PURE__*/ jsx_runtime_.jsx("label", { htmlFor: name, children: title }), /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "flex items-center w-full relative", children: [ prefix && /*#__PURE__*/ jsx_runtime_.jsx("div", { className: "absolute left-4 bottom-2 text-lg", children: prefix }), /*#__PURE__*/ jsx_runtime_.jsx("input", { type: inputType ? inputType : "text", name: name, id: id ? id : name, ref: currentElementRef, placeholder: placeholder ? placeholder : title ? title : "", autoComplete: autoComplete, onInput: (e)=>{ // if (!onInputHandler) return; inputChangeHangler(e); }, onChange: (e)=>{ // if (!onChangeHandler) return; inputChangeHangler(e); }, value: value ? value : undefined, defaultValue: value ? undefined : defaultValue ? defaultValue : undefined, pattern: pattern ? pattern.toString() : undefined, required: required ? required : false, style: { ...fontSize ? { fontSize: fontSize } : {}, ...prefix ? { paddingLeft: "35px" } : {} }, min: minValue, max: maxValue, "data-encrypted": encrypted ? encrypted : null, "data-appendcurrency": appendCurrency ? appendCurrency : null, className: "bg-white" + (info ? " pr-16" : "") }), numberText && /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "absolute gap-1" + (info ? " right-12" : " right-4"), style: { top: "50%", transform: "translate(0,-50%)" }, children: [ /*#__PURE__*/ jsx_runtime_.jsx("span", { className: "number-text-button w-10 md:w-8 h-10 md:h-8 rounded-full bg-slate-100 dark:bg-slate-800 flex items-center justify-center cursor-pointer hover:bg-slate-200 text-2xl font-semibold touch-none", onMouseDown: (e)=>{ e.preventDefault(); if (window.innerWidth < 1200) return; decrementNumber(e); incrementTimeout = setTimeout(()=>{ incrementInterval = setInterval(()=>{ decrementNumber(e); }, 50); }, 200); }, onTouchStart: (e)=>{ e.preventDefault(); if (window.innerWidth >= 1200) return; decrementNumber(e); incrementTimeout = setTimeout(()=>{ incrementInterval = setInterval(()=>{ decrementNumber(e); }, 50); }, 200); }, onMouseUp: (e)=>{ window.clearTimeout(incrementTimeout); window.clearInterval(incrementInterval); }, onTouchEnd: (e)=>{ window.clearTimeout(incrementTimeout); window.clearInterval(incrementInterval); }, onMouseLeave: (e)=>{ window.clearTimeout(incrementTimeout); window.clearInterval(incrementInterval); }, onTouchMove: (e)=>{ e.preventDefault(); }, children: /*#__PURE__*/ jsx_runtime_.jsx("span", { className: "pointer-events-none", children: "-" }) }), /*#__PURE__*/ jsx_runtime_.jsx("span", { className: "number-text-button w-10 md:w-8 h-10 md:h-8 rounded-full bg-slate-100 dark:bg-slate-800 flex items-center justify-center cursor-pointer hover:bg-slate-200 text-2xl font-semibold touch-none", onMouseDown: (e)=>{ e.preventDefault(); if (window.innerWidth < 1200) return; incrementNumber(e); incrementTimeout = setTimeout(()=>{ incrementInterval = setInterval(()=>{ incrementNumber(e); }, 50); }, 200); }, onTouchStart: (e)=>{ e.preventDefault(); if (window.innerWidth >= 1200) return; incrementNumber(e); incrementTimeout = setTimeout(()=>{ incrementInterval = setInterval(()=>{ incrementNumber(e); }, 50); }, 200); }, onMouseUp: (e)=>{ window.clearTimeout(incrementTimeout); window.clearInterval(incrementInterval); }, onTouchEnd: (e)=>{ window.clearTimeout(incrementTimeout); window.clearInterval(incrementInterval); }, onMouseLeave: (e)=>{ window.clearTimeout(incrementTimeout); window.clearInterval(incrementInterval); }, children: /*#__PURE__*/ jsx_runtime_.jsx("span", { className: "pointer-events-none", children: "+" }) }) ] }), info && /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "info-wrapper absolute right-2 w-8 h-8 rounded-full bg-white flex items-center justify-center z-10", style: { top: "50%", transform: "translate(0,-50%)" }, onMouseEnter: toggleDropdown, onMouseLeave: toggleDropdown, onClick: toggleDropdown, children: [ /*#__PURE__*/ jsx_runtime_.jsx("img", { src: "/images/info-outlined-black.png", alt: "", className: "w-6 h-6 object-contain opacity-60 pointer-events-none" }), /*#__PURE__*/ jsx_runtime_.jsx("div", { className: "info-dropdown absolute top-9 right-0 bg-white w-52 md:w-96 p-2 sm:p-6 shadow-xl rounded hidden text-center border border-slate-300 border-solid", children: /*#__PURE__*/ jsx_runtime_.jsx("span", { children: info }) }), /*#__PURE__*/ jsx_runtime_.jsx("div", { className: "absolute -top-2 w-12", style: { height: "45px" } }) ] }) ] }) ] }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } catch (error) { console.log("ERROR in FormInput =>", error); return /*#__PURE__*/ jsx_runtime_.jsx("div", { children: "Form Input Error" }); } } /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /***/ }) }; ;