@solidxai/core-ui 0.1.12-beta.8 → 0.1.12-beta.9

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,"file":"SolidRichTextField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidRichTextField.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAkEzE,qBAAa,kBAAmB,YAAW,WAAW;IAElD,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAOnD,YAAY,IAAI,GAAG;IAInB,gBAAgB,IAAI,GAAG,CAAC,MAAM;IA6B9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAoC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAID,eAAO,MAAM,6BAA6B,6BAA8B,yBAAyB,4CAyEhG,CAAA;AAED,eAAO,MAAM,6BAA6B,6BAA8B,yBAAyB,4CAiBhG,CAAA"}
1
+ {"version":3,"file":"SolidRichTextField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidRichTextField.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAmEzE,qBAAa,kBAAmB,YAAW,WAAW;IAElD,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAOnD,YAAY,IAAI,GAAG;IAInB,gBAAgB,IAAI,GAAG,CAAC,MAAM;IA6B9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAoC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAID,eAAO,MAAM,6BAA6B,6BAA8B,yBAAyB,4CAqDhG,CAAA;AAED,eAAO,MAAM,6BAA6B,6BAA8B,yBAAyB,4CAiBhG,CAAA"}
@@ -10,7 +10,7 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
- import { useEffect } from "react";
13
+ import DOMPurify from "dompurify";
14
14
  import { SolidRichTextEditor } from "../../../shad-cn-ui/SolidRichTextEditor";
15
15
  import * as Yup from 'yup';
16
16
  import { getExtensionComponent } from "../../../../helpers/registry";
@@ -59,6 +59,7 @@ var normalizeQuillRichTextHtml = function (html) {
59
59
  node.removeAttribute("data-list");
60
60
  currentList.appendChild(node);
61
61
  });
62
+ appendCurrentList();
62
63
  orderedList.replaceWith(replacementFragment);
63
64
  });
64
65
  return template.innerHTML;
@@ -80,7 +81,7 @@ var SolidRichTextField = /** @class */ (function () {
80
81
  value: function (value, formData) {
81
82
  var fieldLayoutInfo = this.fieldContext.field;
82
83
  if (value !== undefined && value !== null) {
83
- formData.append(fieldLayoutInfo.attrs.name, value);
84
+ formData.append(fieldLayoutInfo.attrs.name, normalizeQuillRichTextHtml(value));
84
85
  }
85
86
  }
86
87
  });
@@ -182,27 +183,12 @@ export var DefaultRichTextFormEditWidget = function (_a) {
182
183
  var formDisabled = (_k = (_j = (_h = solidFormViewMetaData.data.solidView) === null || _h === void 0 ? void 0 : _h.layout) === null || _j === void 0 ? void 0 : _j.attrs) === null || _k === void 0 ? void 0 : _k.disabled;
183
184
  var formReadonly = (_o = (_m = (_l = solidFormViewMetaData.data.solidView) === null || _l === void 0 ? void 0 : _l.layout) === null || _m === void 0 ? void 0 : _m.attrs) === null || _o === void 0 ? void 0 : _o.readonly;
184
185
  var fieldName = fieldLayoutInfo.attrs.name;
185
- var fieldValue = formik.values[fieldName] || "";
186
- var normalizedFieldValue = normalizeQuillRichTextHtml(fieldValue);
187
- useEffect(function () {
188
- if (fieldValue === normalizedFieldValue) {
189
- return;
190
- }
191
- fieldContext.onChange({
192
- target: {
193
- name: fieldName,
194
- value: normalizedFieldValue,
195
- type: "text",
196
- },
197
- }, "onFieldChange");
198
- }, [fieldContext, fieldName, fieldValue, normalizedFieldValue]);
199
186
  return (_jsxs("div", { className: "".concat(styles.fieldWrapper, " relative"), children: [showFieldLabel != false &&
200
- _jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, fieldMetadata.required && _jsx("span", { className: "text-red-500", children: " *" }), _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsx(SolidRichTextEditor, { readOnly: formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled, id: fieldName, value: normalizedFieldValue, onChange: function (value) {
201
- var normalizedValue = normalizeQuillRichTextHtml(value !== null && value !== void 0 ? value : "");
187
+ _jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, fieldMetadata.required && _jsx("span", { className: "text-red-500", children: " *" }), _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsx(SolidRichTextEditor, { readOnly: formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled, id: fieldName, value: formik.values[fieldName] || "", onChange: function (value) {
202
188
  fieldContext.onChange({
203
189
  target: {
204
190
  name: fieldName,
205
- value: normalizedValue,
191
+ value: value !== null && value !== void 0 ? value : "",
206
192
  type: "text",
207
193
  },
208
194
  }, "onFieldChange");
@@ -216,6 +202,6 @@ export var DefaultRichTextFormViewWidget = function (_a) {
216
202
  var fieldLabel = (_b = fieldLayoutInfo.attrs.label) !== null && _b !== void 0 ? _b : fieldMetadata.displayName;
217
203
  var showFieldLabel = (_c = fieldLayoutInfo === null || fieldLayoutInfo === void 0 ? void 0 : fieldLayoutInfo.attrs) === null || _c === void 0 ? void 0 : _c.showLabel;
218
204
  return (_jsxs("div", { className: styles.fieldViewWrapper, children: [showFieldLabel != false &&
219
- _jsx("p", { className: "".concat(styles.fieldViewLabel, " form-field-label"), children: fieldLabel }), _jsx("div", { className: "solid-custom-editor solid-custom-editor-view", id: fieldLabel, dangerouslySetInnerHTML: { __html: formik.values[fieldLayoutInfo.attrs.name] || "" } })] }));
205
+ _jsx("p", { className: "".concat(styles.fieldViewLabel, " form-field-label"), children: fieldLabel }), _jsx("div", { className: "solid-custom-editor solid-custom-editor-view", id: fieldLabel, dangerouslySetInnerHTML: { __html: DOMPurify.sanitize(normalizeQuillRichTextHtml(formik.values[fieldLayoutInfo.attrs.name] || "")) } })] }));
220
206
  };
221
207
  //# sourceMappingURL=SolidRichTextField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolidRichTextField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidRichTextField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport React, { useEffect } from \"react\";\nimport { SolidMessage } from \"../../../shad-cn-ui/SolidMessage\";\nimport { SolidRichTextEditor } from \"../../../shad-cn-ui/SolidRichTextEditor\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\n\nconst normalizeQuillRichTextHtml = (html: string): string => {\n if (!html || typeof document === \"undefined\") {\n return html ?? \"\";\n }\n\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n\n const orderedLists = Array.from(template.content.querySelectorAll(\"ol\")).reverse();\n\n orderedLists.forEach((orderedList) => {\n const listItems = Array.from(orderedList.children).filter(\n (child): child is HTMLLIElement => child instanceof HTMLLIElement,\n );\n\n if (listItems.length === 0) {\n return;\n }\n\n const hasBulletItems = listItems.some((item) => item.getAttribute(\"data-list\") === \"bullet\");\n if (!hasBulletItems) {\n listItems.forEach((item) => item.removeAttribute(\"data-list\"));\n return;\n }\n\n const replacementFragment = document.createDocumentFragment();\n let currentList: HTMLOListElement | HTMLUListElement | null = null;\n let currentListType: \"ordered\" | \"bullet\" | null = null;\n\n const appendCurrentList = () => {\n if (currentList) {\n replacementFragment.appendChild(currentList);\n currentList = null;\n currentListType = null;\n }\n };\n\n Array.from(orderedList.childNodes).forEach((node) => {\n if (!(node instanceof HTMLLIElement)) {\n appendCurrentList();\n replacementFragment.appendChild(node);\n return;\n }\n\n const listType = node.getAttribute(\"data-list\") === \"bullet\" ? \"bullet\" : \"ordered\";\n if (!currentList || currentListType !== listType) {\n appendCurrentList();\n currentList = document.createElement(listType === \"bullet\" ? \"ul\" : \"ol\");\n currentListType = listType;\n }\n\n node.removeAttribute(\"data-list\");\n currentList.appendChild(node);\n });\n\n orderedList.replaceWith(replacementFragment);\n });\n\n return template.innerHTML;\n};\n\nexport class SolidRichTextField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n if (value !== undefined && value !== null) {\n formData.append(fieldLayoutInfo.attrs.name, value);\n }\n }\n\n initialValue(): any {\n return this.fieldContext.data[this.fieldContext.field.attrs.name];\n }\n\n validationSchema(): Yup.Schema {\n let schema: Yup.StringSchema<string | null | undefined> = Yup.string();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n\n // 1. required \n if (fieldMetadata.required) {\n schema = schema.required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel));\n } else {\n schema = schema.nullable(); // Allow null when not required\n }\n // 2. length (min/max)\n if (fieldMetadata.min && fieldMetadata.min > 0) {\n schema = schema.min(fieldMetadata.min, ERROR_MESSAGES.FIELD_MINIMUM_CHARACTER(fieldLabel,fieldMetadata.min));\n }\n if (fieldMetadata.max && fieldMetadata.max > 0) {\n schema = schema.max(fieldMetadata.max, ERROR_MESSAGES.FIELD_MAXIMUM_CHARACTER(fieldLabel,fieldMetadata.max));\n }\n // 3. regular expression\n if (fieldMetadata.regexPattern) {\n const regexPatternNotMatchingErrorMsg = fieldMetadata.regexPatternNotMatchingErrorMsg ?? `${fieldLabel} has invalid data.`\n schema = schema.matches(fieldMetadata.regexPattern, regexPatternNotMatchingErrorMsg);\n }\n\n return schema;\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultRichTextFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultRichTextFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n\n\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\nexport const DefaultRichTextFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n const fieldName = fieldLayoutInfo.attrs.name;\n const fieldValue = formik.values[fieldName] || \"\";\n const normalizedFieldValue = normalizeQuillRichTextHtml(fieldValue);\n\n useEffect(() => {\n if (fieldValue === normalizedFieldValue) {\n return;\n }\n\n fieldContext.onChange(\n {\n target: {\n name: fieldName,\n value: normalizedFieldValue,\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n }, [fieldContext, fieldName, fieldValue, normalizedFieldValue]);\n\n\n return (\n <div className={`${styles.fieldWrapper} relative`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n {fieldMetadata.required && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidRichTextEditor\n readOnly={formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled}\n id={fieldName}\n value={normalizedFieldValue}\n onChange={(value) => {\n const normalizedValue = normalizeQuillRichTextHtml(value ?? \"\");\n fieldContext.onChange(\n {\n target: {\n name: fieldName,\n value: normalizedValue,\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n }}\n className=\"solid-custom-editor\"\n style={{ minHeight: 180 }}\n />\n {isFormFieldValid(formik, fieldName) && (\n <p className={styles.fieldError}>{formik?.errors[fieldName]?.toString()}</p>\n )}\n </div>\n );\n}\n\nexport const DefaultRichTextFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel != false &&\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n }\n <div\n className=\"solid-custom-editor solid-custom-editor-view\"\n id={fieldLabel}\n dangerouslySetInnerHTML={{ __html: formik.values[fieldLayoutInfo.attrs.name] || \"\" }}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"SolidRichTextField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidRichTextField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport React from \"react\";\nimport DOMPurify from \"dompurify\";\nimport { SolidMessage } from \"../../../shad-cn-ui/SolidMessage\";\nimport { SolidRichTextEditor } from \"../../../shad-cn-ui/SolidRichTextEditor\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\n\nconst normalizeQuillRichTextHtml = (html: string): string => {\n if (!html || typeof document === \"undefined\") {\n return html ?? \"\";\n }\n\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n\n const orderedLists = Array.from(template.content.querySelectorAll(\"ol\")).reverse();\n\n orderedLists.forEach((orderedList) => {\n const listItems = Array.from(orderedList.children).filter(\n (child): child is HTMLLIElement => child instanceof HTMLLIElement,\n );\n\n if (listItems.length === 0) {\n return;\n }\n\n const hasBulletItems = listItems.some((item) => item.getAttribute(\"data-list\") === \"bullet\");\n if (!hasBulletItems) {\n listItems.forEach((item) => item.removeAttribute(\"data-list\"));\n return;\n }\n\n const replacementFragment = document.createDocumentFragment();\n let currentList: HTMLOListElement | HTMLUListElement | null = null;\n let currentListType: \"ordered\" | \"bullet\" | null = null;\n\n const appendCurrentList = () => {\n if (currentList) {\n replacementFragment.appendChild(currentList);\n currentList = null;\n currentListType = null;\n }\n };\n\n Array.from(orderedList.childNodes).forEach((node) => {\n if (!(node instanceof HTMLLIElement)) {\n appendCurrentList();\n replacementFragment.appendChild(node);\n return;\n }\n\n const listType = node.getAttribute(\"data-list\") === \"bullet\" ? \"bullet\" : \"ordered\";\n if (!currentList || currentListType !== listType) {\n appendCurrentList();\n currentList = document.createElement(listType === \"bullet\" ? \"ul\" : \"ol\");\n currentListType = listType;\n }\n\n node.removeAttribute(\"data-list\");\n currentList.appendChild(node);\n });\n\n appendCurrentList();\n orderedList.replaceWith(replacementFragment);\n });\n\n return template.innerHTML;\n};\n\nexport class SolidRichTextField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n if (value !== undefined && value !== null) {\n formData.append(fieldLayoutInfo.attrs.name, normalizeQuillRichTextHtml(value));\n }\n }\n\n initialValue(): any {\n return this.fieldContext.data[this.fieldContext.field.attrs.name];\n }\n\n validationSchema(): Yup.Schema {\n let schema: Yup.StringSchema<string | null | undefined> = Yup.string();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n\n // 1. required \n if (fieldMetadata.required) {\n schema = schema.required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel));\n } else {\n schema = schema.nullable(); // Allow null when not required\n }\n // 2. length (min/max)\n if (fieldMetadata.min && fieldMetadata.min > 0) {\n schema = schema.min(fieldMetadata.min, ERROR_MESSAGES.FIELD_MINIMUM_CHARACTER(fieldLabel,fieldMetadata.min));\n }\n if (fieldMetadata.max && fieldMetadata.max > 0) {\n schema = schema.max(fieldMetadata.max, ERROR_MESSAGES.FIELD_MAXIMUM_CHARACTER(fieldLabel,fieldMetadata.max));\n }\n // 3. regular expression\n if (fieldMetadata.regexPattern) {\n const regexPatternNotMatchingErrorMsg = fieldMetadata.regexPatternNotMatchingErrorMsg ?? `${fieldLabel} has invalid data.`\n schema = schema.matches(fieldMetadata.regexPattern, regexPatternNotMatchingErrorMsg);\n }\n\n return schema;\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultRichTextFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultRichTextFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n\n\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\nexport const DefaultRichTextFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n const fieldName = fieldLayoutInfo.attrs.name;\n\n\n return (\n <div className={`${styles.fieldWrapper} relative`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n {fieldMetadata.required && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidRichTextEditor\n readOnly={formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled}\n id={fieldName}\n value={formik.values[fieldName] || \"\"}\n onChange={(value) => {\n fieldContext.onChange(\n {\n target: {\n name: fieldName,\n value: value ?? \"\",\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n }}\n className=\"solid-custom-editor\"\n style={{ minHeight: 180 }}\n />\n {isFormFieldValid(formik, fieldName) && (\n <p className={styles.fieldError}>{formik?.errors[fieldName]?.toString()}</p>\n )}\n </div>\n );\n}\n\nexport const DefaultRichTextFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel != false &&\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n }\n <div\n className=\"solid-custom-editor solid-custom-editor-view\"\n id={fieldLabel}\n dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(normalizeQuillRichTextHtml(formik.values[fieldLayoutInfo.attrs.name] || \"\")) }}\n />\n </div>\n );\n}\n"]}
@@ -1,5 +1,6 @@
1
1
 
2
- import React, { useEffect } from "react";
2
+ import React from "react";
3
+ import DOMPurify from "dompurify";
3
4
  import { SolidMessage } from "../../../shad-cn-ui/SolidMessage";
4
5
  import { SolidRichTextEditor } from "../../../shad-cn-ui/SolidRichTextEditor";
5
6
  import * as Yup from 'yup';
@@ -65,6 +66,7 @@ const normalizeQuillRichTextHtml = (html: string): string => {
65
66
  currentList.appendChild(node);
66
67
  });
67
68
 
69
+ appendCurrentList();
68
70
  orderedList.replaceWith(replacementFragment);
69
71
  });
70
72
 
@@ -82,7 +84,7 @@ export class SolidRichTextField implements ISolidField {
82
84
  updateFormData(value: any, formData: FormData): any {
83
85
  const fieldLayoutInfo = this.fieldContext.field;
84
86
  if (value !== undefined && value !== null) {
85
- formData.append(fieldLayoutInfo.attrs.name, value);
87
+ formData.append(fieldLayoutInfo.attrs.name, normalizeQuillRichTextHtml(value));
86
88
  }
87
89
  }
88
90
 
@@ -189,25 +191,6 @@ export const DefaultRichTextFormEditWidget = ({ formik, fieldContext }: SolidFor
189
191
  const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;
190
192
  const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;
191
193
  const fieldName = fieldLayoutInfo.attrs.name;
192
- const fieldValue = formik.values[fieldName] || "";
193
- const normalizedFieldValue = normalizeQuillRichTextHtml(fieldValue);
194
-
195
- useEffect(() => {
196
- if (fieldValue === normalizedFieldValue) {
197
- return;
198
- }
199
-
200
- fieldContext.onChange(
201
- {
202
- target: {
203
- name: fieldName,
204
- value: normalizedFieldValue,
205
- type: "text",
206
- },
207
- } as any,
208
- "onFieldChange"
209
- );
210
- }, [fieldContext, fieldName, fieldValue, normalizedFieldValue]);
211
194
 
212
195
 
213
196
  return (
@@ -222,14 +205,13 @@ export const DefaultRichTextFormEditWidget = ({ formik, fieldContext }: SolidFor
222
205
  <SolidRichTextEditor
223
206
  readOnly={formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled}
224
207
  id={fieldName}
225
- value={normalizedFieldValue}
208
+ value={formik.values[fieldName] || ""}
226
209
  onChange={(value) => {
227
- const normalizedValue = normalizeQuillRichTextHtml(value ?? "");
228
210
  fieldContext.onChange(
229
211
  {
230
212
  target: {
231
213
  name: fieldName,
232
- value: normalizedValue,
214
+ value: value ?? "",
233
215
  type: "text",
234
216
  },
235
217
  } as any,
@@ -259,7 +241,7 @@ export const DefaultRichTextFormViewWidget = ({ formik, fieldContext }: SolidFor
259
241
  <div
260
242
  className="solid-custom-editor solid-custom-editor-view"
261
243
  id={fieldLabel}
262
- dangerouslySetInnerHTML={{ __html: formik.values[fieldLayoutInfo.attrs.name] || "" }}
244
+ dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(normalizeQuillRichTextHtml(formik.values[fieldLayoutInfo.attrs.name] || "")) }}
263
245
  />
264
246
  </div>
265
247
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidxai/core-ui",
3
- "version": "0.1.12-beta.8",
3
+ "version": "0.1.12-beta.9",
4
4
  "scripts": {
5
5
  "build:tailwind": "tailwindcss -i ./src/resources/solid-tailwind.css -o ./src/resources/solid-tailwind-generated.css -c ./tailwind.config.js --minify",
6
6
  "prebuild": "npm run build:tailwind && npm run copy-resources && npm run copy-styles",
@@ -32,6 +32,7 @@
32
32
  "@radix-ui/react-popover": "^1.1.15",
33
33
  "@radix-ui/react-tooltip": "^1.2.8",
34
34
  "@tanstack/react-table": "^8.21.3",
35
+ "@types/jsoneditor": "^9.9.6",
35
36
  "@types/lodash": "^4.17.23",
36
37
  "@types/pluralize": "^0.0.33",
37
38
  "@types/qs": "^6.14.0",
@@ -44,13 +45,13 @@
44
45
  "copyfile": "^0.1.2",
45
46
  "copyfiles": "^2.4.1",
46
47
  "dayjs": "^1.11.19",
48
+ "dompurify": "^3.4.5",
47
49
  "echarts": "^5.6.0",
48
50
  "echarts-for-react": "^3.0.2",
49
51
  "gridstack": "^12.2.1",
50
52
  "handlebars": "^4.7.8",
51
53
  "html-react-parser": "^5.2.2",
52
54
  "html2canvas": "^1.4.1",
53
- "@types/jsoneditor": "^9.9.6",
54
55
  "jsoneditor": "^10.4.3",
55
56
  "jspdf": "^2.5.1",
56
57
  "jwt-decode": "^4.0.0",