@acoustte-digital-services/digitalstore-controls-dev 0.8.1-dev.20260320071939 → 0.8.1-dev.20260320074145

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/controls/view/ViewControl.tsx","../src/components/controls/view/ViewControlTypes.tsx","../src/components/controls/view/NumberView.tsx","../src/components/controls/view/DateView.tsx","../src/components/controls/view/BooleanView.tsx","../src/components/controls/view/LineTextView.tsx","../src/components/controls/view/EmailTextView.tsx","../src/components/controls/view/StatusBgView.tsx","../src/components/controls/view/StatusView.tsx","../src/components/controls/view/MoneyView.tsx","../src/components/controls/view/MultilineTextBulletsView.tsx","../src/components/controls/view/MultilineTextView.tsx","../src/components/controls/edit/InputControl.tsx","../src/components/controls/edit/MultilineTextInput.tsx","../src/components/controls/edit/LineTextInput.tsx","../src/components/controls/edit/MoneyInput.tsx","../src/components/controls/edit/InputControlType.tsx","../src/components/controls/edit/Select.tsx","../src/components/controls/edit/PercentageInput.tsx","../src/components/controls/edit/PhoneInput.tsx","../src/components/controls/edit/NumberInput.tsx","../src/components/controls/edit/CheckboxInput.tsx","../src/components/controls/edit/OtpInput.tsx","../src/components/utilities/DateTimeUtility.tsx","../src/components/controls/edit/DateTimeInput.tsx","../src/components/controls/edit/ColorInput.tsx","../src/components/controls/edit/SelectWithSearchInput.tsx","../src/components/Button.tsx","../src/components/ToastService.tsx","../src/components/StyleTypes.tsx","../src/components/Confirm.tsx","../src/components/ClientButton.tsx","../src/components/utilities/ToastService.tsx","../src/components/controls/edit/SelectWithSearchPanel.tsx","../src/components/controls/edit/BooleanSelect.tsx","../src/components/controls/edit/EmailInput.tsx","../src/components/controls/edit/TimeInput.tsx","../src/components/dataForm/DataList.tsx","../src/components/dataForm/NoContentView.tsx","../src/components/dataForm/ContentView.tsx","../src/components/dataForm/Hyperlink.tsx","../src/clients/OdataBuilder.tsx","../src/svg/chevron-updown.tsx","../src/svg/chevron-down.tsx","../src/svg/chevron-up.tsx","../src/svg/plus.tsx","../src/svg/Icons.tsx","../src/svg/Icon.tsx","../src/FormReducer.tsx","../src/components/pageRenderingEngine/PageBodyRenderer.tsx","../src/components/pageRenderingEngine/nodes/ParagraphNode.tsx","../src/components/pageRenderingEngine/nodes/TextNode.tsx","../src/components/pageRenderingEngine/nodes/LineBreakNode.tsx","../src/components/pageRenderingEngine/nodes/LinkNode.tsx","../src/components/pageRenderingEngine/nodes/SVGIconNode.tsx","../src/components/pageRenderingEngine/nodes/EquationNode.tsx","../src/components/pageRenderingEngine/nodes/DatafieldNode.tsx","../src/components/pageRenderingEngine/nodes/HeadingNode.tsx","../src/components/pageRenderingEngine/nodes/ListNode.tsx","../src/components/pageRenderingEngine/nodes/ListItemNode.tsx","../src/components/pageRenderingEngine/nodes/QuoteNode.tsx","../src/components/pageRenderingEngine/nodes/CodeNode.tsx","../src/components/CopyButton.tsx","../src/components/pageRenderingEngine/nodes/HorizontalRuleNode.tsx","../src/components/pageRenderingEngine/nodes/LayoutItemNode.tsx","../src/components/pageRenderingEngine/nodes/ImageNode.tsx","../src/components/pageRenderingEngine/nodes/WidgetNode.tsx","../src/components/pageRenderingEngine/nodes/IframeClient.tsx","../src/components/IFrameLoaderView.tsx","../src/components/pageRenderingEngine/nodes/EmbedNode.tsx","../src/components/pageRenderingEngine/nodes/VideoNode.tsx","../src/components/utilities/AssetUtility.tsx","../src/components/pageRenderingEngine/nodes/LayoutContainerNode.tsx","../src/components/pageRenderingEngine/nodes/FormContainerNode.tsx","../src/components/pageRenderingEngine/nodes/InputControlNode.tsx","../src/components/pageRenderingEngine/nodes/DivContainer.tsx"],"sourcesContent":["import React from \"react\";\nimport ViewControlTypes from \"./ViewControlTypes\";\nimport { ViewControlProps } from \"./ViewControlProps\";\nimport LineText from \"./LineTextView\";\n\nimport MultilineTextBullets from \"./MultilineTextBulletsView\";\nimport Money from \"./MoneyView\";\nimport NumberView from \"./NumberView\";\nimport DateView from \"./DateView\";\nimport StatusBg from \"./StatusBgView\";\nimport Status from \"./StatusView\";\nimport MultilineText from \"./MultilineTextView\";\nimport BooleanView from \"./BooleanView\";\nimport EmailText from \"./EmailTextView\";\nimport LineTextView from \"./LineTextView\";\nimport EmailTextView from \"./EmailTextView\";\nimport StatusBgView from \"./StatusBgView\";\nimport StatusView from \"./StatusView\";\nimport MoneyView from \"./MoneyView\";\nimport MultilineTextBulletsView from \"./MultilineTextBulletsView\";\nimport MultilineTextView from \"./MultilineTextView\";\nconst ViewControl = React.forwardRef<HTMLDivElement, ViewControlProps>(\n (props, ref) => {\n const ControlComponents = {\n [ViewControlTypes.lineTextView]: LineTextView,\n [ViewControlTypes.emailTextView]: EmailTextView,\n\n [ViewControlTypes.multilineTextBulletsView]: MultilineTextBulletsView,\n [ViewControlTypes.moneyView]: MoneyView,\n [ViewControlTypes.numberView]: NumberView,\n [ViewControlTypes.dateView]: DateView,\n [ViewControlTypes.statusView]: StatusView,\n [ViewControlTypes.statusBgView]: StatusBgView,\n [ViewControlTypes.multilinetextView]: MultilineTextView,\n [ViewControlTypes.booleanView]: BooleanView,\n\n // [ViewControlTypes.booleanView]: BooleanView\n };\n\n const SelectedControlComponent = ControlComponents[props.controlType];\n return (\n <React.Fragment>\n {SelectedControlComponent ? (\n <SelectedControlComponent {...props} />\n ) : (\n \"Control not found\"\n )}\n </React.Fragment>\n );\n },\n);\n\nViewControl.displayName = \"ViewControl\";\n\nexport default ViewControl;\n","import { text } from \"stream/consumers\";\nimport CheckboxInput from \"../edit/CheckboxInput\";\n\nconst ViewControlTypes = {\n lineTextView: \"lineTextView\",\n emailTextView: \"emailTextView\",\n multilineTextBulletsView: \"multilineTextBulletsView\",\n moneyView: \"moneyView\",\n numberView: \"numberView\",\n dateView: \"dateView\",\n statusView: \"statusView\",\n statusBgView: \"statusBgView\",\n multilinetextView: \"multilinetextView\",\n booleanView: \"booleanView\",\n // checkboxInput:'boolean',\n text: \"text\",\n // booleanView: \"booleanView\"\n};\nexport default ViewControlTypes;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst NumberView: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n {props.value}\n </React.Fragment>\n )\n}\n\nexport default NumberView;\n","'use client'\nimport React from \"react\";\nimport moment from \"moment-timezone\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n\nconst DateView: React.FC<ViewControlProps> = (props) => {\n\n let localDateTime = \"\";\n let timezone;\n\n try {\n const val = props.value && props.value.toString().includes(\"Z\")?props.value:(props.value + \"Z\") \n const parsedDate = new Date(val);\n const timezoneOffset = parsedDate.getTimezoneOffset();\n timezone = moment.tz.zone(moment.tz.guess())?.abbr(timezoneOffset);\n if (props.format && props.format == \"timeago\") {\n localDateTime = formatTimeAgo(parsedDate);\n }\n else {\n localDateTime = parsedDate.toLocaleString() + \" \" + timezone;\n }\n \n \n\n } catch (error) {\n console.error(\"Error parsing date:\", props.value);\n }\n\n function formatTimeAgo(inputDate: Date): string {\n const currentDate = new Date();\n //console.log(inputDate);\n const timeDifference = Math.floor((currentDate.getTime() - inputDate.getTime()) / 1000); // time difference in seconds\n //console.log(timeDifference);\n if (timeDifference < 10) {\n return \"few secs ago\";\n } else if (timeDifference < 60) {\n return `${timeDifference} secs ago`;\n } else if (timeDifference < 3600) {\n const minutes = Math.floor(timeDifference / 60);\n return `${minutes} min${minutes > 1 ? 's' : ''} ago`;\n } else if (timeDifference < 86400) {\n const hours = Math.floor(timeDifference / 3600);\n const remainingMinutes = Math.floor((timeDifference % 3600) / 60);\n return `${hours} hour${hours > 1 ? 's' : ''}, ${remainingMinutes} min${remainingMinutes > 1 ? 's' : ''} ago`;\n } else if (timeDifference < 14 * 3600) {\n const daysAgo = Math.floor(timeDifference / 86400);\n return `${daysAgo} day${daysAgo > 1 ? 's' : ''} ago`;\n } else {\n const formattedDate = inputDate.toLocaleString();\n return formattedDate;\n }\n }\n\n\n return (\n <React.Fragment>\n <div className=\"inline-flex gap-1\">\n {localDateTime == \"Invalid Date undefined\" ? \"-\" : localDateTime}\n </div>\n\n </React.Fragment>\n )\n}\n\nexport default DateView;\n","\nimport React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\ninterface BooleanViewProps extends ViewControlProps {\n customProps?: {\n showOnlyTrueIcon?: boolean;\n };\n}\n\nconst BooleanView: React.FC<BooleanViewProps> = (props) => {\n const { value, customProps } = props;\n const showOnlyTrueIcon = customProps?.showOnlyTrueIcon;\n\n console.log('BooleanView Debug:', {\n value: value,\n type: typeof value,\n customProps: customProps,\n showOnlyTrueIcon: showOnlyTrueIcon\n });\n\n // Handle the value properly\n const booleanValue = React.useMemo(() => {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n if (typeof value === 'number') {\n return value === 1;\n }\n return false;\n }, [value]);\n\n if (showOnlyTrueIcon) {\n // Show tick icon only when value is true, nothing when false\n return (\n <React.Fragment>\n {booleanValue === true && (\n <svg \n className=\"w-15 h-8 text-green-600\" \n fill=\"currentColor\" \n viewBox=\"0 0 20 20\"\n >\n <path \n fillRule=\"evenodd\" \n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" \n clipRule=\"evenodd\" \n />\n </svg>\n )}\n </React.Fragment>\n );\n }\n\n // Default behavior: show \"true\" or \"false\" as text\n return (\n <React.Fragment>\n {booleanValue ? \"true\" : \"false\"}\n </React.Fragment>\n );\n};\n\nexport default BooleanView;","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst LineText: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n {props.value}\n </React.Fragment>\n )\n}\n\nexport default LineText;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst EmailText: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n {props.value}\n </React.Fragment>\n )\n}\n\nexport default EmailText;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst StatusBg: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n {props.value && props.value != \"\" &&\n <span className={\"py-0.5 px-1.5 text-xs capitalize text-white font-semibold rounded bg-status bg-status-\" + props.value}>{props.value}\n </span>\n }\n </React.Fragment>\n )\n}\n\nexport default StatusBg;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst Status: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n <span className={\"capitalize font-semibold rounded text-status text-status-\" + props.value}>{props.value}</span>\n </React.Fragment>\n )\n}\n\nexport default Status;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\nconst Money: React.FC<ViewControlProps> = (props) => {\n const parsedNumber = parseFloat(props.value);\n\n return (\n <React.Fragment>\n {!Number.isNaN(parsedNumber) && \n <span className={(parsedNumber < 0 ? \"text-alert\" : \"\")}>\n <span className=\"mr-0.5\">₹</span>\n {parsedNumber.toLocaleString()}\n \n </span>\n }\n </React.Fragment>\n )\n}\n\nexport default Money;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\nconst MultilineTextBullets: React.FC<ViewControlProps> = (props) => {\n const lines = props.value?.split('\\\\n');\n return (\n <React.Fragment>\n <ul className=\"list-disc\">\n {lines && lines.map((line:string, index:number)=>{\n return (\n <li key={index}>{line}</li>\n )\n })}\n </ul>\n </React.Fragment>\n )\n}\n\nexport default MultilineTextBullets;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst MultilineText: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n <span className=\"whitespace-pre-line\">{props.value}</span>\n </React.Fragment>\n )\n}\n\nexport default MultilineText;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport MultilineTextInput from \"./MultilineTextInput\";\nimport LineTextInput from \"./LineTextInput\";\nimport MoneyInput from \"./MoneyInput\";\n\nimport InputControlType from \"./InputControlType\";\nimport { InputControlProps } from \"./InputControlProps\";\nimport Select from \"./Select\";\nimport PercentageInput from \"./PercentageInput\";\nimport PhoneInput from \"./PhoneInput\";\nimport NumberInput from \"./NumberInput\";\nimport CheckboxInput from \"./CheckboxInput\";\n\nimport OtpInput from \"./OtpInput\";\nimport DateTimeInput from \"./DateTimeInput\";\nimport ColorInput from \"./ColorInput\";\nimport SelectWithSearchInput from \"./SelectWithSearchInput\";\nimport SelectWithSearchPanel from \"./SelectWithSearchPanel\";\nimport BooleanSelect from \"./BooleanSelect\";\nimport EmailInput from \"./EmailInput\";\n\nimport TimeInput from \"./TimeInput\";\n\n// React.FC<ButtonProps<any>>\n\nconst InputControl = React.forwardRef<HTMLDivElement, InputControlProps>(\n (props, ref) => {\n const ControlComponents = {\n [InputControlType.lineTextInput]: LineTextInput,\n [InputControlType.emailInput]: EmailInput,\n [InputControlType.multilineTextInput]: MultilineTextInput,\n [InputControlType.moneyInput]: MoneyInput,\n\n [InputControlType.select]: Select,\n [InputControlType.percentageInput]: PercentageInput,\n [InputControlType.phoneInput]: PhoneInput,\n [InputControlType.numberInput]: NumberInput,\n [InputControlType.checkboxInput]: CheckboxInput,\n\n [InputControlType.otpInput]: OtpInput,\n\n [InputControlType.datetimeInput]: DateTimeInput,\n [InputControlType.colorInput]: ColorInput,\n [InputControlType.selectWithSearchInput]: SelectWithSearchInput,\n [InputControlType.selectWithSearchPanel]: SelectWithSearchPanel,\n [InputControlType.booleanSelect]: BooleanSelect,\n [InputControlType.timeInput]: TimeInput,\n };\n\n const SelectedControlComponent = ControlComponents[props.controlType];\n return (\n <React.Fragment>\n {/* @ts-ignore */}\n {SelectedControlComponent ? (\n <SelectedControlComponent {...props} />\n ) : (\n \"Control not found\"\n )}\n </React.Fragment>\n );\n },\n);\n\nInputControl.displayName = \"InputControl\";\n\nexport default InputControl;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst MultilineTextInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLTextAreaElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index);\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n let value = \"\";\n if (props.value !== undefined && props.value !== null) {\n // @ts-ignore\n value = props.value;\n }\n\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span> {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <textarea\n name={props.name}\n id={props.name}\n value={value}\n onChange={textChangeHandler}\n onBlur={props?.onBlur}\n rows={4}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default MultilineTextInput;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst LineTextInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n let value = '';\n if (props.value !== undefined && props.value !== null) {\n // @ts-ignore\n value = props.value;\n }\n\n return (\n <React.Fragment>\n <label className=\"block\">\n {props?.attributes?.label && <span className=\"text-sm inline-block pb-1 font-medium \">{props?.attributes?.label}</span>} {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"text\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n onChange={textChangeHandler}\n onBlur={props?.onBlur}\n required={props?.attributes?.required}\n // defaultValue={props?.defaultValue}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className={`peer py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n ${props?.inputClasses ? props.inputClasses : ``}\n `} />\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default LineTextInput;\n\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst MoneyInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const rawValue = event.target.value;\n const numericValue = parseFloat(rawValue);\n\n // Allow empty string (for clearing input), or any positive number\n if (rawValue === \"\" || (!isNaN(numericValue) && numericValue >= 0)) {\n if (props.callback !== undefined) {\n props.callback({\n name: props.name,\n value: rawValue,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n }\n };\n\n\n const handleWheel = (event: WheelEvent<HTMLInputElement>) => {\n event.preventDefault();\n // @ts-ignore\n event.target.blur();\n };\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n const preventNegative: React.KeyboardEventHandler<HTMLInputElement> = (e) => {\n if (e.key === \"-\") {\n e.preventDefault();\n }\n };\n\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span> {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"number\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n min={0}\n onChange={textChangeHandler}\n onWheel={handleWheel}\n onKeyDown={preventNegative}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 number-input\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default MoneyInput;\n","export const Constants = {\n pagesize: 10\n};\n\nconst InputControlType = {\n lineTextInput: \"text\",\n multilineTextInput: \"multilinetext\",\n emailInput: \"email\",\n moneyInput: \"money\",\n select: \"select\",\n percentageInput: \"percentage\",\n phoneInput: \"phone\",\n numberInput: \"number\",\n checkboxInput: \"boolean\",\n otpInput: \"otp\",\n datetimeInput: \"datetime\",\n timeInput: \"time\",\n colorInput: \"colorInput\",\n selectWithSearchInput: \"selectWithSearchInput\",\n selectWithSearchPanel: \"selectWithSearchPanel\",\n booleanSelect: \"booleanSelect\",\n};\nexport default InputControlType;","import React, { ChangeEvent, useState, useEffect } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\nimport { QueryResponse } from \"../../types/QueryResponse\";\n\nconst Select: React.FC<InputControlProps> = (props) => {\n const [list, setList] = useState<any[]>([]);\n\n // -----------------------------------\n // FIX: SANITIZE VALUE FOR <select>\n // -----------------------------------\n const getSafeValue = (val: any): string | number | undefined => {\n if (val === null || val === undefined) return \"\";\n if (typeof val === \"boolean\") return val ? \"1\" : \"0\"; // prevent boolean error\n return val;\n };\n\n // -----------------------------------\n // CHANGE HANDLER\n // -----------------------------------\n const textChangeHandler = (event: ChangeEvent<HTMLSelectElement>) => {\n let rawValue: any = event.target.value;\n\n if (rawValue === \"\") rawValue = null;\n\n let finalValue = rawValue;\n\n // SAFE: convert only if dataset exists\n if (list && props.dataKeyFieldName) {\n const key = props.dataKeyFieldName;\n\n const selectedItem = list.find(\n (item) => String(item[key]) === String(rawValue),\n );\n\n if (selectedItem) {\n const keyValue = selectedItem[key];\n if (typeof keyValue === \"number\") {\n finalValue = Number(rawValue);\n }\n }\n }\n\n props.callback?.({\n name: props.name,\n value: finalValue,\n index: props.index,\n groupKey: props.groupKey,\n });\n };\n\n // -----------------------------------\n // LOAD DATA\n // -----------------------------------\n useEffect(() => {\n async function fetchData() {\n if (props.dataset) {\n setList(props.dataset);\n return;\n }\n\n if (props.dataSource && props.serviceClient) {\n let dataSource = props.dataSource;\n let response: QueryResponse<any>;\n\n if (props.dataSourceDependsOn && props.dependentValue) {\n dataSource = dataSource.replace(\n `{${props.dataSourceDependsOn}}`,\n props.dependentValue,\n );\n }\n\n response = await props.serviceClient.get(dataSource);\n setList(response.result ?? []);\n }\n }\n\n fetchData();\n }, [\n props.dataset,\n props.dataSource,\n props.dependentValue,\n props.dataSourceDependsOn,\n ]);\n\n // -----------------------------------\n // SAFE VALUE FOR SELECT\n // -----------------------------------\n const value = getSafeValue(props.value);\n\n return (\n <label className=\"block\">\n {props.attributes?.label && (\n <span className=\"text-sm font-medium inline-block pb-1\">\n {props.attributes?.label}\n </span>\n )}\n {props.attributes?.label && props.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n\n <select\n name={props.name}\n id={props.name}\n value={value}\n onChange={textChangeHandler}\n required={props.attributes?.required}\n disabled={props.attributes?.readOnly}\n className=\"peer py-1.5 block w-full text-black rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\"\n >\n <option value=\"\">{props.attributes?.placeholder || \"Select\"}</option>\n\n {list.map((item, index) => {\n const keyField = props.dataKeyFieldName!;\n const textField = props.dataTextFieldName!;\n\n return (\n <option key={index} value={item[keyField]}>\n {item[textField]}\n </option>\n );\n })}\n </select>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props.attributes?.errorMessage || \"\"}\n </p>\n </label>\n );\n};\n\nexport default Select;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\nconst PercentageInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const rawValue = event.target.value;\n const numericValue = parseFloat(rawValue);\n\n // Allow empty string (for clearing input), or any positive number\n if (rawValue === \"\" || (!isNaN(numericValue) && numericValue >= 0)) {\n if (props.callback !== undefined) {\n props.callback({\n name: props.name,\n value: rawValue,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n }\n };\n\n\n const handleWheel = (event: WheelEvent<HTMLInputElement>) => {\n event.preventDefault();\n // @ts-ignore\n event.target.blur();\n };\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n const preventNegative: React.KeyboardEventHandler<HTMLInputElement> = (e) => {\n if (e.key === \"-\") {\n e.preventDefault();\n }\n };\n\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n\n <span className=\"text-sm font-medium \">{props?.attributes?.label ? (props?.attributes?.label + \" %\") : \"\"}</span> {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"number\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n min={0}\n onChange={textChangeHandler}\n onKeyDown={preventNegative}\n onWheel={handleWheel}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n max={\"100\"}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 number-input\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default PercentageInput;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst PhoneInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index);\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n let value = \"\";\n if (props.value !== undefined && props.value !== null) {\n // @ts-ignore\n value = props.value;\n }\n\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span>\n\n <div className=\"flex items-center bg-gray-100 rounded border border-gray-300 \n focus-within:border-indigo-300 focus-within:ring focus-within:ring-indigo-200 focus-within:ring-opacity-50\">\n <span className=\"px-3 text-gray-700\">\n {props.prefix}\n </span>\n <input\n type=\"text\"\n name={props.name}\n id={props.name}\n value={value}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"py-1.5 block w-full outline-none focus:ring-0 border-0 mr-0.5\"\n \n />\n </div>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default PhoneInput;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\nconst NumberInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index, props.groupKey);\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n\n\n const handleWheel = (event: WheelEvent<HTMLInputElement>) => {\n event.preventDefault();\n // @ts-ignore\n event.target.blur();\n };\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n\n return (\n <React.Fragment>\n <label className=\"block\">\n\n {props?.attributes?.label && <span className=\"text-sm inline-block pb-1 font-medium \">{props?.attributes?.label}</span>} {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"number\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n onChange={textChangeHandler}\n onWheel={handleWheel}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n onBlur={props?.onBlur}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n max={props?.attributes?.maxValue}\n min={props?.attributes?.minValue}\n className=\"peer py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 number-input\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"/>\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default NumberInput;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst CheckboxInput: React.FC<InputControlProps> = (props) => {\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n let text = event.target.checked;\n console.log(text);\n if (props.callback !== undefined) {\n // props.callback(props.name, text, props.index, props.groupKey);\n\n props.callback({\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n // let value = \"\";\n // if (props.value !== undefined && props.value !== null) {\n // value = props.value;\n // }\n const trueValue = true;\n let value = false;\n if (\n props.value != undefined &&\n props.value != null &&\n props.value != \"\" &&\n (props.value == \"true\" || props.value.toString() == \"true\")\n ) {\n value = true;\n }\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium\">{props?.attributes?.label}</span>{\" \"}\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n <input\n type=\"checkbox\"\n name={props.name}\n id={props.name}\n //value={value}\n checked={value}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"\n />\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n );\n};\n\nexport default CheckboxInput;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst OtpInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index, props.groupKey);\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n const handleWheel = (event: WheelEvent<HTMLInputElement>) => {\n event.preventDefault();\n };\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n\n return (\n <React.Fragment>\n <label htmlFor={props.name} className=\"block mb-1 w-full\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span>\n <input type=\"text\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n onChange={textChangeHandler}\n autoComplete=\"off\"\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={4}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n autoFocus={props?.attributes?.autoFocus}\n onWheel={handleWheel}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm tracking-[1.25em] text-center\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default OtpInput;\n","class DateTimeUtility {\n constructor() {\n // No initialization needed\n }\n\n static formatDate(date: Date): string {\n if (!date) {\n throw new Error(\"Invalid date\");\n }\n\n const pad = (num: number): string => num.toString().padStart(2, \"0\");\n\n const year = date.getFullYear();\n const month = pad(date.getMonth() + 1); // Months are zero-based\n const day = pad(date.getDate());\n const hours = pad(date.getHours());\n const minutes = pad(date.getMinutes());\n const seconds = pad(date.getSeconds());\n\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\n }\n\n static getMonthShortNameCustom(month: number): string {\n const monthNames = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n if (month < 1 || month > 12) {\n throw new Error(\n \"Invalid month. Please provide a value between 1 and 12.\",\n );\n }\n return monthNames[month - 1];\n }\n\n static getCurrentWeekRange(): { start: Date; end: Date } {\n const today = new Date();\n const day = today.getDay(); // 0 (Sun) – 6 (Sat)\n\n // Get Monday\n const diffToMonday = (day === 0 ? -6 : 1) - day; // if Sunday, go back 6 days\n const monday = new Date(today);\n monday.setDate(today.getDate() + diffToMonday);\n monday.setHours(0, 0, 0, 0);\n\n // Get Sunday\n const sunday = new Date(monday);\n sunday.setDate(monday.getDate() + 6);\n sunday.setHours(23, 59, 59, 999);\n\n return { start: monday, end: sunday };\n }\n\n static getCurrentMonthRange(): { start: Date; end: Date } {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth(), 1);\n const end = new Date(now.getFullYear(), now.getMonth() + 1, 0); // last day of current month\n return { start, end };\n }\n\n static formatShortDate(date: Date): string {\n const day = date.getDate();\n const month = this.getMonthShortNameCustom(date.getMonth() + 1); // Month is 0-indexed\n return `${day} ${month}`;\n }\n\n static formatIndianCurrencyShort(value: number): string {\n if (value >= 1_00_00_000) {\n return `${(value / 1_00_00_000).toFixed(2)} Cr`;\n } else if (value >= 1_00_000) {\n return `${(value / 1_00_000).toFixed(2)} L`;\n } else if (value >= 1_000) {\n return `${(value / 1_000).toFixed(2)} K`;\n } else {\n return `${value}`;\n }\n }\n}\n\nexport default DateTimeUtility;\n","import DateTimeUtility from \"../../utilities/DateTimeUtility\";\nimport React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst DateTimeInput: React.FC<InputControlProps> = (props) => {\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const localDate = new Date(event.target.value);\n if (props.callback !== undefined) {\n const utcDate = new Date(\n localDate.getTime() + localDate.getTimezoneOffset() * 60000,\n );\n\n let formattedDate = DateTimeUtility.formatDate(utcDate);\n // props.callback(props.name, formattedDate, props.index, props.groupKey);\n props.callback({\n name: props.name,\n value: formattedDate,\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n let value;\n let localvalue;\n let timeZoneAbbr;\n const now = new Date();\n const utcOffset = now.getTimezoneOffset();\n\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n const now = new Date();\n const offsetMinutes = now.getTimezoneOffset();\n const offsetMilliseconds = offsetMinutes * 60 * 1000;\n\n // @ts-ignore\n const valDate = value.toString().includes(\"Z\")\n ? // @ts-ignore\n new Date(value)\n : new Date(value + \"Z\");\n\n let localDate = new Date(valDate.getTime() - offsetMilliseconds);\n timeZoneAbbr = now\n .toLocaleTimeString(\"en\", { timeZoneName: \"short\" })\n .split(\" \")[2];\n localvalue = localDate?.toISOString()?.slice(0, 16);\n }\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span>{\" \"}\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n <div className=\"flex items-center gap-2\">\n <input\n type=\"datetime-local\"\n name={props.name}\n id={props.name}\n value={localvalue}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"\n />\n <span>{timeZoneAbbr}</span>\n </div>\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n );\n};\n\nexport default DateTimeInput;\n","import React, { ChangeEventHandler, ChangeEvent, useEffect } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\nconst ColorInput: React.FC<InputControlProps> = (props) => {\n const [color, setColor] = React.useState<string>(\"#3b82f6\");\n\n // Synchronize state with `props.value`\n useEffect(() => {\n if (props.value !== undefined && props.value !== null) {\n if (typeof props.value === \"string\") {\n setColor(props.value);\n }\n }\n }, [props.value]);\n\n const handleColorChange = (event: ChangeEvent<HTMLInputElement>) => {\n const newColor = event.target.value;\n setColor(newColor); // Update local state\n if (props.callback) {\n // props.callback(props.name, newColor, props.index, props.groupKey); // Trigger callback\n props.callback({\n name: props.name,\n value: newColor,\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n return (\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium\">{props?.attributes?.label}</span>{\" \"}\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n {/* <span className={`absolute top-0 right-0 text-xs px-1 py-0.5 ${props.isTenantColor ? 'bg-green-500 text-white' : 'bg-gray-300 text-gray-800'}`}>\n {props.isTenantColor ? 'Tenant' : 'Default'}\n </span> */}\n <input\n type=\"color\"\n name={props.name}\n title={color}\n id={props.name}\n value={color}\n onChange={handleColorChange}\n required={props?.attributes?.required}\n className={`w-[88px] h-12 block cursor-pointer focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50`}\n />\n {props?.attributes?.errorMessage && (\n <p className=\"mt-1 text-alert text-sm\">\n {props.attributes.errorMessage}\n </p>\n )}\n </label>\n );\n};\n\nexport default ColorInput;\n","\"use client\";\nimport React, { ChangeEvent, useEffect, useRef, useState } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\nconst SelectWithSearchInput: React.FC<InputControlProps> = (props) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [selectedItem, setSelectedItem] = useState<{\n name: string;\n image: string;\n } | null>(null);\n const [list, setList] = useState<any[]>([]);\n useEffect(() => {\n async function fetchData() {\n if (props.dataset) {\n setList(props.dataset);\n\n } else if (props.dataSource && props.serviceClient) {\n let dataSource = props.dataSource;\n if (props.dataSourceDependsOn && props.dependentValue) {\n dataSource = dataSource.replace(\n `{${props.dataSourceDependsOn}}`,\n props.dependentValue\n );\n }\n const response = await props.serviceClient.get(dataSource);\n if (response?.result) setList(response.result);\n }\n\n }\n\n fetchData();\n }, [\n props.dataSource,\n props.dependentValue,\n props.dataset,\n props.dataSourceDependsOn,\n ]);\n\n const filteredItems = list?.filter((item) =>\n item[props?.dataTextFieldName!]\n ?.toLowerCase()\n .includes(searchTerm.toLowerCase())\n );\n\n const handleSelect = (event: React.SyntheticEvent, item: any) => {\n event.preventDefault();\n setSearchTerm(item[props.dataTextFieldName!]);\n setSelectedItem(item);\n setIsOpen(false);\n setHighlightedIndex(-1);\n if (props.callback) {\n props.callback({\n name: props.name,\n value: item[props.dataKeyFieldName!],\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n setHighlightedIndex((prev) =>\n prev < filteredItems.length - 1 ? prev + 1 : 0\n );\n } else if (e.key === \"ArrowUp\") {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredItems.length - 1\n );\n } else if (e.key === \"Enter\" && highlightedIndex >= 0) {\n handleSelect(e, filteredItems[highlightedIndex]);\n }\n };\n\n const dropdownRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (highlightedIndex >= 0 && dropdownRef.current) {\n const highlightedItem = dropdownRef.current.children[\n highlightedIndex\n ] as HTMLElement;\n highlightedItem?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }\n }, [highlightedIndex]);\n\n\n\n\n return (\n <div className=\"relative\">\n <label>{props.attributes?.label}</label> {props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <div className=\"relative\">\n <input\n type=\"text\"\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n\n setIsOpen(true);\n setHighlightedIndex(-1);\n }}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n placeholder=\"Select or search for a name\"\n // className=\"w-full bg-white border-2 border-accent-500 rounded-md shadow-sm p-2 pr-10 focus:border-accent-700 focus:outline-none transition-colors duration-300\"\n className=\"peer py-1.5 block w-full text-black rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"\n />\n {/* \n {selectedItem && (\n <img\n src={selectedItem.image}\n alt={selectedItem.name}\n className=\"absolute left-2 top-1/2 transform -translate-y-1/2 w-6 h-6 rounded-full\"\n />\n )} */}\n\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"absolute right-2 top-3 h-5 w-5 text-gray-500 focus:outline-none\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-full h-full\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <div\n ref={dropdownRef}\n className=\"absolute z-10 mt-2 w-full bg-white border border-gray-200 rounded-md shadow-lg max-h-48 overflow-y-auto\"\n >\n {filteredItems.length > 0 ? (\n filteredItems.map((item, index) => (\n <button\n key={item[props.dataKeyFieldName!]}\n onClick={(e) => handleSelect(e, item)}\n className={`w-full px-4 py-2 flex items-center space-x-2 text-left ${index === highlightedIndex\n ? \"bg-gray-200\"\n : \"hover:bg-gray-100\"\n }`}\n role=\"option\"\n tabIndex={-1}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n <span>{item[props.dataTextFieldName!]}</span>\n </button>\n ))\n ) : (\n <div className=\"px-4 py-2 text-gray-500\">No results found</div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default SelectWithSearchInput;\n\n","\"use client\";\nimport React, { useState } from \"react\";\nimport ToastService from \"./ToastService\";\nimport {\n BaseComponentProps,\n StyleTypes,\n buttonClasses,\n progressClasses,\n} from \"./StyleTypes\";\nimport Confirm from \"./Confirm\";\nimport { ActionResponse } from \"./types/ActionResponse\";\n\ninterface ButtonProps<T> extends BaseComponentProps {\n oneTimeAction?: boolean;\n onValidate?: () => Promise<boolean>;\n onClick?: (index?: number) => Promise<ActionResponse<T>>;\n showToast?: boolean;\n ButtonType?: StyleTypes;\n hideProgressIndicator?: boolean;\n confirm?: boolean;\n confirmationMessage?: string;\n index?: number;\n id?: string;\n isActive?: boolean;\n}\n\nconst Button: React.FC<ButtonProps<any>> = (props) => {\n const [inProgress, setInProgress] = useState(false);\n const [isActionPerformed, setIsActionPerformed] = useState(false);\n const [responseMessage, setResponseMessage] = useState<any>(null);\n const [showModal, setShowModal] = useState<React.ReactNode | null>(null);\n\n const execute = async (event: React.MouseEvent) => {\n event.preventDefault();\n\n if (props.confirm) {\n const confirmed = await showConfirmation(\n \"Are you sure you want to delete this item?\",\n );\n setShowModal(null);\n if (!confirmed) {\n return;\n }\n }\n\n if (props.oneTimeAction && isActionPerformed) {\n return;\n }\n\n setInProgress(true);\n let isValid = true;\n\n if (props.onValidate !== undefined) {\n isValid = await props.onValidate();\n if (!isValid) {\n setInProgress(false);\n ToastService.showError(\n \"There are error in the form. Please fix them before proceeding.\",\n );\n return;\n }\n }\n\n if (props.onClick !== undefined) {\n let response = await props.onClick(props.index);\n console.log(response);\n if (response.isSuccessful) {\n setIsActionPerformed(true);\n setResponseMessage(response.message);\n if (props.showToast) {\n ToastService.showInfo(response.message || \"\");\n }\n } else {\n ToastService.showError(response.message || \"\");\n }\n } else {\n ToastService.showError(\"No action defined.\");\n }\n\n setInProgress(false);\n };\n\n const showConfirmation = (message: string): Promise<boolean> => {\n return new Promise((resolve) => {\n const onConfirm = () => resolve(true);\n const onCancel = () => resolve(false);\n setShowModal(\n <Confirm\n message={props.confirmationMessage}\n onConfirm={onConfirm}\n onCancel={onCancel}\n />,\n );\n });\n };\n\n let buttonClass = props.ButtonType\n ? buttonClasses.get(props.ButtonType)\n : buttonClasses.get(StyleTypes.Primary);\n let progressClass = props.ButtonType\n ? progressClasses.get(props.ButtonType)\n : progressClasses.get(StyleTypes.Primary);\n\n return (\n <React.Fragment>\n <button\n type=\"submit\"\n onClick={execute}\n id={props.id}\n disabled={props.disabled}\n className={\n buttonClass +\n \" relative \" +\n (props.className || \"\") +\n (props.isActive ? \" scale-95 shadow-inner\" : \"\")\n }\n >\n {isActionPerformed && props.oneTimeAction && responseMessage\n ? responseMessage\n : props.children}\n {inProgress && (\n <React.Fragment>\n {props.hideProgressIndicator === true ? (\n <div className=\"absolute bottom-0 left-0 h-0.5 bg-gray-400 rounded animate-progress\"></div>\n ) : (\n <svg\n className={\"animate-spin ml-2 mr-3 h-5 w-5 \" + progressClass}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n </React.Fragment>\n )}\n </button>\n {showModal}\n </React.Fragment>\n );\n};\n\nexport default Button;\n","class ToastService {\n private static showToast: (message: string, messageType: string) => void;\n private static closeToast: () => void;\n\n public static initialize(\n showToast: (message: string, messageType: string) => void,\n closeToast: () => void,\n ) {\n ToastService.showToast = showToast;\n ToastService.closeToast = closeToast;\n }\n\n public static showError(message: string) {\n if (ToastService.showToast) {\n ToastService.showToast(message, \"error\");\n }\n }\n\n public static showInfo(message: string) {\n if (ToastService.showToast) {\n ToastService.showToast(message, \"info\");\n }\n }\n\n public static close() {\n if (ToastService.closeToast) {\n ToastService.closeToast();\n }\n }\n}\n\nexport default ToastService;\n","// StyleTypes.ts\nexport enum StyleTypes {\n Primary = \"Primary\",\n PrimaryHollow = \"PrimaryHollow\",\n Secondary = \"Secondary\",\n SecondaryHollow = \"SecondaryHollow\",\n Neutral = \"Neutral\",\n NeutralHollow = \"NeutralHollow\",\n Link = \"Link\",\n Ripple = \"Ripple\",\n Danger = \"Danger\",\n Light = \"Light\",\n}\n\n// Button style classes\nexport const buttonClasses: Map<StyleTypes, string> = new Map([\n [\n StyleTypes.Primary,\n \"relative inline-flex items-center justify-center bg-primary rounded px-4 py-3 lg:py-2 font-medium shadow-sm hover:shadow-lg hover:bg-primary-strong focus:outline-none active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed transition duration-150 ease-in-out text-white\",\n ],\n\n [\n StyleTypes.Secondary,\n \"relative inline-flex items-center justify-center bg-gradient-to-b from-secondary to-secondary-strong rounded px-4 py-3 lg:py-2 font-medium shadow-sm hover:shadow-lg focus:outline-none active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed transition duration-150 ease-in-out text-body hover:bg-secondary-strong\",\n ],\n\n [\n StyleTypes.Neutral,\n \"relative inline-flex items-center justify-center bg-neutral-strong rounded px-4 py-3 lg:py-2 font-medium shadow-sm hover:shadow-lg focus:outline-none active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed transition duration-150 ease-in-out text-body hover:bg-neutral-stronger\",\n ],\n\n [\n StyleTypes.PrimaryHollow,\n \"inline-flex font-medium items-center justify-center px-4 py-3 lg:py-2 transparent border-primary border text-primary rounded hover:shadow-md focus:outline-none transition duration-150 ease-in-out active:scale-95\",\n ],\n\n [\n StyleTypes.SecondaryHollow,\n \"inline-flex font-medium items-center justify-center px-4 py-3 lg:py-2 transparent border-secondary border text-secondary rounded hover:shadow-md focus:outline-none transition duration-150 ease-in-out active:scale-95\",\n ],\n\n [\n StyleTypes.NeutralHollow,\n \"inline-flex font-medium items-center justify-center px-4 py-3 lg:py-2 transparent border-neutral border text-neutral rounded hover:shadow-md focus:outline-none transition duration-150 ease-in-out active:scale-95\",\n ],\n\n [\n StyleTypes.Ripple,\n \"px-3 py-1.5 inline-flex items-center text-sm font-medium rounded border-[1.5px] border-primary ripple btn-bg-primary btn-primary-text\",\n ],\n [\n StyleTypes.Danger,\n \"inline-flex text-sm font-medium items-center justify-center px-4 py-2 border border-alert bg-alert text-white rounded hover:bg-alert-600 hover:border-alert-600 focus:outline-none active:ring-1 active:ring-alert\",\n ],\n [StyleTypes.Link, \"\"],\n [\n StyleTypes.Light,\n \"inline-flex items-center justify-center rounded bg-white border px-4 py-2 leading-6 text-primary shadow-sm hover:shadow focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary disabled:opacity-50 disabled:cursor-not-allowed\",\n ],\n]);\n\n// Progress indicator classes (for Button only)\nexport const progressClasses: Map<StyleTypes, string> = new Map([\n [StyleTypes.Primary, \"\"],\n [StyleTypes.PrimaryHollow, \"\"],\n [StyleTypes.Secondary, \"\"],\n [StyleTypes.SecondaryHollow, \"\"],\n [StyleTypes.Neutral, \"\"],\n [StyleTypes.NeutralHollow, \"\"],\n [StyleTypes.Ripple, \"\"],\n [StyleTypes.Danger, \"\"],\n [StyleTypes.Link, \"\"],\n]);\n\n// Common interfaces\nexport interface BaseComponentProps {\n className?: string;\n children: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface ActionResponse<T> {\n isSuccessful: boolean;\n message?: string;\n data?: T;\n}\n","\"use client\";\nimport React, { useState } from \"react\";\nimport ClientButton from \"./ClientButton\";\nimport { ButtonTypes } from \"./ButtonTypes\";\nimport { StyleTypes } from \"./StyleTypes\";\n\ninterface ConfirmProps {\n message?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n}\nconst Confirm: React.FC<ConfirmProps> = ({ message, onConfirm, onCancel }) => {\n const [showModal, setShowModal] = useState(true);\n\n const handleConfirmAction = () => {\n setShowModal(false);\n if (onConfirm) {\n onConfirm();\n }\n };\n\n const handleCancelAction = () => {\n setShowModal(false);\n if (onCancel) {\n onCancel();\n }\n };\n\n return (\n <>\n {showModal && (\n <div className=\"fixed inset-0 flex items-center justify-center z-20\">\n <div className=\"absolute inset-0 bg-black opacity-70\"></div>\n <div className=\"bg-white rounded-md p-6 shadow border z-50\">\n <p className=\"text-xl font-semibold mb-4\">Confirmation</p>\n <p className=\"mb-4\">{message}</p>\n <div className=\"flex justify-end gap-8\">\n <ClientButton\n onClick={handleCancelAction}\n ButtonType={StyleTypes.PrimaryHollow}\n >\n Cancel\n </ClientButton>\n <ClientButton onClick={handleConfirmAction}>Confirm</ClientButton>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default Confirm;\n\n{\n /* <div className=\"modal-content\">\n <p>{message}</p>\n <button onClick={handleConfirmAction}>Confirm</button>\n <button onClick={handleCancelAction}>Cancel</button>\n </div> */\n}\n","\"use client\";\nimport React from \"react\";\nimport ToastService from \"./utilities/ToastService\";\nimport { StyleTypes, buttonClasses, BaseComponentProps } from \"./StyleTypes\";\n\ninterface ClientButtonProps extends BaseComponentProps {\n onClick?: () => void;\n ButtonType?: StyleTypes;\n dataRole?: string;\n tabIndex?: number;\n}\n\nconst ClientButton: React.FC<ClientButtonProps> = (props) => {\n const execute = async (event: React.MouseEvent) => {\n event.preventDefault();\n if (props.onClick !== undefined) {\n props.onClick();\n } else {\n ToastService.showError(\"No action defined.\");\n }\n };\n\n let buttonClass = props.ButtonType\n ? buttonClasses.get(props.ButtonType)\n : buttonClasses.get(StyleTypes.Primary);\n\n return (\n <React.Fragment>\n <button\n type=\"button\"\n onClick={execute}\n data-role={props.dataRole}\n disabled={props.disabled}\n tabIndex={props.tabIndex}\n className={buttonClass + \" \" + props.className}\n >\n {props.children}\n </button>\n </React.Fragment>\n );\n};\n\nexport default ClientButton;\n","class ToastService {\n static showError(message: string): void {\n console.error(message);\n // Add toast notification logic here\n if (typeof window !== \"undefined\") {\n // You can integrate a toast library like react-toastify or custom toast here\n alert(message);\n }\n }\n\n static showSuccess(message: string): void {\n console.log(message);\n // Add toast notification logic here\n if (typeof window !== \"undefined\") {\n alert(message);\n }\n }\n\n static showWarning(message: string): void {\n console.warn(message);\n // Add toast notification logic here\n if (typeof window !== \"undefined\") {\n alert(message);\n }\n }\n\n static showInfo(message: string): void {\n console.info(message);\n // Add toast notification logic here\n if (typeof window !== \"undefined\") {\n alert(message);\n }\n }\n}\n\nexport default ToastService;\n","\"use client\";\nimport Button from \"../../Button\";\nimport React, {\n useEffect,\n useRef,\n useState,\n ChangeEvent,\n useCallback,\n} from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\nimport { ActionResponse } from \"../../types/ActionResponse\";\n\nconst SelectWithSearchPanel: React.FC<InputControlProps> = (props) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [list, setList] = useState<any[]>([]);\n const listRef = useRef<HTMLDivElement>(null);\n const [isError, setIsError] = useState<boolean>(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const [isCreateOpen, setIsCreateOpen] = useState(false);\n const [formData, setFormData] = useState<Record<string, string>>({});\n\n const getNestedValue = (obj: any, path: string): any => {\n return path.split(\".\").reduce((acc, key) => acc?.[key], obj);\n };\n\n // Close the dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n // Handle DataSource and Dataset\n // If dataset is provided, use it. Otherwise, fetch data from the dataSource using serviceClient\n useEffect(() => {\n async function fetchData() {\n if (props.dataset) {\n setList(props.dataset);\n } else if (props.dataSource && props.serviceClient) {\n let dataSource = props.dataSource;\n if (props.dataSourceDependsOn && props.dependentValue) {\n dataSource = dataSource.replace(\n `{${props.dataSourceDependsOn}}`,\n props.dependentValue,\n );\n }\n const response = await props.serviceClient.get(dataSource);\n if (response?.result) setList(response.result);\n }\n }\n fetchData();\n }, [\n props.dataSource,\n props.dependentValue,\n props.dataset,\n props.dataSourceDependsOn,\n ]);\n\n // Filter items based on search term\n // const filteredItems = list?.filter((item) =>\n // item[props?.dataTextFieldName!]?.toLowerCase().includes(searchTerm?.toLowerCase())\n // );\n const filteredItems = list?.filter((item) => {\n const value = getNestedValue(item, props.dataTextFieldName!);\n return value?.toLowerCase().includes(searchTerm?.toLowerCase());\n });\n\n // Play beep sound when no results are found\n // This function creates a beep sound using the Web Audio API\n const playBeep = () => {\n const audioCtx = new (\n (window as any).AudioContext || (window as any).webkitAudioContext\n )();\n const oscillator = audioCtx.createOscillator();\n const gainNode = audioCtx.createGain();\n\n oscillator.type = \"square\"; // Square wave for a more digital/beep-like sound\n oscillator.frequency.setValueAtTime(300, audioCtx.currentTime); // Adjust frequency closer to TallyPrime's beep\n gainNode.gain.setValueAtTime(0.02, audioCtx.currentTime); // Lower the volume slightly\n\n oscillator.connect(gainNode);\n gainNode.connect(audioCtx.destination);\n\n oscillator.start();\n setTimeout(() => {\n oscillator.stop();\n audioCtx.close(); // Close context to prevent memory leaks\n }, 250); // Adjust duration for a crisp beep\n };\n\n useEffect(() => {\n const filteredItems = list?.filter((item) =>\n item[props?.dataTextFieldName!]\n ?.toLowerCase()\n .includes(searchTerm?.toLowerCase()),\n );\n if (searchTerm.length > 0 && filteredItems.length === 0) {\n playBeep();\n setIsError(true);\n } else {\n setIsError(false);\n }\n }, [searchTerm]);\n\n const handleSelect = (event: React.SyntheticEvent, item: any) => {\n event.preventDefault();\n // setSearchTerm(item[props.dataTextFieldName!]);\n setSearchTerm(getNestedValue(item, props.dataTextFieldName!));\n\n if (props.callback) {\n const val = {};\n props.callback({\n name: props.name,\n value: item[props.dataKeyFieldName!],\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n\n setHighlightedIndex(0);\n setIsOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n setIsOpen(false);\n // setSelectedItem(null)\n setHighlightedIndex(-1);\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const nextIndex = prev < filteredItems.length - 1 ? prev + 1 : prev; // Prevent wrapping\n scrollIntoView(nextIndex);\n return nextIndex;\n });\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const prevIndex = prev > 0 ? prev - 1 : prev; // Prevent wrapping\n scrollIntoView(prevIndex);\n return prevIndex;\n });\n } else if (e.key === \"Enter\" && highlightedIndex >= 0) {\n handleSelect(e, filteredItems[highlightedIndex]);\n }\n };\n\n const scrollIntoView = (index: number) => {\n if (listRef.current) {\n const item = listRef.current.children[index] as HTMLElement;\n if (item) {\n item.scrollIntoView();\n }\n }\n };\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const newSearchTerm = event.target.value;\n setSearchTerm(newSearchTerm);\n setIsOpen(true);\n setHighlightedIndex(0);\n };\n\n const handleInputChange = (\n event: ChangeEvent<HTMLInputElement>,\n field: string,\n ) => {\n setFormData((prev) => ({ ...prev, [field]: event.target.value }));\n };\n\n // Handle save action for the create modal\n const handleSaveModal = useCallback(async (): Promise<\n ActionResponse<any>\n > => {\n console.log(\"Form Data:\", formData);\n return formData as ActionResponse<any>;\n }, []);\n\n return (\n <div className=\"relative\">\n <label className=\"text-sm mb-1 font-medium\">\n {props.attributes?.label}\n </label>\n <div>\n <input\n type=\"text\"\n value={searchTerm}\n onChange={textChangeHandler}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n // onBlur={handleBlur}\n placeholder={props.attributes?.placeholder}\n className={`peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm\n ${\n isError\n ? \"focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50\"\n : \"focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"\n } \n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none`}\n />\n </div>\n\n <div ref={containerRef}>\n {isOpen && (\n <React.Fragment>\n <div className=\"fixed z-50 right-0 bg-white top-[62px] w-1/4 border-l border-gray-200\">\n <div className=\"flex flex-col p-2 bg-accent-950 text-white\">\n <h5 className=\"text-md text-white font-medium\">\n Select a{\" \"}\n {props.attributes?.label || props.attributes?.heading}\n </h5>\n </div>\n\n <div className=\"flex justify-end px-4 border-b py-2 border-gray-200 h-10\">\n {props.createFields && props.createFields.length > 0 && (\n <button\n type=\"button\"\n className=\"text-primary hover:text-primary-800\"\n onMouseDown={(e) => {\n e.preventDefault();\n setIsCreateOpen(true);\n }}\n >\n Create\n </button>\n )}\n </div>\n </div>\n\n {/* Create Modal */}\n {isCreateOpen && (\n <div className=\"fixed right-0 w-1/4 h-full top-[62px] bg-white shadow-lg border-l border-gray-200 z-50\">\n <div className=\"flex flex-col p-2 bg-accent-950\">\n <h5 className=\"text-md font-medium text-white\">\n Create New {props.attributes?.label}\n </h5>\n </div>\n\n <div className=\"flex justify-end px-4 border-b py-2 border-gray-200\">\n <button\n type=\"button\"\n onClick={() => setIsCreateOpen(false)}\n className=\"text-red-600 hover:text-red-800\"\n >\n Close\n </button>\n </div>\n\n {/* Modal Content */}\n <div className=\"p-4\">\n {props.createFields?.map((field) => (\n <div key={field.name} className=\"mb-4\">\n <label className=\"text-sm mb-1 font-medium block\">\n {field.label}\n </label>\n <input\n type={field.type}\n value={formData[field.name] || \"\"}\n onChange={(e) => handleInputChange(e, field.name)}\n placeholder={field.placeholder}\n required={field.required}\n disabled={field.disabled}\n pattern={field.pattern}\n minLength={field.minLength}\n maxLength={field.maxLength}\n className=\"peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"\n />\n </div>\n ))}\n <Button onClick={handleSaveModal} className=\"w-full\">\n Save {props.attributes?.label}\n </Button>\n </div>\n </div>\n )}\n\n <div\n ref={listRef}\n className=\"fixed z-10 right-0 mt-[130px] top-0 w-1/4 bg-white border-l border-gray-200 shadow-lg overflow-y-auto\"\n style={{ height: \"calc(100vh - 130px)\" }}\n >\n {filteredItems.length > 0 ? (\n filteredItems.map((item, index) => (\n <div key={item[props.dataKeyFieldName!]}>\n <button\n onClick={(e) => {\n handleSelect(e, item);\n }}\n className={`w-full px-4 py-2 flex items-center space-x-2 text-left border-b border-gray-200 ${index === highlightedIndex ? \"bg-gray-200\" : \"hover:bg-gray-100\"}`}\n role=\"option\"\n tabIndex={-1}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n {/* <span>{item[props.dataTextFieldName!]}</span> */}\n <span>\n {getNestedValue(item, props.dataTextFieldName!)}\n </span>\n </button>\n </div>\n ))\n ) : (\n <div className=\"px-4 py-2 text-gray-500\">No results found</div>\n )}\n </div>\n </React.Fragment>\n )}\n </div>\n </div>\n );\n};\n\nexport default SelectWithSearchPanel;\n","import React, {\n ChangeEventHandler,\n ChangeEvent,\n useState,\n useEffect,\n} from \"react\";\nimport { list } from \"postcss\";\nimport { InputControlProps } from \"./InputControlProps\";\nimport { QueryResponse } from \"../../types/QueryResponse\";\n// React.FC<ButtonProps<any>>\n\nconst BooleanSelect: React.FC<InputControlProps> = (props) => {\n const [list, setList] = useState<any[]>();\n\n const textChangeHandler = (event: ChangeEvent<HTMLSelectElement>) => {\n const text = event.target.value;\n\n const boolValue = text?.toLowerCase() === \"true\" || text === \"1\";\n\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index);\n props.callback({\n name: props.name,\n value: boolValue,\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n useEffect(() => {\n async function fetchData() {\n console.log(\"in select\");\n if (props.dataset) {\n setList(props.dataset);\n } else if (\n props.dataSource &&\n props.dataSource != \"\" &&\n props.serviceClient\n ) {\n let dataSource = props.dataSource;\n let response: QueryResponse<any>;\n if (props.dataSourceDependsOn) {\n if (props.dependentValue) {\n dataSource = dataSource.replace(\n `{${props.dataSourceDependsOn}}`,\n props.dependentValue,\n );\n response = await props.serviceClient!.get(dataSource);\n setList(response.result);\n }\n } else {\n response = await props.serviceClient!.get(dataSource);\n setList(response.result);\n }\n }\n }\n fetchData();\n }, [\n props.dataSource,\n props.dependentValue,\n props.dataset,\n props.dataSourceDependsOn,\n ]);\n //there has to be a way to create the service client.\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n return (\n <React.Fragment>\n <label className=\"block\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span>{\" \"}\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n <select\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n // @ts-ignore\n placeholder={props?.attributes?.placeholder}\n disabled={props?.attributes?.readOnly}\n className=\"peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"\n >\n <option className=\"\" value=\"\">\n {props.attributes?.placeholder || \"Select\"}\n </option>\n\n {list &&\n list.map((item, i) => {\n return (\n <option\n key={item[props!.dataKeyFieldName!]}\n className=\"fac-select-option\"\n value={item[props!.dataKeyFieldName!]}\n >\n {item[props!.dataTextFieldName!]}\n </option>\n );\n })}\n </select>\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n );\n};\n\nexport default BooleanSelect;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst EmailInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n\n if (text) {\n const atIndex = text.indexOf('@');\n const dotIndex = text.indexOf('.', atIndex);\n if (dotIndex < atIndex || ((text.length - dotIndex) <= 2)) {\n event.target.setCustomValidity('invaild-value');\n } else {\n event.target.setCustomValidity('');\n }\n }\n\n if (props.callback !== undefined) {\n props.callback({\n name: props.name,\n value: text,\n index: props.index\n });\n }\n };\n\n let value = \"\";\n if (props.value !== undefined && props.value !== null) {\n // @ts-ignore\n value = props.value;\n }\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium text-slate-700\">{props?.attributes?.label}</span> {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"email\"\n name={props.name}\n id={props.name}\n value={value}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus-within:border-neutral-300 focus-within:ring focus-within:ring-neutral-300 focus-within:ring-opacity-50 transition-all duration-500 ease-in-out\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 mb-0 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default EmailInput;","\"use client\";\nimport React, { ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\nconst TimeInput: React.FC<InputControlProps> = (props) => {\n\n const timeChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const timeValue = event.target.value; // \"HH:mm\"\n\n if (props.callback) {\n props.callback({\n name: props.name,\n value: timeValue,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n \n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium\">\n {props?.attributes?.label}\n </span>\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"time\"\n name={props.name}\n id={props.name}\n value={typeof props.value === \"boolean\" ? \"\" : props.value ?? \"\"}\n onChange={timeChangeHandler}\n required={props?.attributes?.required}\n disabled={props?.attributes?.readOnly}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\"\n />\n </div>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ?? \"\"}\n </p>\n </label>\n </React.Fragment>\n );\n};\n\nexport default TimeInput;\n","\"use client\";\nimport React, { useEffect, useState, useCallback, useReducer } from \"react\";\nimport InputControl from \"../controls/edit/InputControl\";\nimport { useRouter } from \"next/navigation\";\nimport ViewControl from \"../controls/view/ViewControl\";\nimport NoContentView from \"./NoContentView\";\nimport { ServiceClientInterface } from \"../types/ServiceClientInterface\";\nimport { QueryResponse } from \"../types/QueryResponse\";\nimport { InputChangeCallback } from \"../controls/InputChangeCallback\";\nimport InputControlType, { Constants } from \"../controls/edit/InputControlType\";\nimport ViewControlTypes from \"../controls/view/ViewControlTypes\";\nimport ContentView from \"./ContentView\";\nimport { Hyperlink } from \"./Hyperlink\";\nimport { StyleTypes } from \"../StyleTypes\";\nimport OdataBuilder from \"../../clients/OdataBuilder\";\nimport Icon from \"../../svg/Icon\";\nimport FormReducer, { FORM_INPUT_UPDATE, FormState } from \"../../FormReducer\";\n\ninterface DataListConfiguration<T> {\n title?: string;\n columns: DataListColumn[];\n filters?: FilterColumn[];\n path: string;\n serviceClient?: ServiceClientInterface;\n query?: { [key: string]: string };\n subTitle?: string;\n dataset?: QueryResponse<any>;\n addLinkHref?: string;\n addLinkText?: string;\n recordValidityColumnName?: string;\n altLinkUrl?: string;\n}\n\ninterface DataListColumn {\n label: string;\n name: string;\n controlType: string;\n enableSorting: boolean;\n width: string;\n format?: string;\n showAsLink?: boolean;\n linkUrlSegment?: string;\n emptyValueLabel?: string;\n addhref?: boolean;\n customProps?: any;\n}\n\ninterface FilterColumn {\n placeholder: string;\n name: string;\n servicePath: string;\n dataTextFieldName: string;\n dataKeyFieldName: string;\n dataTypeCode: string;\n}\n\nconst DataList: React.FC<DataListConfiguration<any>> = (props) => {\n console.log(props.dataset, \"datasetssssss\");\n const router = useRouter();\n let builder = new OdataBuilder(props.path);\n let orderBy = \"\";\n let activePageNumber = 0;\n let pages = 0;\n console.log(props.addLinkText);\n const [isDataFound, setIsDataFound] = useState<boolean | null>(null);\n\n useEffect(() => {\n if (props?.dataset) {\n if (props?.dataset.result && props.dataset.result.length > 0) {\n setIsDataFound(true);\n } else {\n setIsDataFound(false);\n }\n }\n }, [props.dataset]);\n\n function getNestedProperty<T>(obj: T, path: string): any {\n if (path.includes(\".\")) {\n return path\n .split(\".\")\n .reduce((prev: any, curr: string) => (prev ? prev[curr] : null), obj);\n } else if (Array.isArray(obj[path as keyof T])) {\n return (obj[path as keyof T] as string[]).map((item, index) => (\n <div key={index}>{item}</div>\n ));\n } else {\n return obj[path as keyof T];\n }\n }\n\n const initialState: FormState<any> = {\n inputValues: {},\n lastPropertyChanged: \"\",\n };\n\n const [formState, dispatch] = useReducer(FormReducer<any>, initialState);\n\n const handleFilterChange: InputChangeCallback<any> = useCallback(\n (updatedValues) => {\n dispatch({\n type: FORM_INPUT_UPDATE,\n name: updatedValues.name,\n value: updatedValues.value,\n });\n let builder = new OdataBuilder(props.path);\n builder = builder.setQuery(props.query);\n if (updatedValues.value != \"\") {\n const filter = props.filters?.find((x) => x.name == updatedValues.name);\n if (filter?.dataTypeCode == \"number\") {\n router.push(\n builder.getNewFilterUrl(\n updatedValues.name.toString() + \" eq \" + updatedValues.value + \"\",\n ),\n );\n } else {\n router.push(\n builder.getNewFilterUrl(\n updatedValues.name.toString() +\n \" eq '\" +\n updatedValues.value +\n \"'\",\n ),\n );\n }\n } else {\n router.push(builder.getNewFilterUrl(\"\"));\n }\n },\n [dispatch, props, router],\n );\n\n builder = builder.setQuery(props.query);\n orderBy = builder.getOrderBy();\n activePageNumber = builder.getPageNumber(Constants.pagesize);\n let label = \"\";\n\n if (props.dataset && props.dataset!.count) {\n pages = Math.ceil(props.dataset!.count / Constants.pagesize);\n\n label = `Showing ${(activePageNumber - 1) * Constants.pagesize + 1} - `;\n if (activePageNumber * Constants.pagesize > props.dataset!.count!) {\n label =\n label + `${props.dataset!.count} of ${props.dataset!.count} results`;\n } else {\n label =\n label +\n `${activePageNumber * Constants.pagesize} of ${props.dataset!.count\n } results`;\n }\n }\n\n const renderPageNumbers = () => {\n if (pages <= 10) {\n return Array.from({ length: pages }, (_, index) => index + 1).map(\n (page) => (\n <React.Fragment key={page}>\n {activePageNumber !== page ? (\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(page)}\n >\n {page}\n </Hyperlink>\n ) : (\n <span className=\"px-3 py-1 border-t border-b border-gray-300 bg-primary text-white\">\n {page}\n </span>\n )}\n </React.Fragment>\n ),\n );\n } else {\n const showFirstPages = activePageNumber <= 5;\n const showLastPages = activePageNumber > pages - 5;\n\n if (showFirstPages) {\n return (\n <>\n {Array.from({ length: 8 }, (_, index) => index + 1).map((page) => (\n <React.Fragment key={page}>\n {activePageNumber !== page ? (\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(page)}\n >\n {page}\n </Hyperlink>\n ) : (\n <span className=\"px-3 py-1 border-t border-b border-gray-300 bg-primary text-white\">\n {page}\n </span>\n )}\n </React.Fragment>\n ))}\n\n <span className=\"px-2 py-1\">...</span>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(pages - 1)}\n >\n {pages - 1}\n </Hyperlink>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(pages)}\n >\n {pages}\n </Hyperlink>\n\n <div className=\"relative inline-block\">\n <select\n className=\" py-1 border border-gray-300 bg-white text-gray-700 appearance-none rounded-none\"\n value={\n activePageNumber > 8 && activePageNumber < pages - 1\n ? activePageNumber\n : \"\"\n }\n onChange={(e) => {\n const page = parseInt(e.target.value);\n if (page) {\n router.push(builder.getNewPageUrl(page));\n }\n }}\n >\n <option className=\"\" value=\"\">\n Jump to\n </option>\n {Array.from(\n { length: Math.max(0, pages - 10) },\n (_, index) => index + 9,\n ).map((page) => (\n <option key={page} value={page}>\n {page}\n </option>\n ))}\n </select>\n </div>\n </>\n );\n } else if (showLastPages) {\n return (\n <>\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(1)}\n >\n 1\n </Hyperlink>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(2)}\n >\n 2\n </Hyperlink>\n\n <span className=\"px-2 py-1\">...</span>\n\n {Array.from({ length: 8 }, (_, index) => pages - 7 + index).map(\n (page) => (\n <React.Fragment key={page}>\n {activePageNumber !== page ? (\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(page)}\n >\n {page}\n </Hyperlink>\n ) : (\n <span className=\"px-3 py-1 border-t border-b border-gray-300 bg-primary text-white\">\n {page}\n </span>\n )}\n </React.Fragment>\n ),\n )}\n </>\n );\n } else {\n return (\n <>\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(1)}\n >\n 1\n </Hyperlink>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(2)}\n >\n 2\n </Hyperlink>\n\n <span className=\"px-2 py-1\">...</span>\n\n {Array.from(\n { length: 5 },\n (_, index) => activePageNumber - 2 + index,\n ).map((page) => (\n <React.Fragment key={page}>\n {activePageNumber !== page ? (\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(page)}\n >\n {page}\n </Hyperlink>\n ) : (\n <span className=\"px-3 py-1 border-t border-b border-gray-300 bg-primary text-white\">\n {page}\n </span>\n )}\n </React.Fragment>\n ))}\n\n <span className=\"px-2 py-1\">...</span>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(pages - 1)}\n >\n {pages - 1}\n </Hyperlink>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(pages)}\n >\n {pages}\n </Hyperlink>\n\n <div className=\"relative inline-block\">\n <select\n className=\"px-2 py-1 border border-gray-300 bg-white text-gray-700 appearance-none rounded-none\"\n value={\n activePageNumber > 2 && activePageNumber < pages - 1\n ? activePageNumber\n : \"\"\n }\n onChange={(e) => {\n const page = parseInt(e.target.value);\n if (page) {\n router.push(builder.getNewPageUrl(page));\n }\n }}\n >\n <option value=\"\">Jump to</option>\n {Array.from({ length: pages - 4 }, (_, index) => index + 3)\n .filter((page) => page > 2 && page < pages - 1)\n .map((page) => (\n <option key={page} value={page}>\n {page}\n </option>\n ))}\n </select>\n </div>\n </>\n );\n }\n }\n };\n\n return (\n <React.Fragment>\n <ContentView isDataFound={isDataFound}>\n {(props.title || props.filters || props.addLinkHref) && (\n <div\n className={`flex justify-between items-center bg-white pl-6 pr-2 h-14 mb-3 shadow-sm rounded-md border-b border-neutral-200 sticky top-0`}\n >\n {/* Title */}\n {props.title ? (\n <div className=\"inline-flex items-center gap-2\">\n <h2 className=\"text-lg font-semibold text-black-800\">\n {props.title}\n </h2>\n </div>\n ) : (\n <div />\n )}\n\n <div className=\"flex items-center gap-3\">\n {props.filters &&\n props.filters.map((filter) => (\n <InputControl\n key={filter.name}\n name={filter.name}\n controlType={InputControlType.select}\n value={formState.inputValues[filter.name]}\n dataSource={filter.servicePath}\n dataKeyFieldName={filter.dataKeyFieldName}\n dataTextFieldName={filter.dataTextFieldName}\n serviceClient={props.serviceClient}\n callback={handleFilterChange}\n attributes={{ placeholder: filter.placeholder }}\n />\n ))}\n\n {props.addLinkHref && (\n <Hyperlink\n className=\"gap-1\"\n linkType={StyleTypes.Primary}\n href={props.addLinkHref}\n >\n <Icon name=\"plus\" className=\"w-4 h-4\" />\n <span className=\"text-sm font-medium\">\n {props.addLinkText || \"Add New\"}\n </span>\n </Hyperlink>\n )}\n </div>\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto justify-end bg-white rounded shadow h-[calc(100vh-14rem)]\">\n <table className=\"w-full divide-y divide-gray-200\">\n <thead className=\"bg-gray-50 sticky top-0\">\n <tr>\n {props?.columns?.map((column) => {\n let url = builder.getNewOrderByUrl(column.name);\n let icon = \"chevronUpDown\";\n if (orderBy.includes(`${column.name} desc`)) {\n icon = \"chevronDown\";\n url = builder.getNewOrderByUrl(column.name);\n } else if (orderBy.includes(`${column.name}`)) {\n icon = \"chevronUp\";\n url = builder.getNewOrderByUrl(column.name + \" desc\");\n }\n return (\n <th\n key={column.name}\n className={\n \"px-6 py-3 text-left font-medium cursor-pointer bg-neutral-soft \" +\n column.width +\n (column.controlType == ViewControlTypes.moneyView\n ? \" text-right\"\n : \"\")\n }\n >\n <Hyperlink href={url} className=\"!text-neutral-contrast \">\n <span className=\"flex items-center space-x-1\">\n <span className=\"text-black\">{column.label}</span>\n {column.enableSorting && (\n <Icon className=\"w-4 h-4\" name={icon} />\n )}\n </span>\n </Hyperlink>\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody className=\"divide-y divide-gray-200 \">\n {props.dataset?.result?.map((dataitem, index) => {\n let validityClass = \"\";\n console.log(\"dataitem\", dataitem);\n if (\n props.recordValidityColumnName &&\n getNestedProperty(dataitem, props.recordValidityColumnName) ==\n false\n ) {\n validityClass = \"bg-alert-200\";\n }\n\n return (\n <tr key={index} className={validityClass}>\n {props?.columns?.map((column, colindex) => {\n console.log(\"column\", column);\n return (\n <React.Fragment key={colindex}>\n <td\n className={\n \"px-6 py-2 whitespace-normal \" +\n (column.controlType == ViewControlTypes.moneyView\n ? \"\"\n : \"\")\n }\n >\n {column.addhref === true ? (\n <Hyperlink\n className=\"\"\n href={`https://${dataitem[column.name]}`}\n >\n <ViewControl\n controlType={column.controlType}\n value={getNestedProperty(\n dataitem,\n column.name,\n )}\n format={column.format}\n customProps={column.customProps}\n />\n </Hyperlink>\n ) : column.showAsLink ? (\n <Hyperlink\n // href={\n // props.path +\n // dataitem[props.columns[0].name] +\n // \"/\" +\n // column.linkUrlSegment\n // }\n href={\n props.path +\n dataitem[props.columns[0].name] +\n \"/\" +\n (dataitem.linkUrlSegment ??\n column.linkUrlSegment)\n }\n >\n <ViewControl\n controlType={column.controlType}\n value={\n getNestedProperty(dataitem, column.name) ||\n column.emptyValueLabel\n }\n format={column.format}\n customProps={column.customProps}\n />\n </Hyperlink>\n ) : (\n <ViewControl\n controlType={column.controlType}\n value={getNestedProperty(dataitem, column.name)}\n format={column.format}\n customProps={column.customProps}\n />\n )}\n </td>\n </React.Fragment>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n <div className=\"pt-4 border-t border-t-gray-50 sticky bottom-0 h-11 mt-2 \">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-gray-700\">{label}</div>\n <div className=\"flex space-x-2 items-center\">\n {activePageNumber > 1 && (\n <Hyperlink\n className=\"px-3 py-1 rounded-l-md border border-gray-300 bg-white text-gray-500 hover:bg-gray-200\"\n href={builder.getNewPageUrl(activePageNumber - 1)}\n >\n Prev\n </Hyperlink>\n )}\n {activePageNumber <= 1 && (\n <div className=\"px-3 py-1 rounded-l-md border border-gray-300 bg-gray-200 text-gray-500 hover:bg-gray-200\">\n Prev\n </div>\n )}\n\n {renderPageNumbers()}\n\n {activePageNumber < pages && (\n <Hyperlink\n className=\"px-3 py-1 rounded-r-md border border-gray-300 bg-white text-gray-500 hover:bg-gray-200\"\n href={builder.getNewPageUrl(activePageNumber + 1)}\n >\n Next\n </Hyperlink>\n )}\n {activePageNumber >= pages && (\n <div className=\"px-3 py-1 rounded-r-md border border-gray-300 bg-gray-200 text-gray-500\">\n Next\n </div>\n )}\n </div>\n </div>\n </div>\n </ContentView>\n\n <NoContentView isDataFound={isDataFound}>\n {(props.title || props.filters || props.addLinkHref) && (\n <div\n className={`flex justify-between items-center bg-white pl-6 pr-2 h-14 mb-3 shadow-sm rounded-md border-b border-neutral-200`}\n >\n {props.title ? (\n <div className=\"inline-flex items-center gap-2\">\n <h2 className=\"text-lg font-semibold text-black\">\n {props.title}\n </h2>\n </div>\n ) : (\n <div />\n )}\n\n <div className=\"flex items-center gap-3\">\n {props.filters &&\n props.filters.map((filter) => (\n <InputControl\n key={filter.name}\n name={filter.name}\n controlType={InputControlType.select}\n value={formState.inputValues[filter.name]}\n dataSource={filter.servicePath}\n dataKeyFieldName={filter.dataKeyFieldName}\n dataTextFieldName={filter.dataTextFieldName}\n serviceClient={props.serviceClient}\n callback={handleFilterChange}\n attributes={{ placeholder: filter.placeholder }}\n />\n ))}\n\n {props.addLinkHref && (\n <Hyperlink\n className=\"gap-1\"\n linkType={StyleTypes.Primary}\n href={props.addLinkHref}\n >\n <Icon name=\"plus\" className=\"w-4 h-4\" />\n <span className=\"text-sm font-medium\">\n {props.addLinkText || \"Add New\"}\n </span>\n </Hyperlink>\n )}\n </div>\n </div>\n )}\n <div className=\"flex-grow overflow-y-auto justify-end bg-white rounded shadow h-[75vh]\">\n <div>\n <table className=\"w-full divide-y divide-gray-200\">\n <thead className=\"bg-gray-50\">\n <tr>\n {props?.columns?.map((column) => {\n let url = builder.getNewOrderByUrl(column.name);\n let icon = \"chevronUpDown\";\n if (orderBy.includes(`${column.name} desc`)) {\n icon = \"chevronDown\";\n url = builder.getNewOrderByUrl(column.name);\n } else if (orderBy.includes(`${column.name}`)) {\n icon = \"chevronUp\";\n url = builder.getNewOrderByUrl(column.name + \" desc\");\n }\n return (\n <th\n key={column.name}\n className={\n \"px-6 py-3 text-left font-medium cursor-pointer bg-neutral-soft \" +\n column.width +\n (column.controlType == ViewControlTypes.moneyView\n ? \" text-right\"\n : \"\")\n }\n >\n <Hyperlink href={url} className=\"text-body-950\">\n <span className=\"flex items-center space-x-1\">\n <span>{column.label}</span>\n {column.enableSorting && (\n <Icon className=\"w-4 h-4\" name={icon} />\n )}\n </span>\n </Hyperlink>\n </th>\n );\n })}\n </tr>\n </thead>\n </table>\n </div>\n <div className=\"w-full text-center bg-transparent pt-5\">\n There are no entries in the table at the moment.\n </div>\n </div>\n </NoContentView>\n </React.Fragment>\n );\n};\n\nexport default DataList;\n","import React, {\n \n} from \"react\";\nimport Image from \"next/image\";\n\nconst NoContentView = (props: {\n children: React.ReactNode;\n isDataFound?: boolean | null | undefined;\n}) => {\n return (\n <React.Fragment>\n {props.isDataFound === false && props.children}\n </React.Fragment>\n );\n};\n\nexport default NoContentView;\n","import React from \"react\";\n\nconst ContentView = (props: {\n children: React.ReactNode;\n isDataFound: boolean | null | undefined;\n}) => {\n return (\n <React.Fragment>\n {props.isDataFound == null && (\n <div className=\"\">\n <div className=\"bg-gray-200 rounded-md p-4 animate-pulse\">\n <div className=\"flex items-center mb-4\">\n <div className=\"bg-gray-300 h-8 w-8 rounded-full animate-pulse\"></div>\n <div className=\"ml-2\">\n <div className=\"bg-gray-300 h-3 w-16 animate-pulse\"></div>\n <div className=\"bg-gray-300 h-2 w-12 animate-pulse\"></div>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4 mt-6\">\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n </div>\n </div>\n </div>\n )}\n {props.isDataFound === true && props.children}\n </React.Fragment>\n );\n};\n\nexport default ContentView;\n","import Link from 'next/link';\n// import { StyleTypes, buttonClasses, BaseComponentProps } from './StyleTypes';\nimport React from 'react';\nimport { BaseComponentProps, buttonClasses, StyleTypes } from '../StyleTypes';\n\ninterface HyperlinkProps extends BaseComponentProps {\n href?: string;\n linkType?: StyleTypes;\n title?: string;\n}\n\nexport function Hyperlink(props: HyperlinkProps) {\n let linkClass = props.linkType ? buttonClasses.get(props.linkType) : buttonClasses.get(StyleTypes.Link);\n const target = props.href?.startsWith(\"https://\") ? \"_blank\" : \"_self\";\n const additionalProps = target === \"_blank\" ? { rel: \"noopener noreferrer\" } : {};\n\n return (\n <React.Fragment>\n {props.href && (\n <Link\n href={props.href}\n prefetch={false}\n className={linkClass + \" \" + props.className}\n title={props.title}\n target={target}\n {...additionalProps}\n >\n {props.children}\n </Link>\n )}\n {!props.href && (\n <span className={props.className}>\n {props.children}\n </span>\n )}\n </React.Fragment>\n );\n}","import { Constants } from \"../components/controls/edit/InputControlType\";\n\nexport default class OdataBuilder {\n private baseUrl: string;\n private top: string;\n private skip: string;\n private filterBy: string;\n private orderBy: string;\n\n constructor(url: string) {\n this.baseUrl = url;\n this.top = Constants.pagesize.toString();\n this.skip = \"0\";\n this.filterBy = \"\";\n this.orderBy = \"\";\n }\n\n setQuery(odata?: { [key: string]: string }): OdataBuilder {\n if (!odata) return this;\n\n if (odata[\"$skip\"]) this.skip = odata[\"$skip\"];\n if (odata[\"$top\"]) this.top = odata[\"$top\"];\n if (odata[\"$filter\"]) this.filterBy = odata[\"$filter\"];\n if (odata[\"$orderby\"]) this.orderBy = odata[\"$orderby\"];\n\n return this;\n }\n\n getPageNumber(pageSize: number): number {\n const skip = parseInt(this.skip);\n const top = parseInt(this.top);\n\n if (!isNaN(skip) && !isNaN(top)) {\n return skip / pageSize + 1;\n }\n\n return 1;\n }\n\n getNewOrderByUrl(orderBy: string): string {\n let url = `${this.baseUrl}?$skip=0&$top=${this.top}&$count=true`;\n\n if (this.filterBy) {\n url += `&$filter=${encodeURIComponent(this.filterBy)}`;\n }\n\n url += `&$orderby=${encodeURIComponent(orderBy)}`;\n\n return url;\n }\n\n getNewFilterUrl(filterBy: string): string {\n let url = `${this.baseUrl}?$skip=0&$top=${this.top}&$count=true`;\n\n if (filterBy) {\n url += `&$filter=${encodeURIComponent(filterBy)}`;\n }\n\n if (this.orderBy) {\n url += `&$orderby=${encodeURIComponent(this.orderBy)}`;\n }\n\n return url;\n }\n\n getNewPageUrl(page: number): string {\n const skip = page * Constants.pagesize - Constants.pagesize;\n\n let url = `${this.baseUrl}?$skip=${skip}&$top=${this.top}&$count=true`;\n\n if (this.filterBy) {\n url += `&$filter=${encodeURIComponent(this.filterBy)}`;\n }\n\n if (this.orderBy) {\n url += `&$orderby=${encodeURIComponent(this.orderBy)}`;\n }\n\n return url;\n }\n\n getOrderBy(): string {\n return this.orderBy;\n }\n}","import React from 'react';\n\nconst ChevronUpDown: React.FC<IconProps> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\" className={props.className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9\" />\n </svg>\n\n );\n};\nexport default ChevronUpDown;\n","import React from 'react';\n\nconst ChevronDown: React.FC<IconProps> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\" className={props.className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n </svg>\n );\n};\nexport default ChevronDown;\n","import React from 'react';\nconst ChevronUp: React.FC<IconProps> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\" className={props.className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 15.75l7.5-7.5 7.5 7.5\" />\n </svg>\n );\n};\nexport default ChevronUp;\n","import React from 'react';\n\nconst Plus: React.FC<IconProps> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\" className={props.className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>\n );\n};\nexport default Plus;\n","import React from \"react\";\nimport ChevronUpDown from \"./chevron-updown\";\nimport ChevronDown from \"./chevron-down\";\nimport ChevronUp from \"./chevron-up\";\nimport Plus from \"./plus\";\n\ninterface IconMap {\n [key: string]: React.FunctionComponent<IconProps>;\n}\n\nconst Icons: IconMap = {\n chevronUpDown: ChevronUpDown,\n chevronDown: ChevronDown,\n chevronUp:ChevronUp,\n plus:Plus\n};\n\nexport default Icons;","import { FC } from 'react';\nimport Icons from './Icons';\n\n\nconst Icon: FC<IconProps> = ({ name, className, ...props }) => {\n const IconComponent = Icons[name];\n if (!IconComponent) {\n console.error(`Icon \"${name}\" not found.`);\n return null;\n }\n\n return <IconComponent {...props} className={className} />;\n};\n\nexport default Icon;","export const FORM_INPUT_UPDATE = \"FORM_INPUT_UPDATE\";\nexport const FORM_INITIAL_UPDATE = \"FORM_INITIAL_UPDATE\";\n\n\nexport interface FormState<T> {\n inputValues: T;\n lastPropertyChanged: string;\n}\n\ntype FormAction<T> = {\n type: typeof FORM_INPUT_UPDATE | typeof FORM_INITIAL_UPDATE;\n name: keyof T;\n value?: T[keyof T];\n values?: T;\n};\n\nfunction setNestedProperty<T>(obj: T, path: string, value: any): T {\n if (path.includes(\".\")) {\n const keys = path.split(\".\");\n const lastKey = keys.pop() as string;\n\n const newObj: any = { ...obj };\n let current = newObj;\n\n keys.forEach((key) => {\n current[key] = { ...current[key] };\n current = current[key];\n });\n\n current[lastKey] = value;\n return newObj;\n }\n\n return {\n ...obj,\n [path]: value,\n };\n}\n\nfunction FormReducer<T>(\n state: FormState<T>,\n action: FormAction<T>\n): FormState<T> {\n switch (action.type) {\n case FORM_INPUT_UPDATE:\n if (!action.name) return state;\n\n return {\n inputValues: setNestedProperty(\n state.inputValues,\n action.name.toString(),\n action.value\n ),\n lastPropertyChanged: action.name.toString(),\n };\n\n case FORM_INITIAL_UPDATE:\n return {\n inputValues: { ...action.values! },\n lastPropertyChanged: action.name?.toString() || \"\",\n };\n\n\n default:\n return state;\n }\n}\n\nexport default FormReducer;","import React from \"react\";\nimport ParagraphNode from \"./nodes/ParagraphNode\";\nimport HeadingNode from \"./nodes/HeadingNode\";\nimport ListNode from \"./nodes/ListNode\";\nimport QuoteNode from \"./nodes/QuoteNode\";\nimport CodeNode from \"./nodes/CodeNode\";\nimport HorizontalRuleNode from \"./nodes/HorizontalRuleNode\";\nimport LayoutContainerNode from \"./nodes/LayoutContainerNode\";\nimport ImageNode from \"./nodes/ImageNode\";\nimport WidgetNode from \"./nodes/WidgetNode\";\nimport FormContainerNode from \"./nodes/FormContainerNode\";\nimport DivContainer from \"./nodes/DivContainer\";\nimport { PageBodyNode, RootElement } from \"./Types\";\nimport { Session } from \"../types/WebPageValues\";\nimport SVGIconNode from \"./nodes/SVGIconNode\";\nimport EmbedNode from \"./nodes/EmbedNode\";\n\ninterface PageBodyRendererProps {\n rawBody?: string;//RootElement\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl: string,\n breadcrumb?: string,\n donotApplyContainerClass?: boolean\n donotApplyContainerLargeClass?: boolean\n widgetRegistry?: Record<string, React.ComponentType<any>>; // ✅ ADD THIS\n\n}\n\nconst NodeTypes = {\n [\"paragraph\"]: ParagraphNode,\n [\"heading\"]: HeadingNode,\n [\"list\"]: ListNode,\n [\"quote\"]: QuoteNode,\n [\"code\"]: CodeNode,\n [\"image\"]: ImageNode,\n [\"horizontalrule\"]: HorizontalRuleNode,\n [\"layout-container\"]: LayoutContainerNode,\n [\"widget\"]: WidgetNode,\n [\"form-container\"]: FormContainerNode,\n [\"div-container\"]: DivContainer,\n [\"svg-icon\"]: SVGIconNode,\n [\"embed\"]: EmbedNode\n\n};\n\n\nconst PageBodyRenderer: React.FC<PageBodyRendererProps> = (props) => {\n\n\n let pageBodyTree: PageBodyNode | undefined;\n if (props.rawBody != undefined && props.rawBody != null && props.rawBody != \"\") {\n try {\n pageBodyTree = JSON.parse(props.rawBody.toString()) as PageBodyNode;\n }\n catch (error) { }\n }\n\n let rootNode: RootElement | undefined;\n if (pageBodyTree && pageBodyTree.root) {\n rootNode = pageBodyTree.root\n }\n\n return (\n\n <React.Fragment>\n {rootNode && rootNode?.children?.map((node: any, index: number) => {\n {/* @ts-ignore */ }\n const SelectedNode = NodeTypes[node.type];\n\n return (\n <React.Fragment key={index}>\n {SelectedNode && <React.Fragment>\n\n {node.type == \"layout-container\"\n\n ? <React.Fragment>\n {/* @ts-ignore */}\n <SelectedNode node={node} firstNode={true}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n widgetRegistry={props.widgetRegistry} // ✅ ADD\n\n />\n </React.Fragment>\n :\n <React.Fragment>\n {/* @ts-ignore */}\n <SelectedNode node={node}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n widgetRegistry={props.widgetRegistry} // ✅ ADD\n\n />\n </React.Fragment>}\n\n </React.Fragment>\n }\n </React.Fragment>\n )\n })\n }\n </React.Fragment>\n )\n}\n\nexport default PageBodyRenderer\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent, JSX } from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport LinkNode from \"./LinkNode\";\nimport { ParagraphElement, TextElement, LinkElement } from \"../Types\";\nimport SVGIconNode from \"./SVGIconNode\";\nimport EquationNode from \"./EquationNode\";\nimport { Session } from \"../../types/WebPageValues\";\nimport DatafieldNode from \"./DatafieldNode\";\n\nconst ParagraphNode = (props: {\n node: ParagraphElement\n dataitem: any;\n session: Session;\n apiBaseUrl: string;\n routeParameters?: { [key: string]: any };\n parentTag?: keyof JSX.IntrinsicElements;\n}) => {\n const NodeTypes = {\n [\"text\"]: TextNode,\n [\"linebreak\"]: LineBreakNode,\n [\"link\"]: LinkNode,\n [\"datafield\"]: DatafieldNode,\n [\"equation\"]: EquationNode,\n [\"svg-icon\"]: SVGIconNode\n };\n\n\n const FormatClass = {\n \"center\": \"text-center\",\n \"right\": \"text-right\",\n };\n {/* @ts-ignore */ }\n let formatClasses = FormatClass[props.node.format] || \"\";\n const isInlineOnlyParent = props.parentTag === \"summary\";\n const hasChildren = props.node.children && props.node.children.length > 0;\n\n // 🚫 summary must NOT contain block elements\n if (isInlineOnlyParent) {\n return (\n <>\n {hasChildren &&\n props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode\n node={node}\n dataitem={props.dataitem}\n // @ts-ignore\n session={props.session}\n apiBaseUrl={props.apiBaseUrl}\n routeParameters={props.routeParameters}\n />\n )}\n </React.Fragment>\n );\n })}\n </>\n );\n }\n\n // ✅ Normal paragraph rendering\n return (\n <div className={\" \" + formatClasses}>\n {hasChildren &&\n props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode\n node={node}\n dataitem={props.dataitem}\n // @ts-ignore\n session={props.session}\n apiBaseUrl={props.apiBaseUrl}\n routeParameters={props.routeParameters}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* ✅ spacing fallback only in block context */}\n {!hasChildren && (\n <div className=\"py-1.5 lg:py-2\"></div>\n )}\n </div>\n );\n}\n\nexport default ParagraphNode;\n","import { TextElement } from \"../Types\";\n\nconst TextNode = (props: { node: TextElement, dataitem: any, linkText?: string | null, routeParameters?: { [key: string]: any } }) => {\n const NodeTypes = {\n [\"text\"]: TextNode\n\n };\n\n\n function cssStringToJson(cssString: string) {\n\n\n\n const styleObject: Record<string, string> = {};\n\n // Extract all property-value pairs from the CSS string\n const matches = cssString?.match(/([\\w-]+)\\s*:\\s*([^;]+)\\s*;/g);\n\n if (matches) {\n matches.forEach((match) => {\n const parts = match.match(/([\\w-]+)\\s*:\\s*([^;]+)\\s*;/);\n if (parts && parts.length === 3) {\n const property = parts[1].trim();\n const value = parts[2].trim();\n styleObject[property] = value;\n }\n });\n }\n\n return styleObject;\n }\n\n function toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n }\n function convertKeysToCamelCase(obj: any): any {\n if (Array.isArray(obj)) {\n return obj.map(convertKeysToCamelCase);\n } else if (obj !== null && typeof obj === 'object') {\n return Object.fromEntries(\n Object.entries(obj)\n .filter(([_, value]) => value !== \"\") // Exclude empty string values\n .map(([key, value]) => [\n toCamelCase(key),\n convertKeysToCamelCase(value)\n ])\n );\n }\n return obj;\n }\n\n\n\n function getFormatClass(format: number): string {\n const classes: string[] = [];\n\n if (format === 1) classes.push(\"font-medium\"); // BOLD\n if (format === 2) classes.push(\"italic\"); // ITALIC\n if (format === 3) classes.push(\"font-medium italic\"); // BOLD ITALIC\n if (format === 8) classes.push(\"underline\"); // UNDERLINE\n if (format === 9) classes.push(\"font-medium underline\"); // BOLD UNDERLINE\n if (format === 10) classes.push(\"italic underline\"); // ITALIC UNDERLINE\n if (format === 11) classes.push(\"font-medium italic underline\"); // BOLD ITALIC UNDERLINE\n if (format === 256) classes.push(\"lowercase\"); // LOWERCASE\n if (format === 512) classes.push(\"uppercase\"); // UPPERCASE\n if (format === 1024) classes.push(\"capitalize\"); // CAPITALIZE\n\n return classes.join(\" \");\n }\n const styles = convertKeysToCamelCase(cssStringToJson(props.node.style));\n\n\n function replacePlaceholders(template: any, dataItem: any) {\n return template.replace(/{(\\w+)}/g, (_: any, key: any) => {\n return key in dataItem ? dataItem[key] : `{${key}}`; // keep as-is if not found\n });\n }\n\n // 🔹 Determine text to display\n const displayText =\n props.linkText\n ? props.linkText\n : props.node.text;\n\n return (\n <span style={{ ...styles }} className={getFormatClass(props.node.format)}>\n {props.dataitem && props.linkText ? displayText : props.dataitem ? replacePlaceholders(props.node.text, props.dataitem) : props.node.text}\n </span>\n )\n}\n\nexport default TextNode;\n","import { LineBreakElement } from \"../Types\";\nconst LineBreakNode = (props: { node: LineBreakElement }) => {\n return (\n <div className=\"py-0.5 lg:py-1.5\"></div>\n )\n}\n\nexport default LineBreakNode;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport { LinkElement } from \"../Types\";\nimport Link from \"next/link\";\n\n// React.FC<ButtonProps<any>>\nconst LinkNode = (props: { node: LinkElement }) => {\n const NodeTypes = {\n [\"text\"]: TextNode\n };\n\n\n\n\n {/* @ts-ignore */ }\n let formatClasses = props.node.cssClass || \"\";\n\n return (\n <Link className={formatClasses} href={props.node.url} title={props.node.title}>\n {\n props.node.children && props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && <SelectedNode node={node} />}\n </React.Fragment>\n )\n })\n }\n {props.node.children.length == 0 && <br></br>\n\n }\n </Link>\n )\n}\n\nexport default LinkNode;\n","import React from \"react\";\n\ninterface SVGIconNodeProps {\n node: {\n svgCode: string;\n width?: number;\n height?: number;\n color?: string;\n };\n}\n\nconst SVGIconNode: React.FC<SVGIconNodeProps> = ({ node }) => {\n if (!node?.svgCode) return null;\n\n return (\n <span\n style={{\n display: \"inline-flex\",\n width: node.width,\n height: node.height,\n color: node.color\n }}\n dangerouslySetInnerHTML={{ __html: node.svgCode }}\n />\n );\n};\n\nexport default SVGIconNode;\n","// pageRenderingEngine/nodes/EquationNode.tsx\n\nimport React from \"react\";\nimport katex from \"katex\";\n// import \"katex/dist/katex.css\";\n\ninterface EquationNodeProps {\n node: {\n type: \"equation\";\n equation: string;\n inline: boolean;\n version: number;\n };\n}\n\nconst EquationNode: React.FC<EquationNodeProps> = ({ node }) => {\n const { equation, inline } = node;\n\n let html = \"\";\n\n try {\n html = katex.renderToString(equation, {\n displayMode: !inline,\n throwOnError: false,\n });\n } catch (error) {\n // Fallback: render raw text if KaTeX fails\n // html = equation;\n html = katex.renderToString(`\\\\text{Invalid equation}`, {\n throwOnError: false,\n });\n }\n\n if (inline) {\n return (\n <span\n className=\"katex-inline\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n }\n\n return (\n <div\n className=\"katex-block my-3 text-center\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n};\n\nexport default EquationNode;\n","import PageBodyRenderer from \"../PageBodyRenderer\";\nimport { Session } from \"../../types/WebPageValues\";\nimport { TextElement } from \"../Types\";\nimport ViewControl from \"../../controls/view/ViewControl\";\n\nfunction getNestedProperty<T>(obj: T, path: string): any {\n if (!obj || !path) return null;\n\n if (path.includes(\".\")) {\n return path\n .split(\".\")\n .reduce((prev: any, curr: string) => (prev ? prev[curr] : null), obj);\n } else if (Array.isArray(obj[path as keyof T])) {\n return (obj[path as keyof T] as string[]).map((item, index) => (\n <div key={index}>{item}</div>\n ));\n } else {\n return obj[path as keyof T];\n }\n}\n\nconst DatafieldNode = (props: {\n node: TextElement;\n dataitem: any;\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string };\n session: Session;\n host: string;\n path: string;\n apiBaseUrl: string;\n breadcrumb?: string;\n}) => {\n // Convert CSS string → JSON\n function cssStringToJson(cssString: string) {\n const styleObject: Record<string, string> = {};\n const matches = cssString?.match(/([\\w-]+)\\s*:\\s*([^;]+)\\s*;/g);\n\n if (matches) {\n matches.forEach((match) => {\n const parts = match.match(/([\\w-]+)\\s*:\\s*([^;]+)\\s*;/);\n if (parts && parts.length === 3) {\n const property = parts[1].trim();\n const value = parts[2].trim();\n styleObject[property] = value;\n }\n });\n }\n return styleObject;\n }\n\n // kebab-case → camelCase\n function toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n }\n\n function convertKeysToCamelCase(obj: any): any {\n if (!obj || typeof obj !== \"object\") return obj;\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [toCamelCase(key), value])\n );\n }\n\n const Formats = [\n \"\",\n \"font-medium\",\n \"italic\",\n \"font-medium italic\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"underline\",\n \"font-medium underline\",\n \"italic underline\",\n \"italic underline font-medium\",\n ];\n\n // Convert incoming styles\n const styles = convertKeysToCamelCase(cssStringToJson(props.node.style));\n // @ts-ignore\n const fieldName = props.node.fieldName;\n\n // ✅ use getNestedProperty here\n const value = props.dataitem ? getNestedProperty(props.dataitem, fieldName) : null;\n console.log(fieldName, value, \"haha\");\n\n // ✅ Check if value is empty/null/undefined\n const isEmptyValue = value === null || value === undefined || value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n // ✅ handle maxLines\n const maxLines = (props.node as any).maxLines;\n if (maxLines && Number(maxLines) > 0) {\n Object.assign(styles, {\n display: \"-webkit-box\",\n overflow: \"hidden\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: String(maxLines),\n });\n }\n\n // ✅ handle dataType\n const dataType = (props.node as any).dataType;\n\n // If value is empty, return nothing\n if (isEmptyValue) {\n return null;\n }\n\n\n if (dataType == \"rawContent\") {\n return (\n <PageBodyRenderer\n rawBody={value ?? `@databound[${fieldName}]`}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n breadcrumb={props.breadcrumb}\n donotApplyContainerClass={true}\n />\n );\n }\n\n return (\n <span\n className={`datafield-node ${props.node.format < Formats.length ? Formats[props.node.format] : \"\"\n }`}\n style={styles}\n >\n <ViewControl\n controlType={dataType}\n value={value ?? `@databound[${fieldName}]`}\n />\n </span>\n );\n};\n\nexport default DatafieldNode;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport TextNode from \"./TextNode\";\nimport LinkNode from \"./LinkNode\";\nimport { ParagraphElement, TextElement, LinkElement } from \"../Types\";\nimport DatafieldNode from \"./DatafieldNode\";\nimport { Session } from \"../../types/WebPageValues\";\nimport SVGIconNode from \"./SVGIconNode\";\n\n// React.FC<ButtonProps<any>>\nconst HeadingNode = (props: {\n node: ParagraphElement, dataitem: any, session: Session, apiBaseUrl: string, routeParameters?: { [key: string]: any };\n}) => {\n const NodeTypes = {\n [\"text\"]: TextNode,\n [\"link\"]: LinkNode,\n [\"svg-icon\"]: SVGIconNode,\n // [\"linebreak\"]: LineBreakNodeNew,\n [\"datafield\"]: DatafieldNode,\n };\n const HeadingTag = `${props.node.tag}`;\n const FormatClass = {\n \"center\": \"text-center\"\n };\n {/* @ts-ignore */ }\n let formatClasses = FormatClass[props.node.format] || \"\";\n\n return (\n <>\n {React.createElement(\n HeadingTag,\n { className: formatClasses },\n props.node.children &&\n props.node.children.map((childNode, index) => {\n const SelectedNode = NodeTypes[childNode.type];\n return (\n <React.Fragment key={index}>\n {/* @ts-ignore */}\n {SelectedNode && <SelectedNode node={childNode} dataitem={props.dataitem} session={props.session} apiBaseUrl={props.apiBaseUrl} routeParameters={props.routeParameters} />}\n </React.Fragment>\n );\n })\n )}\n </>\n )\n}\n\nexport default HeadingNode;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport ListItemNode from \"./ListItemNode\";\nimport { ListElement } from \"../Types\";\n\n// React.FC<ButtonProps<any>>\nconst ListNode = (props: { node: ListElement, dataitem: any, routeParameters?: { [key: string]: any } }) => {\n const NodeTypes = {\n listitem: ListItemNode,\n };\n\n return (\n <React.Fragment>\n {props.node.listType == \"bullet\" && <ul>\n {\n props.node.children && props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && <SelectedNode node={node} dataitem={props.dataitem} routeParameters={props.routeParameters} />}\n </React.Fragment>\n )\n })\n }\n </ul>}\n\n {props.node.listType == \"number\" && <ol>\n {\n props.node.children && props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && <SelectedNode node={node} dataitem={props.dataitem} routeParameters={props.routeParameters} />}\n </React.Fragment>\n )\n })\n }\n </ol>}\n </React.Fragment>\n )\n}\n\nexport default ListNode;\n","import React from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport LinkNode from \"./LinkNode\";\nimport ListNode from \"./ListNode\";\nimport { ListItemElement } from \"../Types\";\n\nconst ListItemNode = (props: { node: ListItemElement, dataitem: any, routeParameters?: { [key: string]: any } }) => {\n const NodeTypes: Record<string, any> = {\n text: TextNode,\n linebreak: LineBreakNode,\n link: LinkNode,\n list: ListNode,\n };\n\n let foundFirstBreak = false;\n\n\n // 🔎 Extract font-size from the first text child (if exists)\n const firstTextChild = props.node.children?.find((c) => c.type === \"text\");\n let liStyle: React.CSSProperties = {};\n\n if (firstTextChild?.style) {\n const match = firstTextChild.style.match(/font-size\\s*:\\s*([^;]+);?/);\n if (match) {\n liStyle.fontSize = match[1].trim(); // e.g. \"var(--text-6xl)\"\n }\n }\n\n return (\n <li style={liStyle}>\n {props.node.children &&\n props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n // @ts-ignore\n if (node.type === \"linebreak\") {\n if (!foundFirstBreak) {\n // First <br> = inline break (like CMS)\n foundFirstBreak = true;\n return <div key={index} />;\n } else {\n // Second+ <br> = empty block (mimics extra spacing)\n return <div key={index} className='py-1 lg:py-2' />;\n }\n } else {\n foundFirstBreak = false; // reset when normal node comes\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode node={node} dataitem={props.dataitem} routeParameters={props.routeParameters} />\n )}\n </React.Fragment>\n );\n }\n })\n }\n </li>\n );\n};\n\nexport default ListItemNode;\n\n\n\n\n","import React from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport LinkNode from \"./LinkNode\";\nimport { QuoteElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\n\n// React.FC<ButtonProps<any>>\nconst QuoteNode = (props: {\n node: QuoteElement, session: Session, apiBaseUrl: string, routeParameters?: { [key: string]: any };\n}) => {\n const NodeTypes = {\n [\"text\"]: TextNode,\n [\"linebreak\"]: LineBreakNode,\n [\"link\"]: LinkNode\n };\n\n return (\n <blockquote>\n {\n props.node.children && props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {/* @ts-ignore */}\n {SelectedNode && <SelectedNode node={node} session={props.session} apiBaseUrl={props.apiBaseUrl} routeParameters={props.routeParameters} />}\n </React.Fragment>\n )\n })\n }\n </blockquote>\n )\n}\n\nexport default QuoteNode;\n","'use client'\nimport React from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport LinkNode from \"./LinkNode\";\nimport { CodeElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\nimport CopyButton from \"../../CopyButton\";\n\nconst CodeNode = (props: { node: CodeElement, session: Session, apiBaseUrl: string, routeParameters?: { [key: string]: any }; }) => {\n const NodeTypes: Record<string, React.FC<any>> = {\n [\"text\"]: TextNode,\n [\"linebreak\"]: LineBreakNode,\n [\"link\"]: LinkNode,\n };\n\n // Extract plain text for copy button\n const textContent =\n props.node?.children\n ?.map((node: any) => {\n if (node.type === \"text\") return node.text || \"\";\n if (node.type === \"linebreak\") return \"\\n\";\n if (node.type === \"link\") return node.text || node.url || \"\";\n return \"\";\n })\n .join(\"\") ?? \"\";\n\n return (\n <div className=\"code-block\">\n <div className=\"flex items-center relative text-gray-200 bg-gray-800 px-4 py-2.5 text-xs font-sans justify-between rounded-t-md\">\n <span>Code Snippet</span>\n {/* client component only handles copy */}\n <CopyButton text={textContent} />\n </div>\n <code className=\"block bg-gray-900 text-gray-100 p-4 rounded-b-md text-sm whitespace-pre-wrap\">\n {props.node.children &&\n props.node.children.map((node: any, index: number) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {/* @ts-ignore */}\n {SelectedNode && <SelectedNode node={node} session={props.session} apiBaseUrl={props.apiBaseUrl} routeParameters={props.routeParameters} />}\n </React.Fragment>\n );\n })}\n </code>\n </div>\n );\n};\n\nexport default CodeNode;\n","\"use client\";\nimport { useState, useRef, useEffect } from \"react\";\n\nexport default function CopyButton({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy: \", err);\n }\n };\n\n return (\n <button\n onClick={handleCopy}\n className=\"flex gap-1 items-center hover:text-white transition\"\n >\n {/* ✅ Inline SVG */}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n className=\"w-4 h-4\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 4C10.8954 4 10 4.89543 10 6H14C14 4.89543 13.1046 4 12 4ZM8.53513 4C9.22675 2.8044 10.5194 2 12 2C13.4806 2 14.7733 2.8044 15.4649 4H17C18.6569 4 20 5.34315 20 7V19C20 20.6569 18.6569 22 17 22H7C5.34315 22 4 20.6569 4 19V7C4 5.34315 5.34315 4 7 4H8.53513ZM8 6H7C6.44772 6 6 6.44772 6 7V19C6 19.5523 6.44772 20 7 20H17C17.5523 20 18 19.5523 18 19V7C18 6.44772 17.5523 6 17 6H16C16 7.10457 15.1046 8 14 8H10C8.89543 8 8 7.10457 8 6Z\"\n />\n </svg>\n\n {copied ? \"Copied!\" : \"Copy code\"}\n </button>\n );\n}","import React from \"react\";\nimport { HorizontalRuleElement } from \"../Types\";\n\n// React.FC<ButtonProps<any>>\nconst HorizontalRuleNode = (props: { node: HorizontalRuleElement }) => {\n return (\n <hr></hr>\n )\n}\n\nexport default HorizontalRuleNode;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport TextNode from \"./TextNode\";\nimport ParagraphNode from \"./ParagraphNode\";\nimport HeadingNode from \"./HeadingNode\";\nimport ListNode from \"./ListNode\";\nimport QuoteNode from \"./QuoteNode\";\nimport CodeNode from \"./CodeNode\";\nimport HorizontalRuleNode from \"./HorizontalRuleNode\";\nimport ImageNode from \"./ImageNode\";\nimport LayoutContainerNode from \"./LayoutContainerNode\";\nimport LinkNode from \"./LinkNode\";\nimport WidgetNode from \"./WidgetNode\";\nimport EmbedNode from \"./EmbedNode\";\nimport { LayoutItemElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\nimport VideoNode from \"./VideoNode\";\n// React.FC<ButtonProps<any>>\nconst LayoutItemNode = (props: {\n node: LayoutItemElement, order?: number, routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl?: string\n},) => {\n const NodeTypes = {\n [\"paragraph\"]: ParagraphNode,\n [\"heading\"]: HeadingNode,\n [\"list\"]: ListNode,\n [\"quote\"]: QuoteNode,\n [\"code\"]: CodeNode,\n [\"horizontalrule\"]: HorizontalRuleNode,\n [\"image\"]: ImageNode,\n [\"layout-container\"]: LayoutContainerNode,\n [\"link\"]: LinkNode,\n [\"widget\"]: WidgetNode,\n [\"youtube\"]: VideoNode,\n [\"video\"]: VideoNode,\n [\"embed\"]: EmbedNode,\n\n };\n\n //shadow\n //borderWidth\n //borderRadius\n let cssClasses = \"\";\n\n if (props.order) {\n cssClasses = \"order-\" + props.order + \" lg:order-1\";\n }\n\n\n if (props.node.itemBoxShadow) {\n {/* @ts-ignore */ }\n cssClasses = cssClasses + \" \" + (props.node.itemBoxShadow || \"\")\n }\n const styles: { borderWidth?: string; borderRadius?: string; overflow?: string } = {};\n if (props.node.itemBorderWidth) {\n styles.borderWidth = props.node.itemBorderWidth;\n cssClasses = cssClasses + \" px-4 py-2\"\n }\n if (props.node.itemBorderRadius) {\n styles.borderRadius = props.node.itemBorderRadius;\n styles.overflow = \"hidden\";\n }\n\n\n function removeParagraphsAtStartAndEnd(layoutItem: LayoutItemElement): LayoutItemElement {\n // Find the index of the first non-paragraph child\n let startIndex = 0;\n {/* @ts-ignore */ }\n while (startIndex < layoutItem.children.length && layoutItem.children[startIndex].type === \"paragraph\" && layoutItem.children[startIndex].children.filter(x => x.type == \"linebreak\").length == layoutItem.children[startIndex].children.length\n ) {\n startIndex++;\n }\n\n // Find the index of the last non-paragraph child\n let endIndex = layoutItem.children.length - 1;\n {/* @ts-ignore */ }\n while (endIndex >= 0 && layoutItem.children[endIndex].type === \"paragraph\" && layoutItem.children[endIndex].children.filter(x => x.type == \"linebreak\").length == layoutItem.children[endIndex].children.length) {\n endIndex--;\n }\n\n // If there are paragraphs only at the start or at the end, remove them\n if (startIndex <= endIndex) {\n layoutItem.children = layoutItem.children.slice(startIndex, endIndex + 1);\n } else {\n layoutItem.children = [];\n }\n\n return layoutItem;\n }\n\n let updatedLayout = props.node;\n\n if (props.node.itemBoxShadow || props.node.itemBorderWidth) {\n updatedLayout = props.node;\n }\n else {\n updatedLayout = removeParagraphsAtStartAndEnd(props.node);\n }\n\n\n\n return (\n <React.Fragment>\n {<div className={\"layout-item \" + cssClasses} style={{ ...styles }}>\n {\n updatedLayout.children.map((node, index) => {\n {/* @ts-ignore */ }\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {/* @ts-ignore */}\n {SelectedNode && <SelectedNode node={node}\n\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n\n />}\n </React.Fragment>\n )\n })\n }\n </div>}\n </React.Fragment>\n )\n}\n\nexport default LayoutItemNode;\n","import React from \"react\";\nimport { ImageElement } from \"../Types\";\n\nconst ImageNode = (props: {\n node: ImageElement;\n apiBaseUrl?: string;\n}) => {\n\n const { node, apiBaseUrl = \"\" } = props;\n\n let imageUrl = node.imageUrl.startsWith(\"http\")\n ? node.imageUrl\n : `${apiBaseUrl}/digitalassets/storefront/${node.imageUrl}`;\n\n return (\n <React.Fragment>\n {node.width ? (\n <div style={{ width: node.width }}>\n <img\n loading=\"lazy\"\n className=\"object-cover\"\n src={imageUrl}\n width={node.intrinsicWidth}\n height={node.intrinsicHeight}\n alt={node.title}\n />\n </div>\n ) : (\n <img\n loading=\"lazy\"\n className=\"object-cover\"\n src={imageUrl}\n width={node.intrinsicWidth}\n height={node.intrinsicHeight}\n alt={node.title}\n />\n )}\n </React.Fragment>\n );\n};\n\nexport default ImageNode;","import React, { Suspense } from \"react\";\nimport { WidgetElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\n// import WidgetRenderer from \"@/core/widgets/WidgetRenderer\";\nconst WidgetNode = (props:\n {\n node: WidgetElement,\n widgetRegistry?: Record<string, React.ComponentType<any>>;\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl: string,\n }) => {\n\n const getWidgetParameters = (): { [key: string]: any } => {\n const widgetInputParameters: { [key: string]: any } = { ...(props.routeParameters ?? {}) };\n // @ts-ignore\n const rawWidgetParams = props.node?.widgetParameters ?? props.node?.widgetParams;\n let widgetParameters: { [key: string]: any } = {};\n\n\n const isJSON = (str: string) => {\n if (typeof str !== \"string\") return false;\n str = str.trim();\n return (str.startsWith(\"{\") && str.endsWith(\"}\")) || (str.startsWith(\"[\") && str.endsWith(\"]\"));\n };\n\n if (rawWidgetParams) {\n if (typeof rawWidgetParams === \"string\" && isJSON(rawWidgetParams)) {\n widgetParameters = JSON.parse(rawWidgetParams);\n } else if (typeof rawWidgetParams === \"object\") {\n widgetParameters = rawWidgetParams;\n }\n }\n\n const resolveValue = (val: any): any => {\n if (typeof val === \"string\") {\n const m = /^\\{(.+)\\}$/.exec(val);\n if (m) {\n const actualKey = m[1];\n\n return props.routeParameters?.[actualKey] ?? val;\n }\n return val;\n } else if (Array.isArray(val)) {\n return val.map(resolveValue);\n } else if (val && typeof val === \"object\") {\n const out: { [k: string]: any } = {};\n for (const k of Object.keys(val)) {\n out[k] = resolveValue(val[k]);\n }\n return out;\n }\n return val;\n };\n\n Object.keys(widgetParameters).forEach((key) => {\n const rawVal = widgetParameters[key];\n\n if (rawVal === \"route\") {\n if (key === \"itemPath\") {\n widgetInputParameters[key] = props.path;\n } else {\n widgetInputParameters[key] = widgetInputParameters[key] ?? null;\n }\n } else {\n widgetInputParameters[key] = resolveValue(rawVal);\n }\n });\n\n widgetInputParameters[\"widgetTitle\"] = props.node?.widgetTitle;\n return widgetInputParameters;\n };\n\n\n const SelectedWidget = props.widgetRegistry?.[props.node.widgetCode];\n\n if (!SelectedWidget) {\n console.warn(\"Widget not found:\", props.node.widgetCode);\n return <>Widget not found: {props.node.widgetCode}</>;\n }\n\n return (\n <Suspense fallback={<div className=\"container mt-2\">...</div>}>\n <SelectedWidget\n params={getWidgetParameters()}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n />\n </Suspense>\n );\n}\n\nexport default WidgetNode;\n\n","\"use client\";\n\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport IFrameLoaderView from \"../../IFrameLoaderView\";\n\nconst IframeClient = ({ src }: { src: string }) => {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [iframeHeight, setIframeHeight] = useState('100%');\n const [isDataFound, setIsDataFound] = useState<boolean | null>(null);\n\n useEffect(() => {\n const handleReceiveMessage = (event: MessageEvent) => {\n const eventName = event?.data?.eventName;\n const payload = event?.data?.payload;\n\n if (eventName === 'SET_HEIGHT' && payload?.height) {\n let height = 500;\n if (payload.height > 500) {\n height = payload.height + 50;\n }\n setIframeHeight(`${height}px`);\n }\n };\n\n window.addEventListener('message', handleReceiveMessage);\n return () => window.removeEventListener('message', handleReceiveMessage);\n }, []);\n\n useEffect(() => {\n const handleResize = () => {\n if (iframeRef.current) {\n iframeRef.current.contentWindow?.postMessage({ eventName: 'RESIZE' }, '*');\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n // Function to handle iframe load event\n const handleIframeLoad = () => {\n setIsDataFound(true);\n };\n\n return (\n <React.Fragment>\n\n <IFrameLoaderView isDataFound={isDataFound}>\n <iframe\n ref={iframeRef}\n src={src}\n className=\"w-full h-full border-none\"\n scrolling=\"no\"\n // style={{ height: iframeHeight }}\n onLoad={handleIframeLoad} // Add onLoad event\n />\n </IFrameLoaderView>\n\n </React.Fragment >\n\n );\n};\n\nexport default IframeClient;\n","import React from \"react\";\n\nconst IFrameLoaderView = (props: { children: React.ReactNode, isDataFound: boolean | null }) => {\n return (\n <React.Fragment>\n\n {props.isDataFound == null && <div className=\"\">\n <div className=\"mt-4 bg-gray-200 rounded-md p-4 animate-pulse\">\n <div className=\"flex items-center mb-4\">\n <div className=\"bg-gray-300 h-8 w-8 rounded-full animate-pulse\"></div>\n <div className=\"ml-2\">\n <div className=\"bg-gray-300 h-3 w-16 animate-pulse\"></div>\n <div className=\"bg-gray-300 h-2 w-12 animate-pulse\"></div>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4 mt-6\">\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n </div>\n </div>\n </div>}\n {props.children}\n </React.Fragment>\n )\n}\n\nexport default IFrameLoaderView;","// components/EmbedNode.tsx\nimport { EmbedElement } from \"../Types\";\nimport IframeClient from \"./IframeClient\";\n\nconst EmbedNode = (props: { node: EmbedElement }) => {\n let src;\n if (props.node.provider == \"youtube\") {\n src = `https://www.youtube-nocookie.com/embed/${props.node.embedSrc}`;\n } else if (props.node.provider == \"bunny\") {\n src = `https://iframe.mediadelivery.net/embed/${props.node.embedSrc}?autoplay=false&loop=false&muted=false&preload=true&responsive=true`;\n } else {\n src = props.node.embedSrc;\n }\n\n return (\n <div className=\"aspect-video\">\n {src && <IframeClient src={src} />}\n </div>\n );\n};\n\nexport default EmbedNode;\n","\nimport React from \"react\";\nimport { VideoElement } from \"../Types\";\nconst VideoNode = (props: { node: VideoElement }) => {\n\n let src;\n if (props.node.provider == \"youtube\") {\n src = `https://www.youtube-nocookie.com/embed/${props.node.videoId}`\n }\n else if (props.node.provider == \"bunny\") {\n src = `https://iframe.mediadelivery.net/embed/${props.node.videoId}?autoplay=false&loop=false&muted=false&preload=true&responsive=true`\n }\n\n return (\n <React.Fragment>\n {src && <iframe className=\"w-full aspect-video rounded\" src={src} loading=\"lazy\" allow=\"accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture;\" allowFullScreen></iframe>}\n </React.Fragment>\n )\n}\n\nexport default VideoNode;\n","class AssetUtility {\n constructor() { }\n\n\n static resolveUrl(apiBaseUrl?: string, url?: string): string | undefined {\n if (!url) return undefined;\n\n if (url.startsWith(\"http\")) return url;\n\n if (!apiBaseUrl) return url; // fallback instead of breaking\n\n return `${apiBaseUrl}/digitalassets-management/${url}`;\n }\n}\n\n\n\nexport default AssetUtility;\n\n","import React from \"react\";\nimport LayoutItemNode from \"./LayoutItemNode\";\nimport AssetUtility from \"../../utilities/AssetUtility\"; // adjust path\nimport { LayoutContainerElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\n\nconst LayoutContainerNode = (props: {\n node: LayoutContainerElement;\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string };\n session: Session;\n host: string;\n path: string;\n apiBaseUrl?: string;\n}) => {\n\n const VERTICAL_ALIGNMENT_CLASSES = {\n start: \"items-start\",\n center: \"items-center place-content-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n };\n\n const LAYOUTGRID_COLS_CLASSES: Record<string, string> = {\n \"1fr\": \"layout-grid-col-1\",\n \"1fr 1fr\": \"layout-grid-col-2-equal\",\n \"1fr 2fr\": \"layout-grid-col-2-widths-33-67\",\n \"2fr 1fr\": \"layout-grid-col-2-widths-67-33\",\n \"3fr 2fr\": \"layout-grid-col-2-widths-60-40\",\n \"3fr 1fr\": \"layout-grid-col-2-widths-75-25\",\n \"1fr 1fr 1fr\": \"layout-grid-col-3-equal\",\n \"1fr 2fr 1fr\": \"layout-grid-col-3-widths-25-50-25\",\n \"1fr 6fr 1fr\": \"layout-grid-col-3-widths-15-70-15\",\n \"1fr 1fr 1fr 1fr\": \"layout-grid-col-4-equal\",\n };\n\n const sectionWidth = props.node.sectionWidth || \"fixed\";\n\n let gridCssClasses =\n LAYOUTGRID_COLS_CLASSES[props.node.templateColumns] || \"\";\n\n if (props.node.contentVerticalAlignment) {\n gridCssClasses +=\n \" \" +\n (VERTICAL_ALIGNMENT_CLASSES[\n props.node.contentVerticalAlignment as keyof typeof VERTICAL_ALIGNMENT_CLASSES\n ] || \"\");\n }\n\n const columnGap = props.node.columnGap || \"0.5rem\";\n\n const styles: React.CSSProperties = {};\n let cssClasses = \"layout_grid\";\n let addPadding = false;\n\n if (props.node.backgroundColor) {\n styles.backgroundColor = props.node.backgroundColor;\n }\n\n if (props.node.borderWidth) {\n styles.borderWidth = props.node.borderWidth;\n addPadding = true;\n }\n\n if (props.node.borderRadius) {\n styles.borderRadius = props.node.borderRadius;\n }\n\n if (props.node.boxShadow && props.node.boxShadow !== \"shadow-none\") {\n cssClasses += \" \" + props.node.boxShadow;\n addPadding = true;\n }\n\n // 🔥 Background handling (clean)\n const backgroundLayers: string[] = [];\n\n if (props.node.backgroundImage) {\n const resolved = AssetUtility.resolveUrl(\n props.apiBaseUrl,\n props.node.backgroundImage\n );\n if (resolved) {\n backgroundLayers.push(`url('${resolved}')`);\n addPadding = true;\n }\n }\n\n if (props.node.gradientColor1 && props.node.gradientColor2) {\n backgroundLayers.push(\n `linear-gradient(to bottom, ${props.node.gradientColor1}, ${props.node.gradientColor2})`\n );\n addPadding = true;\n } else if (props.node.gradientColor1) {\n backgroundLayers.push(props.node.gradientColor1);\n addPadding = true;\n } else if (props.node.gradientColor2) {\n backgroundLayers.push(props.node.gradientColor2);\n addPadding = true;\n }\n\n if (backgroundLayers.length) {\n styles.background = backgroundLayers.join(\", \");\n }\n\n const renderChildren = () =>\n props.node.children?.map((node, index) => (\n <LayoutItemNode\n key={index}\n node={node}\n order={\n props.node.smOrder === \"reverse\"\n ? props.node.children.length - index\n : index\n }\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n />\n ));\n\n return (\n <>\n {sectionWidth === \"mixed\" && (\n <div className={cssClasses} style={styles}>\n <div className=\"container\">\n <div\n className={`grid gap-y-4 lg:gap-y-0 ${gridCssClasses} ${addPadding ? \"py-8 lg:py-6\" : \"\"\n }`}\n style={{ columnGap, minHeight: props.node.height }}\n >\n {renderChildren()}\n </div>\n </div>\n </div>\n )}\n\n {sectionWidth === \"full\" && (\n <div\n className={`grid gap-y-4 lg:gap-y-0 ${cssClasses} ${gridCssClasses} ${addPadding ? \"p-8 lg:p-0\" : \"\"\n }`}\n style={{ columnGap, ...styles }}\n >\n {renderChildren()}\n </div>\n )}\n\n {sectionWidth === \"fixed\" && (\n <div className=\"container\">\n <div\n className={`grid gap-y-4 lg:gap-y-0 ${cssClasses} ${gridCssClasses} ${addPadding ? \"px-8 py-6 lg:px-6 lg:py-6\" : \"\"\n }`}\n style={{ columnGap, ...styles }}\n >\n {renderChildren()}\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default LayoutContainerNode;","'use client'\nimport React, { useRef, ChangeEventHandler, ChangeEvent, WheelEvent, useReducer, useCallback, useEffect } from \"react\";\nimport InputControlNode from \"./InputControlNode\";\nimport FormReducer, { FORM_INITIAL_UPDATE, FORM_INPUT_UPDATE, FormState } from \"../../../FormReducer\";\nimport { InputChangeCallback } from \"../../controls/InputChangeCallback\";\nimport { FormContainerElement, InputControlElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\nconst FormContainerNode = (props: {\n\n node: FormContainerElement,\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl: string,\n fetchData?: (api: string, params?: any) => Promise<any>;\n}) => {\n const NodeTypes = {\n [\"input-control\"]: InputControlNode,\n };\n const { node } = props;\n\n\n const formRef = useRef<HTMLFormElement>(null);\n const initialState: FormState<any> = {\n inputValues: {\n },\n lastPropertyChanged: \"\"\n };\n const [formState, dispatch] = useReducer(FormReducer<any>, initialState);\n\n const handleInputChange: InputChangeCallback<any> = useCallback((updatedValues) => {\n dispatch({ type: FORM_INPUT_UPDATE, name: updatedValues.name, value: updatedValues.value });\n }, [dispatch]);\n\n const onValidate = async () => {\n if (formRef.current && !formRef.current.checkValidity()) {\n formRef.current.classList.add(\"validated\");\n return false;\n } else {\n return true;\n }\n };\n\n\n useEffect(() => {\n const fetchInitialData = async () => {\n if (!props.fetchData || !node.dataFetchApi) return;\n\n const response = await props.fetchData(\n node.dataFetchApi,\n props.routeParameters\n );\n\n if (response?.isSuccessful) {\n dispatch({\n type: FORM_INITIAL_UPDATE,\n values: response.result,\n name: \"all\"\n });\n }\n };\n\n fetchInitialData();\n }, [props.fetchData, node.dataFetchApi, props.routeParameters]);\n\n\n return (\n <form className=\"group space-y-6 pb-6 overflow-y-auto\" noValidate ref={formRef}>\n {\n node.children && node.children.map((node, index) => {\n {/* @ts-ignore */ }\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {/* {node.type!=\"input-control\" && SelectedNode && <SelectedNode node={node} />} */}\n {SelectedNode && node.type == \"input-control\" && <InputControlNode\n value={formState.inputValues[node.name]}\n callback={handleInputChange}\n node={node} />}\n </React.Fragment>\n )\n })\n }\n\n {node.children.length == 0 &&\n <div className=\"py-0.5 lg:py-1.5\"></div>\n }\n </form>\n )\n}\n\nexport default FormContainerNode;\n","import { InputChangeCallback } from \"../../controls/InputChangeCallback\";\nimport InputControl from \"../../controls/edit/InputControl\";\nimport { InputControlElement } from \"../Types\";\n\nconst InputControlNode = (props: {\n value?: string | null | number;\n callback?: InputChangeCallback<any>;\n node: InputControlElement\n}) => {\n return (\n <div>\n {\n <InputControl\n name={props.node.name}\n controlType={\"lineTextInput\"}\n value={props.value}\n callback={props.callback}\n attributes={{\n pattern: props.node.pattern,\n maxLength: props.node.maxLength,\n minLength: props.node.minLength,\n //maxValue:props.node.maxV,\n //minValue?: number,\n readOnly: props.node.readOnly,\n label: \"name\",//props.node.label,\n hintText: props.node.hintText,\n placeholder: props.node.placeholder,\n required: props.node.required,\n errorMessage: props.node.errorMessage,\n helpText: props.node.helpText,\n autoFocus: props.node.autoFocus,\n }}\n />\n }\n </div>\n )\n}\n\nexport default InputControlNode;\n","import React from \"react\";\nimport TextNode from \"./TextNode\";\nimport ParagraphNode from \"./ParagraphNode\";\nimport HeadingNode from \"./HeadingNode\";\nimport ListNode from \"./ListNode\";\nimport QuoteNode from \"./QuoteNode\";\nimport CodeNode from \"./CodeNode\";\nimport ImageNode from \"./ImageNode\";\nimport HorizontalRuleNode from \"./HorizontalRuleNode\";\nimport LayoutContainerNode from \"./LayoutContainerNode\";\nimport WidgetNode from \"./WidgetNode\";\nimport { DivContainerElement, BackgroundLayer, GradientValue } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\nimport Link from \"next/link\";\nimport AssetUtility from \"../../utilities/AssetUtility\";\nimport SVGIconNode from \"./SVGIconNode\";\nimport EmbedNode from \"./EmbedNode\";\nimport DatafieldNode from \"./DatafieldNode\";\n\n\n\nconst DivContainer = (props: {\n node: DivContainerElement, routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl: string,\n breadcrumb?: string\n}) => {\n const { cssProperties: styles, hoverCssProperties: hoverStyles, mobileCssProperties: mobileStyles } = props.node;\n const updatedStyles = convertKeysToCamelCase(styles)\n const NodeTypes = {\n [\"paragraph\"]: ParagraphNode,\n [\"heading\"]: HeadingNode,\n [\"list\"]: ListNode,\n [\"quote\"]: QuoteNode,\n [\"code\"]: CodeNode,\n [\"image\"]: ImageNode,\n [\"horizontalrule\"]: HorizontalRuleNode,\n [\"layout-container\"]: LayoutContainerNode,\n [\"widget\"]: WidgetNode,\n [\"embed\"]: EmbedNode,\n [\"div-container\"]: DivContainer,\n [\"text\"]: TextNode,\n [\"datafield\"]: DatafieldNode,\n [\"svg-icon\"]: SVGIconNode\n\n };\n\n function toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n }\n\n function convertKeysToCamelCase(obj: any): any {\n if (!obj || typeof obj !== \"object\") return obj; // Ensure valid input\n\n if (Array.isArray(obj)) {\n return obj.map(convertKeysToCamelCase);\n }\n\n return Object.fromEntries(\n Object.entries(obj)\n .filter(([_, value]) => value !== \"\" && value !== undefined) // ✅ Filter out empty strings & undefined\n .map(([key, value]) => [\n toCamelCase(key),\n convertKeysToCamelCase(value) // Recursively convert nested objects\n ])\n );\n }\n\n function generateCompleteBackgroundString(layers?: BackgroundLayer[]): string {\n if (!layers || !Array.isArray(layers)) return \"\";\n return layers\n .filter((layer) => layer && layer.type && layer.value) // Filter out undefined/null layers\n .map((layer) => {\n if (layer.type === \"image\" && layer.value && typeof layer.value === \"object\") {\n const imageValue = layer.value as { assetUrl?: string };\n if (!imageValue.assetUrl) return \"\"; // Ensure assetUrl exists\n\n const url = `url('${AssetUtility.resolveUrl(\"/api/images\", imageValue.assetUrl)}')`;\n const repeat = layer.repeat || \"no-repeat\";\n const position = layer.position || \"center\";\n const size = layer.size || \"auto\";\n const attachment = layer.attachment || \"scroll\";\n\n return `${url} ${position} / ${size} ${repeat} ${attachment}`;\n }\n\n if (layer.type === \"gradient\" && layer.value && typeof layer.value === \"object\") {\n const gradient = layer.value as GradientValue;\n if (!gradient.colors || !gradient.direction) return \"\"; // Ensure colors and direction exist\n\n const colors = gradient.colors\n .map(\n (colorStop) =>\n `color-mix(in srgb, ${colorStop.color}, transparent ${colorStop.transparency ?? 0}%) ${colorStop.start || \"0%\"}`\n )\n .join(\", \");\n\n return `linear-gradient(${gradient.direction}, ${colors})`;\n }\n\n return \"\"; // Fallback for unsupported or incomplete layers\n })\n .filter((bg) => bg.trim() !== \"\") // Remove empty strings\n .join(\", \"); // Join layers with commas\n }\n\n\n var background = generateCompleteBackgroundString(props.node.backgroundLayers);\n\n let containerPaddingClass = \"\";\n if (props.node.containerPadding == \"small\") {\n containerPaddingClass = \"container-small\";\n }\n else if (props.node.containerPadding == \"large\") {\n containerPaddingClass = \"container-large\";\n }\n\n const updatedStyle = { ...updatedStyles };\n const backgroundStyle = background && background !== \"\" ? { background } : {};\n const guid = \"css\" + crypto.randomUUID().toLocaleLowerCase();\n\n const generateCssString = (stylesObject: any, hoverStylesObject?: any, mobileStylesObject?: any): string => {\n let gridColumns = stylesObject.gridTemplateColumns ? stylesObject.gridTemplateColumns.match(/\\d+/g) : [];\n let hasGridProperties = gridColumns.length > 0;\n let tabletColumns = hasGridProperties ? Math.ceil(parseInt(gridColumns[0]) / 2) : 2;\n let mobileColumns = 1;\n\n // Generate base CSS rules\n let cssRules = Object.entries(stylesObject)\n .filter(([_, value]) => value !== undefined && value !== \"\")\n .map(([key, value]) => {\n const cssKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return `${cssKey}: ${value};`;\n });\n\n let css = `#${guid} {\\n${cssRules.join(\"\\n\")}\\n\n transition: all 0.3s ease-in-out;\n }`;\n\n // Handle hover styles if provided\n if (hoverStylesObject) {\n let hoverCssRules = Object.entries(hoverStylesObject)\n .filter(([_, value]) => value !== undefined && value !== \"\")\n .map(([key, value]) => {\n const cssKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return `${cssKey}: ${value};`;\n });\n\n if (hoverCssRules.length > 0) {\n css += `\\n#${guid}:hover {\\n${hoverCssRules.join(\"\\n\")}\\n}`;\n }\n }\n\n if (mobileStylesObject) {\n let mobileCssRules = Object.entries(mobileStylesObject)\n .filter(([_, value]) => value !== undefined && value !== \"\")\n .map(([key, value]) => {\n const cssKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return `${cssKey}: ${value};`;\n });\n\n if (mobileCssRules.length > 0) {\n css += `\\n@media (max-width: 480px) { #${guid} {\\n${mobileCssRules.join(\"\\n\")}\\n} }`;\n }\n\n }\n\n\n if (hasGridProperties) {\n css += `\\n@media (max-width: 1279px) { #${guid} { grid-template-columns: repeat(${tabletColumns}, minmax(0, 1fr)); } }`;\n css += `\\n@media (max-width: 768px) { #${guid} { grid-template-columns: repeat(${tabletColumns}, minmax(0, 1fr)); } }`;\n css += `\\n@media (max-width: 480px) { #${guid} { grid-template-columns: repeat(${mobileColumns}, minmax(0, 1fr)); } }`;\n }\n\n return css;\n };\n\n\n const css = generateCssString(updatedStyle, hoverStyles, mobileStyles);\n\n return (\n <React.Fragment>\n <style dangerouslySetInnerHTML={{ __html: css }} />\n\n {props.node.href && props.node.href !== \"\" ? (\n <Link href={props.node.href} className=\"block\">\n <div\n id={guid}\n style={{ ...backgroundStyle, display: \"block\" }}\n className={containerPaddingClass}\n >\n {props.node.children?.map((node, index) => {\n // @ts-ignore\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode\n node={node}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n breadcrumb={props.breadcrumb}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n </Link>\n ) : (\n <div id={guid} style={{ ...backgroundStyle }} className={containerPaddingClass}>\n {props.node.children &&\n props.node.children.map((node, index) => {\n // @ts-ignore\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode\n node={node}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n breadcrumb={props.breadcrumb}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n )}\n\n </React.Fragment>\n )\n}\n\nexport default DivContainer;\n"],"mappings":"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","names":["React","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","jsx","React","React","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","now","React","useEffect","jsx","jsxs","useEffect","useState","jsx","jsxs","React","useState","useState","React","ToastService","ToastService_default","jsx","ToastService_default","React","jsx","jsxs","useState","jsx","jsxs","useState","React","React","useEffect","useRef","useState","jsx","jsxs","filteredItems","React","useState","useEffect","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","jsx","React","React","useEffect","useState","useCallback","React","jsx","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsx","jsx","jsx","jsx","Fragment","jsx","jsxs","useState","useEffect","getNestedProperty","useCallback","builder","React","React","React","jsx","NodeTypes","jsx","React","Link","jsx","jsxs","NodeTypes","React","jsx","jsx","jsx","value","Fragment","jsx","jsxs","NodeTypes","React","React","Fragment","jsx","NodeTypes","React","React","React","jsx","NodeTypes","React","jsx","jsxs","NodeTypes","React","React","jsx","NodeTypes","React","React","useState","useRef","useEffect","jsx","jsxs","jsx","jsxs","NodeTypes","React","jsx","React","React","jsx","Fragment","jsx","jsxs","React","useEffect","useRef","useState","React","jsx","jsxs","jsx","useRef","useState","useEffect","React","jsx","React","jsx","jsx","NodeTypes","React","Fragment","jsx","jsxs","React","useRef","useReducer","useCallback","useEffect","jsx","jsx","jsxs","NodeTypes","useRef","useReducer","useCallback","useEffect","node","React","React","Link","jsx","jsxs","NodeTypes","css","React","Link","jsx","React"]}
1
+ {"version":3,"sources":["../src/components/controls/view/ViewControl.tsx","../src/components/controls/view/ViewControlTypes.tsx","../src/components/controls/view/NumberView.tsx","../src/components/controls/view/DateView.tsx","../src/components/controls/view/BooleanView.tsx","../src/components/controls/view/LineTextView.tsx","../src/components/controls/view/EmailTextView.tsx","../src/components/controls/view/StatusBgView.tsx","../src/components/controls/view/StatusView.tsx","../src/components/controls/view/MoneyView.tsx","../src/components/controls/view/MultilineTextBulletsView.tsx","../src/components/controls/view/MultilineTextView.tsx","../src/components/controls/edit/InputControl.tsx","../src/components/controls/edit/MultilineTextInput.tsx","../src/components/controls/edit/LineTextInput.tsx","../src/components/controls/edit/MoneyInput.tsx","../src/components/controls/edit/InputControlType.tsx","../src/components/controls/edit/Select.tsx","../src/components/controls/edit/PercentageInput.tsx","../src/components/controls/edit/PhoneInput.tsx","../src/components/controls/edit/NumberInput.tsx","../src/components/controls/edit/CheckboxInput.tsx","../src/components/controls/edit/OtpInput.tsx","../src/components/utilities/DateTimeUtility.tsx","../src/components/controls/edit/DateTimeInput.tsx","../src/components/controls/edit/ColorInput.tsx","../src/components/controls/edit/SelectWithSearchInput.tsx","../src/components/Button.tsx","../src/components/ToastService.tsx","../src/components/StyleTypes.tsx","../src/components/Confirm.tsx","../src/components/ClientButton.tsx","../src/components/utilities/ToastService.tsx","../src/components/controls/edit/SelectWithSearchPanel.tsx","../src/components/controls/edit/BooleanSelect.tsx","../src/components/controls/edit/EmailInput.tsx","../src/components/controls/edit/TimeInput.tsx","../src/components/dataForm/DataList.tsx","../src/components/dataForm/NoContentView.tsx","../src/components/dataForm/ContentView.tsx","../src/components/dataForm/Hyperlink.tsx","../src/clients/OdataBuilder.tsx","../src/svg/chevron-updown.tsx","../src/svg/chevron-down.tsx","../src/svg/chevron-up.tsx","../src/svg/plus.tsx","../src/svg/Icons.tsx","../src/svg/Icon.tsx","../src/FormReducer.tsx","../src/components/pageRenderingEngine/PageBodyRenderer.tsx","../src/components/pageRenderingEngine/nodes/ParagraphNode.tsx","../src/components/pageRenderingEngine/nodes/TextNode.tsx","../src/components/pageRenderingEngine/nodes/LineBreakNode.tsx","../src/components/pageRenderingEngine/nodes/LinkNode.tsx","../src/components/pageRenderingEngine/nodes/SVGIconNode.tsx","../src/components/pageRenderingEngine/nodes/EquationNode.tsx","../src/components/pageRenderingEngine/nodes/DatafieldNode.tsx","../src/components/pageRenderingEngine/nodes/HeadingNode.tsx","../src/components/pageRenderingEngine/nodes/ListNode.tsx","../src/components/pageRenderingEngine/nodes/ListItemNode.tsx","../src/components/pageRenderingEngine/nodes/QuoteNode.tsx","../src/components/pageRenderingEngine/nodes/CodeNode.tsx","../src/components/pageRenderingEngine/nodes/HorizontalRuleNode.tsx","../src/components/pageRenderingEngine/nodes/LayoutItemNode.tsx","../src/components/pageRenderingEngine/nodes/ImageNode.tsx","../src/components/pageRenderingEngine/nodes/WidgetNode.tsx","../src/components/pageRenderingEngine/nodes/IframeClient.tsx","../src/components/IFrameLoaderView.tsx","../src/components/pageRenderingEngine/nodes/EmbedNode.tsx","../src/components/pageRenderingEngine/nodes/VideoNode.tsx","../src/components/utilities/AssetUtility.tsx","../src/components/pageRenderingEngine/nodes/LayoutContainerNode.tsx","../src/components/pageRenderingEngine/nodes/FormContainerNode.tsx","../src/components/pageRenderingEngine/nodes/InputControlNode.tsx","../src/components/pageRenderingEngine/nodes/DivContainer.tsx"],"sourcesContent":["import React from \"react\";\nimport ViewControlTypes from \"./ViewControlTypes\";\nimport { ViewControlProps } from \"./ViewControlProps\";\nimport LineText from \"./LineTextView\";\n\nimport MultilineTextBullets from \"./MultilineTextBulletsView\";\nimport Money from \"./MoneyView\";\nimport NumberView from \"./NumberView\";\nimport DateView from \"./DateView\";\nimport StatusBg from \"./StatusBgView\";\nimport Status from \"./StatusView\";\nimport MultilineText from \"./MultilineTextView\";\nimport BooleanView from \"./BooleanView\";\nimport EmailText from \"./EmailTextView\";\nimport LineTextView from \"./LineTextView\";\nimport EmailTextView from \"./EmailTextView\";\nimport StatusBgView from \"./StatusBgView\";\nimport StatusView from \"./StatusView\";\nimport MoneyView from \"./MoneyView\";\nimport MultilineTextBulletsView from \"./MultilineTextBulletsView\";\nimport MultilineTextView from \"./MultilineTextView\";\nconst ViewControl = React.forwardRef<HTMLDivElement, ViewControlProps>(\n (props, ref) => {\n const ControlComponents = {\n [ViewControlTypes.lineTextView]: LineTextView,\n [ViewControlTypes.emailTextView]: EmailTextView,\n\n [ViewControlTypes.multilineTextBulletsView]: MultilineTextBulletsView,\n [ViewControlTypes.moneyView]: MoneyView,\n [ViewControlTypes.numberView]: NumberView,\n [ViewControlTypes.dateView]: DateView,\n [ViewControlTypes.statusView]: StatusView,\n [ViewControlTypes.statusBgView]: StatusBgView,\n [ViewControlTypes.multilinetextView]: MultilineTextView,\n [ViewControlTypes.booleanView]: BooleanView,\n\n // [ViewControlTypes.booleanView]: BooleanView\n };\n\n const SelectedControlComponent = ControlComponents[props.controlType];\n return (\n <React.Fragment>\n {SelectedControlComponent ? (\n <SelectedControlComponent {...props} />\n ) : (\n \"Control not found\"\n )}\n </React.Fragment>\n );\n },\n);\n\nViewControl.displayName = \"ViewControl\";\n\nexport default ViewControl;\n","import { text } from \"stream/consumers\";\nimport CheckboxInput from \"../edit/CheckboxInput\";\n\nconst ViewControlTypes = {\n lineTextView: \"lineTextView\",\n emailTextView: \"emailTextView\",\n multilineTextBulletsView: \"multilineTextBulletsView\",\n moneyView: \"moneyView\",\n numberView: \"numberView\",\n dateView: \"dateView\",\n statusView: \"statusView\",\n statusBgView: \"statusBgView\",\n multilinetextView: \"multilinetextView\",\n booleanView: \"booleanView\",\n // checkboxInput:'boolean',\n text: \"text\",\n // booleanView: \"booleanView\"\n};\nexport default ViewControlTypes;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst NumberView: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n {props.value}\n </React.Fragment>\n )\n}\n\nexport default NumberView;\n","'use client'\nimport React from \"react\";\nimport moment from \"moment-timezone\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n\nconst DateView: React.FC<ViewControlProps> = (props) => {\n\n let localDateTime = \"\";\n let timezone;\n\n try {\n const val = props.value && props.value.toString().includes(\"Z\")?props.value:(props.value + \"Z\") \n const parsedDate = new Date(val);\n const timezoneOffset = parsedDate.getTimezoneOffset();\n timezone = moment.tz.zone(moment.tz.guess())?.abbr(timezoneOffset);\n if (props.format && props.format == \"timeago\") {\n localDateTime = formatTimeAgo(parsedDate);\n }\n else {\n localDateTime = parsedDate.toLocaleString() + \" \" + timezone;\n }\n \n \n\n } catch (error) {\n console.error(\"Error parsing date:\", props.value);\n }\n\n function formatTimeAgo(inputDate: Date): string {\n const currentDate = new Date();\n //console.log(inputDate);\n const timeDifference = Math.floor((currentDate.getTime() - inputDate.getTime()) / 1000); // time difference in seconds\n //console.log(timeDifference);\n if (timeDifference < 10) {\n return \"few secs ago\";\n } else if (timeDifference < 60) {\n return `${timeDifference} secs ago`;\n } else if (timeDifference < 3600) {\n const minutes = Math.floor(timeDifference / 60);\n return `${minutes} min${minutes > 1 ? 's' : ''} ago`;\n } else if (timeDifference < 86400) {\n const hours = Math.floor(timeDifference / 3600);\n const remainingMinutes = Math.floor((timeDifference % 3600) / 60);\n return `${hours} hour${hours > 1 ? 's' : ''}, ${remainingMinutes} min${remainingMinutes > 1 ? 's' : ''} ago`;\n } else if (timeDifference < 14 * 3600) {\n const daysAgo = Math.floor(timeDifference / 86400);\n return `${daysAgo} day${daysAgo > 1 ? 's' : ''} ago`;\n } else {\n const formattedDate = inputDate.toLocaleString();\n return formattedDate;\n }\n }\n\n\n return (\n <React.Fragment>\n <div className=\"inline-flex gap-1\">\n {localDateTime == \"Invalid Date undefined\" ? \"-\" : localDateTime}\n </div>\n\n </React.Fragment>\n )\n}\n\nexport default DateView;\n","\nimport React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\ninterface BooleanViewProps extends ViewControlProps {\n customProps?: {\n showOnlyTrueIcon?: boolean;\n };\n}\n\nconst BooleanView: React.FC<BooleanViewProps> = (props) => {\n const { value, customProps } = props;\n const showOnlyTrueIcon = customProps?.showOnlyTrueIcon;\n\n console.log('BooleanView Debug:', {\n value: value,\n type: typeof value,\n customProps: customProps,\n showOnlyTrueIcon: showOnlyTrueIcon\n });\n\n // Handle the value properly\n const booleanValue = React.useMemo(() => {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n if (typeof value === 'number') {\n return value === 1;\n }\n return false;\n }, [value]);\n\n if (showOnlyTrueIcon) {\n // Show tick icon only when value is true, nothing when false\n return (\n <React.Fragment>\n {booleanValue === true && (\n <svg \n className=\"w-15 h-8 text-green-600\" \n fill=\"currentColor\" \n viewBox=\"0 0 20 20\"\n >\n <path \n fillRule=\"evenodd\" \n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" \n clipRule=\"evenodd\" \n />\n </svg>\n )}\n </React.Fragment>\n );\n }\n\n // Default behavior: show \"true\" or \"false\" as text\n return (\n <React.Fragment>\n {booleanValue ? \"true\" : \"false\"}\n </React.Fragment>\n );\n};\n\nexport default BooleanView;","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst LineText: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n {props.value}\n </React.Fragment>\n )\n}\n\nexport default LineText;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst EmailText: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n {props.value}\n </React.Fragment>\n )\n}\n\nexport default EmailText;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst StatusBg: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n {props.value && props.value != \"\" &&\n <span className={\"py-0.5 px-1.5 text-xs capitalize text-white font-semibold rounded bg-status bg-status-\" + props.value}>{props.value}\n </span>\n }\n </React.Fragment>\n )\n}\n\nexport default StatusBg;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst Status: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n <span className={\"capitalize font-semibold rounded text-status text-status-\" + props.value}>{props.value}</span>\n </React.Fragment>\n )\n}\n\nexport default Status;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\nconst Money: React.FC<ViewControlProps> = (props) => {\n const parsedNumber = parseFloat(props.value);\n\n return (\n <React.Fragment>\n {!Number.isNaN(parsedNumber) && \n <span className={(parsedNumber < 0 ? \"text-alert\" : \"\")}>\n <span className=\"mr-0.5\">₹</span>\n {parsedNumber.toLocaleString()}\n \n </span>\n }\n </React.Fragment>\n )\n}\n\nexport default Money;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\nconst MultilineTextBullets: React.FC<ViewControlProps> = (props) => {\n const lines = props.value?.split('\\\\n');\n return (\n <React.Fragment>\n <ul className=\"list-disc\">\n {lines && lines.map((line:string, index:number)=>{\n return (\n <li key={index}>{line}</li>\n )\n })}\n </ul>\n </React.Fragment>\n )\n}\n\nexport default MultilineTextBullets;\n","import React from \"react\";\nimport { ViewControlProps } from \"./ViewControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst MultilineText: React.FC<ViewControlProps> = (props) => {\n return (\n <React.Fragment>\n <span className=\"whitespace-pre-line\">{props.value}</span>\n </React.Fragment>\n )\n}\n\nexport default MultilineText;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport MultilineTextInput from \"./MultilineTextInput\";\nimport LineTextInput from \"./LineTextInput\";\nimport MoneyInput from \"./MoneyInput\";\n\nimport InputControlType from \"./InputControlType\";\nimport { InputControlProps } from \"./InputControlProps\";\nimport Select from \"./Select\";\nimport PercentageInput from \"./PercentageInput\";\nimport PhoneInput from \"./PhoneInput\";\nimport NumberInput from \"./NumberInput\";\nimport CheckboxInput from \"./CheckboxInput\";\n\nimport OtpInput from \"./OtpInput\";\nimport DateTimeInput from \"./DateTimeInput\";\nimport ColorInput from \"./ColorInput\";\nimport SelectWithSearchInput from \"./SelectWithSearchInput\";\nimport SelectWithSearchPanel from \"./SelectWithSearchPanel\";\nimport BooleanSelect from \"./BooleanSelect\";\nimport EmailInput from \"./EmailInput\";\n\nimport TimeInput from \"./TimeInput\";\n\n// React.FC<ButtonProps<any>>\n\nconst InputControl = React.forwardRef<HTMLDivElement, InputControlProps>(\n (props, ref) => {\n const ControlComponents = {\n [InputControlType.lineTextInput]: LineTextInput,\n [InputControlType.emailInput]: EmailInput,\n [InputControlType.multilineTextInput]: MultilineTextInput,\n [InputControlType.moneyInput]: MoneyInput,\n\n [InputControlType.select]: Select,\n [InputControlType.percentageInput]: PercentageInput,\n [InputControlType.phoneInput]: PhoneInput,\n [InputControlType.numberInput]: NumberInput,\n [InputControlType.checkboxInput]: CheckboxInput,\n\n [InputControlType.otpInput]: OtpInput,\n\n [InputControlType.datetimeInput]: DateTimeInput,\n [InputControlType.colorInput]: ColorInput,\n [InputControlType.selectWithSearchInput]: SelectWithSearchInput,\n [InputControlType.selectWithSearchPanel]: SelectWithSearchPanel,\n [InputControlType.booleanSelect]: BooleanSelect,\n [InputControlType.timeInput]: TimeInput,\n };\n\n const SelectedControlComponent = ControlComponents[props.controlType];\n return (\n <React.Fragment>\n {/* @ts-ignore */}\n {SelectedControlComponent ? (\n <SelectedControlComponent {...props} />\n ) : (\n \"Control not found\"\n )}\n </React.Fragment>\n );\n },\n);\n\nInputControl.displayName = \"InputControl\";\n\nexport default InputControl;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst MultilineTextInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLTextAreaElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index);\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n let value = \"\";\n if (props.value !== undefined && props.value !== null) {\n // @ts-ignore\n value = props.value;\n }\n\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span> {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <textarea\n name={props.name}\n id={props.name}\n value={value}\n onChange={textChangeHandler}\n onBlur={props?.onBlur}\n rows={4}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default MultilineTextInput;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst LineTextInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n let value = '';\n if (props.value !== undefined && props.value !== null) {\n // @ts-ignore\n value = props.value;\n }\n\n return (\n <React.Fragment>\n <label className=\"block\">\n {props?.attributes?.label && <span className=\"text-sm inline-block pb-1 font-medium \">{props?.attributes?.label}</span>} {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"text\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n onChange={textChangeHandler}\n onBlur={props?.onBlur}\n required={props?.attributes?.required}\n // defaultValue={props?.defaultValue}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className={`peer py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n ${props?.inputClasses ? props.inputClasses : ``}\n `} />\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default LineTextInput;\n\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst MoneyInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const rawValue = event.target.value;\n const numericValue = parseFloat(rawValue);\n\n // Allow empty string (for clearing input), or any positive number\n if (rawValue === \"\" || (!isNaN(numericValue) && numericValue >= 0)) {\n if (props.callback !== undefined) {\n props.callback({\n name: props.name,\n value: rawValue,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n }\n };\n\n\n const handleWheel = (event: WheelEvent<HTMLInputElement>) => {\n event.preventDefault();\n // @ts-ignore\n event.target.blur();\n };\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n const preventNegative: React.KeyboardEventHandler<HTMLInputElement> = (e) => {\n if (e.key === \"-\") {\n e.preventDefault();\n }\n };\n\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span> {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"number\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n min={0}\n onChange={textChangeHandler}\n onWheel={handleWheel}\n onKeyDown={preventNegative}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 number-input\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default MoneyInput;\n","export const Constants = {\n pagesize: 10\n};\n\nconst InputControlType = {\n lineTextInput: \"text\",\n multilineTextInput: \"multilinetext\",\n emailInput: \"email\",\n moneyInput: \"money\",\n select: \"select\",\n percentageInput: \"percentage\",\n phoneInput: \"phone\",\n numberInput: \"number\",\n checkboxInput: \"boolean\",\n otpInput: \"otp\",\n datetimeInput: \"datetime\",\n timeInput: \"time\",\n colorInput: \"colorInput\",\n selectWithSearchInput: \"selectWithSearchInput\",\n selectWithSearchPanel: \"selectWithSearchPanel\",\n booleanSelect: \"booleanSelect\",\n};\nexport default InputControlType;","import React, { ChangeEvent, useState, useEffect } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\nimport { QueryResponse } from \"../../types/QueryResponse\";\n\nconst Select: React.FC<InputControlProps> = (props) => {\n const [list, setList] = useState<any[]>([]);\n\n // -----------------------------------\n // FIX: SANITIZE VALUE FOR <select>\n // -----------------------------------\n const getSafeValue = (val: any): string | number | undefined => {\n if (val === null || val === undefined) return \"\";\n if (typeof val === \"boolean\") return val ? \"1\" : \"0\"; // prevent boolean error\n return val;\n };\n\n // -----------------------------------\n // CHANGE HANDLER\n // -----------------------------------\n const textChangeHandler = (event: ChangeEvent<HTMLSelectElement>) => {\n let rawValue: any = event.target.value;\n\n if (rawValue === \"\") rawValue = null;\n\n let finalValue = rawValue;\n\n // SAFE: convert only if dataset exists\n if (list && props.dataKeyFieldName) {\n const key = props.dataKeyFieldName;\n\n const selectedItem = list.find(\n (item) => String(item[key]) === String(rawValue),\n );\n\n if (selectedItem) {\n const keyValue = selectedItem[key];\n if (typeof keyValue === \"number\") {\n finalValue = Number(rawValue);\n }\n }\n }\n\n props.callback?.({\n name: props.name,\n value: finalValue,\n index: props.index,\n groupKey: props.groupKey,\n });\n };\n\n // -----------------------------------\n // LOAD DATA\n // -----------------------------------\n useEffect(() => {\n async function fetchData() {\n if (props.dataset) {\n setList(props.dataset);\n return;\n }\n\n if (props.dataSource && props.serviceClient) {\n let dataSource = props.dataSource;\n let response: QueryResponse<any>;\n\n if (props.dataSourceDependsOn && props.dependentValue) {\n dataSource = dataSource.replace(\n `{${props.dataSourceDependsOn}}`,\n props.dependentValue,\n );\n }\n\n response = await props.serviceClient.get(dataSource);\n setList(response.result ?? []);\n }\n }\n\n fetchData();\n }, [\n props.dataset,\n props.dataSource,\n props.dependentValue,\n props.dataSourceDependsOn,\n ]);\n\n // -----------------------------------\n // SAFE VALUE FOR SELECT\n // -----------------------------------\n const value = getSafeValue(props.value);\n\n return (\n <label className=\"block\">\n {props.attributes?.label && (\n <span className=\"text-sm font-medium inline-block pb-1\">\n {props.attributes?.label}\n </span>\n )}\n {props.attributes?.label && props.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n\n <select\n name={props.name}\n id={props.name}\n value={value}\n onChange={textChangeHandler}\n required={props.attributes?.required}\n disabled={props.attributes?.readOnly}\n className=\"peer py-1.5 block w-full text-black rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\"\n >\n <option value=\"\">{props.attributes?.placeholder || \"Select\"}</option>\n\n {list.map((item, index) => {\n const keyField = props.dataKeyFieldName!;\n const textField = props.dataTextFieldName!;\n\n return (\n <option key={index} value={item[keyField]}>\n {item[textField]}\n </option>\n );\n })}\n </select>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props.attributes?.errorMessage || \"\"}\n </p>\n </label>\n );\n};\n\nexport default Select;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\nconst PercentageInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const rawValue = event.target.value;\n const numericValue = parseFloat(rawValue);\n\n // Allow empty string (for clearing input), or any positive number\n if (rawValue === \"\" || (!isNaN(numericValue) && numericValue >= 0)) {\n if (props.callback !== undefined) {\n props.callback({\n name: props.name,\n value: rawValue,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n }\n };\n\n\n const handleWheel = (event: WheelEvent<HTMLInputElement>) => {\n event.preventDefault();\n // @ts-ignore\n event.target.blur();\n };\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n const preventNegative: React.KeyboardEventHandler<HTMLInputElement> = (e) => {\n if (e.key === \"-\") {\n e.preventDefault();\n }\n };\n\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n\n <span className=\"text-sm font-medium \">{props?.attributes?.label ? (props?.attributes?.label + \" %\") : \"\"}</span> {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"number\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n min={0}\n onChange={textChangeHandler}\n onKeyDown={preventNegative}\n onWheel={handleWheel}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n max={\"100\"}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 number-input\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default PercentageInput;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst PhoneInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index);\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n let value = \"\";\n if (props.value !== undefined && props.value !== null) {\n // @ts-ignore\n value = props.value;\n }\n\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span>\n\n <div className=\"flex items-center bg-gray-100 rounded border border-gray-300 \n focus-within:border-indigo-300 focus-within:ring focus-within:ring-indigo-200 focus-within:ring-opacity-50\">\n <span className=\"px-3 text-gray-700\">\n {props.prefix}\n </span>\n <input\n type=\"text\"\n name={props.name}\n id={props.name}\n value={value}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"py-1.5 block w-full outline-none focus:ring-0 border-0 mr-0.5\"\n \n />\n </div>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default PhoneInput;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\nconst NumberInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index, props.groupKey);\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n\n\n const handleWheel = (event: WheelEvent<HTMLInputElement>) => {\n event.preventDefault();\n // @ts-ignore\n event.target.blur();\n };\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n\n return (\n <React.Fragment>\n <label className=\"block\">\n\n {props?.attributes?.label && <span className=\"text-sm inline-block pb-1 font-medium \">{props?.attributes?.label}</span>} {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"number\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n onChange={textChangeHandler}\n onWheel={handleWheel}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n onBlur={props?.onBlur}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n max={props?.attributes?.maxValue}\n min={props?.attributes?.minValue}\n className=\"peer py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 number-input\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"/>\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default NumberInput;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst CheckboxInput: React.FC<InputControlProps> = (props) => {\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n let text = event.target.checked;\n console.log(text);\n if (props.callback !== undefined) {\n // props.callback(props.name, text, props.index, props.groupKey);\n\n props.callback({\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n // let value = \"\";\n // if (props.value !== undefined && props.value !== null) {\n // value = props.value;\n // }\n const trueValue = true;\n let value = false;\n if (\n props.value != undefined &&\n props.value != null &&\n props.value != \"\" &&\n (props.value == \"true\" || props.value.toString() == \"true\")\n ) {\n value = true;\n }\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium\">{props?.attributes?.label}</span>{\" \"}\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n <input\n type=\"checkbox\"\n name={props.name}\n id={props.name}\n //value={value}\n checked={value}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"\n />\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n );\n};\n\nexport default CheckboxInput;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst OtpInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index, props.groupKey);\n props.callback(\n {\n name: props.name,\n value: text,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n const handleWheel = (event: WheelEvent<HTMLInputElement>) => {\n event.preventDefault();\n };\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n\n return (\n <React.Fragment>\n <label htmlFor={props.name} className=\"block mb-1 w-full\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span>\n <input type=\"text\"\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n onChange={textChangeHandler}\n autoComplete=\"off\"\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={4}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n autoFocus={props?.attributes?.autoFocus}\n onWheel={handleWheel}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm tracking-[1.25em] text-center\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default OtpInput;\n","class DateTimeUtility {\n constructor() {\n // No initialization needed\n }\n\n static formatDate(date: Date): string {\n if (!date) {\n throw new Error(\"Invalid date\");\n }\n\n const pad = (num: number): string => num.toString().padStart(2, \"0\");\n\n const year = date.getFullYear();\n const month = pad(date.getMonth() + 1); // Months are zero-based\n const day = pad(date.getDate());\n const hours = pad(date.getHours());\n const minutes = pad(date.getMinutes());\n const seconds = pad(date.getSeconds());\n\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\n }\n\n static getMonthShortNameCustom(month: number): string {\n const monthNames = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n if (month < 1 || month > 12) {\n throw new Error(\n \"Invalid month. Please provide a value between 1 and 12.\",\n );\n }\n return monthNames[month - 1];\n }\n\n static getCurrentWeekRange(): { start: Date; end: Date } {\n const today = new Date();\n const day = today.getDay(); // 0 (Sun) – 6 (Sat)\n\n // Get Monday\n const diffToMonday = (day === 0 ? -6 : 1) - day; // if Sunday, go back 6 days\n const monday = new Date(today);\n monday.setDate(today.getDate() + diffToMonday);\n monday.setHours(0, 0, 0, 0);\n\n // Get Sunday\n const sunday = new Date(monday);\n sunday.setDate(monday.getDate() + 6);\n sunday.setHours(23, 59, 59, 999);\n\n return { start: monday, end: sunday };\n }\n\n static getCurrentMonthRange(): { start: Date; end: Date } {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth(), 1);\n const end = new Date(now.getFullYear(), now.getMonth() + 1, 0); // last day of current month\n return { start, end };\n }\n\n static formatShortDate(date: Date): string {\n const day = date.getDate();\n const month = this.getMonthShortNameCustom(date.getMonth() + 1); // Month is 0-indexed\n return `${day} ${month}`;\n }\n\n static formatIndianCurrencyShort(value: number): string {\n if (value >= 1_00_00_000) {\n return `${(value / 1_00_00_000).toFixed(2)} Cr`;\n } else if (value >= 1_00_000) {\n return `${(value / 1_00_000).toFixed(2)} L`;\n } else if (value >= 1_000) {\n return `${(value / 1_000).toFixed(2)} K`;\n } else {\n return `${value}`;\n }\n }\n}\n\nexport default DateTimeUtility;\n","import DateTimeUtility from \"../../utilities/DateTimeUtility\";\nimport React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst DateTimeInput: React.FC<InputControlProps> = (props) => {\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const localDate = new Date(event.target.value);\n if (props.callback !== undefined) {\n const utcDate = new Date(\n localDate.getTime() + localDate.getTimezoneOffset() * 60000,\n );\n\n let formattedDate = DateTimeUtility.formatDate(utcDate);\n // props.callback(props.name, formattedDate, props.index, props.groupKey);\n props.callback({\n name: props.name,\n value: formattedDate,\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n let value;\n let localvalue;\n let timeZoneAbbr;\n const now = new Date();\n const utcOffset = now.getTimezoneOffset();\n\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n const now = new Date();\n const offsetMinutes = now.getTimezoneOffset();\n const offsetMilliseconds = offsetMinutes * 60 * 1000;\n\n // @ts-ignore\n const valDate = value.toString().includes(\"Z\")\n ? // @ts-ignore\n new Date(value)\n : new Date(value + \"Z\");\n\n let localDate = new Date(valDate.getTime() - offsetMilliseconds);\n timeZoneAbbr = now\n .toLocaleTimeString(\"en\", { timeZoneName: \"short\" })\n .split(\" \")[2];\n localvalue = localDate?.toISOString()?.slice(0, 16);\n }\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span>{\" \"}\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n <div className=\"flex items-center gap-2\">\n <input\n type=\"datetime-local\"\n name={props.name}\n id={props.name}\n value={localvalue}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n pattern={props?.attributes?.pattern}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"\n />\n <span>{timeZoneAbbr}</span>\n </div>\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n );\n};\n\nexport default DateTimeInput;\n","import React, { ChangeEventHandler, ChangeEvent, useEffect } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\nconst ColorInput: React.FC<InputControlProps> = (props) => {\n const [color, setColor] = React.useState<string>(\"#3b82f6\");\n\n // Synchronize state with `props.value`\n useEffect(() => {\n if (props.value !== undefined && props.value !== null) {\n if (typeof props.value === \"string\") {\n setColor(props.value);\n }\n }\n }, [props.value]);\n\n const handleColorChange = (event: ChangeEvent<HTMLInputElement>) => {\n const newColor = event.target.value;\n setColor(newColor); // Update local state\n if (props.callback) {\n // props.callback(props.name, newColor, props.index, props.groupKey); // Trigger callback\n props.callback({\n name: props.name,\n value: newColor,\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n return (\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium\">{props?.attributes?.label}</span>{\" \"}\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n {/* <span className={`absolute top-0 right-0 text-xs px-1 py-0.5 ${props.isTenantColor ? 'bg-green-500 text-white' : 'bg-gray-300 text-gray-800'}`}>\n {props.isTenantColor ? 'Tenant' : 'Default'}\n </span> */}\n <input\n type=\"color\"\n name={props.name}\n title={color}\n id={props.name}\n value={color}\n onChange={handleColorChange}\n required={props?.attributes?.required}\n className={`w-[88px] h-12 block cursor-pointer focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50`}\n />\n {props?.attributes?.errorMessage && (\n <p className=\"mt-1 text-alert text-sm\">\n {props.attributes.errorMessage}\n </p>\n )}\n </label>\n );\n};\n\nexport default ColorInput;\n","\"use client\";\nimport React, { ChangeEvent, useEffect, useRef, useState } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\nconst SelectWithSearchInput: React.FC<InputControlProps> = (props) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [selectedItem, setSelectedItem] = useState<{\n name: string;\n image: string;\n } | null>(null);\n const [list, setList] = useState<any[]>([]);\n useEffect(() => {\n async function fetchData() {\n if (props.dataset) {\n setList(props.dataset);\n\n } else if (props.dataSource && props.serviceClient) {\n let dataSource = props.dataSource;\n if (props.dataSourceDependsOn && props.dependentValue) {\n dataSource = dataSource.replace(\n `{${props.dataSourceDependsOn}}`,\n props.dependentValue\n );\n }\n const response = await props.serviceClient.get(dataSource);\n if (response?.result) setList(response.result);\n }\n\n }\n\n fetchData();\n }, [\n props.dataSource,\n props.dependentValue,\n props.dataset,\n props.dataSourceDependsOn,\n ]);\n\n const filteredItems = list?.filter((item) =>\n item[props?.dataTextFieldName!]\n ?.toLowerCase()\n .includes(searchTerm.toLowerCase())\n );\n\n const handleSelect = (event: React.SyntheticEvent, item: any) => {\n event.preventDefault();\n setSearchTerm(item[props.dataTextFieldName!]);\n setSelectedItem(item);\n setIsOpen(false);\n setHighlightedIndex(-1);\n if (props.callback) {\n props.callback({\n name: props.name,\n value: item[props.dataKeyFieldName!],\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n setHighlightedIndex((prev) =>\n prev < filteredItems.length - 1 ? prev + 1 : 0\n );\n } else if (e.key === \"ArrowUp\") {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredItems.length - 1\n );\n } else if (e.key === \"Enter\" && highlightedIndex >= 0) {\n handleSelect(e, filteredItems[highlightedIndex]);\n }\n };\n\n const dropdownRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (highlightedIndex >= 0 && dropdownRef.current) {\n const highlightedItem = dropdownRef.current.children[\n highlightedIndex\n ] as HTMLElement;\n highlightedItem?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }\n }, [highlightedIndex]);\n\n\n\n\n return (\n <div className=\"relative\">\n <label>{props.attributes?.label}</label> {props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <div className=\"relative\">\n <input\n type=\"text\"\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n\n setIsOpen(true);\n setHighlightedIndex(-1);\n }}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n placeholder=\"Select or search for a name\"\n // className=\"w-full bg-white border-2 border-accent-500 rounded-md shadow-sm p-2 pr-10 focus:border-accent-700 focus:outline-none transition-colors duration-300\"\n className=\"peer py-1.5 block w-full text-black rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"\n />\n {/* \n {selectedItem && (\n <img\n src={selectedItem.image}\n alt={selectedItem.name}\n className=\"absolute left-2 top-1/2 transform -translate-y-1/2 w-6 h-6 rounded-full\"\n />\n )} */}\n\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"absolute right-2 top-3 h-5 w-5 text-gray-500 focus:outline-none\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"w-full h-full\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <div\n ref={dropdownRef}\n className=\"absolute z-10 mt-2 w-full bg-white border border-gray-200 rounded-md shadow-lg max-h-48 overflow-y-auto\"\n >\n {filteredItems.length > 0 ? (\n filteredItems.map((item, index) => (\n <button\n key={item[props.dataKeyFieldName!]}\n onClick={(e) => handleSelect(e, item)}\n className={`w-full px-4 py-2 flex items-center space-x-2 text-left ${index === highlightedIndex\n ? \"bg-gray-200\"\n : \"hover:bg-gray-100\"\n }`}\n role=\"option\"\n tabIndex={-1}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n <span>{item[props.dataTextFieldName!]}</span>\n </button>\n ))\n ) : (\n <div className=\"px-4 py-2 text-gray-500\">No results found</div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default SelectWithSearchInput;\n\n","\"use client\";\nimport React, { useState } from \"react\";\nimport ToastService from \"./ToastService\";\nimport {\n BaseComponentProps,\n StyleTypes,\n buttonClasses,\n progressClasses,\n} from \"./StyleTypes\";\nimport Confirm from \"./Confirm\";\nimport { ActionResponse } from \"./types/ActionResponse\";\n\ninterface ButtonProps<T> extends BaseComponentProps {\n oneTimeAction?: boolean;\n onValidate?: () => Promise<boolean>;\n onClick?: (index?: number) => Promise<ActionResponse<T>>;\n showToast?: boolean;\n ButtonType?: StyleTypes;\n hideProgressIndicator?: boolean;\n confirm?: boolean;\n confirmationMessage?: string;\n index?: number;\n id?: string;\n isActive?: boolean;\n}\n\nconst Button: React.FC<ButtonProps<any>> = (props) => {\n const [inProgress, setInProgress] = useState(false);\n const [isActionPerformed, setIsActionPerformed] = useState(false);\n const [responseMessage, setResponseMessage] = useState<any>(null);\n const [showModal, setShowModal] = useState<React.ReactNode | null>(null);\n\n const execute = async (event: React.MouseEvent) => {\n event.preventDefault();\n\n if (props.confirm) {\n const confirmed = await showConfirmation(\n \"Are you sure you want to delete this item?\",\n );\n setShowModal(null);\n if (!confirmed) {\n return;\n }\n }\n\n if (props.oneTimeAction && isActionPerformed) {\n return;\n }\n\n setInProgress(true);\n let isValid = true;\n\n if (props.onValidate !== undefined) {\n isValid = await props.onValidate();\n if (!isValid) {\n setInProgress(false);\n ToastService.showError(\n \"There are error in the form. Please fix them before proceeding.\",\n );\n return;\n }\n }\n\n if (props.onClick !== undefined) {\n let response = await props.onClick(props.index);\n console.log(response);\n if (response.isSuccessful) {\n setIsActionPerformed(true);\n setResponseMessage(response.message);\n if (props.showToast) {\n ToastService.showInfo(response.message || \"\");\n }\n } else {\n ToastService.showError(response.message || \"\");\n }\n } else {\n ToastService.showError(\"No action defined.\");\n }\n\n setInProgress(false);\n };\n\n const showConfirmation = (message: string): Promise<boolean> => {\n return new Promise((resolve) => {\n const onConfirm = () => resolve(true);\n const onCancel = () => resolve(false);\n setShowModal(\n <Confirm\n message={props.confirmationMessage}\n onConfirm={onConfirm}\n onCancel={onCancel}\n />,\n );\n });\n };\n\n let buttonClass = props.ButtonType\n ? buttonClasses.get(props.ButtonType)\n : buttonClasses.get(StyleTypes.Primary);\n let progressClass = props.ButtonType\n ? progressClasses.get(props.ButtonType)\n : progressClasses.get(StyleTypes.Primary);\n\n return (\n <React.Fragment>\n <button\n type=\"submit\"\n onClick={execute}\n id={props.id}\n disabled={props.disabled}\n className={\n buttonClass +\n \" relative \" +\n (props.className || \"\") +\n (props.isActive ? \" scale-95 shadow-inner\" : \"\")\n }\n >\n {isActionPerformed && props.oneTimeAction && responseMessage\n ? responseMessage\n : props.children}\n {inProgress && (\n <React.Fragment>\n {props.hideProgressIndicator === true ? (\n <div className=\"absolute bottom-0 left-0 h-0.5 bg-gray-400 rounded animate-progress\"></div>\n ) : (\n <svg\n className={\"animate-spin ml-2 mr-3 h-5 w-5 \" + progressClass}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n </React.Fragment>\n )}\n </button>\n {showModal}\n </React.Fragment>\n );\n};\n\nexport default Button;\n","class ToastService {\n private static showToast: (message: string, messageType: string) => void;\n private static closeToast: () => void;\n\n public static initialize(\n showToast: (message: string, messageType: string) => void,\n closeToast: () => void,\n ) {\n ToastService.showToast = showToast;\n ToastService.closeToast = closeToast;\n }\n\n public static showError(message: string) {\n if (ToastService.showToast) {\n ToastService.showToast(message, \"error\");\n }\n }\n\n public static showInfo(message: string) {\n if (ToastService.showToast) {\n ToastService.showToast(message, \"info\");\n }\n }\n\n public static close() {\n if (ToastService.closeToast) {\n ToastService.closeToast();\n }\n }\n}\n\nexport default ToastService;\n","// StyleTypes.ts\nexport enum StyleTypes {\n Primary = \"Primary\",\n PrimaryHollow = \"PrimaryHollow\",\n Secondary = \"Secondary\",\n SecondaryHollow = \"SecondaryHollow\",\n Neutral = \"Neutral\",\n NeutralHollow = \"NeutralHollow\",\n Link = \"Link\",\n Ripple = \"Ripple\",\n Danger = \"Danger\",\n Light = \"Light\",\n}\n\n// Button style classes\nexport const buttonClasses: Map<StyleTypes, string> = new Map([\n [\n StyleTypes.Primary,\n \"relative inline-flex items-center justify-center bg-primary rounded px-4 py-3 lg:py-2 font-medium shadow-sm hover:shadow-lg hover:bg-primary-strong focus:outline-none active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed transition duration-150 ease-in-out text-white\",\n ],\n\n [\n StyleTypes.Secondary,\n \"relative inline-flex items-center justify-center bg-gradient-to-b from-secondary to-secondary-strong rounded px-4 py-3 lg:py-2 font-medium shadow-sm hover:shadow-lg focus:outline-none active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed transition duration-150 ease-in-out text-body hover:bg-secondary-strong\",\n ],\n\n [\n StyleTypes.Neutral,\n \"relative inline-flex items-center justify-center bg-neutral-strong rounded px-4 py-3 lg:py-2 font-medium shadow-sm hover:shadow-lg focus:outline-none active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed transition duration-150 ease-in-out text-body hover:bg-neutral-stronger\",\n ],\n\n [\n StyleTypes.PrimaryHollow,\n \"inline-flex font-medium items-center justify-center px-4 py-3 lg:py-2 transparent border-primary border text-primary rounded hover:shadow-md focus:outline-none transition duration-150 ease-in-out active:scale-95\",\n ],\n\n [\n StyleTypes.SecondaryHollow,\n \"inline-flex font-medium items-center justify-center px-4 py-3 lg:py-2 transparent border-secondary border text-secondary rounded hover:shadow-md focus:outline-none transition duration-150 ease-in-out active:scale-95\",\n ],\n\n [\n StyleTypes.NeutralHollow,\n \"inline-flex font-medium items-center justify-center px-4 py-3 lg:py-2 transparent border-neutral border text-neutral rounded hover:shadow-md focus:outline-none transition duration-150 ease-in-out active:scale-95\",\n ],\n\n [\n StyleTypes.Ripple,\n \"px-3 py-1.5 inline-flex items-center text-sm font-medium rounded border-[1.5px] border-primary ripple btn-bg-primary btn-primary-text\",\n ],\n [\n StyleTypes.Danger,\n \"inline-flex text-sm font-medium items-center justify-center px-4 py-2 border border-alert bg-alert text-white rounded hover:bg-alert-600 hover:border-alert-600 focus:outline-none active:ring-1 active:ring-alert\",\n ],\n [StyleTypes.Link, \"\"],\n [\n StyleTypes.Light,\n \"inline-flex items-center justify-center rounded bg-white border px-4 py-2 leading-6 text-primary shadow-sm hover:shadow focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary disabled:opacity-50 disabled:cursor-not-allowed\",\n ],\n]);\n\n// Progress indicator classes (for Button only)\nexport const progressClasses: Map<StyleTypes, string> = new Map([\n [StyleTypes.Primary, \"\"],\n [StyleTypes.PrimaryHollow, \"\"],\n [StyleTypes.Secondary, \"\"],\n [StyleTypes.SecondaryHollow, \"\"],\n [StyleTypes.Neutral, \"\"],\n [StyleTypes.NeutralHollow, \"\"],\n [StyleTypes.Ripple, \"\"],\n [StyleTypes.Danger, \"\"],\n [StyleTypes.Link, \"\"],\n]);\n\n// Common interfaces\nexport interface BaseComponentProps {\n className?: string;\n children: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface ActionResponse<T> {\n isSuccessful: boolean;\n message?: string;\n data?: T;\n}\n","\"use client\";\nimport React, { useState } from \"react\";\nimport ClientButton from \"./ClientButton\";\nimport { ButtonTypes } from \"./ButtonTypes\";\nimport { StyleTypes } from \"./StyleTypes\";\n\ninterface ConfirmProps {\n message?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n}\nconst Confirm: React.FC<ConfirmProps> = ({ message, onConfirm, onCancel }) => {\n const [showModal, setShowModal] = useState(true);\n\n const handleConfirmAction = () => {\n setShowModal(false);\n if (onConfirm) {\n onConfirm();\n }\n };\n\n const handleCancelAction = () => {\n setShowModal(false);\n if (onCancel) {\n onCancel();\n }\n };\n\n return (\n <>\n {showModal && (\n <div className=\"fixed inset-0 flex items-center justify-center z-20\">\n <div className=\"absolute inset-0 bg-black opacity-70\"></div>\n <div className=\"bg-white rounded-md p-6 shadow border z-50\">\n <p className=\"text-xl font-semibold mb-4\">Confirmation</p>\n <p className=\"mb-4\">{message}</p>\n <div className=\"flex justify-end gap-8\">\n <ClientButton\n onClick={handleCancelAction}\n ButtonType={StyleTypes.PrimaryHollow}\n >\n Cancel\n </ClientButton>\n <ClientButton onClick={handleConfirmAction}>Confirm</ClientButton>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default Confirm;\n\n{\n /* <div className=\"modal-content\">\n <p>{message}</p>\n <button onClick={handleConfirmAction}>Confirm</button>\n <button onClick={handleCancelAction}>Cancel</button>\n </div> */\n}\n","\"use client\";\nimport React from \"react\";\nimport ToastService from \"./utilities/ToastService\";\nimport { StyleTypes, buttonClasses, BaseComponentProps } from \"./StyleTypes\";\n\ninterface ClientButtonProps extends BaseComponentProps {\n onClick?: () => void;\n ButtonType?: StyleTypes;\n dataRole?: string;\n tabIndex?: number;\n}\n\nconst ClientButton: React.FC<ClientButtonProps> = (props) => {\n const execute = async (event: React.MouseEvent) => {\n event.preventDefault();\n if (props.onClick !== undefined) {\n props.onClick();\n } else {\n ToastService.showError(\"No action defined.\");\n }\n };\n\n let buttonClass = props.ButtonType\n ? buttonClasses.get(props.ButtonType)\n : buttonClasses.get(StyleTypes.Primary);\n\n return (\n <React.Fragment>\n <button\n type=\"button\"\n onClick={execute}\n data-role={props.dataRole}\n disabled={props.disabled}\n tabIndex={props.tabIndex}\n className={buttonClass + \" \" + props.className}\n >\n {props.children}\n </button>\n </React.Fragment>\n );\n};\n\nexport default ClientButton;\n","class ToastService {\n static showError(message: string): void {\n console.error(message);\n // Add toast notification logic here\n if (typeof window !== \"undefined\") {\n // You can integrate a toast library like react-toastify or custom toast here\n alert(message);\n }\n }\n\n static showSuccess(message: string): void {\n console.log(message);\n // Add toast notification logic here\n if (typeof window !== \"undefined\") {\n alert(message);\n }\n }\n\n static showWarning(message: string): void {\n console.warn(message);\n // Add toast notification logic here\n if (typeof window !== \"undefined\") {\n alert(message);\n }\n }\n\n static showInfo(message: string): void {\n console.info(message);\n // Add toast notification logic here\n if (typeof window !== \"undefined\") {\n alert(message);\n }\n }\n}\n\nexport default ToastService;\n","\"use client\";\nimport Button from \"../../Button\";\nimport React, {\n useEffect,\n useRef,\n useState,\n ChangeEvent,\n useCallback,\n} from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\nimport { ActionResponse } from \"../../types/ActionResponse\";\n\nconst SelectWithSearchPanel: React.FC<InputControlProps> = (props) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [list, setList] = useState<any[]>([]);\n const listRef = useRef<HTMLDivElement>(null);\n const [isError, setIsError] = useState<boolean>(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const [isCreateOpen, setIsCreateOpen] = useState(false);\n const [formData, setFormData] = useState<Record<string, string>>({});\n\n const getNestedValue = (obj: any, path: string): any => {\n return path.split(\".\").reduce((acc, key) => acc?.[key], obj);\n };\n\n // Close the dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n // Handle DataSource and Dataset\n // If dataset is provided, use it. Otherwise, fetch data from the dataSource using serviceClient\n useEffect(() => {\n async function fetchData() {\n if (props.dataset) {\n setList(props.dataset);\n } else if (props.dataSource && props.serviceClient) {\n let dataSource = props.dataSource;\n if (props.dataSourceDependsOn && props.dependentValue) {\n dataSource = dataSource.replace(\n `{${props.dataSourceDependsOn}}`,\n props.dependentValue,\n );\n }\n const response = await props.serviceClient.get(dataSource);\n if (response?.result) setList(response.result);\n }\n }\n fetchData();\n }, [\n props.dataSource,\n props.dependentValue,\n props.dataset,\n props.dataSourceDependsOn,\n ]);\n\n // Filter items based on search term\n // const filteredItems = list?.filter((item) =>\n // item[props?.dataTextFieldName!]?.toLowerCase().includes(searchTerm?.toLowerCase())\n // );\n const filteredItems = list?.filter((item) => {\n const value = getNestedValue(item, props.dataTextFieldName!);\n return value?.toLowerCase().includes(searchTerm?.toLowerCase());\n });\n\n // Play beep sound when no results are found\n // This function creates a beep sound using the Web Audio API\n const playBeep = () => {\n const audioCtx = new (\n (window as any).AudioContext || (window as any).webkitAudioContext\n )();\n const oscillator = audioCtx.createOscillator();\n const gainNode = audioCtx.createGain();\n\n oscillator.type = \"square\"; // Square wave for a more digital/beep-like sound\n oscillator.frequency.setValueAtTime(300, audioCtx.currentTime); // Adjust frequency closer to TallyPrime's beep\n gainNode.gain.setValueAtTime(0.02, audioCtx.currentTime); // Lower the volume slightly\n\n oscillator.connect(gainNode);\n gainNode.connect(audioCtx.destination);\n\n oscillator.start();\n setTimeout(() => {\n oscillator.stop();\n audioCtx.close(); // Close context to prevent memory leaks\n }, 250); // Adjust duration for a crisp beep\n };\n\n useEffect(() => {\n const filteredItems = list?.filter((item) =>\n item[props?.dataTextFieldName!]\n ?.toLowerCase()\n .includes(searchTerm?.toLowerCase()),\n );\n if (searchTerm.length > 0 && filteredItems.length === 0) {\n playBeep();\n setIsError(true);\n } else {\n setIsError(false);\n }\n }, [searchTerm]);\n\n const handleSelect = (event: React.SyntheticEvent, item: any) => {\n event.preventDefault();\n // setSearchTerm(item[props.dataTextFieldName!]);\n setSearchTerm(getNestedValue(item, props.dataTextFieldName!));\n\n if (props.callback) {\n const val = {};\n props.callback({\n name: props.name,\n value: item[props.dataKeyFieldName!],\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n\n setHighlightedIndex(0);\n setIsOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n setIsOpen(false);\n // setSelectedItem(null)\n setHighlightedIndex(-1);\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const nextIndex = prev < filteredItems.length - 1 ? prev + 1 : prev; // Prevent wrapping\n scrollIntoView(nextIndex);\n return nextIndex;\n });\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const prevIndex = prev > 0 ? prev - 1 : prev; // Prevent wrapping\n scrollIntoView(prevIndex);\n return prevIndex;\n });\n } else if (e.key === \"Enter\" && highlightedIndex >= 0) {\n handleSelect(e, filteredItems[highlightedIndex]);\n }\n };\n\n const scrollIntoView = (index: number) => {\n if (listRef.current) {\n const item = listRef.current.children[index] as HTMLElement;\n if (item) {\n item.scrollIntoView();\n }\n }\n };\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const newSearchTerm = event.target.value;\n setSearchTerm(newSearchTerm);\n setIsOpen(true);\n setHighlightedIndex(0);\n };\n\n const handleInputChange = (\n event: ChangeEvent<HTMLInputElement>,\n field: string,\n ) => {\n setFormData((prev) => ({ ...prev, [field]: event.target.value }));\n };\n\n // Handle save action for the create modal\n const handleSaveModal = useCallback(async (): Promise<\n ActionResponse<any>\n > => {\n console.log(\"Form Data:\", formData);\n return formData as ActionResponse<any>;\n }, []);\n\n return (\n <div className=\"relative\">\n <label className=\"text-sm mb-1 font-medium\">\n {props.attributes?.label}\n </label>\n <div>\n <input\n type=\"text\"\n value={searchTerm}\n onChange={textChangeHandler}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n // onBlur={handleBlur}\n placeholder={props.attributes?.placeholder}\n className={`peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm\n ${\n isError\n ? \"focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50\"\n : \"focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"\n } \n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none`}\n />\n </div>\n\n <div ref={containerRef}>\n {isOpen && (\n <React.Fragment>\n <div className=\"fixed z-50 right-0 bg-white top-[62px] w-1/4 border-l border-gray-200\">\n <div className=\"flex flex-col p-2 bg-accent-950 text-white\">\n <h5 className=\"text-md text-white font-medium\">\n Select a{\" \"}\n {props.attributes?.label || props.attributes?.heading}\n </h5>\n </div>\n\n <div className=\"flex justify-end px-4 border-b py-2 border-gray-200 h-10\">\n {props.createFields && props.createFields.length > 0 && (\n <button\n type=\"button\"\n className=\"text-primary hover:text-primary-800\"\n onMouseDown={(e) => {\n e.preventDefault();\n setIsCreateOpen(true);\n }}\n >\n Create\n </button>\n )}\n </div>\n </div>\n\n {/* Create Modal */}\n {isCreateOpen && (\n <div className=\"fixed right-0 w-1/4 h-full top-[62px] bg-white shadow-lg border-l border-gray-200 z-50\">\n <div className=\"flex flex-col p-2 bg-accent-950\">\n <h5 className=\"text-md font-medium text-white\">\n Create New {props.attributes?.label}\n </h5>\n </div>\n\n <div className=\"flex justify-end px-4 border-b py-2 border-gray-200\">\n <button\n type=\"button\"\n onClick={() => setIsCreateOpen(false)}\n className=\"text-red-600 hover:text-red-800\"\n >\n Close\n </button>\n </div>\n\n {/* Modal Content */}\n <div className=\"p-4\">\n {props.createFields?.map((field) => (\n <div key={field.name} className=\"mb-4\">\n <label className=\"text-sm mb-1 font-medium block\">\n {field.label}\n </label>\n <input\n type={field.type}\n value={formData[field.name] || \"\"}\n onChange={(e) => handleInputChange(e, field.name)}\n placeholder={field.placeholder}\n required={field.required}\n disabled={field.disabled}\n pattern={field.pattern}\n minLength={field.minLength}\n maxLength={field.maxLength}\n className=\"peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"\n />\n </div>\n ))}\n <Button onClick={handleSaveModal} className=\"w-full\">\n Save {props.attributes?.label}\n </Button>\n </div>\n </div>\n )}\n\n <div\n ref={listRef}\n className=\"fixed z-10 right-0 mt-[130px] top-0 w-1/4 bg-white border-l border-gray-200 shadow-lg overflow-y-auto\"\n style={{ height: \"calc(100vh - 130px)\" }}\n >\n {filteredItems.length > 0 ? (\n filteredItems.map((item, index) => (\n <div key={item[props.dataKeyFieldName!]}>\n <button\n onClick={(e) => {\n handleSelect(e, item);\n }}\n className={`w-full px-4 py-2 flex items-center space-x-2 text-left border-b border-gray-200 ${index === highlightedIndex ? \"bg-gray-200\" : \"hover:bg-gray-100\"}`}\n role=\"option\"\n tabIndex={-1}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n {/* <span>{item[props.dataTextFieldName!]}</span> */}\n <span>\n {getNestedValue(item, props.dataTextFieldName!)}\n </span>\n </button>\n </div>\n ))\n ) : (\n <div className=\"px-4 py-2 text-gray-500\">No results found</div>\n )}\n </div>\n </React.Fragment>\n )}\n </div>\n </div>\n );\n};\n\nexport default SelectWithSearchPanel;\n","import React, {\n ChangeEventHandler,\n ChangeEvent,\n useState,\n useEffect,\n} from \"react\";\nimport { list } from \"postcss\";\nimport { InputControlProps } from \"./InputControlProps\";\nimport { QueryResponse } from \"../../types/QueryResponse\";\n// React.FC<ButtonProps<any>>\n\nconst BooleanSelect: React.FC<InputControlProps> = (props) => {\n const [list, setList] = useState<any[]>();\n\n const textChangeHandler = (event: ChangeEvent<HTMLSelectElement>) => {\n const text = event.target.value;\n\n const boolValue = text?.toLowerCase() === \"true\" || text === \"1\";\n\n if (props.callback !== undefined) {\n //props.callback(props.name, text, props.index);\n props.callback({\n name: props.name,\n value: boolValue,\n index: props.index,\n groupKey: props.groupKey,\n });\n }\n };\n\n useEffect(() => {\n async function fetchData() {\n console.log(\"in select\");\n if (props.dataset) {\n setList(props.dataset);\n } else if (\n props.dataSource &&\n props.dataSource != \"\" &&\n props.serviceClient\n ) {\n let dataSource = props.dataSource;\n let response: QueryResponse<any>;\n if (props.dataSourceDependsOn) {\n if (props.dependentValue) {\n dataSource = dataSource.replace(\n `{${props.dataSourceDependsOn}}`,\n props.dependentValue,\n );\n response = await props.serviceClient!.get(dataSource);\n setList(response.result);\n }\n } else {\n response = await props.serviceClient!.get(dataSource);\n setList(response.result);\n }\n }\n }\n fetchData();\n }, [\n props.dataSource,\n props.dependentValue,\n props.dataset,\n props.dataSourceDependsOn,\n ]);\n //there has to be a way to create the service client.\n\n let value;\n if (props.value !== undefined && props.value !== null) {\n value = props.value;\n }\n\n return (\n <React.Fragment>\n <label className=\"block\">\n <span className=\"text-sm font-medium \">{props?.attributes?.label}</span>{\" \"}\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n <select\n name={props.name}\n id={props.name}\n // @ts-ignore\n value={value}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n // @ts-ignore\n placeholder={props?.attributes?.placeholder}\n disabled={props?.attributes?.readOnly}\n className=\"peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\n \"\n >\n <option className=\"\" value=\"\">\n {props.attributes?.placeholder || \"Select\"}\n </option>\n\n {list &&\n list.map((item, i) => {\n return (\n <option\n key={item[props!.dataKeyFieldName!]}\n className=\"fac-select-option\"\n value={item[props!.dataKeyFieldName!]}\n >\n {item[props!.dataTextFieldName!]}\n </option>\n );\n })}\n </select>\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n );\n};\n\nexport default BooleanSelect;\n","import React, { ChangeEventHandler, ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\n// React.FC<ButtonProps<any>>\n\nconst EmailInput: React.FC<InputControlProps> = (props) => {\n\n const textChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n\n if (text) {\n const atIndex = text.indexOf('@');\n const dotIndex = text.indexOf('.', atIndex);\n if (dotIndex < atIndex || ((text.length - dotIndex) <= 2)) {\n event.target.setCustomValidity('invaild-value');\n } else {\n event.target.setCustomValidity('');\n }\n }\n\n if (props.callback !== undefined) {\n props.callback({\n name: props.name,\n value: text,\n index: props.index\n });\n }\n };\n\n let value = \"\";\n if (props.value !== undefined && props.value !== null) {\n // @ts-ignore\n value = props.value;\n }\n\n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium text-slate-700\">{props?.attributes?.label}</span> {props?.attributes?.label && props?.attributes?.required && <span className=\"text-alert\">*</span>}\n <input type=\"email\"\n name={props.name}\n id={props.name}\n value={value}\n onChange={textChangeHandler}\n required={props?.attributes?.required}\n placeholder={props?.attributes?.placeholder}\n maxLength={props?.attributes?.maxLength}\n disabled={props?.attributes?.readOnly}\n minLength={props?.attributes?.minLength}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus-within:border-neutral-300 focus-within:ring focus-within:ring-neutral-300 focus-within:ring-opacity-50 transition-all duration-500 ease-in-out\"/>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 mb-0 text-alert text-sm\">\n {props?.attributes?.errorMessage ? props.attributes.errorMessage : \"\"}\n </p>\n </label>\n </React.Fragment>\n )\n}\n\nexport default EmailInput;","\"use client\";\nimport React, { ChangeEvent } from \"react\";\nimport { InputControlProps } from \"./InputControlProps\";\n\nconst TimeInput: React.FC<InputControlProps> = (props) => {\n\n const timeChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {\n const timeValue = event.target.value; // \"HH:mm\"\n\n if (props.callback) {\n props.callback({\n name: props.name,\n value: timeValue,\n index: props.index,\n groupKey: props.groupKey\n });\n }\n };\n\n \n return (\n <React.Fragment>\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium\">\n {props?.attributes?.label}\n </span>\n {props?.attributes?.label && props?.attributes?.required && (\n <span className=\"text-alert\">*</span>\n )}\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"time\"\n name={props.name}\n id={props.name}\n value={typeof props.value === \"boolean\" ? \"\" : props.value ?? \"\"}\n onChange={timeChangeHandler}\n required={props?.attributes?.required}\n disabled={props?.attributes?.readOnly}\n className=\"peer mt-1 py-1.5 block w-full rounded border-gray-300 shadow-sm\n focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\n disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none\"\n />\n </div>\n\n <p className=\"hidden group-[.validated]:peer-invalid:block mt-1 text-alert text-sm\">\n {props?.attributes?.errorMessage ?? \"\"}\n </p>\n </label>\n </React.Fragment>\n );\n};\n\nexport default TimeInput;\n","\"use client\";\nimport React, { useEffect, useState, useCallback, useReducer } from \"react\";\nimport InputControl from \"../controls/edit/InputControl\";\nimport { useRouter } from \"next/navigation\";\nimport ViewControl from \"../controls/view/ViewControl\";\nimport NoContentView from \"./NoContentView\";\nimport { ServiceClientInterface } from \"../types/ServiceClientInterface\";\nimport { QueryResponse } from \"../types/QueryResponse\";\nimport { InputChangeCallback } from \"../controls/InputChangeCallback\";\nimport InputControlType, { Constants } from \"../controls/edit/InputControlType\";\nimport ViewControlTypes from \"../controls/view/ViewControlTypes\";\nimport ContentView from \"./ContentView\";\nimport { Hyperlink } from \"./Hyperlink\";\nimport { StyleTypes } from \"../StyleTypes\";\nimport OdataBuilder from \"../../clients/OdataBuilder\";\nimport Icon from \"../../svg/Icon\";\nimport FormReducer, { FORM_INPUT_UPDATE, FormState } from \"../../FormReducer\";\n\ninterface DataListConfiguration<T> {\n title?: string;\n columns: DataListColumn[];\n filters?: FilterColumn[];\n path: string;\n serviceClient?: ServiceClientInterface;\n query?: { [key: string]: string };\n subTitle?: string;\n dataset?: QueryResponse<any>;\n addLinkHref?: string;\n addLinkText?: string;\n recordValidityColumnName?: string;\n altLinkUrl?: string;\n}\n\ninterface DataListColumn {\n label: string;\n name: string;\n controlType: string;\n enableSorting: boolean;\n width: string;\n format?: string;\n showAsLink?: boolean;\n linkUrlSegment?: string;\n emptyValueLabel?: string;\n addhref?: boolean;\n customProps?: any;\n}\n\ninterface FilterColumn {\n placeholder: string;\n name: string;\n servicePath: string;\n dataTextFieldName: string;\n dataKeyFieldName: string;\n dataTypeCode: string;\n}\n\nconst DataList: React.FC<DataListConfiguration<any>> = (props) => {\n console.log(props.dataset, \"datasetssssss\");\n const router = useRouter();\n let builder = new OdataBuilder(props.path);\n let orderBy = \"\";\n let activePageNumber = 0;\n let pages = 0;\n console.log(props.addLinkText);\n const [isDataFound, setIsDataFound] = useState<boolean | null>(null);\n\n useEffect(() => {\n if (props?.dataset) {\n if (props?.dataset.result && props.dataset.result.length > 0) {\n setIsDataFound(true);\n } else {\n setIsDataFound(false);\n }\n }\n }, [props.dataset]);\n\n function getNestedProperty<T>(obj: T, path: string): any {\n if (path.includes(\".\")) {\n return path\n .split(\".\")\n .reduce((prev: any, curr: string) => (prev ? prev[curr] : null), obj);\n } else if (Array.isArray(obj[path as keyof T])) {\n return (obj[path as keyof T] as string[]).map((item, index) => (\n <div key={index}>{item}</div>\n ));\n } else {\n return obj[path as keyof T];\n }\n }\n\n const initialState: FormState<any> = {\n inputValues: {},\n lastPropertyChanged: \"\",\n };\n\n const [formState, dispatch] = useReducer(FormReducer<any>, initialState);\n\n const handleFilterChange: InputChangeCallback<any> = useCallback(\n (updatedValues) => {\n dispatch({\n type: FORM_INPUT_UPDATE,\n name: updatedValues.name,\n value: updatedValues.value,\n });\n let builder = new OdataBuilder(props.path);\n builder = builder.setQuery(props.query);\n if (updatedValues.value != \"\") {\n const filter = props.filters?.find((x) => x.name == updatedValues.name);\n if (filter?.dataTypeCode == \"number\") {\n router.push(\n builder.getNewFilterUrl(\n updatedValues.name.toString() + \" eq \" + updatedValues.value + \"\",\n ),\n );\n } else {\n router.push(\n builder.getNewFilterUrl(\n updatedValues.name.toString() +\n \" eq '\" +\n updatedValues.value +\n \"'\",\n ),\n );\n }\n } else {\n router.push(builder.getNewFilterUrl(\"\"));\n }\n },\n [dispatch, props, router],\n );\n\n builder = builder.setQuery(props.query);\n orderBy = builder.getOrderBy();\n activePageNumber = builder.getPageNumber(Constants.pagesize);\n let label = \"\";\n\n if (props.dataset && props.dataset!.count) {\n pages = Math.ceil(props.dataset!.count / Constants.pagesize);\n\n label = `Showing ${(activePageNumber - 1) * Constants.pagesize + 1} - `;\n if (activePageNumber * Constants.pagesize > props.dataset!.count!) {\n label =\n label + `${props.dataset!.count} of ${props.dataset!.count} results`;\n } else {\n label =\n label +\n `${activePageNumber * Constants.pagesize} of ${props.dataset!.count\n } results`;\n }\n }\n\n const renderPageNumbers = () => {\n if (pages <= 10) {\n return Array.from({ length: pages }, (_, index) => index + 1).map(\n (page) => (\n <React.Fragment key={page}>\n {activePageNumber !== page ? (\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(page)}\n >\n {page}\n </Hyperlink>\n ) : (\n <span className=\"px-3 py-1 border-t border-b border-gray-300 bg-primary text-white\">\n {page}\n </span>\n )}\n </React.Fragment>\n ),\n );\n } else {\n const showFirstPages = activePageNumber <= 5;\n const showLastPages = activePageNumber > pages - 5;\n\n if (showFirstPages) {\n return (\n <>\n {Array.from({ length: 8 }, (_, index) => index + 1).map((page) => (\n <React.Fragment key={page}>\n {activePageNumber !== page ? (\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(page)}\n >\n {page}\n </Hyperlink>\n ) : (\n <span className=\"px-3 py-1 border-t border-b border-gray-300 bg-primary text-white\">\n {page}\n </span>\n )}\n </React.Fragment>\n ))}\n\n <span className=\"px-2 py-1\">...</span>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(pages - 1)}\n >\n {pages - 1}\n </Hyperlink>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(pages)}\n >\n {pages}\n </Hyperlink>\n\n <div className=\"relative inline-block\">\n <select\n className=\" py-1 border border-gray-300 bg-white text-gray-700 appearance-none rounded-none\"\n value={\n activePageNumber > 8 && activePageNumber < pages - 1\n ? activePageNumber\n : \"\"\n }\n onChange={(e) => {\n const page = parseInt(e.target.value);\n if (page) {\n router.push(builder.getNewPageUrl(page));\n }\n }}\n >\n <option className=\"\" value=\"\">\n Jump to\n </option>\n {Array.from(\n { length: Math.max(0, pages - 10) },\n (_, index) => index + 9,\n ).map((page) => (\n <option key={page} value={page}>\n {page}\n </option>\n ))}\n </select>\n </div>\n </>\n );\n } else if (showLastPages) {\n return (\n <>\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(1)}\n >\n 1\n </Hyperlink>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(2)}\n >\n 2\n </Hyperlink>\n\n <span className=\"px-2 py-1\">...</span>\n\n {Array.from({ length: 8 }, (_, index) => pages - 7 + index).map(\n (page) => (\n <React.Fragment key={page}>\n {activePageNumber !== page ? (\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(page)}\n >\n {page}\n </Hyperlink>\n ) : (\n <span className=\"px-3 py-1 border-t border-b border-gray-300 bg-primary text-white\">\n {page}\n </span>\n )}\n </React.Fragment>\n ),\n )}\n </>\n );\n } else {\n return (\n <>\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(1)}\n >\n 1\n </Hyperlink>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(2)}\n >\n 2\n </Hyperlink>\n\n <span className=\"px-2 py-1\">...</span>\n\n {Array.from(\n { length: 5 },\n (_, index) => activePageNumber - 2 + index,\n ).map((page) => (\n <React.Fragment key={page}>\n {activePageNumber !== page ? (\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(page)}\n >\n {page}\n </Hyperlink>\n ) : (\n <span className=\"px-3 py-1 border-t border-b border-gray-300 bg-primary text-white\">\n {page}\n </span>\n )}\n </React.Fragment>\n ))}\n\n <span className=\"px-2 py-1\">...</span>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(pages - 1)}\n >\n {pages - 1}\n </Hyperlink>\n\n <Hyperlink\n className=\"px-3 py-1 border-t border-b border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"\n href={builder.getNewPageUrl(pages)}\n >\n {pages}\n </Hyperlink>\n\n <div className=\"relative inline-block\">\n <select\n className=\"px-2 py-1 border border-gray-300 bg-white text-gray-700 appearance-none rounded-none\"\n value={\n activePageNumber > 2 && activePageNumber < pages - 1\n ? activePageNumber\n : \"\"\n }\n onChange={(e) => {\n const page = parseInt(e.target.value);\n if (page) {\n router.push(builder.getNewPageUrl(page));\n }\n }}\n >\n <option value=\"\">Jump to</option>\n {Array.from({ length: pages - 4 }, (_, index) => index + 3)\n .filter((page) => page > 2 && page < pages - 1)\n .map((page) => (\n <option key={page} value={page}>\n {page}\n </option>\n ))}\n </select>\n </div>\n </>\n );\n }\n }\n };\n\n return (\n <React.Fragment>\n <ContentView isDataFound={isDataFound}>\n {(props.title || props.filters || props.addLinkHref) && (\n <div\n className={`flex justify-between items-center bg-white pl-6 pr-2 h-14 mb-3 shadow-sm rounded-md border-b border-neutral-200 sticky top-0`}\n >\n {/* Title */}\n {props.title ? (\n <div className=\"inline-flex items-center gap-2\">\n <h2 className=\"text-lg font-semibold text-black-800\">\n {props.title}\n </h2>\n </div>\n ) : (\n <div />\n )}\n\n <div className=\"flex items-center gap-3\">\n {props.filters &&\n props.filters.map((filter) => (\n <InputControl\n key={filter.name}\n name={filter.name}\n controlType={InputControlType.select}\n value={formState.inputValues[filter.name]}\n dataSource={filter.servicePath}\n dataKeyFieldName={filter.dataKeyFieldName}\n dataTextFieldName={filter.dataTextFieldName}\n serviceClient={props.serviceClient}\n callback={handleFilterChange}\n attributes={{ placeholder: filter.placeholder }}\n />\n ))}\n\n {props.addLinkHref && (\n <Hyperlink\n className=\"gap-1\"\n linkType={StyleTypes.Primary}\n href={props.addLinkHref}\n >\n <Icon name=\"plus\" className=\"w-4 h-4\" />\n <span className=\"text-sm font-medium\">\n {props.addLinkText || \"Add New\"}\n </span>\n </Hyperlink>\n )}\n </div>\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto justify-end bg-white rounded shadow h-[calc(100vh-14rem)]\">\n <table className=\"w-full divide-y divide-gray-200\">\n <thead className=\"bg-gray-50 sticky top-0\">\n <tr>\n {props?.columns?.map((column) => {\n let url = builder.getNewOrderByUrl(column.name);\n let icon = \"chevronUpDown\";\n if (orderBy.includes(`${column.name} desc`)) {\n icon = \"chevronDown\";\n url = builder.getNewOrderByUrl(column.name);\n } else if (orderBy.includes(`${column.name}`)) {\n icon = \"chevronUp\";\n url = builder.getNewOrderByUrl(column.name + \" desc\");\n }\n return (\n <th\n key={column.name}\n className={\n \"px-6 py-3 text-left font-medium cursor-pointer bg-neutral-soft \" +\n column.width +\n (column.controlType == ViewControlTypes.moneyView\n ? \" text-right\"\n : \"\")\n }\n >\n <Hyperlink href={url} className=\"!text-neutral-contrast \">\n <span className=\"flex items-center space-x-1\">\n <span className=\"text-black\">{column.label}</span>\n {column.enableSorting && (\n <Icon className=\"w-4 h-4\" name={icon} />\n )}\n </span>\n </Hyperlink>\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody className=\"divide-y divide-gray-200 \">\n {props.dataset?.result?.map((dataitem, index) => {\n let validityClass = \"\";\n console.log(\"dataitem\", dataitem);\n if (\n props.recordValidityColumnName &&\n getNestedProperty(dataitem, props.recordValidityColumnName) ==\n false\n ) {\n validityClass = \"bg-alert-200\";\n }\n\n return (\n <tr key={index} className={validityClass}>\n {props?.columns?.map((column, colindex) => {\n console.log(\"column\", column);\n return (\n <React.Fragment key={colindex}>\n <td\n className={\n \"px-6 py-2 whitespace-normal \" +\n (column.controlType == ViewControlTypes.moneyView\n ? \"\"\n : \"\")\n }\n >\n {column.addhref === true ? (\n <Hyperlink\n className=\"\"\n href={`https://${dataitem[column.name]}`}\n >\n <ViewControl\n controlType={column.controlType}\n value={getNestedProperty(\n dataitem,\n column.name,\n )}\n format={column.format}\n customProps={column.customProps}\n />\n </Hyperlink>\n ) : column.showAsLink ? (\n <Hyperlink\n // href={\n // props.path +\n // dataitem[props.columns[0].name] +\n // \"/\" +\n // column.linkUrlSegment\n // }\n href={\n props.path +\n dataitem[props.columns[0].name] +\n \"/\" +\n (dataitem.linkUrlSegment ??\n column.linkUrlSegment)\n }\n >\n <ViewControl\n controlType={column.controlType}\n value={\n getNestedProperty(dataitem, column.name) ||\n column.emptyValueLabel\n }\n format={column.format}\n customProps={column.customProps}\n />\n </Hyperlink>\n ) : (\n <ViewControl\n controlType={column.controlType}\n value={getNestedProperty(dataitem, column.name)}\n format={column.format}\n customProps={column.customProps}\n />\n )}\n </td>\n </React.Fragment>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n <div className=\"pt-4 border-t border-t-gray-50 sticky bottom-0 h-11 mt-2 \">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-gray-700\">{label}</div>\n <div className=\"flex space-x-2 items-center\">\n {activePageNumber > 1 && (\n <Hyperlink\n className=\"px-3 py-1 rounded-l-md border border-gray-300 bg-white text-gray-500 hover:bg-gray-200\"\n href={builder.getNewPageUrl(activePageNumber - 1)}\n >\n Prev\n </Hyperlink>\n )}\n {activePageNumber <= 1 && (\n <div className=\"px-3 py-1 rounded-l-md border border-gray-300 bg-gray-200 text-gray-500 hover:bg-gray-200\">\n Prev\n </div>\n )}\n\n {renderPageNumbers()}\n\n {activePageNumber < pages && (\n <Hyperlink\n className=\"px-3 py-1 rounded-r-md border border-gray-300 bg-white text-gray-500 hover:bg-gray-200\"\n href={builder.getNewPageUrl(activePageNumber + 1)}\n >\n Next\n </Hyperlink>\n )}\n {activePageNumber >= pages && (\n <div className=\"px-3 py-1 rounded-r-md border border-gray-300 bg-gray-200 text-gray-500\">\n Next\n </div>\n )}\n </div>\n </div>\n </div>\n </ContentView>\n\n <NoContentView isDataFound={isDataFound}>\n {(props.title || props.filters || props.addLinkHref) && (\n <div\n className={`flex justify-between items-center bg-white pl-6 pr-2 h-14 mb-3 shadow-sm rounded-md border-b border-neutral-200`}\n >\n {props.title ? (\n <div className=\"inline-flex items-center gap-2\">\n <h2 className=\"text-lg font-semibold text-black\">\n {props.title}\n </h2>\n </div>\n ) : (\n <div />\n )}\n\n <div className=\"flex items-center gap-3\">\n {props.filters &&\n props.filters.map((filter) => (\n <InputControl\n key={filter.name}\n name={filter.name}\n controlType={InputControlType.select}\n value={formState.inputValues[filter.name]}\n dataSource={filter.servicePath}\n dataKeyFieldName={filter.dataKeyFieldName}\n dataTextFieldName={filter.dataTextFieldName}\n serviceClient={props.serviceClient}\n callback={handleFilterChange}\n attributes={{ placeholder: filter.placeholder }}\n />\n ))}\n\n {props.addLinkHref && (\n <Hyperlink\n className=\"gap-1\"\n linkType={StyleTypes.Primary}\n href={props.addLinkHref}\n >\n <Icon name=\"plus\" className=\"w-4 h-4\" />\n <span className=\"text-sm font-medium\">\n {props.addLinkText || \"Add New\"}\n </span>\n </Hyperlink>\n )}\n </div>\n </div>\n )}\n <div className=\"flex-grow overflow-y-auto justify-end bg-white rounded shadow h-[75vh]\">\n <div>\n <table className=\"w-full divide-y divide-gray-200\">\n <thead className=\"bg-gray-50\">\n <tr>\n {props?.columns?.map((column) => {\n let url = builder.getNewOrderByUrl(column.name);\n let icon = \"chevronUpDown\";\n if (orderBy.includes(`${column.name} desc`)) {\n icon = \"chevronDown\";\n url = builder.getNewOrderByUrl(column.name);\n } else if (orderBy.includes(`${column.name}`)) {\n icon = \"chevronUp\";\n url = builder.getNewOrderByUrl(column.name + \" desc\");\n }\n return (\n <th\n key={column.name}\n className={\n \"px-6 py-3 text-left font-medium cursor-pointer bg-neutral-soft \" +\n column.width +\n (column.controlType == ViewControlTypes.moneyView\n ? \" text-right\"\n : \"\")\n }\n >\n <Hyperlink href={url} className=\"text-body-950\">\n <span className=\"flex items-center space-x-1\">\n <span>{column.label}</span>\n {column.enableSorting && (\n <Icon className=\"w-4 h-4\" name={icon} />\n )}\n </span>\n </Hyperlink>\n </th>\n );\n })}\n </tr>\n </thead>\n </table>\n </div>\n <div className=\"w-full text-center bg-transparent pt-5\">\n There are no entries in the table at the moment.\n </div>\n </div>\n </NoContentView>\n </React.Fragment>\n );\n};\n\nexport default DataList;\n","import React, {\n \n} from \"react\";\nimport Image from \"next/image\";\n\nconst NoContentView = (props: {\n children: React.ReactNode;\n isDataFound?: boolean | null | undefined;\n}) => {\n return (\n <React.Fragment>\n {props.isDataFound === false && props.children}\n </React.Fragment>\n );\n};\n\nexport default NoContentView;\n","import React from \"react\";\n\nconst ContentView = (props: {\n children: React.ReactNode;\n isDataFound: boolean | null | undefined;\n}) => {\n return (\n <React.Fragment>\n {props.isDataFound == null && (\n <div className=\"\">\n <div className=\"bg-gray-200 rounded-md p-4 animate-pulse\">\n <div className=\"flex items-center mb-4\">\n <div className=\"bg-gray-300 h-8 w-8 rounded-full animate-pulse\"></div>\n <div className=\"ml-2\">\n <div className=\"bg-gray-300 h-3 w-16 animate-pulse\"></div>\n <div className=\"bg-gray-300 h-2 w-12 animate-pulse\"></div>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4 mt-6\">\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n </div>\n </div>\n </div>\n )}\n {props.isDataFound === true && props.children}\n </React.Fragment>\n );\n};\n\nexport default ContentView;\n","import Link from 'next/link';\n// import { StyleTypes, buttonClasses, BaseComponentProps } from './StyleTypes';\nimport React from 'react';\nimport { BaseComponentProps, buttonClasses, StyleTypes } from '../StyleTypes';\n\ninterface HyperlinkProps extends BaseComponentProps {\n href?: string;\n linkType?: StyleTypes;\n title?: string;\n}\n\nexport function Hyperlink(props: HyperlinkProps) {\n let linkClass = props.linkType ? buttonClasses.get(props.linkType) : buttonClasses.get(StyleTypes.Link);\n const target = props.href?.startsWith(\"https://\") ? \"_blank\" : \"_self\";\n const additionalProps = target === \"_blank\" ? { rel: \"noopener noreferrer\" } : {};\n\n return (\n <React.Fragment>\n {props.href && (\n <Link\n href={props.href}\n prefetch={false}\n className={linkClass + \" \" + props.className}\n title={props.title}\n target={target}\n {...additionalProps}\n >\n {props.children}\n </Link>\n )}\n {!props.href && (\n <span className={props.className}>\n {props.children}\n </span>\n )}\n </React.Fragment>\n );\n}","import { Constants } from \"../components/controls/edit/InputControlType\";\n\nexport default class OdataBuilder {\n private baseUrl: string;\n private top: string;\n private skip: string;\n private filterBy: string;\n private orderBy: string;\n\n constructor(url: string) {\n this.baseUrl = url;\n this.top = Constants.pagesize.toString();\n this.skip = \"0\";\n this.filterBy = \"\";\n this.orderBy = \"\";\n }\n\n setQuery(odata?: { [key: string]: string }): OdataBuilder {\n if (!odata) return this;\n\n if (odata[\"$skip\"]) this.skip = odata[\"$skip\"];\n if (odata[\"$top\"]) this.top = odata[\"$top\"];\n if (odata[\"$filter\"]) this.filterBy = odata[\"$filter\"];\n if (odata[\"$orderby\"]) this.orderBy = odata[\"$orderby\"];\n\n return this;\n }\n\n getPageNumber(pageSize: number): number {\n const skip = parseInt(this.skip);\n const top = parseInt(this.top);\n\n if (!isNaN(skip) && !isNaN(top)) {\n return skip / pageSize + 1;\n }\n\n return 1;\n }\n\n getNewOrderByUrl(orderBy: string): string {\n let url = `${this.baseUrl}?$skip=0&$top=${this.top}&$count=true`;\n\n if (this.filterBy) {\n url += `&$filter=${encodeURIComponent(this.filterBy)}`;\n }\n\n url += `&$orderby=${encodeURIComponent(orderBy)}`;\n\n return url;\n }\n\n getNewFilterUrl(filterBy: string): string {\n let url = `${this.baseUrl}?$skip=0&$top=${this.top}&$count=true`;\n\n if (filterBy) {\n url += `&$filter=${encodeURIComponent(filterBy)}`;\n }\n\n if (this.orderBy) {\n url += `&$orderby=${encodeURIComponent(this.orderBy)}`;\n }\n\n return url;\n }\n\n getNewPageUrl(page: number): string {\n const skip = page * Constants.pagesize - Constants.pagesize;\n\n let url = `${this.baseUrl}?$skip=${skip}&$top=${this.top}&$count=true`;\n\n if (this.filterBy) {\n url += `&$filter=${encodeURIComponent(this.filterBy)}`;\n }\n\n if (this.orderBy) {\n url += `&$orderby=${encodeURIComponent(this.orderBy)}`;\n }\n\n return url;\n }\n\n getOrderBy(): string {\n return this.orderBy;\n }\n}","import React from 'react';\n\nconst ChevronUpDown: React.FC<IconProps> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\" className={props.className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9\" />\n </svg>\n\n );\n};\nexport default ChevronUpDown;\n","import React from 'react';\n\nconst ChevronDown: React.FC<IconProps> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\" className={props.className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n </svg>\n );\n};\nexport default ChevronDown;\n","import React from 'react';\nconst ChevronUp: React.FC<IconProps> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\" className={props.className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 15.75l7.5-7.5 7.5 7.5\" />\n </svg>\n );\n};\nexport default ChevronUp;\n","import React from 'react';\n\nconst Plus: React.FC<IconProps> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\" className={props.className}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>\n );\n};\nexport default Plus;\n","import React from \"react\";\nimport ChevronUpDown from \"./chevron-updown\";\nimport ChevronDown from \"./chevron-down\";\nimport ChevronUp from \"./chevron-up\";\nimport Plus from \"./plus\";\n\ninterface IconMap {\n [key: string]: React.FunctionComponent<IconProps>;\n}\n\nconst Icons: IconMap = {\n chevronUpDown: ChevronUpDown,\n chevronDown: ChevronDown,\n chevronUp:ChevronUp,\n plus:Plus\n};\n\nexport default Icons;","import { FC } from 'react';\nimport Icons from './Icons';\n\n\nconst Icon: FC<IconProps> = ({ name, className, ...props }) => {\n const IconComponent = Icons[name];\n if (!IconComponent) {\n console.error(`Icon \"${name}\" not found.`);\n return null;\n }\n\n return <IconComponent {...props} className={className} />;\n};\n\nexport default Icon;","export const FORM_INPUT_UPDATE = \"FORM_INPUT_UPDATE\";\nexport const FORM_INITIAL_UPDATE = \"FORM_INITIAL_UPDATE\";\n\n\nexport interface FormState<T> {\n inputValues: T;\n lastPropertyChanged: string;\n}\n\ntype FormAction<T> = {\n type: typeof FORM_INPUT_UPDATE | typeof FORM_INITIAL_UPDATE;\n name: keyof T;\n value?: T[keyof T];\n values?: T;\n};\n\nfunction setNestedProperty<T>(obj: T, path: string, value: any): T {\n if (path.includes(\".\")) {\n const keys = path.split(\".\");\n const lastKey = keys.pop() as string;\n\n const newObj: any = { ...obj };\n let current = newObj;\n\n keys.forEach((key) => {\n current[key] = { ...current[key] };\n current = current[key];\n });\n\n current[lastKey] = value;\n return newObj;\n }\n\n return {\n ...obj,\n [path]: value,\n };\n}\n\nfunction FormReducer<T>(\n state: FormState<T>,\n action: FormAction<T>\n): FormState<T> {\n switch (action.type) {\n case FORM_INPUT_UPDATE:\n if (!action.name) return state;\n\n return {\n inputValues: setNestedProperty(\n state.inputValues,\n action.name.toString(),\n action.value\n ),\n lastPropertyChanged: action.name.toString(),\n };\n\n case FORM_INITIAL_UPDATE:\n return {\n inputValues: { ...action.values! },\n lastPropertyChanged: action.name?.toString() || \"\",\n };\n\n\n default:\n return state;\n }\n}\n\nexport default FormReducer;","import React from \"react\";\nimport ParagraphNode from \"./nodes/ParagraphNode\";\nimport HeadingNode from \"./nodes/HeadingNode\";\nimport ListNode from \"./nodes/ListNode\";\nimport QuoteNode from \"./nodes/QuoteNode\";\nimport CodeNode from \"./nodes/CodeNode\";\nimport HorizontalRuleNode from \"./nodes/HorizontalRuleNode\";\nimport LayoutContainerNode from \"./nodes/LayoutContainerNode\";\nimport ImageNode from \"./nodes/ImageNode\";\nimport WidgetNode from \"./nodes/WidgetNode\";\nimport FormContainerNode from \"./nodes/FormContainerNode\";\nimport DivContainer from \"./nodes/DivContainer\";\nimport { PageBodyNode, RootElement } from \"./Types\";\nimport { Session } from \"../types/WebPageValues\";\nimport SVGIconNode from \"./nodes/SVGIconNode\";\nimport EmbedNode from \"./nodes/EmbedNode\";\n\ninterface PageBodyRendererProps {\n rawBody?: string;//RootElement\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl: string,\n breadcrumb?: string,\n donotApplyContainerClass?: boolean\n donotApplyContainerLargeClass?: boolean\n widgetRegistry?: Record<string, React.ComponentType<any>>; // ✅ ADD THIS\n\n}\n\nconst NodeTypes = {\n [\"paragraph\"]: ParagraphNode,\n [\"heading\"]: HeadingNode,\n [\"list\"]: ListNode,\n [\"quote\"]: QuoteNode,\n [\"code\"]: CodeNode,\n [\"image\"]: ImageNode,\n [\"horizontalrule\"]: HorizontalRuleNode,\n [\"layout-container\"]: LayoutContainerNode,\n [\"widget\"]: WidgetNode,\n [\"form-container\"]: FormContainerNode,\n [\"div-container\"]: DivContainer,\n [\"svg-icon\"]: SVGIconNode,\n [\"embed\"]: EmbedNode\n\n};\n\n\nconst PageBodyRenderer: React.FC<PageBodyRendererProps> = (props) => {\n\n\n let pageBodyTree: PageBodyNode | undefined;\n if (props.rawBody != undefined && props.rawBody != null && props.rawBody != \"\") {\n try {\n pageBodyTree = JSON.parse(props.rawBody.toString()) as PageBodyNode;\n }\n catch (error) { }\n }\n\n let rootNode: RootElement | undefined;\n if (pageBodyTree && pageBodyTree.root) {\n rootNode = pageBodyTree.root\n }\n\n return (\n\n <React.Fragment>\n {rootNode && rootNode?.children?.map((node: any, index: number) => {\n {/* @ts-ignore */ }\n const SelectedNode = NodeTypes[node.type];\n\n return (\n <React.Fragment key={index}>\n {SelectedNode && <React.Fragment>\n\n {node.type == \"layout-container\"\n\n ? <React.Fragment>\n {/* @ts-ignore */}\n <SelectedNode node={node} firstNode={true}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n widgetRegistry={props.widgetRegistry} // ✅ ADD\n\n />\n </React.Fragment>\n :\n <React.Fragment>\n {/* @ts-ignore */}\n <SelectedNode node={node}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n widgetRegistry={props.widgetRegistry} // ✅ ADD\n\n />\n </React.Fragment>}\n\n </React.Fragment>\n }\n </React.Fragment>\n )\n })\n }\n </React.Fragment>\n )\n}\n\nexport default PageBodyRenderer\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent, JSX } from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport LinkNode from \"./LinkNode\";\nimport { ParagraphElement, TextElement, LinkElement } from \"../Types\";\nimport SVGIconNode from \"./SVGIconNode\";\nimport EquationNode from \"./EquationNode\";\nimport { Session } from \"../../types/WebPageValues\";\nimport DatafieldNode from \"./DatafieldNode\";\n\nconst ParagraphNode = (props: {\n node: ParagraphElement\n dataitem: any;\n session: Session;\n apiBaseUrl: string;\n routeParameters?: { [key: string]: any };\n parentTag?: keyof JSX.IntrinsicElements;\n}) => {\n const NodeTypes = {\n [\"text\"]: TextNode,\n [\"linebreak\"]: LineBreakNode,\n [\"link\"]: LinkNode,\n [\"datafield\"]: DatafieldNode,\n [\"equation\"]: EquationNode,\n [\"svg-icon\"]: SVGIconNode\n };\n\n\n const FormatClass = {\n \"center\": \"text-center\",\n \"right\": \"text-right\",\n };\n {/* @ts-ignore */ }\n let formatClasses = FormatClass[props.node.format] || \"\";\n const isInlineOnlyParent = props.parentTag === \"summary\";\n const hasChildren = props.node.children && props.node.children.length > 0;\n\n // 🚫 summary must NOT contain block elements\n if (isInlineOnlyParent) {\n return (\n <>\n {hasChildren &&\n props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode\n node={node}\n dataitem={props.dataitem}\n // @ts-ignore\n session={props.session}\n apiBaseUrl={props.apiBaseUrl}\n routeParameters={props.routeParameters}\n />\n )}\n </React.Fragment>\n );\n })}\n </>\n );\n }\n\n // ✅ Normal paragraph rendering\n return (\n <div className={\" \" + formatClasses}>\n {hasChildren &&\n props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode\n node={node}\n dataitem={props.dataitem}\n // @ts-ignore\n session={props.session}\n apiBaseUrl={props.apiBaseUrl}\n routeParameters={props.routeParameters}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* ✅ spacing fallback only in block context */}\n {!hasChildren && (\n <div className=\"py-1.5 lg:py-2\"></div>\n )}\n </div>\n );\n}\n\nexport default ParagraphNode;\n","import { TextElement } from \"../Types\";\n\nconst TextNode = (props: { node: TextElement, dataitem: any, linkText?: string | null, routeParameters?: { [key: string]: any } }) => {\n const NodeTypes = {\n [\"text\"]: TextNode\n\n };\n\n\n function cssStringToJson(cssString: string) {\n\n\n\n const styleObject: Record<string, string> = {};\n\n // Extract all property-value pairs from the CSS string\n const matches = cssString?.match(/([\\w-]+)\\s*:\\s*([^;]+)\\s*;/g);\n\n if (matches) {\n matches.forEach((match) => {\n const parts = match.match(/([\\w-]+)\\s*:\\s*([^;]+)\\s*;/);\n if (parts && parts.length === 3) {\n const property = parts[1].trim();\n const value = parts[2].trim();\n styleObject[property] = value;\n }\n });\n }\n\n return styleObject;\n }\n\n function toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n }\n function convertKeysToCamelCase(obj: any): any {\n if (Array.isArray(obj)) {\n return obj.map(convertKeysToCamelCase);\n } else if (obj !== null && typeof obj === 'object') {\n return Object.fromEntries(\n Object.entries(obj)\n .filter(([_, value]) => value !== \"\") // Exclude empty string values\n .map(([key, value]) => [\n toCamelCase(key),\n convertKeysToCamelCase(value)\n ])\n );\n }\n return obj;\n }\n\n\n\n function getFormatClass(format: number): string {\n const classes: string[] = [];\n\n if (format === 1) classes.push(\"font-medium\"); // BOLD\n if (format === 2) classes.push(\"italic\"); // ITALIC\n if (format === 3) classes.push(\"font-medium italic\"); // BOLD ITALIC\n if (format === 8) classes.push(\"underline\"); // UNDERLINE\n if (format === 9) classes.push(\"font-medium underline\"); // BOLD UNDERLINE\n if (format === 10) classes.push(\"italic underline\"); // ITALIC UNDERLINE\n if (format === 11) classes.push(\"font-medium italic underline\"); // BOLD ITALIC UNDERLINE\n if (format === 256) classes.push(\"lowercase\"); // LOWERCASE\n if (format === 512) classes.push(\"uppercase\"); // UPPERCASE\n if (format === 1024) classes.push(\"capitalize\"); // CAPITALIZE\n\n return classes.join(\" \");\n }\n const styles = convertKeysToCamelCase(cssStringToJson(props.node.style));\n\n\n function replacePlaceholders(template: any, dataItem: any) {\n return template.replace(/{(\\w+)}/g, (_: any, key: any) => {\n return key in dataItem ? dataItem[key] : `{${key}}`; // keep as-is if not found\n });\n }\n\n // 🔹 Determine text to display\n const displayText =\n props.linkText\n ? props.linkText\n : props.node.text;\n\n return (\n <span style={{ ...styles }} className={getFormatClass(props.node.format)}>\n {props.dataitem && props.linkText ? displayText : props.dataitem ? replacePlaceholders(props.node.text, props.dataitem) : props.node.text}\n </span>\n )\n}\n\nexport default TextNode;\n","import { LineBreakElement } from \"../Types\";\nconst LineBreakNode = (props: { node: LineBreakElement }) => {\n return (\n <div className=\"py-0.5 lg:py-1.5\"></div>\n )\n}\n\nexport default LineBreakNode;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport { LinkElement } from \"../Types\";\nimport Link from \"next/link\";\n\n// React.FC<ButtonProps<any>>\nconst LinkNode = (props: { node: LinkElement }) => {\n const NodeTypes = {\n [\"text\"]: TextNode\n };\n\n\n\n\n {/* @ts-ignore */ }\n let formatClasses = props.node.cssClass || \"\";\n\n return (\n <Link className={formatClasses} href={props.node.url} title={props.node.title}>\n {\n props.node.children && props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && <SelectedNode node={node} />}\n </React.Fragment>\n )\n })\n }\n {props.node.children.length == 0 && <br></br>\n\n }\n </Link>\n )\n}\n\nexport default LinkNode;\n","import React from \"react\";\n\ninterface SVGIconNodeProps {\n node: {\n svgCode: string;\n width?: number;\n height?: number;\n color?: string;\n };\n}\n\nconst SVGIconNode: React.FC<SVGIconNodeProps> = ({ node }) => {\n if (!node?.svgCode) return null;\n\n return (\n <span\n style={{\n display: \"inline-flex\",\n width: node.width,\n height: node.height,\n color: node.color\n }}\n dangerouslySetInnerHTML={{ __html: node.svgCode }}\n />\n );\n};\n\nexport default SVGIconNode;\n","// pageRenderingEngine/nodes/EquationNode.tsx\n\nimport React from \"react\";\nimport katex from \"katex\";\n// import \"katex/dist/katex.css\";\n\ninterface EquationNodeProps {\n node: {\n type: \"equation\";\n equation: string;\n inline: boolean;\n version: number;\n };\n}\n\nconst EquationNode: React.FC<EquationNodeProps> = ({ node }) => {\n const { equation, inline } = node;\n\n let html = \"\";\n\n try {\n html = katex.renderToString(equation, {\n displayMode: !inline,\n throwOnError: false,\n });\n } catch (error) {\n // Fallback: render raw text if KaTeX fails\n // html = equation;\n html = katex.renderToString(`\\\\text{Invalid equation}`, {\n throwOnError: false,\n });\n }\n\n if (inline) {\n return (\n <span\n className=\"katex-inline\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n }\n\n return (\n <div\n className=\"katex-block my-3 text-center\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n};\n\nexport default EquationNode;\n","import PageBodyRenderer from \"../PageBodyRenderer\";\nimport { Session } from \"../../types/WebPageValues\";\nimport { TextElement } from \"../Types\";\nimport ViewControl from \"../../controls/view/ViewControl\";\n\nfunction getNestedProperty<T>(obj: T, path: string): any {\n if (!obj || !path) return null;\n\n if (path.includes(\".\")) {\n return path\n .split(\".\")\n .reduce((prev: any, curr: string) => (prev ? prev[curr] : null), obj);\n } else if (Array.isArray(obj[path as keyof T])) {\n return (obj[path as keyof T] as string[]).map((item, index) => (\n <div key={index}>{item}</div>\n ));\n } else {\n return obj[path as keyof T];\n }\n}\n\nconst DatafieldNode = (props: {\n node: TextElement;\n dataitem: any;\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string };\n session: Session;\n host: string;\n path: string;\n apiBaseUrl: string;\n breadcrumb?: string;\n}) => {\n // Convert CSS string → JSON\n function cssStringToJson(cssString: string) {\n const styleObject: Record<string, string> = {};\n const matches = cssString?.match(/([\\w-]+)\\s*:\\s*([^;]+)\\s*;/g);\n\n if (matches) {\n matches.forEach((match) => {\n const parts = match.match(/([\\w-]+)\\s*:\\s*([^;]+)\\s*;/);\n if (parts && parts.length === 3) {\n const property = parts[1].trim();\n const value = parts[2].trim();\n styleObject[property] = value;\n }\n });\n }\n return styleObject;\n }\n\n // kebab-case → camelCase\n function toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n }\n\n function convertKeysToCamelCase(obj: any): any {\n if (!obj || typeof obj !== \"object\") return obj;\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [toCamelCase(key), value])\n );\n }\n\n const Formats = [\n \"\",\n \"font-medium\",\n \"italic\",\n \"font-medium italic\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"underline\",\n \"font-medium underline\",\n \"italic underline\",\n \"italic underline font-medium\",\n ];\n\n // Convert incoming styles\n const styles = convertKeysToCamelCase(cssStringToJson(props.node.style));\n // @ts-ignore\n const fieldName = props.node.fieldName;\n\n // ✅ use getNestedProperty here\n const value = props.dataitem ? getNestedProperty(props.dataitem, fieldName) : null;\n console.log(fieldName, value, \"haha\");\n\n // ✅ Check if value is empty/null/undefined\n const isEmptyValue = value === null || value === undefined || value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n // ✅ handle maxLines\n const maxLines = (props.node as any).maxLines;\n if (maxLines && Number(maxLines) > 0) {\n Object.assign(styles, {\n display: \"-webkit-box\",\n overflow: \"hidden\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: String(maxLines),\n });\n }\n\n // ✅ handle dataType\n const dataType = (props.node as any).dataType;\n\n // If value is empty, return nothing\n if (isEmptyValue) {\n return null;\n }\n\n\n if (dataType == \"rawContent\") {\n return (\n <PageBodyRenderer\n rawBody={value ?? `@databound[${fieldName}]`}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n breadcrumb={props.breadcrumb}\n donotApplyContainerClass={true}\n />\n );\n }\n\n return (\n <span\n className={`datafield-node ${props.node.format < Formats.length ? Formats[props.node.format] : \"\"\n }`}\n style={styles}\n >\n <ViewControl\n controlType={dataType}\n value={value ?? `@databound[${fieldName}]`}\n />\n </span>\n );\n};\n\nexport default DatafieldNode;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport TextNode from \"./TextNode\";\nimport LinkNode from \"./LinkNode\";\nimport { ParagraphElement, TextElement, LinkElement } from \"../Types\";\nimport DatafieldNode from \"./DatafieldNode\";\nimport { Session } from \"../../types/WebPageValues\";\nimport SVGIconNode from \"./SVGIconNode\";\n\n// React.FC<ButtonProps<any>>\nconst HeadingNode = (props: {\n node: ParagraphElement, dataitem: any, session: Session, apiBaseUrl: string, routeParameters?: { [key: string]: any };\n}) => {\n const NodeTypes = {\n [\"text\"]: TextNode,\n [\"link\"]: LinkNode,\n [\"svg-icon\"]: SVGIconNode,\n // [\"linebreak\"]: LineBreakNodeNew,\n [\"datafield\"]: DatafieldNode,\n };\n const HeadingTag = `${props.node.tag}`;\n const FormatClass = {\n \"center\": \"text-center\"\n };\n {/* @ts-ignore */ }\n let formatClasses = FormatClass[props.node.format] || \"\";\n\n return (\n <>\n {React.createElement(\n HeadingTag,\n { className: formatClasses },\n props.node.children &&\n props.node.children.map((childNode, index) => {\n const SelectedNode = NodeTypes[childNode.type];\n return (\n <React.Fragment key={index}>\n {/* @ts-ignore */}\n {SelectedNode && <SelectedNode node={childNode} dataitem={props.dataitem} session={props.session} apiBaseUrl={props.apiBaseUrl} routeParameters={props.routeParameters} />}\n </React.Fragment>\n );\n })\n )}\n </>\n )\n}\n\nexport default HeadingNode;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport ListItemNode from \"./ListItemNode\";\nimport { ListElement } from \"../Types\";\n\n// React.FC<ButtonProps<any>>\nconst ListNode = (props: { node: ListElement, dataitem: any, routeParameters?: { [key: string]: any } }) => {\n const NodeTypes = {\n listitem: ListItemNode,\n };\n\n return (\n <React.Fragment>\n {props.node.listType == \"bullet\" && <ul>\n {\n props.node.children && props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && <SelectedNode node={node} dataitem={props.dataitem} routeParameters={props.routeParameters} />}\n </React.Fragment>\n )\n })\n }\n </ul>}\n\n {props.node.listType == \"number\" && <ol>\n {\n props.node.children && props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && <SelectedNode node={node} dataitem={props.dataitem} routeParameters={props.routeParameters} />}\n </React.Fragment>\n )\n })\n }\n </ol>}\n </React.Fragment>\n )\n}\n\nexport default ListNode;\n","import React from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport LinkNode from \"./LinkNode\";\nimport ListNode from \"./ListNode\";\nimport { ListItemElement } from \"../Types\";\n\nconst ListItemNode = (props: { node: ListItemElement, dataitem: any, routeParameters?: { [key: string]: any } }) => {\n const NodeTypes: Record<string, any> = {\n text: TextNode,\n linebreak: LineBreakNode,\n link: LinkNode,\n list: ListNode,\n };\n\n let foundFirstBreak = false;\n\n\n // 🔎 Extract font-size from the first text child (if exists)\n const firstTextChild = props.node.children?.find((c) => c.type === \"text\");\n let liStyle: React.CSSProperties = {};\n\n if (firstTextChild?.style) {\n const match = firstTextChild.style.match(/font-size\\s*:\\s*([^;]+);?/);\n if (match) {\n liStyle.fontSize = match[1].trim(); // e.g. \"var(--text-6xl)\"\n }\n }\n\n return (\n <li style={liStyle}>\n {props.node.children &&\n props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n // @ts-ignore\n if (node.type === \"linebreak\") {\n if (!foundFirstBreak) {\n // First <br> = inline break (like CMS)\n foundFirstBreak = true;\n return <div key={index} />;\n } else {\n // Second+ <br> = empty block (mimics extra spacing)\n return <div key={index} className='py-1 lg:py-2' />;\n }\n } else {\n foundFirstBreak = false; // reset when normal node comes\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode node={node} dataitem={props.dataitem} routeParameters={props.routeParameters} />\n )}\n </React.Fragment>\n );\n }\n })\n }\n </li>\n );\n};\n\nexport default ListItemNode;\n\n\n\n\n","import React from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport LinkNode from \"./LinkNode\";\nimport { QuoteElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\n\n// React.FC<ButtonProps<any>>\nconst QuoteNode = (props: {\n node: QuoteElement, session: Session, apiBaseUrl: string, routeParameters?: { [key: string]: any };\n}) => {\n const NodeTypes = {\n [\"text\"]: TextNode,\n [\"linebreak\"]: LineBreakNode,\n [\"link\"]: LinkNode\n };\n\n return (\n <blockquote>\n {\n props.node.children && props.node.children.map((node, index) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {/* @ts-ignore */}\n {SelectedNode && <SelectedNode node={node} session={props.session} apiBaseUrl={props.apiBaseUrl} routeParameters={props.routeParameters} />}\n </React.Fragment>\n )\n })\n }\n </blockquote>\n )\n}\n\nexport default QuoteNode;\n","import React from \"react\";\nimport TextNode from \"./TextNode\";\nimport LineBreakNode from \"./LineBreakNode\";\nimport LinkNode from \"./LinkNode\";\nimport { CodeElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\nimport CopyButton from \"../../CopyButton\";\n\nconst CodeNode = (props: { node: CodeElement, session: Session, apiBaseUrl: string, routeParameters?: { [key: string]: any }; }) => {\n const NodeTypes: Record<string, React.FC<any>> = {\n [\"text\"]: TextNode,\n [\"linebreak\"]: LineBreakNode,\n [\"link\"]: LinkNode,\n };\n\n // Extract plain text for copy button\n const textContent =\n props.node?.children\n ?.map((node: any) => {\n if (node.type === \"text\") return node.text || \"\";\n if (node.type === \"linebreak\") return \"\\n\";\n if (node.type === \"link\") return node.text || node.url || \"\";\n return \"\";\n })\n .join(\"\") ?? \"\";\n\n return (\n <div className=\"code-block\">\n {/* <div className=\"flex items-center relative text-gray-200 bg-gray-800 px-4 py-2.5 text-xs font-sans justify-between rounded-t-md\"> */}\n {/* <span>Code Snippet</span> */}\n {/* client component only handles copy */}\n {/* <CopyButton text={textContent} /> */}\n {/* </div> */}\n <code className=\"block bg-gray-900 text-gray-100 p-4 rounded-b-md text-sm whitespace-pre-wrap\">\n {props.node.children &&\n props.node.children.map((node: any, index: number) => {\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {/* @ts-ignore */}\n {SelectedNode && <SelectedNode node={node} session={props.session} apiBaseUrl={props.apiBaseUrl} routeParameters={props.routeParameters} />}\n </React.Fragment>\n );\n })}\n </code>\n </div>\n );\n};\n\nexport default CodeNode;\n","import React from \"react\";\nimport { HorizontalRuleElement } from \"../Types\";\n\n// React.FC<ButtonProps<any>>\nconst HorizontalRuleNode = (props: { node: HorizontalRuleElement }) => {\n return (\n <hr></hr>\n )\n}\n\nexport default HorizontalRuleNode;\n","import React, { ChangeEventHandler, ChangeEvent, WheelEvent } from \"react\";\nimport TextNode from \"./TextNode\";\nimport ParagraphNode from \"./ParagraphNode\";\nimport HeadingNode from \"./HeadingNode\";\nimport ListNode from \"./ListNode\";\nimport QuoteNode from \"./QuoteNode\";\nimport CodeNode from \"./CodeNode\";\nimport HorizontalRuleNode from \"./HorizontalRuleNode\";\nimport ImageNode from \"./ImageNode\";\nimport LayoutContainerNode from \"./LayoutContainerNode\";\nimport LinkNode from \"./LinkNode\";\nimport WidgetNode from \"./WidgetNode\";\nimport EmbedNode from \"./EmbedNode\";\nimport { LayoutItemElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\nimport VideoNode from \"./VideoNode\";\n// React.FC<ButtonProps<any>>\nconst LayoutItemNode = (props: {\n node: LayoutItemElement, order?: number, routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl?: string\n},) => {\n const NodeTypes = {\n [\"paragraph\"]: ParagraphNode,\n [\"heading\"]: HeadingNode,\n [\"list\"]: ListNode,\n [\"quote\"]: QuoteNode,\n [\"code\"]: CodeNode,\n [\"horizontalrule\"]: HorizontalRuleNode,\n [\"image\"]: ImageNode,\n [\"layout-container\"]: LayoutContainerNode,\n [\"link\"]: LinkNode,\n [\"widget\"]: WidgetNode,\n [\"youtube\"]: VideoNode,\n [\"video\"]: VideoNode,\n [\"embed\"]: EmbedNode,\n\n };\n\n //shadow\n //borderWidth\n //borderRadius\n let cssClasses = \"\";\n\n if (props.order) {\n cssClasses = \"order-\" + props.order + \" lg:order-1\";\n }\n\n\n if (props.node.itemBoxShadow) {\n {/* @ts-ignore */ }\n cssClasses = cssClasses + \" \" + (props.node.itemBoxShadow || \"\")\n }\n const styles: { borderWidth?: string; borderRadius?: string; overflow?: string } = {};\n if (props.node.itemBorderWidth) {\n styles.borderWidth = props.node.itemBorderWidth;\n cssClasses = cssClasses + \" px-4 py-2\"\n }\n if (props.node.itemBorderRadius) {\n styles.borderRadius = props.node.itemBorderRadius;\n styles.overflow = \"hidden\";\n }\n\n\n function removeParagraphsAtStartAndEnd(layoutItem: LayoutItemElement): LayoutItemElement {\n // Find the index of the first non-paragraph child\n let startIndex = 0;\n {/* @ts-ignore */ }\n while (startIndex < layoutItem.children.length && layoutItem.children[startIndex].type === \"paragraph\" && layoutItem.children[startIndex].children.filter(x => x.type == \"linebreak\").length == layoutItem.children[startIndex].children.length\n ) {\n startIndex++;\n }\n\n // Find the index of the last non-paragraph child\n let endIndex = layoutItem.children.length - 1;\n {/* @ts-ignore */ }\n while (endIndex >= 0 && layoutItem.children[endIndex].type === \"paragraph\" && layoutItem.children[endIndex].children.filter(x => x.type == \"linebreak\").length == layoutItem.children[endIndex].children.length) {\n endIndex--;\n }\n\n // If there are paragraphs only at the start or at the end, remove them\n if (startIndex <= endIndex) {\n layoutItem.children = layoutItem.children.slice(startIndex, endIndex + 1);\n } else {\n layoutItem.children = [];\n }\n\n return layoutItem;\n }\n\n let updatedLayout = props.node;\n\n if (props.node.itemBoxShadow || props.node.itemBorderWidth) {\n updatedLayout = props.node;\n }\n else {\n updatedLayout = removeParagraphsAtStartAndEnd(props.node);\n }\n\n\n\n return (\n <React.Fragment>\n {<div className={\"layout-item \" + cssClasses} style={{ ...styles }}>\n {\n updatedLayout.children.map((node, index) => {\n {/* @ts-ignore */ }\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {/* @ts-ignore */}\n {SelectedNode && <SelectedNode node={node}\n\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n\n />}\n </React.Fragment>\n )\n })\n }\n </div>}\n </React.Fragment>\n )\n}\n\nexport default LayoutItemNode;\n","import React from \"react\";\nimport { ImageElement } from \"../Types\";\n\nconst ImageNode = (props: {\n node: ImageElement;\n apiBaseUrl?: string;\n}) => {\n\n const { node, apiBaseUrl = \"\" } = props;\n\n let imageUrl = node.imageUrl.startsWith(\"http\")\n ? node.imageUrl\n : `${apiBaseUrl}/digitalassets/storefront/${node.imageUrl}`;\n\n return (\n <React.Fragment>\n {node.width ? (\n <div style={{ width: node.width }}>\n <img\n loading=\"lazy\"\n className=\"object-cover\"\n src={imageUrl}\n width={node.intrinsicWidth}\n height={node.intrinsicHeight}\n alt={node.title}\n />\n </div>\n ) : (\n <img\n loading=\"lazy\"\n className=\"object-cover\"\n src={imageUrl}\n width={node.intrinsicWidth}\n height={node.intrinsicHeight}\n alt={node.title}\n />\n )}\n </React.Fragment>\n );\n};\n\nexport default ImageNode;","import React, { Suspense } from \"react\";\nimport { WidgetElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\n// import WidgetRenderer from \"@/core/widgets/WidgetRenderer\";\nconst WidgetNode = (props:\n {\n node: WidgetElement,\n widgetRegistry?: Record<string, React.ComponentType<any>>;\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl: string,\n }) => {\n\n const getWidgetParameters = (): { [key: string]: any } => {\n const widgetInputParameters: { [key: string]: any } = { ...(props.routeParameters ?? {}) };\n // @ts-ignore\n const rawWidgetParams = props.node?.widgetParameters ?? props.node?.widgetParams;\n let widgetParameters: { [key: string]: any } = {};\n\n\n const isJSON = (str: string) => {\n if (typeof str !== \"string\") return false;\n str = str.trim();\n return (str.startsWith(\"{\") && str.endsWith(\"}\")) || (str.startsWith(\"[\") && str.endsWith(\"]\"));\n };\n\n if (rawWidgetParams) {\n if (typeof rawWidgetParams === \"string\" && isJSON(rawWidgetParams)) {\n widgetParameters = JSON.parse(rawWidgetParams);\n } else if (typeof rawWidgetParams === \"object\") {\n widgetParameters = rawWidgetParams;\n }\n }\n\n const resolveValue = (val: any): any => {\n if (typeof val === \"string\") {\n const m = /^\\{(.+)\\}$/.exec(val);\n if (m) {\n const actualKey = m[1];\n\n return props.routeParameters?.[actualKey] ?? val;\n }\n return val;\n } else if (Array.isArray(val)) {\n return val.map(resolveValue);\n } else if (val && typeof val === \"object\") {\n const out: { [k: string]: any } = {};\n for (const k of Object.keys(val)) {\n out[k] = resolveValue(val[k]);\n }\n return out;\n }\n return val;\n };\n\n Object.keys(widgetParameters).forEach((key) => {\n const rawVal = widgetParameters[key];\n\n if (rawVal === \"route\") {\n if (key === \"itemPath\") {\n widgetInputParameters[key] = props.path;\n } else {\n widgetInputParameters[key] = widgetInputParameters[key] ?? null;\n }\n } else {\n widgetInputParameters[key] = resolveValue(rawVal);\n }\n });\n\n widgetInputParameters[\"widgetTitle\"] = props.node?.widgetTitle;\n return widgetInputParameters;\n };\n\n\n const SelectedWidget = props.widgetRegistry?.[props.node.widgetCode];\n\n if (!SelectedWidget) {\n console.warn(\"Widget not found:\", props.node.widgetCode);\n return <>Widget not found: {props.node.widgetCode}</>;\n }\n\n return (\n <Suspense fallback={<div className=\"container mt-2\">...</div>}>\n <SelectedWidget\n params={getWidgetParameters()}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n />\n </Suspense>\n );\n}\n\nexport default WidgetNode;\n\n","\"use client\";\n\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport IFrameLoaderView from \"../../IFrameLoaderView\";\n\nconst IframeClient = ({ src }: { src: string }) => {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [iframeHeight, setIframeHeight] = useState('100%');\n const [isDataFound, setIsDataFound] = useState<boolean | null>(null);\n\n useEffect(() => {\n const handleReceiveMessage = (event: MessageEvent) => {\n const eventName = event?.data?.eventName;\n const payload = event?.data?.payload;\n\n if (eventName === 'SET_HEIGHT' && payload?.height) {\n let height = 500;\n if (payload.height > 500) {\n height = payload.height + 50;\n }\n setIframeHeight(`${height}px`);\n }\n };\n\n window.addEventListener('message', handleReceiveMessage);\n return () => window.removeEventListener('message', handleReceiveMessage);\n }, []);\n\n useEffect(() => {\n const handleResize = () => {\n if (iframeRef.current) {\n iframeRef.current.contentWindow?.postMessage({ eventName: 'RESIZE' }, '*');\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n // Function to handle iframe load event\n const handleIframeLoad = () => {\n setIsDataFound(true);\n };\n\n return (\n <React.Fragment>\n\n <IFrameLoaderView isDataFound={isDataFound}>\n <iframe\n ref={iframeRef}\n src={src}\n className=\"w-full h-full border-none\"\n scrolling=\"no\"\n // style={{ height: iframeHeight }}\n onLoad={handleIframeLoad} // Add onLoad event\n />\n </IFrameLoaderView>\n\n </React.Fragment >\n\n );\n};\n\nexport default IframeClient;\n","import React from \"react\";\n\nconst IFrameLoaderView = (props: { children: React.ReactNode, isDataFound: boolean | null }) => {\n return (\n <React.Fragment>\n\n {props.isDataFound == null && <div className=\"\">\n <div className=\"mt-4 bg-gray-200 rounded-md p-4 animate-pulse\">\n <div className=\"flex items-center mb-4\">\n <div className=\"bg-gray-300 h-8 w-8 rounded-full animate-pulse\"></div>\n <div className=\"ml-2\">\n <div className=\"bg-gray-300 h-3 w-16 animate-pulse\"></div>\n <div className=\"bg-gray-300 h-2 w-12 animate-pulse\"></div>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4 mt-6\">\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n <div className=\"animate-pulse\">\n <div className=\"bg-gray-300 rounded-full h-3 w-12 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-24 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-32 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-16 mb-2\"></div>\n <div className=\"bg-gray-300 rounded-full h-3 w-28 mb-2\"></div>\n </div>\n </div>\n </div>\n </div>}\n {props.children}\n </React.Fragment>\n )\n}\n\nexport default IFrameLoaderView;","// components/EmbedNode.tsx\nimport { EmbedElement } from \"../Types\";\nimport IframeClient from \"./IframeClient\";\n\nconst EmbedNode = (props: { node: EmbedElement }) => {\n let src;\n if (props.node.provider == \"youtube\") {\n src = `https://www.youtube-nocookie.com/embed/${props.node.embedSrc}`;\n } else if (props.node.provider == \"bunny\") {\n src = `https://iframe.mediadelivery.net/embed/${props.node.embedSrc}?autoplay=false&loop=false&muted=false&preload=true&responsive=true`;\n } else {\n src = props.node.embedSrc;\n }\n\n return (\n <div className=\"aspect-video\">\n {src && <IframeClient src={src} />}\n </div>\n );\n};\n\nexport default EmbedNode;\n","\nimport React from \"react\";\nimport { VideoElement } from \"../Types\";\nconst VideoNode = (props: { node: VideoElement }) => {\n\n let src;\n if (props.node.provider == \"youtube\") {\n src = `https://www.youtube-nocookie.com/embed/${props.node.videoId}`\n }\n else if (props.node.provider == \"bunny\") {\n src = `https://iframe.mediadelivery.net/embed/${props.node.videoId}?autoplay=false&loop=false&muted=false&preload=true&responsive=true`\n }\n\n return (\n <React.Fragment>\n {src && <iframe className=\"w-full aspect-video rounded\" src={src} loading=\"lazy\" allow=\"accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture;\" allowFullScreen></iframe>}\n </React.Fragment>\n )\n}\n\nexport default VideoNode;\n","class AssetUtility {\n constructor() { }\n\n\n static resolveUrl(apiBaseUrl?: string, url?: string): string | undefined {\n if (!url) return undefined;\n\n if (url.startsWith(\"http\")) return url;\n\n if (!apiBaseUrl) return url; // fallback instead of breaking\n\n return `${apiBaseUrl}/digitalassets-management/${url}`;\n }\n}\n\n\n\nexport default AssetUtility;\n\n","import React from \"react\";\nimport LayoutItemNode from \"./LayoutItemNode\";\nimport AssetUtility from \"../../utilities/AssetUtility\"; // adjust path\nimport { LayoutContainerElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\n\nconst LayoutContainerNode = (props: {\n node: LayoutContainerElement;\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string };\n session: Session;\n host: string;\n path: string;\n apiBaseUrl?: string;\n}) => {\n\n const VERTICAL_ALIGNMENT_CLASSES = {\n start: \"items-start\",\n center: \"items-center place-content-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n };\n\n const LAYOUTGRID_COLS_CLASSES: Record<string, string> = {\n \"1fr\": \"layout-grid-col-1\",\n \"1fr 1fr\": \"layout-grid-col-2-equal\",\n \"1fr 2fr\": \"layout-grid-col-2-widths-33-67\",\n \"2fr 1fr\": \"layout-grid-col-2-widths-67-33\",\n \"3fr 2fr\": \"layout-grid-col-2-widths-60-40\",\n \"3fr 1fr\": \"layout-grid-col-2-widths-75-25\",\n \"1fr 1fr 1fr\": \"layout-grid-col-3-equal\",\n \"1fr 2fr 1fr\": \"layout-grid-col-3-widths-25-50-25\",\n \"1fr 6fr 1fr\": \"layout-grid-col-3-widths-15-70-15\",\n \"1fr 1fr 1fr 1fr\": \"layout-grid-col-4-equal\",\n };\n\n const sectionWidth = props.node.sectionWidth || \"fixed\";\n\n let gridCssClasses =\n LAYOUTGRID_COLS_CLASSES[props.node.templateColumns] || \"\";\n\n if (props.node.contentVerticalAlignment) {\n gridCssClasses +=\n \" \" +\n (VERTICAL_ALIGNMENT_CLASSES[\n props.node.contentVerticalAlignment as keyof typeof VERTICAL_ALIGNMENT_CLASSES\n ] || \"\");\n }\n\n const columnGap = props.node.columnGap || \"0.5rem\";\n\n const styles: React.CSSProperties = {};\n let cssClasses = \"layout_grid\";\n let addPadding = false;\n\n if (props.node.backgroundColor) {\n styles.backgroundColor = props.node.backgroundColor;\n }\n\n if (props.node.borderWidth) {\n styles.borderWidth = props.node.borderWidth;\n addPadding = true;\n }\n\n if (props.node.borderRadius) {\n styles.borderRadius = props.node.borderRadius;\n }\n\n if (props.node.boxShadow && props.node.boxShadow !== \"shadow-none\") {\n cssClasses += \" \" + props.node.boxShadow;\n addPadding = true;\n }\n\n // 🔥 Background handling (clean)\n const backgroundLayers: string[] = [];\n\n if (props.node.backgroundImage) {\n const resolved = AssetUtility.resolveUrl(\n props.apiBaseUrl,\n props.node.backgroundImage\n );\n if (resolved) {\n backgroundLayers.push(`url('${resolved}')`);\n addPadding = true;\n }\n }\n\n if (props.node.gradientColor1 && props.node.gradientColor2) {\n backgroundLayers.push(\n `linear-gradient(to bottom, ${props.node.gradientColor1}, ${props.node.gradientColor2})`\n );\n addPadding = true;\n } else if (props.node.gradientColor1) {\n backgroundLayers.push(props.node.gradientColor1);\n addPadding = true;\n } else if (props.node.gradientColor2) {\n backgroundLayers.push(props.node.gradientColor2);\n addPadding = true;\n }\n\n if (backgroundLayers.length) {\n styles.background = backgroundLayers.join(\", \");\n }\n\n const renderChildren = () =>\n props.node.children?.map((node, index) => (\n <LayoutItemNode\n key={index}\n node={node}\n order={\n props.node.smOrder === \"reverse\"\n ? props.node.children.length - index\n : index\n }\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n />\n ));\n\n return (\n <>\n {sectionWidth === \"mixed\" && (\n <div className={cssClasses} style={styles}>\n <div className=\"container\">\n <div\n className={`grid gap-y-4 lg:gap-y-0 ${gridCssClasses} ${addPadding ? \"py-8 lg:py-6\" : \"\"\n }`}\n style={{ columnGap, minHeight: props.node.height }}\n >\n {renderChildren()}\n </div>\n </div>\n </div>\n )}\n\n {sectionWidth === \"full\" && (\n <div\n className={`grid gap-y-4 lg:gap-y-0 ${cssClasses} ${gridCssClasses} ${addPadding ? \"p-8 lg:p-0\" : \"\"\n }`}\n style={{ columnGap, ...styles }}\n >\n {renderChildren()}\n </div>\n )}\n\n {sectionWidth === \"fixed\" && (\n <div className=\"container\">\n <div\n className={`grid gap-y-4 lg:gap-y-0 ${cssClasses} ${gridCssClasses} ${addPadding ? \"px-8 py-6 lg:px-6 lg:py-6\" : \"\"\n }`}\n style={{ columnGap, ...styles }}\n >\n {renderChildren()}\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default LayoutContainerNode;","'use client'\nimport React, { useRef, ChangeEventHandler, ChangeEvent, WheelEvent, useReducer, useCallback, useEffect } from \"react\";\nimport InputControlNode from \"./InputControlNode\";\nimport FormReducer, { FORM_INITIAL_UPDATE, FORM_INPUT_UPDATE, FormState } from \"../../../FormReducer\";\nimport { InputChangeCallback } from \"../../controls/InputChangeCallback\";\nimport { FormContainerElement, InputControlElement } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\nconst FormContainerNode = (props: {\n\n node: FormContainerElement,\n routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl: string,\n fetchData?: (api: string, params?: any) => Promise<any>;\n}) => {\n const NodeTypes = {\n [\"input-control\"]: InputControlNode,\n };\n const { node } = props;\n\n\n const formRef = useRef<HTMLFormElement>(null);\n const initialState: FormState<any> = {\n inputValues: {\n },\n lastPropertyChanged: \"\"\n };\n const [formState, dispatch] = useReducer(FormReducer<any>, initialState);\n\n const handleInputChange: InputChangeCallback<any> = useCallback((updatedValues) => {\n dispatch({ type: FORM_INPUT_UPDATE, name: updatedValues.name, value: updatedValues.value });\n }, [dispatch]);\n\n const onValidate = async () => {\n if (formRef.current && !formRef.current.checkValidity()) {\n formRef.current.classList.add(\"validated\");\n return false;\n } else {\n return true;\n }\n };\n\n\n useEffect(() => {\n const fetchInitialData = async () => {\n if (!props.fetchData || !node.dataFetchApi) return;\n\n const response = await props.fetchData(\n node.dataFetchApi,\n props.routeParameters\n );\n\n if (response?.isSuccessful) {\n dispatch({\n type: FORM_INITIAL_UPDATE,\n values: response.result,\n name: \"all\"\n });\n }\n };\n\n fetchInitialData();\n }, [props.fetchData, node.dataFetchApi, props.routeParameters]);\n\n\n return (\n <form className=\"group space-y-6 pb-6 overflow-y-auto\" noValidate ref={formRef}>\n {\n node.children && node.children.map((node, index) => {\n {/* @ts-ignore */ }\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {/* {node.type!=\"input-control\" && SelectedNode && <SelectedNode node={node} />} */}\n {SelectedNode && node.type == \"input-control\" && <InputControlNode\n value={formState.inputValues[node.name]}\n callback={handleInputChange}\n node={node} />}\n </React.Fragment>\n )\n })\n }\n\n {node.children.length == 0 &&\n <div className=\"py-0.5 lg:py-1.5\"></div>\n }\n </form>\n )\n}\n\nexport default FormContainerNode;\n","import { InputChangeCallback } from \"../../controls/InputChangeCallback\";\nimport InputControl from \"../../controls/edit/InputControl\";\nimport { InputControlElement } from \"../Types\";\n\nconst InputControlNode = (props: {\n value?: string | null | number;\n callback?: InputChangeCallback<any>;\n node: InputControlElement\n}) => {\n return (\n <div>\n {\n <InputControl\n name={props.node.name}\n controlType={\"lineTextInput\"}\n value={props.value}\n callback={props.callback}\n attributes={{\n pattern: props.node.pattern,\n maxLength: props.node.maxLength,\n minLength: props.node.minLength,\n //maxValue:props.node.maxV,\n //minValue?: number,\n readOnly: props.node.readOnly,\n label: \"name\",//props.node.label,\n hintText: props.node.hintText,\n placeholder: props.node.placeholder,\n required: props.node.required,\n errorMessage: props.node.errorMessage,\n helpText: props.node.helpText,\n autoFocus: props.node.autoFocus,\n }}\n />\n }\n </div>\n )\n}\n\nexport default InputControlNode;\n","import React from \"react\";\nimport TextNode from \"./TextNode\";\nimport ParagraphNode from \"./ParagraphNode\";\nimport HeadingNode from \"./HeadingNode\";\nimport ListNode from \"./ListNode\";\nimport QuoteNode from \"./QuoteNode\";\nimport CodeNode from \"./CodeNode\";\nimport ImageNode from \"./ImageNode\";\nimport HorizontalRuleNode from \"./HorizontalRuleNode\";\nimport LayoutContainerNode from \"./LayoutContainerNode\";\nimport WidgetNode from \"./WidgetNode\";\nimport { DivContainerElement, BackgroundLayer, GradientValue } from \"../Types\";\nimport { Session } from \"../../types/WebPageValues\";\nimport Link from \"next/link\";\nimport AssetUtility from \"../../utilities/AssetUtility\";\nimport SVGIconNode from \"./SVGIconNode\";\nimport EmbedNode from \"./EmbedNode\";\nimport DatafieldNode from \"./DatafieldNode\";\n\n\n\nconst DivContainer = (props: {\n node: DivContainerElement, routeParameters?: { [key: string]: any };\n query?: { [key: string]: string },\n session: Session,\n host: string,\n path: string,\n apiBaseUrl: string,\n breadcrumb?: string\n}) => {\n const { cssProperties: styles, hoverCssProperties: hoverStyles, mobileCssProperties: mobileStyles } = props.node;\n const updatedStyles = convertKeysToCamelCase(styles)\n const NodeTypes = {\n [\"paragraph\"]: ParagraphNode,\n [\"heading\"]: HeadingNode,\n [\"list\"]: ListNode,\n [\"quote\"]: QuoteNode,\n [\"code\"]: CodeNode,\n [\"image\"]: ImageNode,\n [\"horizontalrule\"]: HorizontalRuleNode,\n [\"layout-container\"]: LayoutContainerNode,\n [\"widget\"]: WidgetNode,\n [\"embed\"]: EmbedNode,\n [\"div-container\"]: DivContainer,\n [\"text\"]: TextNode,\n [\"datafield\"]: DatafieldNode,\n [\"svg-icon\"]: SVGIconNode\n\n };\n\n function toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n }\n\n function convertKeysToCamelCase(obj: any): any {\n if (!obj || typeof obj !== \"object\") return obj; // Ensure valid input\n\n if (Array.isArray(obj)) {\n return obj.map(convertKeysToCamelCase);\n }\n\n return Object.fromEntries(\n Object.entries(obj)\n .filter(([_, value]) => value !== \"\" && value !== undefined) // ✅ Filter out empty strings & undefined\n .map(([key, value]) => [\n toCamelCase(key),\n convertKeysToCamelCase(value) // Recursively convert nested objects\n ])\n );\n }\n\n function generateCompleteBackgroundString(layers?: BackgroundLayer[]): string {\n if (!layers || !Array.isArray(layers)) return \"\";\n return layers\n .filter((layer) => layer && layer.type && layer.value) // Filter out undefined/null layers\n .map((layer) => {\n if (layer.type === \"image\" && layer.value && typeof layer.value === \"object\") {\n const imageValue = layer.value as { assetUrl?: string };\n if (!imageValue.assetUrl) return \"\"; // Ensure assetUrl exists\n\n const url = `url('${AssetUtility.resolveUrl(\"/api/images\", imageValue.assetUrl)}')`;\n const repeat = layer.repeat || \"no-repeat\";\n const position = layer.position || \"center\";\n const size = layer.size || \"auto\";\n const attachment = layer.attachment || \"scroll\";\n\n return `${url} ${position} / ${size} ${repeat} ${attachment}`;\n }\n\n if (layer.type === \"gradient\" && layer.value && typeof layer.value === \"object\") {\n const gradient = layer.value as GradientValue;\n if (!gradient.colors || !gradient.direction) return \"\"; // Ensure colors and direction exist\n\n const colors = gradient.colors\n .map(\n (colorStop) =>\n `color-mix(in srgb, ${colorStop.color}, transparent ${colorStop.transparency ?? 0}%) ${colorStop.start || \"0%\"}`\n )\n .join(\", \");\n\n return `linear-gradient(${gradient.direction}, ${colors})`;\n }\n\n return \"\"; // Fallback for unsupported or incomplete layers\n })\n .filter((bg) => bg.trim() !== \"\") // Remove empty strings\n .join(\", \"); // Join layers with commas\n }\n\n\n var background = generateCompleteBackgroundString(props.node.backgroundLayers);\n\n let containerPaddingClass = \"\";\n if (props.node.containerPadding == \"small\") {\n containerPaddingClass = \"container-small\";\n }\n else if (props.node.containerPadding == \"large\") {\n containerPaddingClass = \"container-large\";\n }\n\n const updatedStyle = { ...updatedStyles };\n const backgroundStyle = background && background !== \"\" ? { background } : {};\n const guid = \"css\" + crypto.randomUUID().toLocaleLowerCase();\n\n const generateCssString = (stylesObject: any, hoverStylesObject?: any, mobileStylesObject?: any): string => {\n let gridColumns = stylesObject.gridTemplateColumns ? stylesObject.gridTemplateColumns.match(/\\d+/g) : [];\n let hasGridProperties = gridColumns.length > 0;\n let tabletColumns = hasGridProperties ? Math.ceil(parseInt(gridColumns[0]) / 2) : 2;\n let mobileColumns = 1;\n\n // Generate base CSS rules\n let cssRules = Object.entries(stylesObject)\n .filter(([_, value]) => value !== undefined && value !== \"\")\n .map(([key, value]) => {\n const cssKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return `${cssKey}: ${value};`;\n });\n\n let css = `#${guid} {\\n${cssRules.join(\"\\n\")}\\n\n transition: all 0.3s ease-in-out;\n }`;\n\n // Handle hover styles if provided\n if (hoverStylesObject) {\n let hoverCssRules = Object.entries(hoverStylesObject)\n .filter(([_, value]) => value !== undefined && value !== \"\")\n .map(([key, value]) => {\n const cssKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return `${cssKey}: ${value};`;\n });\n\n if (hoverCssRules.length > 0) {\n css += `\\n#${guid}:hover {\\n${hoverCssRules.join(\"\\n\")}\\n}`;\n }\n }\n\n if (mobileStylesObject) {\n let mobileCssRules = Object.entries(mobileStylesObject)\n .filter(([_, value]) => value !== undefined && value !== \"\")\n .map(([key, value]) => {\n const cssKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return `${cssKey}: ${value};`;\n });\n\n if (mobileCssRules.length > 0) {\n css += `\\n@media (max-width: 480px) { #${guid} {\\n${mobileCssRules.join(\"\\n\")}\\n} }`;\n }\n\n }\n\n\n if (hasGridProperties) {\n css += `\\n@media (max-width: 1279px) { #${guid} { grid-template-columns: repeat(${tabletColumns}, minmax(0, 1fr)); } }`;\n css += `\\n@media (max-width: 768px) { #${guid} { grid-template-columns: repeat(${tabletColumns}, minmax(0, 1fr)); } }`;\n css += `\\n@media (max-width: 480px) { #${guid} { grid-template-columns: repeat(${mobileColumns}, minmax(0, 1fr)); } }`;\n }\n\n return css;\n };\n\n\n const css = generateCssString(updatedStyle, hoverStyles, mobileStyles);\n\n return (\n <React.Fragment>\n <style dangerouslySetInnerHTML={{ __html: css }} />\n\n {props.node.href && props.node.href !== \"\" ? (\n <Link href={props.node.href} className=\"block\">\n <div\n id={guid}\n style={{ ...backgroundStyle, display: \"block\" }}\n className={containerPaddingClass}\n >\n {props.node.children?.map((node, index) => {\n // @ts-ignore\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode\n node={node}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n breadcrumb={props.breadcrumb}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n </Link>\n ) : (\n <div id={guid} style={{ ...backgroundStyle }} className={containerPaddingClass}>\n {props.node.children &&\n props.node.children.map((node, index) => {\n // @ts-ignore\n const SelectedNode = NodeTypes[node.type];\n return (\n <React.Fragment key={index}>\n {SelectedNode && (\n <SelectedNode\n node={node}\n routeParameters={props.routeParameters}\n query={props.query}\n session={props.session}\n host={props.host}\n path={props.path}\n apiBaseUrl={props.apiBaseUrl}\n breadcrumb={props.breadcrumb}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n )}\n\n </React.Fragment>\n )\n}\n\nexport default DivContainer;\n"],"mappings":"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","names":["React","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","React","jsx","jsx","React","React","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","now","React","useEffect","jsx","jsxs","useEffect","useState","jsx","jsxs","React","useState","useState","React","ToastService","ToastService_default","jsx","ToastService_default","React","jsx","jsxs","useState","jsx","jsxs","useState","React","React","useEffect","useRef","useState","jsx","jsxs","filteredItems","React","useState","useEffect","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","jsx","React","React","useEffect","useState","useCallback","React","jsx","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsx","jsx","jsx","jsx","Fragment","jsx","jsxs","useState","useEffect","getNestedProperty","useCallback","builder","React","React","React","jsx","NodeTypes","jsx","React","Link","jsx","jsxs","NodeTypes","React","jsx","jsx","jsx","value","Fragment","jsx","jsxs","NodeTypes","React","React","Fragment","jsx","NodeTypes","React","React","React","jsx","NodeTypes","React","jsx","jsxs","NodeTypes","React","React","jsx","NodeTypes","React","React","jsx","NodeTypes","React","jsx","React","React","jsx","Fragment","jsx","jsxs","React","useEffect","useRef","useState","React","jsx","jsxs","jsx","useRef","useState","useEffect","React","jsx","React","jsx","jsx","NodeTypes","React","Fragment","jsx","jsxs","React","useRef","useReducer","useCallback","useEffect","jsx","jsx","jsxs","NodeTypes","useRef","useReducer","useCallback","useEffect","node","React","React","Link","jsx","jsxs","NodeTypes","css","React","Link","jsx","React"]}