@procore/text-editor 1.0.0 → 1.0.1
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.
- package/CHANGELOG.md +15 -0
- package/dist/TextEditor/CKTextEditor.js +10 -4
- package/dist/TextEditor/CKTextEditor.js.map +1 -1
- package/dist/TextEditor/TextEditor.styles.js +5 -5
- package/dist/TextEditor/TextEditor.styles.js.map +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.styles.js +2 -2
- package/dist/TextEditorOutput/TextEditorOutput.styles.js.map +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.utils.js +11 -3
- package/dist/TextEditorOutput/TextEditorOutput.utils.js.map +1 -1
- package/dist/_typedoc/TextEditor/TextEditor.types.json +35 -35
- package/dist/_typedoc/TextEditor/TextEditorProvider.types.json +2 -2
- package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +3 -3
- package/dist/locales/de-DE.json +17 -0
- package/dist/locales/en-AU.json +17 -0
- package/dist/locales/en-CA.json +17 -0
- package/dist/locales/en-GB.json +17 -0
- package/dist/locales/es-ES.json +17 -0
- package/dist/locales/es.json +17 -0
- package/dist/locales/fr-CA.json +17 -0
- package/dist/locales/fr-FR.json +17 -0
- package/dist/locales/is-IS.json +17 -0
- package/dist/locales/it-IT.json +17 -0
- package/dist/locales/ja-JP.json +17 -0
- package/dist/locales/nb-NO.json +17 -0
- package/dist/locales/pl-PL.json +17 -0
- package/dist/locales/pt-BR.json +17 -0
- package/dist/locales/pt-PT.json +17 -0
- package/dist/locales/th-TH.json +17 -0
- package/dist/locales/zh-SG.json +17 -0
- package/dist/locales/zh-TW.json +17 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @procore/text-editor
|
|
2
2
|
|
|
3
|
+
## 1.0.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0553e49: Fix rich-text table rendering and align write mode and read mode:
|
|
8
|
+
- Oversized tables now scroll the editor horizontally instead of stretching the page.
|
|
9
|
+
- Output tables match the editor's content width and centered alignment (the `table` figure class is preserved through sanitization).
|
|
10
|
+
- Long cell content wraps instead of forcing the table wider.
|
|
11
|
+
- Sanitize the editor value on input in write mode, mirroring the existing output sanitization.
|
|
12
|
+
- Updated dependencies [a0ab8c9]
|
|
13
|
+
- Updated dependencies [8fb364a]
|
|
14
|
+
- Updated dependencies [d8940ff]
|
|
15
|
+
- Updated dependencies [651f78c]
|
|
16
|
+
- Updated dependencies [7e53f92]
|
|
17
|
+
|
|
3
18
|
## 1.0.0
|
|
4
19
|
|
|
5
20
|
### Major Changes
|
|
@@ -20,6 +20,7 @@ import { ClassicEditor, FileRepository } from 'ckeditor5';
|
|
|
20
20
|
import React from 'react';
|
|
21
21
|
import { Toast, useI18nContext, useZIndexContext } from '@procore/core-react';
|
|
22
22
|
import { TextEditorOutput } from '../TextEditorOutput';
|
|
23
|
+
import { sanitizeTextEditorHtml } from '../TextEditorOutput/TextEditorOutput.utils';
|
|
23
24
|
import { debounce } from '../utils/debounce';
|
|
24
25
|
import { useStickyToolbar } from './StickyToolbar';
|
|
25
26
|
import { GlobalEditorStyles, StyledImageUploadWarningToast, StyledImageUploadWarningToastIcon, StyledTextEditor } from './TextEditor.styles';
|
|
@@ -56,8 +57,8 @@ export var CKTextEditor = function CKTextEditor(props) {
|
|
|
56
57
|
useCKEditorFocusScope();
|
|
57
58
|
var editorRef = React.useRef(null);
|
|
58
59
|
var editorInstanceRef = React.useRef(null);
|
|
59
|
-
var initialValueRef = React.useRef(value || initialValue || '');
|
|
60
|
-
var lastExternalValueRef = React.useRef(value || initialValue || '');
|
|
60
|
+
var initialValueRef = React.useRef(sanitizeTextEditorHtml(value || initialValue || ''));
|
|
61
|
+
var lastExternalValueRef = React.useRef(sanitizeTextEditorHtml(value || initialValue || ''));
|
|
61
62
|
var keyDownListenerRef = React.useRef(null);
|
|
62
63
|
var _React$useState = React.useState(false),
|
|
63
64
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
@@ -87,7 +88,7 @@ export var CKTextEditor = function CKTextEditor(props) {
|
|
|
87
88
|
}, [i18n, showToast]);
|
|
88
89
|
React.useEffect(function () {
|
|
89
90
|
if (value !== undefined) {
|
|
90
|
-
lastExternalValueRef.current = value;
|
|
91
|
+
lastExternalValueRef.current = sanitizeTextEditorHtml(value);
|
|
91
92
|
}
|
|
92
93
|
}, [value]);
|
|
93
94
|
React.useEffect(function () {
|
|
@@ -95,7 +96,7 @@ export var CKTextEditor = function CKTextEditor(props) {
|
|
|
95
96
|
if (!isEditorReady || !editor || value === undefined) return;
|
|
96
97
|
if (editor.editing.view.document.isFocused) return;
|
|
97
98
|
if (value === editor.getData()) return;
|
|
98
|
-
editor.data.set(value);
|
|
99
|
+
editor.data.set(sanitizeTextEditorHtml(value));
|
|
99
100
|
}, [value, isEditorReady]);
|
|
100
101
|
|
|
101
102
|
// Cleanup keydown listener on unmount
|
|
@@ -224,9 +225,14 @@ export var CKTextEditor = function CKTextEditor(props) {
|
|
|
224
225
|
}, DEBOUNCE_MS)).current;
|
|
225
226
|
var handleChange = debouncedChange;
|
|
226
227
|
var handleReady = function handleReady(editor) {
|
|
228
|
+
var _ref2;
|
|
227
229
|
addButtonDataAttributes(editor);
|
|
228
230
|
editorInstanceRef.current = editor;
|
|
229
231
|
setIsEditorReady(true);
|
|
232
|
+
var sanitizedValue = sanitizeTextEditorHtml((_ref2 = value !== null && value !== void 0 ? value : initialValue) !== null && _ref2 !== void 0 ? _ref2 : '');
|
|
233
|
+
if (sanitizedValue !== editor.getData()) {
|
|
234
|
+
editor.data.set(sanitizedValue);
|
|
235
|
+
}
|
|
230
236
|
|
|
231
237
|
// Set aria-label and aria-description on the editable area if provided
|
|
232
238
|
// These provide accessible context to screen reader users
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CKTextEditor.js","names":["CKEditor","useToastAlertContext","ClassicEditor","FileRepository","React","Toast","useI18nContext","useZIndexContext","TextEditorOutput","debounce","useStickyToolbar","GlobalEditorStyles","StyledImageUploadWarningToast","StyledImageUploadWarningToastIcon","StyledTextEditor","TextEditorContext","TextEditorTheme","useCKEditorCss","useCKEditorFocusScope","useTabAsNavigation","addButtonDataAttributes","getDefaultConfig","richTextEditorUploadHandler","DEBOUNCE_MS","CKTextEditor","props","disabled","error","readonly","value","initialValue","onChange","onInit","onBlur","onKeyDown","propLocale","locale","onDirty","companyId","projectId","toolName","placeholder","rows","restProps","_objectWithoutProperties","_excluded","ariaLabel","ariaDescription","_useCKEditorCss","cssLoading","isLoading","editorRef","useRef","editorInstanceRef","initialValueRef","lastExternalValueRef","keyDownListenerRef","_React$useState","useState","_React$useState2","_slicedToArray","isDirtyState","setIsDirtyState","_React$useState3","_React$useState4","isEditorReady","setIsEditorReady","i18n","_useToastAlertContext","showToast","contextLocale","showImageUploadWarning","useCallback","message","custom","_ref","toastDismissProps","createElement","alignItems","padding","size","Text","Dismiss","_extends","t","useEffect","undefined","current","editor","editing","view","document","isFocused","getData","data","set","off","change","writer","viewEditableRoot","getRoot","setAttribute","removeAttribute","_useZIndexContext","zIndex","_React$useContext","useContext","features","enableStickyToolbar","stickyToolbar","enableTabAsNavigation","tabAsNavigation","imageUploadHandlers","useMemo","handlerOptions","upload","onError","onWarning","mergedConfig","defaultConfig","imageUpload","label","root","_objectSpread","bindKeyDownHandler","editorElement","keyDownListener","_event","domEvent","key","stopPropagation","on","debouncedChange","isDirty","trim","hasPendingUploads","hasPendingImageUploads","handleChange","handleReady","baseHeight","rowHeight","editorHeight","setStyle","concat","handleBlur","event","flush","enabled","_useTabAsNavigation","config","editorKey","ref","$ready","onReady","_fileRepository$loade","fileRepository","plugins","get","Array","from","loaders","some","loader","includes","String","status","_error"],"sources":["../../src/TextEditor/CKTextEditor.tsx"],"sourcesContent":["import { CKEditor } from '@ckeditor/ckeditor5-react'\nimport { useToastAlertContext } from '@procore/toast-alert'\nimport { ClassicEditor, FileRepository, type EventInfo } from 'ckeditor5'\nimport React from 'react'\n\nimport { Toast, useI18nContext, useZIndexContext } from '@procore/core-react'\nimport { TextEditorOutput } from '../TextEditorOutput'\nimport { debounce } from '../utils/debounce'\nimport { useStickyToolbar } from './StickyToolbar'\nimport {\n GlobalEditorStyles,\n StyledImageUploadWarningToast,\n StyledImageUploadWarningToastIcon,\n StyledTextEditor,\n} from './TextEditor.styles'\nimport type { KeyDownListener, TextEditorProps } from './TextEditor.types'\nimport { TextEditorContext } from './TextEditorProvider'\nimport { TextEditorTheme } from './textEditorTheming'\nimport { useCKEditorCss } from './useCKEditorCss'\nimport { useCKEditorFocusScope } from './useCKEditorFocusScope'\nimport { useTabAsNavigation } from './useTabAsNavigation'\nimport { addButtonDataAttributes, getDefaultConfig } from './utils'\nimport { richTextEditorUploadHandler } from './utils/richTextEditorHandlers'\n\nconst DEBOUNCE_MS = 300\n\nexport const CKTextEditor = (props: Readonly<TextEditorProps>) => {\n const {\n disabled,\n error,\n readonly,\n value,\n initialValue,\n onChange,\n onInit,\n onBlur,\n onKeyDown,\n locale: propLocale,\n onDirty,\n companyId,\n projectId,\n toolName,\n placeholder,\n rows,\n ...restProps\n } = props\n const ariaLabel = props['aria-label']\n const ariaDescription = props['aria-description']\n const { isLoading: cssLoading } = useCKEditorCss()\n useCKEditorFocusScope()\n\n const editorRef = React.useRef<HTMLDivElement>(null)\n const editorInstanceRef = React.useRef<ClassicEditor | null>(null)\n const initialValueRef = React.useRef<string>(value || initialValue || '')\n const lastExternalValueRef = React.useRef<string>(value || initialValue || '')\n const keyDownListenerRef = React.useRef<KeyDownListener | null>(null)\n const [isDirtyState, setIsDirtyState] = React.useState(false)\n const [isEditorReady, setIsEditorReady] = React.useState(false)\n const i18n = useI18nContext()\n const { showToast } = useToastAlertContext()\n const { locale: contextLocale } = i18n\n const locale = propLocale || contextLocale\n\n const showImageUploadWarning = React.useCallback(\n (message: string) => {\n showToast.custom(({ toastDismissProps }) => (\n <StyledImageUploadWarningToast alignItems=\"center\" padding=\"md xl\">\n <StyledImageUploadWarningToastIcon size=\"lg\" />\n <Toast.Text>{message}</Toast.Text>\n <Toast.Dismiss\n aria-label={i18n.t('textEditor.imageUpload.dismissWarning')}\n {...toastDismissProps}\n />\n </StyledImageUploadWarningToast>\n ))\n },\n [i18n, showToast]\n )\n\n React.useEffect(() => {\n if (value !== undefined) {\n lastExternalValueRef.current = value\n }\n }, [value])\n\n React.useEffect(() => {\n const editor = editorInstanceRef.current\n if (!isEditorReady || !editor || value === undefined) return\n if (editor.editing.view.document.isFocused) return\n if (value === editor.getData()) return\n\n editor.data.set(value)\n }, [value, isEditorReady])\n\n // Cleanup keydown listener on unmount\n React.useEffect(() => {\n return () => {\n if (keyDownListenerRef.current && editorInstanceRef.current) {\n editorInstanceRef.current.editing.view.document.off(\n 'keydown',\n keyDownListenerRef.current\n )\n keyDownListenerRef.current = null\n }\n }\n }, [])\n\n // Update aria-label when ariaLabel prop changes\n React.useEffect(() => {\n if (!isEditorReady || !editorInstanceRef.current) {\n return\n }\n\n const editor = editorInstanceRef.current\n editor.editing.view.change((writer) => {\n const viewEditableRoot = editor.editing.view.document.getRoot()\n if (viewEditableRoot) {\n if (ariaLabel) {\n writer.setAttribute('aria-label', ariaLabel, viewEditableRoot)\n } else {\n writer.removeAttribute('aria-label', viewEditableRoot)\n }\n }\n })\n }, [ariaLabel, isEditorReady])\n\n // Update aria-description when ariaDescription prop changes\n React.useEffect(() => {\n if (!isEditorReady || !editorInstanceRef.current) {\n return\n }\n\n const editor = editorInstanceRef.current\n editor.editing.view.change((writer) => {\n const viewEditableRoot = editor.editing.view.document.getRoot()\n if (viewEditableRoot) {\n if (ariaDescription) {\n writer.setAttribute(\n 'aria-description',\n ariaDescription,\n viewEditableRoot\n )\n } else {\n writer.removeAttribute('aria-description', viewEditableRoot)\n }\n }\n })\n }, [ariaDescription, isEditorReady])\n\n const { value: zIndex } = useZIndexContext()\n\n const { features } = React.useContext(TextEditorContext)\n const enableStickyToolbar = !!features?.stickyToolbar\n const enableTabAsNavigation = !!features?.tabAsNavigation\n\n const imageUploadHandlers = React.useMemo(() => {\n if (companyId === undefined || toolName === undefined) {\n return undefined\n }\n\n const handlerOptions = {\n companyId,\n projectId,\n toolName,\n }\n\n const upload = richTextEditorUploadHandler(handlerOptions)\n\n return {\n upload,\n i18n,\n onError: showToast.error,\n onWarning: showImageUploadWarning,\n }\n }, [\n companyId,\n i18n,\n projectId,\n showImageUploadWarning,\n showToast.error,\n toolName,\n ])\n\n const mergedConfig = React.useMemo(() => {\n const defaultConfig = getDefaultConfig(locale, {\n imageUpload: imageUploadHandlers,\n })\n\n // Set accessible label for the editable area if provided\n // This is used by screen readers to announce the editor's purpose\n if (ariaLabel) {\n defaultConfig.label = ariaLabel\n }\n\n if (placeholder) {\n defaultConfig.root = { ...defaultConfig.root, placeholder }\n }\n\n return defaultConfig\n }, [ariaLabel, imageUploadHandlers, locale, placeholder])\n\n const bindKeyDownHandler = React.useCallback(\n (editor: ClassicEditor) => {\n const editorElement = editor.editing.view.document.getRoot()\n if (!editorElement) {\n return\n }\n\n // Remove existing keydown listener\n if (keyDownListenerRef.current) {\n editor.editing.view.document.off('keydown', keyDownListenerRef.current)\n }\n\n // Create and store the new listener\n const keyDownListener = (\n _event: EventInfo,\n data: { domEvent: Event }\n ) => {\n const domEvent = data.domEvent as KeyboardEvent\n // Prevent Enter from propagating to parent forms so the\n // editor can handle newlines without accidentally submitting.\n if (domEvent.key === 'Enter') {\n domEvent.stopPropagation()\n }\n\n onKeyDown?.(domEvent, editor)\n }\n\n keyDownListenerRef.current = keyDownListener\n\n // Add the keydown listener\n editor.editing.view.document.on('keydown', keyDownListener)\n },\n [onKeyDown]\n )\n\n const debouncedChange = React.useRef(\n debounce((_event: EventInfo<string, unknown>, editor: ClassicEditor) => {\n const data = editor.getData()\n const isDirty = data !== lastExternalValueRef.current.trim()\n const hasPendingUploads = hasPendingImageUploads(editor)\n\n if (isDirty && !isDirtyState) {\n setIsDirtyState(true)\n onDirty?.()\n }\n\n if (hasPendingUploads) {\n return\n }\n\n onChange?.(data, isDirty)\n }, DEBOUNCE_MS)\n ).current\n\n const handleChange = debouncedChange\n\n const handleReady = (editor: ClassicEditor) => {\n addButtonDataAttributes(editor)\n editorInstanceRef.current = editor\n setIsEditorReady(true)\n\n // Set aria-label and aria-description on the editable area if provided\n // These provide accessible context to screen reader users\n editor.editing.view.change((writer) => {\n const viewEditableRoot = editor.editing.view.document.getRoot()\n if (viewEditableRoot) {\n if (ariaLabel) {\n writer.setAttribute('aria-label', ariaLabel, viewEditableRoot)\n }\n if (ariaDescription) {\n writer.setAttribute(\n 'aria-description',\n ariaDescription,\n viewEditableRoot\n )\n }\n if (rows !== undefined) {\n const baseHeight = 35\n const rowHeight = 22\n const editorHeight = rows * rowHeight + baseHeight\n writer.setStyle('min-height', `${editorHeight}px`, viewEditableRoot)\n writer.setStyle('max-height', `${editorHeight}px`, viewEditableRoot)\n }\n }\n })\n\n // Bind keydown handler when editor is ready\n bindKeyDownHandler(editor)\n\n onInit?.(editor)\n }\n\n const handleBlur = (\n event: EventInfo<string, unknown>,\n editor: ClassicEditor\n ) => {\n debouncedChange.flush()\n onBlur?.(event, editor)\n }\n\n useStickyToolbar({\n enabled: enableStickyToolbar,\n editor: isEditorReady ? editorInstanceRef.current : null,\n editorRef,\n cssLoading,\n })\n\n const { config } = useTabAsNavigation({\n config: mergedConfig,\n enabled: enableTabAsNavigation,\n editor: isEditorReady ? editorInstanceRef.current : null,\n })\n\n const editorKey = `${locale}-${enableTabAsNavigation}`\n\n if (cssLoading) {\n return null\n }\n\n if (readonly) {\n return (\n <TextEditorOutput\n value={value}\n aria-label={ariaLabel}\n aria-description={ariaDescription}\n />\n )\n }\n\n return (\n <StyledTextEditor\n ref={editorRef}\n key={editorKey}\n error={error}\n $ready={isEditorReady}\n aria-invalid={error ? 'true' : 'false'}\n >\n <GlobalEditorStyles zIndex={zIndex + 1} />\n <TextEditorTheme />\n <CKEditor\n {...restProps}\n editor={ClassicEditor}\n config={config}\n disabled={disabled}\n data={initialValueRef.current}\n onChange={handleChange}\n onReady={handleReady}\n onBlur={handleBlur}\n />\n </StyledTextEditor>\n )\n}\n\nfunction hasPendingImageUploads(editor: ClassicEditor) {\n try {\n const fileRepository = editor.plugins.get(FileRepository) as {\n loaders?: Iterable<{ status?: string }>\n }\n\n return Array.from(fileRepository.loaders ?? []).some((loader) =>\n ['reading', 'uploading'].includes(String(loader.status))\n )\n } catch (_error) {\n return false\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAASA,QAAQ,QAAQ,2BAA2B;AACpD,SAASC,oBAAoB,QAAQ,sBAAsB;AAC3D,SAASC,aAAa,EAAEC,cAAc,QAAwB,WAAW;AACzE,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,KAAK,EAAEC,cAAc,EAAEC,gBAAgB,QAAQ,qBAAqB;AAC7E,SAASC,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,gBAAgB,QAAQ,iBAAiB;AAClD,SACEC,kBAAkB,EAClBC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,QACX,qBAAqB;AAE5B,SAASC,iBAAiB,QAAQ,sBAAsB;AACxD,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,uBAAuB,EAAEC,gBAAgB,QAAQ,SAAS;AACnE,SAASC,2BAA2B,QAAQ,gCAAgC;AAE5E,IAAMC,WAAW,GAAG,GAAG;AAEvB,OAAO,IAAMC,YAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAgC,EAAK;EAChE,IACEC,QAAQ,GAiBND,KAAK,CAjBPC,QAAQ;IACRC,KAAK,GAgBHF,KAAK,CAhBPE,KAAK;IACLC,QAAQ,GAeNH,KAAK,CAfPG,QAAQ;IACRC,KAAK,GAcHJ,KAAK,CAdPI,KAAK;IACLC,YAAY,GAaVL,KAAK,CAbPK,YAAY;IACZC,QAAQ,GAYNN,KAAK,CAZPM,QAAQ;IACRC,MAAM,GAWJP,KAAK,CAXPO,MAAM;IACNC,MAAM,GAUJR,KAAK,CAVPQ,MAAM;IACNC,SAAS,GASPT,KAAK,CATPS,SAAS;IACDC,UAAU,GAQhBV,KAAK,CARPW,MAAM;IACNC,OAAO,GAOLZ,KAAK,CAPPY,OAAO;IACPC,SAAS,GAMPb,KAAK,CANPa,SAAS;IACTC,SAAS,GAKPd,KAAK,CALPc,SAAS;IACTC,QAAQ,GAINf,KAAK,CAJPe,QAAQ;IACRC,WAAW,GAGThB,KAAK,CAHPgB,WAAW;IACXC,IAAI,GAEFjB,KAAK,CAFPiB,IAAI;IACDC,SAAS,GAAAC,wBAAA,CACVnB,KAAK,EAAAoB,SAAA;EACT,IAAMC,SAAS,GAAGrB,KAAK,CAAC,YAAY,CAAC;EACrC,IAAMsB,eAAe,GAAGtB,KAAK,CAAC,kBAAkB,CAAC;EACjD,IAAAuB,eAAA,GAAkC/B,cAAc,CAAC,CAAC;IAA/BgC,UAAU,GAAAD,eAAA,CAArBE,SAAS;EACjBhC,qBAAqB,CAAC,CAAC;EAEvB,IAAMiC,SAAS,GAAG/C,KAAK,CAACgD,MAAM,CAAiB,IAAI,CAAC;EACpD,IAAMC,iBAAiB,GAAGjD,KAAK,CAACgD,MAAM,CAAuB,IAAI,CAAC;EAClE,IAAME,eAAe,GAAGlD,KAAK,CAACgD,MAAM,CAASvB,KAAK,IAAIC,YAAY,IAAI,EAAE,CAAC;EACzE,IAAMyB,oBAAoB,GAAGnD,KAAK,CAACgD,MAAM,CAASvB,KAAK,IAAIC,YAAY,IAAI,EAAE,CAAC;EAC9E,IAAM0B,kBAAkB,GAAGpD,KAAK,CAACgD,MAAM,CAAyB,IAAI,CAAC;EACrE,IAAAK,eAAA,GAAwCrD,KAAK,CAACsD,QAAQ,CAAC,KAAK,CAAC;IAAAC,gBAAA,GAAAC,cAAA,CAAAH,eAAA;IAAtDI,YAAY,GAAAF,gBAAA;IAAEG,eAAe,GAAAH,gBAAA;EACpC,IAAAI,gBAAA,GAA0C3D,KAAK,CAACsD,QAAQ,CAAC,KAAK,CAAC;IAAAM,gBAAA,GAAAJ,cAAA,CAAAG,gBAAA;IAAxDE,aAAa,GAAAD,gBAAA;IAAEE,gBAAgB,GAAAF,gBAAA;EACtC,IAAMG,IAAI,GAAG7D,cAAc,CAAC,CAAC;EAC7B,IAAA8D,qBAAA,GAAsBnE,oBAAoB,CAAC,CAAC;IAApCoE,SAAS,GAAAD,qBAAA,CAATC,SAAS;EACjB,IAAgBC,aAAa,GAAKH,IAAI,CAA9B/B,MAAM;EACd,IAAMA,MAAM,GAAGD,UAAU,IAAImC,aAAa;EAE1C,IAAMC,sBAAsB,GAAGnE,KAAK,CAACoE,WAAW,CAC9C,UAACC,OAAe,EAAK;IACnBJ,SAAS,CAACK,MAAM,CAAC,UAAAC,IAAA;MAAA,IAAGC,iBAAiB,GAAAD,IAAA,CAAjBC,iBAAiB;MAAA,oBACnCxE,KAAA,CAAAyE,aAAA,CAACjE,6BAA6B;QAACkE,UAAU,EAAC,QAAQ;QAACC,OAAO,EAAC;MAAO,gBAChE3E,KAAA,CAAAyE,aAAA,CAAChE,iCAAiC;QAACmE,IAAI,EAAC;MAAI,CAAE,CAAC,eAC/C5E,KAAA,CAAAyE,aAAA,CAACxE,KAAK,CAAC4E,IAAI,QAAER,OAAoB,CAAC,eAClCrE,KAAA,CAAAyE,aAAA,CAACxE,KAAK,CAAC6E,OAAO,EAAAC,QAAA;QACZ,cAAYhB,IAAI,CAACiB,CAAC,CAAC,uCAAuC;MAAE,GACxDR,iBAAiB,CACtB,CAC4B,CAAC;IAAA,CACjC,CAAC;EACJ,CAAC,EACD,CAACT,IAAI,EAAEE,SAAS,CAClB,CAAC;EAEDjE,KAAK,CAACiF,SAAS,CAAC,YAAM;IACpB,IAAIxD,KAAK,KAAKyD,SAAS,EAAE;MACvB/B,oBAAoB,CAACgC,OAAO,GAAG1D,KAAK;IACtC;EACF,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEXzB,KAAK,CAACiF,SAAS,CAAC,YAAM;IACpB,IAAMG,MAAM,GAAGnC,iBAAiB,CAACkC,OAAO;IACxC,IAAI,CAACtB,aAAa,IAAI,CAACuB,MAAM,IAAI3D,KAAK,KAAKyD,SAAS,EAAE;IACtD,IAAIE,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACC,SAAS,EAAE;IAC5C,IAAI/D,KAAK,KAAK2D,MAAM,CAACK,OAAO,CAAC,CAAC,EAAE;IAEhCL,MAAM,CAACM,IAAI,CAACC,GAAG,CAAClE,KAAK,CAAC;EACxB,CAAC,EAAE,CAACA,KAAK,EAAEoC,aAAa,CAAC,CAAC;;EAE1B;EACA7D,KAAK,CAACiF,SAAS,CAAC,YAAM;IACpB,OAAO,YAAM;MACX,IAAI7B,kBAAkB,CAAC+B,OAAO,IAAIlC,iBAAiB,CAACkC,OAAO,EAAE;QAC3DlC,iBAAiB,CAACkC,OAAO,CAACE,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACK,GAAG,CACjD,SAAS,EACTxC,kBAAkB,CAAC+B,OACrB,CAAC;QACD/B,kBAAkB,CAAC+B,OAAO,GAAG,IAAI;MACnC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;;EAEN;EACAnF,KAAK,CAACiF,SAAS,CAAC,YAAM;IACpB,IAAI,CAACpB,aAAa,IAAI,CAACZ,iBAAiB,CAACkC,OAAO,EAAE;MAChD;IACF;IAEA,IAAMC,MAAM,GAAGnC,iBAAiB,CAACkC,OAAO;IACxCC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACO,MAAM,CAAC,UAACC,MAAM,EAAK;MACrC,IAAMC,gBAAgB,GAAGX,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,CAAC;MAC/D,IAAID,gBAAgB,EAAE;QACpB,IAAIrD,SAAS,EAAE;UACboD,MAAM,CAACG,YAAY,CAAC,YAAY,EAAEvD,SAAS,EAAEqD,gBAAgB,CAAC;QAChE,CAAC,MAAM;UACLD,MAAM,CAACI,eAAe,CAAC,YAAY,EAAEH,gBAAgB,CAAC;QACxD;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACrD,SAAS,EAAEmB,aAAa,CAAC,CAAC;;EAE9B;EACA7D,KAAK,CAACiF,SAAS,CAAC,YAAM;IACpB,IAAI,CAACpB,aAAa,IAAI,CAACZ,iBAAiB,CAACkC,OAAO,EAAE;MAChD;IACF;IAEA,IAAMC,MAAM,GAAGnC,iBAAiB,CAACkC,OAAO;IACxCC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACO,MAAM,CAAC,UAACC,MAAM,EAAK;MACrC,IAAMC,gBAAgB,GAAGX,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,CAAC;MAC/D,IAAID,gBAAgB,EAAE;QACpB,IAAIpD,eAAe,EAAE;UACnBmD,MAAM,CAACG,YAAY,CACjB,kBAAkB,EAClBtD,eAAe,EACfoD,gBACF,CAAC;QACH,CAAC,MAAM;UACLD,MAAM,CAACI,eAAe,CAAC,kBAAkB,EAAEH,gBAAgB,CAAC;QAC9D;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACpD,eAAe,EAAEkB,aAAa,CAAC,CAAC;EAEpC,IAAAsC,iBAAA,GAA0BhG,gBAAgB,CAAC,CAAC;IAA7BiG,MAAM,GAAAD,iBAAA,CAAb1E,KAAK;EAEb,IAAA4E,iBAAA,GAAqBrG,KAAK,CAACsG,UAAU,CAAC3F,iBAAiB,CAAC;IAAhD4F,QAAQ,GAAAF,iBAAA,CAARE,QAAQ;EAChB,IAAMC,mBAAmB,GAAG,CAAC,EAACD,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEE,aAAa;EACrD,IAAMC,qBAAqB,GAAG,CAAC,EAACH,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEI,eAAe;EAEzD,IAAMC,mBAAmB,GAAG5G,KAAK,CAAC6G,OAAO,CAAC,YAAM;IAC9C,IAAI3E,SAAS,KAAKgD,SAAS,IAAI9C,QAAQ,KAAK8C,SAAS,EAAE;MACrD,OAAOA,SAAS;IAClB;IAEA,IAAM4B,cAAc,GAAG;MACrB5E,SAAS,EAATA,SAAS;MACTC,SAAS,EAATA,SAAS;MACTC,QAAQ,EAARA;IACF,CAAC;IAED,IAAM2E,MAAM,GAAG7F,2BAA2B,CAAC4F,cAAc,CAAC;IAE1D,OAAO;MACLC,MAAM,EAANA,MAAM;MACNhD,IAAI,EAAJA,IAAI;MACJiD,OAAO,EAAE/C,SAAS,CAAC1C,KAAK;MACxB0F,SAAS,EAAE9C;IACb,CAAC;EACH,CAAC,EAAE,CACDjC,SAAS,EACT6B,IAAI,EACJ5B,SAAS,EACTgC,sBAAsB,EACtBF,SAAS,CAAC1C,KAAK,EACfa,QAAQ,CACT,CAAC;EAEF,IAAM8E,YAAY,GAAGlH,KAAK,CAAC6G,OAAO,CAAC,YAAM;IACvC,IAAMM,aAAa,GAAGlG,gBAAgB,CAACe,MAAM,EAAE;MAC7CoF,WAAW,EAAER;IACf,CAAC,CAAC;;IAEF;IACA;IACA,IAAIlE,SAAS,EAAE;MACbyE,aAAa,CAACE,KAAK,GAAG3E,SAAS;IACjC;IAEA,IAAIL,WAAW,EAAE;MACf8E,aAAa,CAACG,IAAI,GAAAC,aAAA,CAAAA,aAAA,KAAQJ,aAAa,CAACG,IAAI;QAAEjF,WAAW,EAAXA;MAAW,EAAE;IAC7D;IAEA,OAAO8E,aAAa;EACtB,CAAC,EAAE,CAACzE,SAAS,EAAEkE,mBAAmB,EAAE5E,MAAM,EAAEK,WAAW,CAAC,CAAC;EAEzD,IAAMmF,kBAAkB,GAAGxH,KAAK,CAACoE,WAAW,CAC1C,UAACgB,MAAqB,EAAK;IACzB,IAAMqC,aAAa,GAAGrC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,CAAC;IAC5D,IAAI,CAACyB,aAAa,EAAE;MAClB;IACF;;IAEA;IACA,IAAIrE,kBAAkB,CAAC+B,OAAO,EAAE;MAC9BC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACK,GAAG,CAAC,SAAS,EAAExC,kBAAkB,CAAC+B,OAAO,CAAC;IACzE;;IAEA;IACA,IAAMuC,eAAe,GAAG,SAAlBA,eAAeA,CACnBC,MAAiB,EACjBjC,IAAyB,EACtB;MACH,IAAMkC,QAAQ,GAAGlC,IAAI,CAACkC,QAAyB;MAC/C;MACA;MACA,IAAIA,QAAQ,CAACC,GAAG,KAAK,OAAO,EAAE;QAC5BD,QAAQ,CAACE,eAAe,CAAC,CAAC;MAC5B;MAEAhG,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAG8F,QAAQ,EAAExC,MAAM,CAAC;IAC/B,CAAC;IAEDhC,kBAAkB,CAAC+B,OAAO,GAAGuC,eAAe;;IAE5C;IACAtC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACwC,EAAE,CAAC,SAAS,EAAEL,eAAe,CAAC;EAC7D,CAAC,EACD,CAAC5F,SAAS,CACZ,CAAC;EAED,IAAMkG,eAAe,GAAGhI,KAAK,CAACgD,MAAM,CAClC3C,QAAQ,CAAC,UAACsH,MAAkC,EAAEvC,MAAqB,EAAK;IACtE,IAAMM,IAAI,GAAGN,MAAM,CAACK,OAAO,CAAC,CAAC;IAC7B,IAAMwC,OAAO,GAAGvC,IAAI,KAAKvC,oBAAoB,CAACgC,OAAO,CAAC+C,IAAI,CAAC,CAAC;IAC5D,IAAMC,iBAAiB,GAAGC,sBAAsB,CAAChD,MAAM,CAAC;IAExD,IAAI6C,OAAO,IAAI,CAACxE,YAAY,EAAE;MAC5BC,eAAe,CAAC,IAAI,CAAC;MACrBzB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAG,CAAC;IACb;IAEA,IAAIkG,iBAAiB,EAAE;MACrB;IACF;IAEAxG,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAG+D,IAAI,EAAEuC,OAAO,CAAC;EAC3B,CAAC,EAAE9G,WAAW,CAChB,CAAC,CAACgE,OAAO;EAET,IAAMkD,YAAY,GAAGL,eAAe;EAEpC,IAAMM,WAAW,GAAG,SAAdA,WAAWA,CAAIlD,MAAqB,EAAK;IAC7CpE,uBAAuB,CAACoE,MAAM,CAAC;IAC/BnC,iBAAiB,CAACkC,OAAO,GAAGC,MAAM;IAClCtB,gBAAgB,CAAC,IAAI,CAAC;;IAEtB;IACA;IACAsB,MAAM,CAACC,OAAO,CAACC,IAAI,CAACO,MAAM,CAAC,UAACC,MAAM,EAAK;MACrC,IAAMC,gBAAgB,GAAGX,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,CAAC;MAC/D,IAAID,gBAAgB,EAAE;QACpB,IAAIrD,SAAS,EAAE;UACboD,MAAM,CAACG,YAAY,CAAC,YAAY,EAAEvD,SAAS,EAAEqD,gBAAgB,CAAC;QAChE;QACA,IAAIpD,eAAe,EAAE;UACnBmD,MAAM,CAACG,YAAY,CACjB,kBAAkB,EAClBtD,eAAe,EACfoD,gBACF,CAAC;QACH;QACA,IAAIzD,IAAI,KAAK4C,SAAS,EAAE;UACtB,IAAMqD,UAAU,GAAG,EAAE;UACrB,IAAMC,SAAS,GAAG,EAAE;UACpB,IAAMC,YAAY,GAAGnG,IAAI,GAAGkG,SAAS,GAAGD,UAAU;UAClDzC,MAAM,CAAC4C,QAAQ,CAAC,YAAY,KAAAC,MAAA,CAAKF,YAAY,SAAM1C,gBAAgB,CAAC;UACpED,MAAM,CAAC4C,QAAQ,CAAC,YAAY,KAAAC,MAAA,CAAKF,YAAY,SAAM1C,gBAAgB,CAAC;QACtE;MACF;IACF,CAAC,CAAC;;IAEF;IACAyB,kBAAkB,CAACpC,MAAM,CAAC;IAE1BxD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAGwD,MAAM,CAAC;EAClB,CAAC;EAED,IAAMwD,UAAU,GAAG,SAAbA,UAAUA,CACdC,KAAiC,EACjCzD,MAAqB,EAClB;IACH4C,eAAe,CAACc,KAAK,CAAC,CAAC;IACvBjH,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAGgH,KAAK,EAAEzD,MAAM,CAAC;EACzB,CAAC;EAED9E,gBAAgB,CAAC;IACfyI,OAAO,EAAEvC,mBAAmB;IAC5BpB,MAAM,EAAEvB,aAAa,GAAGZ,iBAAiB,CAACkC,OAAO,GAAG,IAAI;IACxDpC,SAAS,EAATA,SAAS;IACTF,UAAU,EAAVA;EACF,CAAC,CAAC;EAEF,IAAAmG,mBAAA,GAAmBjI,kBAAkB,CAAC;MACpCkI,MAAM,EAAE/B,YAAY;MACpB6B,OAAO,EAAErC,qBAAqB;MAC9BtB,MAAM,EAAEvB,aAAa,GAAGZ,iBAAiB,CAACkC,OAAO,GAAG;IACtD,CAAC,CAAC;IAJM8D,MAAM,GAAAD,mBAAA,CAANC,MAAM;EAMd,IAAMC,SAAS,MAAAP,MAAA,CAAM3G,MAAM,OAAA2G,MAAA,CAAIjC,qBAAqB,CAAE;EAEtD,IAAI7D,UAAU,EAAE;IACd,OAAO,IAAI;EACb;EAEA,IAAIrB,QAAQ,EAAE;IACZ,oBACExB,KAAA,CAAAyE,aAAA,CAACrE,gBAAgB;MACfqB,KAAK,EAAEA,KAAM;MACb,cAAYiB,SAAU;MACtB,oBAAkBC;IAAgB,CACnC,CAAC;EAEN;EAEA,oBACE3C,KAAA,CAAAyE,aAAA,CAAC/D,gBAAgB;IACfyI,GAAG,EAAEpG,SAAU;IACf8E,GAAG,EAAEqB,SAAU;IACf3H,KAAK,EAAEA,KAAM;IACb6H,MAAM,EAAEvF,aAAc;IACtB,gBAActC,KAAK,GAAG,MAAM,GAAG;EAAQ,gBAEvCvB,KAAA,CAAAyE,aAAA,CAAClE,kBAAkB;IAAC6F,MAAM,EAAEA,MAAM,GAAG;EAAE,CAAE,CAAC,eAC1CpG,KAAA,CAAAyE,aAAA,CAAC7D,eAAe,MAAE,CAAC,eACnBZ,KAAA,CAAAyE,aAAA,CAAC7E,QAAQ,EAAAmF,QAAA,KACHxC,SAAS;IACb6C,MAAM,EAAEtF,aAAc;IACtBmJ,MAAM,EAAEA,MAAO;IACf3H,QAAQ,EAAEA,QAAS;IACnBoE,IAAI,EAAExC,eAAe,CAACiC,OAAQ;IAC9BxD,QAAQ,EAAE0G,YAAa;IACvBgB,OAAO,EAAEf,WAAY;IACrBzG,MAAM,EAAE+G;EAAW,EACpB,CACe,CAAC;AAEvB,CAAC;AAED,SAASR,sBAAsBA,CAAChD,MAAqB,EAAE;EACrD,IAAI;IAAA,IAAAkE,qBAAA;IACF,IAAMC,cAAc,GAAGnE,MAAM,CAACoE,OAAO,CAACC,GAAG,CAAC1J,cAAc,CAEvD;IAED,OAAO2J,KAAK,CAACC,IAAI,EAAAL,qBAAA,GAACC,cAAc,CAACK,OAAO,cAAAN,qBAAA,cAAAA,qBAAA,GAAI,EAAE,CAAC,CAACO,IAAI,CAAC,UAACC,MAAM;MAAA,OAC1D,CAAC,SAAS,EAAE,WAAW,CAAC,CAACC,QAAQ,CAACC,MAAM,CAACF,MAAM,CAACG,MAAM,CAAC,CAAC;IAAA,CAC1D,CAAC;EACH,CAAC,CAAC,OAAOC,MAAM,EAAE;IACf,OAAO,KAAK;EACd;AACF"}
|
|
1
|
+
{"version":3,"file":"CKTextEditor.js","names":["CKEditor","useToastAlertContext","ClassicEditor","FileRepository","React","Toast","useI18nContext","useZIndexContext","TextEditorOutput","sanitizeTextEditorHtml","debounce","useStickyToolbar","GlobalEditorStyles","StyledImageUploadWarningToast","StyledImageUploadWarningToastIcon","StyledTextEditor","TextEditorContext","TextEditorTheme","useCKEditorCss","useCKEditorFocusScope","useTabAsNavigation","addButtonDataAttributes","getDefaultConfig","richTextEditorUploadHandler","DEBOUNCE_MS","CKTextEditor","props","disabled","error","readonly","value","initialValue","onChange","onInit","onBlur","onKeyDown","propLocale","locale","onDirty","companyId","projectId","toolName","placeholder","rows","restProps","_objectWithoutProperties","_excluded","ariaLabel","ariaDescription","_useCKEditorCss","cssLoading","isLoading","editorRef","useRef","editorInstanceRef","initialValueRef","lastExternalValueRef","keyDownListenerRef","_React$useState","useState","_React$useState2","_slicedToArray","isDirtyState","setIsDirtyState","_React$useState3","_React$useState4","isEditorReady","setIsEditorReady","i18n","_useToastAlertContext","showToast","contextLocale","showImageUploadWarning","useCallback","message","custom","_ref","toastDismissProps","createElement","alignItems","padding","size","Text","Dismiss","_extends","t","useEffect","undefined","current","editor","editing","view","document","isFocused","getData","data","set","off","change","writer","viewEditableRoot","getRoot","setAttribute","removeAttribute","_useZIndexContext","zIndex","_React$useContext","useContext","features","enableStickyToolbar","stickyToolbar","enableTabAsNavigation","tabAsNavigation","imageUploadHandlers","useMemo","handlerOptions","upload","onError","onWarning","mergedConfig","defaultConfig","imageUpload","label","root","_objectSpread","bindKeyDownHandler","editorElement","keyDownListener","_event","domEvent","key","stopPropagation","on","debouncedChange","isDirty","trim","hasPendingUploads","hasPendingImageUploads","handleChange","handleReady","_ref2","sanitizedValue","baseHeight","rowHeight","editorHeight","setStyle","concat","handleBlur","event","flush","enabled","_useTabAsNavigation","config","editorKey","ref","$ready","onReady","_fileRepository$loade","fileRepository","plugins","get","Array","from","loaders","some","loader","includes","String","status","_error"],"sources":["../../src/TextEditor/CKTextEditor.tsx"],"sourcesContent":["import { CKEditor } from '@ckeditor/ckeditor5-react'\nimport { useToastAlertContext } from '@procore/toast-alert'\nimport { ClassicEditor, FileRepository, type EventInfo } from 'ckeditor5'\nimport React from 'react'\n\nimport { Toast, useI18nContext, useZIndexContext } from '@procore/core-react'\nimport { TextEditorOutput } from '../TextEditorOutput'\nimport { sanitizeTextEditorHtml } from '../TextEditorOutput/TextEditorOutput.utils'\nimport { debounce } from '../utils/debounce'\nimport { useStickyToolbar } from './StickyToolbar'\nimport {\n GlobalEditorStyles,\n StyledImageUploadWarningToast,\n StyledImageUploadWarningToastIcon,\n StyledTextEditor,\n} from './TextEditor.styles'\nimport type { KeyDownListener, TextEditorProps } from './TextEditor.types'\nimport { TextEditorContext } from './TextEditorProvider'\nimport { TextEditorTheme } from './textEditorTheming'\nimport { useCKEditorCss } from './useCKEditorCss'\nimport { useCKEditorFocusScope } from './useCKEditorFocusScope'\nimport { useTabAsNavigation } from './useTabAsNavigation'\nimport { addButtonDataAttributes, getDefaultConfig } from './utils'\nimport { richTextEditorUploadHandler } from './utils/richTextEditorHandlers'\n\nconst DEBOUNCE_MS = 300\n\nexport const CKTextEditor = (props: Readonly<TextEditorProps>) => {\n const {\n disabled,\n error,\n readonly,\n value,\n initialValue,\n onChange,\n onInit,\n onBlur,\n onKeyDown,\n locale: propLocale,\n onDirty,\n companyId,\n projectId,\n toolName,\n placeholder,\n rows,\n ...restProps\n } = props\n const ariaLabel = props['aria-label']\n const ariaDescription = props['aria-description']\n const { isLoading: cssLoading } = useCKEditorCss()\n useCKEditorFocusScope()\n\n const editorRef = React.useRef<HTMLDivElement>(null)\n const editorInstanceRef = React.useRef<ClassicEditor | null>(null)\n const initialValueRef = React.useRef<string>(\n sanitizeTextEditorHtml(value || initialValue || '')\n )\n const lastExternalValueRef = React.useRef<string>(\n sanitizeTextEditorHtml(value || initialValue || '')\n )\n const keyDownListenerRef = React.useRef<KeyDownListener | null>(null)\n const [isDirtyState, setIsDirtyState] = React.useState(false)\n const [isEditorReady, setIsEditorReady] = React.useState(false)\n const i18n = useI18nContext()\n const { showToast } = useToastAlertContext()\n const { locale: contextLocale } = i18n\n const locale = propLocale || contextLocale\n\n const showImageUploadWarning = React.useCallback(\n (message: string) => {\n showToast.custom(({ toastDismissProps }) => (\n <StyledImageUploadWarningToast alignItems=\"center\" padding=\"md xl\">\n <StyledImageUploadWarningToastIcon size=\"lg\" />\n <Toast.Text>{message}</Toast.Text>\n <Toast.Dismiss\n aria-label={i18n.t('textEditor.imageUpload.dismissWarning')}\n {...toastDismissProps}\n />\n </StyledImageUploadWarningToast>\n ))\n },\n [i18n, showToast]\n )\n\n React.useEffect(() => {\n if (value !== undefined) {\n lastExternalValueRef.current = sanitizeTextEditorHtml(value)\n }\n }, [value])\n\n React.useEffect(() => {\n const editor = editorInstanceRef.current\n if (!isEditorReady || !editor || value === undefined) return\n if (editor.editing.view.document.isFocused) return\n if (value === editor.getData()) return\n\n editor.data.set(sanitizeTextEditorHtml(value))\n }, [value, isEditorReady])\n\n // Cleanup keydown listener on unmount\n React.useEffect(() => {\n return () => {\n if (keyDownListenerRef.current && editorInstanceRef.current) {\n editorInstanceRef.current.editing.view.document.off(\n 'keydown',\n keyDownListenerRef.current\n )\n keyDownListenerRef.current = null\n }\n }\n }, [])\n\n // Update aria-label when ariaLabel prop changes\n React.useEffect(() => {\n if (!isEditorReady || !editorInstanceRef.current) {\n return\n }\n\n const editor = editorInstanceRef.current\n editor.editing.view.change((writer) => {\n const viewEditableRoot = editor.editing.view.document.getRoot()\n if (viewEditableRoot) {\n if (ariaLabel) {\n writer.setAttribute('aria-label', ariaLabel, viewEditableRoot)\n } else {\n writer.removeAttribute('aria-label', viewEditableRoot)\n }\n }\n })\n }, [ariaLabel, isEditorReady])\n\n // Update aria-description when ariaDescription prop changes\n React.useEffect(() => {\n if (!isEditorReady || !editorInstanceRef.current) {\n return\n }\n\n const editor = editorInstanceRef.current\n editor.editing.view.change((writer) => {\n const viewEditableRoot = editor.editing.view.document.getRoot()\n if (viewEditableRoot) {\n if (ariaDescription) {\n writer.setAttribute(\n 'aria-description',\n ariaDescription,\n viewEditableRoot\n )\n } else {\n writer.removeAttribute('aria-description', viewEditableRoot)\n }\n }\n })\n }, [ariaDescription, isEditorReady])\n\n const { value: zIndex } = useZIndexContext()\n\n const { features } = React.useContext(TextEditorContext)\n const enableStickyToolbar = !!features?.stickyToolbar\n const enableTabAsNavigation = !!features?.tabAsNavigation\n\n const imageUploadHandlers = React.useMemo(() => {\n if (companyId === undefined || toolName === undefined) {\n return undefined\n }\n\n const handlerOptions = {\n companyId,\n projectId,\n toolName,\n }\n\n const upload = richTextEditorUploadHandler(handlerOptions)\n\n return {\n upload,\n i18n,\n onError: showToast.error,\n onWarning: showImageUploadWarning,\n }\n }, [\n companyId,\n i18n,\n projectId,\n showImageUploadWarning,\n showToast.error,\n toolName,\n ])\n\n const mergedConfig = React.useMemo(() => {\n const defaultConfig = getDefaultConfig(locale, {\n imageUpload: imageUploadHandlers,\n })\n\n // Set accessible label for the editable area if provided\n // This is used by screen readers to announce the editor's purpose\n if (ariaLabel) {\n defaultConfig.label = ariaLabel\n }\n\n if (placeholder) {\n defaultConfig.root = { ...defaultConfig.root, placeholder }\n }\n\n return defaultConfig\n }, [ariaLabel, imageUploadHandlers, locale, placeholder])\n\n const bindKeyDownHandler = React.useCallback(\n (editor: ClassicEditor) => {\n const editorElement = editor.editing.view.document.getRoot()\n if (!editorElement) {\n return\n }\n\n // Remove existing keydown listener\n if (keyDownListenerRef.current) {\n editor.editing.view.document.off('keydown', keyDownListenerRef.current)\n }\n\n // Create and store the new listener\n const keyDownListener = (\n _event: EventInfo,\n data: { domEvent: Event }\n ) => {\n const domEvent = data.domEvent as KeyboardEvent\n // Prevent Enter from propagating to parent forms so the\n // editor can handle newlines without accidentally submitting.\n if (domEvent.key === 'Enter') {\n domEvent.stopPropagation()\n }\n\n onKeyDown?.(domEvent, editor)\n }\n\n keyDownListenerRef.current = keyDownListener\n\n // Add the keydown listener\n editor.editing.view.document.on('keydown', keyDownListener)\n },\n [onKeyDown]\n )\n\n const debouncedChange = React.useRef(\n debounce((_event: EventInfo<string, unknown>, editor: ClassicEditor) => {\n const data = editor.getData()\n const isDirty = data !== lastExternalValueRef.current.trim()\n const hasPendingUploads = hasPendingImageUploads(editor)\n\n if (isDirty && !isDirtyState) {\n setIsDirtyState(true)\n onDirty?.()\n }\n\n if (hasPendingUploads) {\n return\n }\n\n onChange?.(data, isDirty)\n }, DEBOUNCE_MS)\n ).current\n\n const handleChange = debouncedChange\n\n const handleReady = (editor: ClassicEditor) => {\n addButtonDataAttributes(editor)\n editorInstanceRef.current = editor\n setIsEditorReady(true)\n const sanitizedValue = sanitizeTextEditorHtml(value ?? initialValue ?? '')\n if (sanitizedValue !== editor.getData()) {\n editor.data.set(sanitizedValue)\n }\n\n // Set aria-label and aria-description on the editable area if provided\n // These provide accessible context to screen reader users\n editor.editing.view.change((writer) => {\n const viewEditableRoot = editor.editing.view.document.getRoot()\n if (viewEditableRoot) {\n if (ariaLabel) {\n writer.setAttribute('aria-label', ariaLabel, viewEditableRoot)\n }\n if (ariaDescription) {\n writer.setAttribute(\n 'aria-description',\n ariaDescription,\n viewEditableRoot\n )\n }\n if (rows !== undefined) {\n const baseHeight = 35\n const rowHeight = 22\n const editorHeight = rows * rowHeight + baseHeight\n writer.setStyle('min-height', `${editorHeight}px`, viewEditableRoot)\n writer.setStyle('max-height', `${editorHeight}px`, viewEditableRoot)\n }\n }\n })\n\n // Bind keydown handler when editor is ready\n bindKeyDownHandler(editor)\n\n onInit?.(editor)\n }\n\n const handleBlur = (\n event: EventInfo<string, unknown>,\n editor: ClassicEditor\n ) => {\n debouncedChange.flush()\n onBlur?.(event, editor)\n }\n\n useStickyToolbar({\n enabled: enableStickyToolbar,\n editor: isEditorReady ? editorInstanceRef.current : null,\n editorRef,\n cssLoading,\n })\n\n const { config } = useTabAsNavigation({\n config: mergedConfig,\n enabled: enableTabAsNavigation,\n editor: isEditorReady ? editorInstanceRef.current : null,\n })\n\n const editorKey = `${locale}-${enableTabAsNavigation}`\n\n if (cssLoading) {\n return null\n }\n\n if (readonly) {\n return (\n <TextEditorOutput\n value={value}\n aria-label={ariaLabel}\n aria-description={ariaDescription}\n />\n )\n }\n\n return (\n <StyledTextEditor\n ref={editorRef}\n key={editorKey}\n error={error}\n $ready={isEditorReady}\n aria-invalid={error ? 'true' : 'false'}\n >\n <GlobalEditorStyles zIndex={zIndex + 1} />\n <TextEditorTheme />\n <CKEditor\n {...restProps}\n editor={ClassicEditor}\n config={config}\n disabled={disabled}\n data={initialValueRef.current}\n onChange={handleChange}\n onReady={handleReady}\n onBlur={handleBlur}\n />\n </StyledTextEditor>\n )\n}\n\nfunction hasPendingImageUploads(editor: ClassicEditor) {\n try {\n const fileRepository = editor.plugins.get(FileRepository) as {\n loaders?: Iterable<{ status?: string }>\n }\n\n return Array.from(fileRepository.loaders ?? []).some((loader) =>\n ['reading', 'uploading'].includes(String(loader.status))\n )\n } catch (_error) {\n return false\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAASA,QAAQ,QAAQ,2BAA2B;AACpD,SAASC,oBAAoB,QAAQ,sBAAsB;AAC3D,SAASC,aAAa,EAAEC,cAAc,QAAwB,WAAW;AACzE,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,KAAK,EAAEC,cAAc,EAAEC,gBAAgB,QAAQ,qBAAqB;AAC7E,SAASC,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,sBAAsB,QAAQ,4CAA4C;AACnF,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,gBAAgB,QAAQ,iBAAiB;AAClD,SACEC,kBAAkB,EAClBC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,QACX,qBAAqB;AAE5B,SAASC,iBAAiB,QAAQ,sBAAsB;AACxD,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,uBAAuB,EAAEC,gBAAgB,QAAQ,SAAS;AACnE,SAASC,2BAA2B,QAAQ,gCAAgC;AAE5E,IAAMC,WAAW,GAAG,GAAG;AAEvB,OAAO,IAAMC,YAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAgC,EAAK;EAChE,IACEC,QAAQ,GAiBND,KAAK,CAjBPC,QAAQ;IACRC,KAAK,GAgBHF,KAAK,CAhBPE,KAAK;IACLC,QAAQ,GAeNH,KAAK,CAfPG,QAAQ;IACRC,KAAK,GAcHJ,KAAK,CAdPI,KAAK;IACLC,YAAY,GAaVL,KAAK,CAbPK,YAAY;IACZC,QAAQ,GAYNN,KAAK,CAZPM,QAAQ;IACRC,MAAM,GAWJP,KAAK,CAXPO,MAAM;IACNC,MAAM,GAUJR,KAAK,CAVPQ,MAAM;IACNC,SAAS,GASPT,KAAK,CATPS,SAAS;IACDC,UAAU,GAQhBV,KAAK,CARPW,MAAM;IACNC,OAAO,GAOLZ,KAAK,CAPPY,OAAO;IACPC,SAAS,GAMPb,KAAK,CANPa,SAAS;IACTC,SAAS,GAKPd,KAAK,CALPc,SAAS;IACTC,QAAQ,GAINf,KAAK,CAJPe,QAAQ;IACRC,WAAW,GAGThB,KAAK,CAHPgB,WAAW;IACXC,IAAI,GAEFjB,KAAK,CAFPiB,IAAI;IACDC,SAAS,GAAAC,wBAAA,CACVnB,KAAK,EAAAoB,SAAA;EACT,IAAMC,SAAS,GAAGrB,KAAK,CAAC,YAAY,CAAC;EACrC,IAAMsB,eAAe,GAAGtB,KAAK,CAAC,kBAAkB,CAAC;EACjD,IAAAuB,eAAA,GAAkC/B,cAAc,CAAC,CAAC;IAA/BgC,UAAU,GAAAD,eAAA,CAArBE,SAAS;EACjBhC,qBAAqB,CAAC,CAAC;EAEvB,IAAMiC,SAAS,GAAGhD,KAAK,CAACiD,MAAM,CAAiB,IAAI,CAAC;EACpD,IAAMC,iBAAiB,GAAGlD,KAAK,CAACiD,MAAM,CAAuB,IAAI,CAAC;EAClE,IAAME,eAAe,GAAGnD,KAAK,CAACiD,MAAM,CAClC5C,sBAAsB,CAACqB,KAAK,IAAIC,YAAY,IAAI,EAAE,CACpD,CAAC;EACD,IAAMyB,oBAAoB,GAAGpD,KAAK,CAACiD,MAAM,CACvC5C,sBAAsB,CAACqB,KAAK,IAAIC,YAAY,IAAI,EAAE,CACpD,CAAC;EACD,IAAM0B,kBAAkB,GAAGrD,KAAK,CAACiD,MAAM,CAAyB,IAAI,CAAC;EACrE,IAAAK,eAAA,GAAwCtD,KAAK,CAACuD,QAAQ,CAAC,KAAK,CAAC;IAAAC,gBAAA,GAAAC,cAAA,CAAAH,eAAA;IAAtDI,YAAY,GAAAF,gBAAA;IAAEG,eAAe,GAAAH,gBAAA;EACpC,IAAAI,gBAAA,GAA0C5D,KAAK,CAACuD,QAAQ,CAAC,KAAK,CAAC;IAAAM,gBAAA,GAAAJ,cAAA,CAAAG,gBAAA;IAAxDE,aAAa,GAAAD,gBAAA;IAAEE,gBAAgB,GAAAF,gBAAA;EACtC,IAAMG,IAAI,GAAG9D,cAAc,CAAC,CAAC;EAC7B,IAAA+D,qBAAA,GAAsBpE,oBAAoB,CAAC,CAAC;IAApCqE,SAAS,GAAAD,qBAAA,CAATC,SAAS;EACjB,IAAgBC,aAAa,GAAKH,IAAI,CAA9B/B,MAAM;EACd,IAAMA,MAAM,GAAGD,UAAU,IAAImC,aAAa;EAE1C,IAAMC,sBAAsB,GAAGpE,KAAK,CAACqE,WAAW,CAC9C,UAACC,OAAe,EAAK;IACnBJ,SAAS,CAACK,MAAM,CAAC,UAAAC,IAAA;MAAA,IAAGC,iBAAiB,GAAAD,IAAA,CAAjBC,iBAAiB;MAAA,oBACnCzE,KAAA,CAAA0E,aAAA,CAACjE,6BAA6B;QAACkE,UAAU,EAAC,QAAQ;QAACC,OAAO,EAAC;MAAO,gBAChE5E,KAAA,CAAA0E,aAAA,CAAChE,iCAAiC;QAACmE,IAAI,EAAC;MAAI,CAAE,CAAC,eAC/C7E,KAAA,CAAA0E,aAAA,CAACzE,KAAK,CAAC6E,IAAI,QAAER,OAAoB,CAAC,eAClCtE,KAAA,CAAA0E,aAAA,CAACzE,KAAK,CAAC8E,OAAO,EAAAC,QAAA;QACZ,cAAYhB,IAAI,CAACiB,CAAC,CAAC,uCAAuC;MAAE,GACxDR,iBAAiB,CACtB,CAC4B,CAAC;IAAA,CACjC,CAAC;EACJ,CAAC,EACD,CAACT,IAAI,EAAEE,SAAS,CAClB,CAAC;EAEDlE,KAAK,CAACkF,SAAS,CAAC,YAAM;IACpB,IAAIxD,KAAK,KAAKyD,SAAS,EAAE;MACvB/B,oBAAoB,CAACgC,OAAO,GAAG/E,sBAAsB,CAACqB,KAAK,CAAC;IAC9D;EACF,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX1B,KAAK,CAACkF,SAAS,CAAC,YAAM;IACpB,IAAMG,MAAM,GAAGnC,iBAAiB,CAACkC,OAAO;IACxC,IAAI,CAACtB,aAAa,IAAI,CAACuB,MAAM,IAAI3D,KAAK,KAAKyD,SAAS,EAAE;IACtD,IAAIE,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACC,SAAS,EAAE;IAC5C,IAAI/D,KAAK,KAAK2D,MAAM,CAACK,OAAO,CAAC,CAAC,EAAE;IAEhCL,MAAM,CAACM,IAAI,CAACC,GAAG,CAACvF,sBAAsB,CAACqB,KAAK,CAAC,CAAC;EAChD,CAAC,EAAE,CAACA,KAAK,EAAEoC,aAAa,CAAC,CAAC;;EAE1B;EACA9D,KAAK,CAACkF,SAAS,CAAC,YAAM;IACpB,OAAO,YAAM;MACX,IAAI7B,kBAAkB,CAAC+B,OAAO,IAAIlC,iBAAiB,CAACkC,OAAO,EAAE;QAC3DlC,iBAAiB,CAACkC,OAAO,CAACE,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACK,GAAG,CACjD,SAAS,EACTxC,kBAAkB,CAAC+B,OACrB,CAAC;QACD/B,kBAAkB,CAAC+B,OAAO,GAAG,IAAI;MACnC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;;EAEN;EACApF,KAAK,CAACkF,SAAS,CAAC,YAAM;IACpB,IAAI,CAACpB,aAAa,IAAI,CAACZ,iBAAiB,CAACkC,OAAO,EAAE;MAChD;IACF;IAEA,IAAMC,MAAM,GAAGnC,iBAAiB,CAACkC,OAAO;IACxCC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACO,MAAM,CAAC,UAACC,MAAM,EAAK;MACrC,IAAMC,gBAAgB,GAAGX,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,CAAC;MAC/D,IAAID,gBAAgB,EAAE;QACpB,IAAIrD,SAAS,EAAE;UACboD,MAAM,CAACG,YAAY,CAAC,YAAY,EAAEvD,SAAS,EAAEqD,gBAAgB,CAAC;QAChE,CAAC,MAAM;UACLD,MAAM,CAACI,eAAe,CAAC,YAAY,EAAEH,gBAAgB,CAAC;QACxD;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACrD,SAAS,EAAEmB,aAAa,CAAC,CAAC;;EAE9B;EACA9D,KAAK,CAACkF,SAAS,CAAC,YAAM;IACpB,IAAI,CAACpB,aAAa,IAAI,CAACZ,iBAAiB,CAACkC,OAAO,EAAE;MAChD;IACF;IAEA,IAAMC,MAAM,GAAGnC,iBAAiB,CAACkC,OAAO;IACxCC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACO,MAAM,CAAC,UAACC,MAAM,EAAK;MACrC,IAAMC,gBAAgB,GAAGX,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,CAAC;MAC/D,IAAID,gBAAgB,EAAE;QACpB,IAAIpD,eAAe,EAAE;UACnBmD,MAAM,CAACG,YAAY,CACjB,kBAAkB,EAClBtD,eAAe,EACfoD,gBACF,CAAC;QACH,CAAC,MAAM;UACLD,MAAM,CAACI,eAAe,CAAC,kBAAkB,EAAEH,gBAAgB,CAAC;QAC9D;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACpD,eAAe,EAAEkB,aAAa,CAAC,CAAC;EAEpC,IAAAsC,iBAAA,GAA0BjG,gBAAgB,CAAC,CAAC;IAA7BkG,MAAM,GAAAD,iBAAA,CAAb1E,KAAK;EAEb,IAAA4E,iBAAA,GAAqBtG,KAAK,CAACuG,UAAU,CAAC3F,iBAAiB,CAAC;IAAhD4F,QAAQ,GAAAF,iBAAA,CAARE,QAAQ;EAChB,IAAMC,mBAAmB,GAAG,CAAC,EAACD,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEE,aAAa;EACrD,IAAMC,qBAAqB,GAAG,CAAC,EAACH,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEI,eAAe;EAEzD,IAAMC,mBAAmB,GAAG7G,KAAK,CAAC8G,OAAO,CAAC,YAAM;IAC9C,IAAI3E,SAAS,KAAKgD,SAAS,IAAI9C,QAAQ,KAAK8C,SAAS,EAAE;MACrD,OAAOA,SAAS;IAClB;IAEA,IAAM4B,cAAc,GAAG;MACrB5E,SAAS,EAATA,SAAS;MACTC,SAAS,EAATA,SAAS;MACTC,QAAQ,EAARA;IACF,CAAC;IAED,IAAM2E,MAAM,GAAG7F,2BAA2B,CAAC4F,cAAc,CAAC;IAE1D,OAAO;MACLC,MAAM,EAANA,MAAM;MACNhD,IAAI,EAAJA,IAAI;MACJiD,OAAO,EAAE/C,SAAS,CAAC1C,KAAK;MACxB0F,SAAS,EAAE9C;IACb,CAAC;EACH,CAAC,EAAE,CACDjC,SAAS,EACT6B,IAAI,EACJ5B,SAAS,EACTgC,sBAAsB,EACtBF,SAAS,CAAC1C,KAAK,EACfa,QAAQ,CACT,CAAC;EAEF,IAAM8E,YAAY,GAAGnH,KAAK,CAAC8G,OAAO,CAAC,YAAM;IACvC,IAAMM,aAAa,GAAGlG,gBAAgB,CAACe,MAAM,EAAE;MAC7CoF,WAAW,EAAER;IACf,CAAC,CAAC;;IAEF;IACA;IACA,IAAIlE,SAAS,EAAE;MACbyE,aAAa,CAACE,KAAK,GAAG3E,SAAS;IACjC;IAEA,IAAIL,WAAW,EAAE;MACf8E,aAAa,CAACG,IAAI,GAAAC,aAAA,CAAAA,aAAA,KAAQJ,aAAa,CAACG,IAAI;QAAEjF,WAAW,EAAXA;MAAW,EAAE;IAC7D;IAEA,OAAO8E,aAAa;EACtB,CAAC,EAAE,CAACzE,SAAS,EAAEkE,mBAAmB,EAAE5E,MAAM,EAAEK,WAAW,CAAC,CAAC;EAEzD,IAAMmF,kBAAkB,GAAGzH,KAAK,CAACqE,WAAW,CAC1C,UAACgB,MAAqB,EAAK;IACzB,IAAMqC,aAAa,GAAGrC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,CAAC;IAC5D,IAAI,CAACyB,aAAa,EAAE;MAClB;IACF;;IAEA;IACA,IAAIrE,kBAAkB,CAAC+B,OAAO,EAAE;MAC9BC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACK,GAAG,CAAC,SAAS,EAAExC,kBAAkB,CAAC+B,OAAO,CAAC;IACzE;;IAEA;IACA,IAAMuC,eAAe,GAAG,SAAlBA,eAAeA,CACnBC,MAAiB,EACjBjC,IAAyB,EACtB;MACH,IAAMkC,QAAQ,GAAGlC,IAAI,CAACkC,QAAyB;MAC/C;MACA;MACA,IAAIA,QAAQ,CAACC,GAAG,KAAK,OAAO,EAAE;QAC5BD,QAAQ,CAACE,eAAe,CAAC,CAAC;MAC5B;MAEAhG,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAG8F,QAAQ,EAAExC,MAAM,CAAC;IAC/B,CAAC;IAEDhC,kBAAkB,CAAC+B,OAAO,GAAGuC,eAAe;;IAE5C;IACAtC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACwC,EAAE,CAAC,SAAS,EAAEL,eAAe,CAAC;EAC7D,CAAC,EACD,CAAC5F,SAAS,CACZ,CAAC;EAED,IAAMkG,eAAe,GAAGjI,KAAK,CAACiD,MAAM,CAClC3C,QAAQ,CAAC,UAACsH,MAAkC,EAAEvC,MAAqB,EAAK;IACtE,IAAMM,IAAI,GAAGN,MAAM,CAACK,OAAO,CAAC,CAAC;IAC7B,IAAMwC,OAAO,GAAGvC,IAAI,KAAKvC,oBAAoB,CAACgC,OAAO,CAAC+C,IAAI,CAAC,CAAC;IAC5D,IAAMC,iBAAiB,GAAGC,sBAAsB,CAAChD,MAAM,CAAC;IAExD,IAAI6C,OAAO,IAAI,CAACxE,YAAY,EAAE;MAC5BC,eAAe,CAAC,IAAI,CAAC;MACrBzB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAG,CAAC;IACb;IAEA,IAAIkG,iBAAiB,EAAE;MACrB;IACF;IAEAxG,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAG+D,IAAI,EAAEuC,OAAO,CAAC;EAC3B,CAAC,EAAE9G,WAAW,CAChB,CAAC,CAACgE,OAAO;EAET,IAAMkD,YAAY,GAAGL,eAAe;EAEpC,IAAMM,WAAW,GAAG,SAAdA,WAAWA,CAAIlD,MAAqB,EAAK;IAAA,IAAAmD,KAAA;IAC7CvH,uBAAuB,CAACoE,MAAM,CAAC;IAC/BnC,iBAAiB,CAACkC,OAAO,GAAGC,MAAM;IAClCtB,gBAAgB,CAAC,IAAI,CAAC;IACtB,IAAM0E,cAAc,GAAGpI,sBAAsB,EAAAmI,KAAA,GAAC9G,KAAK,aAALA,KAAK,cAALA,KAAK,GAAIC,YAAY,cAAA6G,KAAA,cAAAA,KAAA,GAAI,EAAE,CAAC;IAC1E,IAAIC,cAAc,KAAKpD,MAAM,CAACK,OAAO,CAAC,CAAC,EAAE;MACvCL,MAAM,CAACM,IAAI,CAACC,GAAG,CAAC6C,cAAc,CAAC;IACjC;;IAEA;IACA;IACApD,MAAM,CAACC,OAAO,CAACC,IAAI,CAACO,MAAM,CAAC,UAACC,MAAM,EAAK;MACrC,IAAMC,gBAAgB,GAAGX,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,CAAC;MAC/D,IAAID,gBAAgB,EAAE;QACpB,IAAIrD,SAAS,EAAE;UACboD,MAAM,CAACG,YAAY,CAAC,YAAY,EAAEvD,SAAS,EAAEqD,gBAAgB,CAAC;QAChE;QACA,IAAIpD,eAAe,EAAE;UACnBmD,MAAM,CAACG,YAAY,CACjB,kBAAkB,EAClBtD,eAAe,EACfoD,gBACF,CAAC;QACH;QACA,IAAIzD,IAAI,KAAK4C,SAAS,EAAE;UACtB,IAAMuD,UAAU,GAAG,EAAE;UACrB,IAAMC,SAAS,GAAG,EAAE;UACpB,IAAMC,YAAY,GAAGrG,IAAI,GAAGoG,SAAS,GAAGD,UAAU;UAClD3C,MAAM,CAAC8C,QAAQ,CAAC,YAAY,KAAAC,MAAA,CAAKF,YAAY,SAAM5C,gBAAgB,CAAC;UACpED,MAAM,CAAC8C,QAAQ,CAAC,YAAY,KAAAC,MAAA,CAAKF,YAAY,SAAM5C,gBAAgB,CAAC;QACtE;MACF;IACF,CAAC,CAAC;;IAEF;IACAyB,kBAAkB,CAACpC,MAAM,CAAC;IAE1BxD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAGwD,MAAM,CAAC;EAClB,CAAC;EAED,IAAM0D,UAAU,GAAG,SAAbA,UAAUA,CACdC,KAAiC,EACjC3D,MAAqB,EAClB;IACH4C,eAAe,CAACgB,KAAK,CAAC,CAAC;IACvBnH,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAGkH,KAAK,EAAE3D,MAAM,CAAC;EACzB,CAAC;EAED9E,gBAAgB,CAAC;IACf2I,OAAO,EAAEzC,mBAAmB;IAC5BpB,MAAM,EAAEvB,aAAa,GAAGZ,iBAAiB,CAACkC,OAAO,GAAG,IAAI;IACxDpC,SAAS,EAATA,SAAS;IACTF,UAAU,EAAVA;EACF,CAAC,CAAC;EAEF,IAAAqG,mBAAA,GAAmBnI,kBAAkB,CAAC;MACpCoI,MAAM,EAAEjC,YAAY;MACpB+B,OAAO,EAAEvC,qBAAqB;MAC9BtB,MAAM,EAAEvB,aAAa,GAAGZ,iBAAiB,CAACkC,OAAO,GAAG;IACtD,CAAC,CAAC;IAJMgE,MAAM,GAAAD,mBAAA,CAANC,MAAM;EAMd,IAAMC,SAAS,MAAAP,MAAA,CAAM7G,MAAM,OAAA6G,MAAA,CAAInC,qBAAqB,CAAE;EAEtD,IAAI7D,UAAU,EAAE;IACd,OAAO,IAAI;EACb;EAEA,IAAIrB,QAAQ,EAAE;IACZ,oBACEzB,KAAA,CAAA0E,aAAA,CAACtE,gBAAgB;MACfsB,KAAK,EAAEA,KAAM;MACb,cAAYiB,SAAU;MACtB,oBAAkBC;IAAgB,CACnC,CAAC;EAEN;EAEA,oBACE5C,KAAA,CAAA0E,aAAA,CAAC/D,gBAAgB;IACf2I,GAAG,EAAEtG,SAAU;IACf8E,GAAG,EAAEuB,SAAU;IACf7H,KAAK,EAAEA,KAAM;IACb+H,MAAM,EAAEzF,aAAc;IACtB,gBAActC,KAAK,GAAG,MAAM,GAAG;EAAQ,gBAEvCxB,KAAA,CAAA0E,aAAA,CAAClE,kBAAkB;IAAC6F,MAAM,EAAEA,MAAM,GAAG;EAAE,CAAE,CAAC,eAC1CrG,KAAA,CAAA0E,aAAA,CAAC7D,eAAe,MAAE,CAAC,eACnBb,KAAA,CAAA0E,aAAA,CAAC9E,QAAQ,EAAAoF,QAAA,KACHxC,SAAS;IACb6C,MAAM,EAAEvF,aAAc;IACtBsJ,MAAM,EAAEA,MAAO;IACf7H,QAAQ,EAAEA,QAAS;IACnBoE,IAAI,EAAExC,eAAe,CAACiC,OAAQ;IAC9BxD,QAAQ,EAAE0G,YAAa;IACvBkB,OAAO,EAAEjB,WAAY;IACrBzG,MAAM,EAAEiH;EAAW,EACpB,CACe,CAAC;AAEvB,CAAC;AAED,SAASV,sBAAsBA,CAAChD,MAAqB,EAAE;EACrD,IAAI;IAAA,IAAAoE,qBAAA;IACF,IAAMC,cAAc,GAAGrE,MAAM,CAACsE,OAAO,CAACC,GAAG,CAAC7J,cAAc,CAEvD;IAED,OAAO8J,KAAK,CAACC,IAAI,EAAAL,qBAAA,GAACC,cAAc,CAACK,OAAO,cAAAN,qBAAA,cAAAA,qBAAA,GAAI,EAAE,CAAC,CAACO,IAAI,CAAC,UAACC,MAAM;MAAA,OAC1D,CAAC,SAAS,EAAE,WAAW,CAAC,CAACC,QAAQ,CAACC,MAAM,CAACF,MAAM,CAACG,MAAM,CAAC,CAAC;IAAA,CAC1D,CAAC;EACH,CAAC,CAAC,OAAOC,MAAM,EAAE;IACf,OAAO,KAAK;EACd;AACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Info } from '@procore/core-icons';
|
|
2
2
|
import { borderRadius, colors, Flex, Typography } from '@procore/core-react';
|
|
3
3
|
import styled, { createGlobalStyle } from 'styled-components';
|
|
4
|
-
export var GlobalEditorStyles = /*#__PURE__*/createGlobalStyle([":root{--ck-z-default:", ";--ck-z-modal:", ";--ck-z-dialog:", ";}.ck-body-wrapper{--ck-z-default:", ";--ck-z-modal:", ";--ck-z-dialog:", ";}.ck-balloon-panel{z-index:", " !important;}.ck-dropdown__panel{z-index:", " !important;}.ck.ck-toolbar_grouping{container-type:inline-size;}.ck.ck-toolbar__grouped-dropdown > .ck-dropdown__panel{max-width:100cqw !important;z-index:", " !important;}.ck.ck-toolbar__grouped-dropdown > .ck-dropdown__panel .ck-toolbar__items{flex-wrap:wrap !important;}.ck-content{padding:16px 28px !important;--ck-content-font-family:Inter,'Noto Sans JP','Noto Sans KR','Noto Sans SC','Noto Sans TC',sans-serif;--ck-content-font-size:14px;--ck-content-word-break:break-word;--ck-content-overflow-wrap:break-word;--ck-content-line-height:1.4;p{margin-top:0 !important;margin-bottom:0 !important;}img{max-width:100%;height:auto;}}[data-id=\"modal\"] .ck-sticky-panel__content_sticky{top:var(--modal-header-height,84px) !important;}"], function (_ref) {
|
|
4
|
+
export var GlobalEditorStyles = /*#__PURE__*/createGlobalStyle([":root{--ck-z-default:", ";--ck-z-modal:", ";--ck-z-dialog:", ";}.ck-body-wrapper{--ck-z-default:", ";--ck-z-modal:", ";--ck-z-dialog:", ";}.ck-balloon-panel{z-index:", " !important;}.ck-dropdown__panel{z-index:", " !important;}.ck.ck-toolbar_grouping{container-type:inline-size;}.ck.ck-toolbar__grouped-dropdown > .ck-dropdown__panel{max-width:100cqw !important;z-index:", " !important;}.ck.ck-toolbar__grouped-dropdown > .ck-dropdown__panel .ck-toolbar__items{flex-wrap:wrap !important;}.ck-content{padding:16px 28px !important;--ck-content-font-family:Inter,'Noto Sans JP','Noto Sans KR','Noto Sans SC','Noto Sans TC',sans-serif;--ck-content-font-size:14px;--ck-content-word-break:break-word;--ck-content-overflow-wrap:break-word;--ck-content-line-height:1.4;overflow-x:auto;p{margin-top:0 !important;margin-bottom:0 !important;}img{max-width:100%;height:auto;}}[data-id=\"modal\"] .ck-sticky-panel__content_sticky{top:var(--modal-header-height,84px) !important;}"], function (_ref) {
|
|
5
5
|
var zIndex = _ref.zIndex;
|
|
6
6
|
return zIndex;
|
|
7
7
|
}, function (_ref2) {
|
|
@@ -31,7 +31,7 @@ export var GlobalEditorStyles = /*#__PURE__*/createGlobalStyle([":root{--ck-z-de
|
|
|
31
31
|
});
|
|
32
32
|
export var StyledTextEditor = /*#__PURE__*/styled.div.withConfig({
|
|
33
33
|
displayName: "StyledTextEditor",
|
|
34
|
-
componentId: "text-editor-
|
|
34
|
+
componentId: "text-editor-1_0_1__sc-iim79x-0"
|
|
35
35
|
})([".ck.ck-editor{opacity:", ";}", ""], function (_ref0) {
|
|
36
36
|
var $ready = _ref0.$ready;
|
|
37
37
|
return $ready ? 1 : 0;
|
|
@@ -41,14 +41,14 @@ export var StyledTextEditor = /*#__PURE__*/styled.div.withConfig({
|
|
|
41
41
|
});
|
|
42
42
|
export var StyledImageUploadWarningToast = /*#__PURE__*/styled(Flex).withConfig({
|
|
43
43
|
displayName: "StyledImageUploadWarningToast",
|
|
44
|
-
componentId: "text-editor-
|
|
44
|
+
componentId: "text-editor-1_0_1__sc-iim79x-1"
|
|
45
45
|
})(["background-color:", ";border-radius:", "px;box-shadow:0px 8px 32px -4px hsla(200,10%,15%,0.64);color:", ";min-height:48px;width:550px;"], colors.blue40, borderRadius.md, colors.white);
|
|
46
46
|
export var StyledImageUploadWarningToastIcon = /*#__PURE__*/styled(Info).withConfig({
|
|
47
47
|
displayName: "StyledImageUploadWarningToastIcon",
|
|
48
|
-
componentId: "text-editor-
|
|
48
|
+
componentId: "text-editor-1_0_1__sc-iim79x-2"
|
|
49
49
|
})(["color:", ";"], colors.white);
|
|
50
50
|
export var StyledReadOnlyValue = /*#__PURE__*/styled(Typography).withConfig({
|
|
51
51
|
displayName: "StyledReadOnlyValue",
|
|
52
|
-
componentId: "text-editor-
|
|
52
|
+
componentId: "text-editor-1_0_1__sc-iim79x-3"
|
|
53
53
|
})(["overflow-wrap:anywhere;margin-block-start:0 !important;user-select:text;table{border-width:revert-layer;border-style:solid;border-color:", ";overflow-wrap:break-word;}td,tr,th,tbody{border-width:revert-layer;border-style:inherit;border-color:inherit;}p{line-height:normal;}"], colors.gray60);
|
|
54
54
|
//# sourceMappingURL=TextEditor.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.styles.js","names":["Info","borderRadius","colors","Flex","Typography","styled","createGlobalStyle","GlobalEditorStyles","_ref","zIndex","_ref2","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","StyledTextEditor","div","withConfig","displayName","componentId","_ref0","$ready","_ref1","error","concat","red50","StyledImageUploadWarningToast","blue40","md","white","StyledImageUploadWarningToastIcon","StyledReadOnlyValue","gray60"],"sources":["../../src/TextEditor/TextEditor.styles.ts"],"sourcesContent":["import { Info } from '@procore/core-icons'\nimport { borderRadius, colors, Flex, Typography } from '@procore/core-react'\nimport styled, { createGlobalStyle } from 'styled-components'\n\nexport const GlobalEditorStyles = createGlobalStyle<{\n zIndex: number\n}>`\n :root {\n --ck-z-default: ${({ zIndex }) => zIndex};\n --ck-z-modal: ${({ zIndex }) => zIndex + 999};\n --ck-z-dialog: ${({ zIndex }) => zIndex + 1000};\n }\n \n .ck-body-wrapper {\n --ck-z-default: ${({ zIndex }) => zIndex};\n --ck-z-modal: ${({ zIndex }) => zIndex + 999};\n --ck-z-dialog: ${({ zIndex }) => zIndex + 1000};\n }\n \n .ck-balloon-panel {\n z-index: ${({ zIndex }) => zIndex + 1000} !important;\n }\n\n .ck-dropdown__panel {\n z-index: ${({ zIndex }) => zIndex + 1000} !important;\n }\n\n .ck.ck-toolbar_grouping {\n container-type: inline-size;\n }\n\n .ck.ck-toolbar__grouped-dropdown > .ck-dropdown__panel {\n max-width: 100cqw !important;\n z-index: ${({ zIndex }) => zIndex + 1000} !important;\n }\n\n .ck.ck-toolbar__grouped-dropdown > .ck-dropdown__panel .ck-toolbar__items {\n flex-wrap: wrap !important;\n }\n\n .ck-content {\n padding: 16px 28px !important;\n --ck-content-font-family: Inter, 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans SC', 'Noto Sans TC', sans-serif;\n --ck-content-font-size: 14px;\n --ck-content-word-break: break-word;\n --ck-content-overflow-wrap: break-word;\n --ck-content-line-height: 1.4;\n\n p {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n img {\n max-width: 100%;\n height: auto;\n }\n }\n\n [data-id=\"modal\"] .ck-sticky-panel__content_sticky {\n top: var(--modal-header-height, 84px) !important;\n }\n`\n\nexport const StyledTextEditor = styled.div<{\n error?: boolean\n $ready?: boolean\n}>`\n .ck.ck-editor {\n opacity: ${({ $ready }) => ($ready ? 1 : 0)};\n }\n\n ${({ error }) =>\n error &&\n `\n .ck-sticky-panel__content {\n border-top-color: ${colors.red50} !important;\n border-left-color: ${colors.red50} !important;\n border-right-color: ${colors.red50} !important;\n }\n\n .ck-editor__editable {\n border-left-color: ${colors.red50} !important;\n border-right-color: ${colors.red50} !important;\n border-bottom-color: ${colors.red50} !important;\n }\n `}\n`\n\nexport const StyledImageUploadWarningToast = styled(Flex)`\n background-color: ${colors.blue40};\n border-radius: ${borderRadius.md}px;\n box-shadow: 0px 8px 32px -4px hsla(200, 10%, 15%, 0.64);\n color: ${colors.white};\n min-height: 48px;\n width: 550px;\n`\n\nexport const StyledImageUploadWarningToastIcon = styled(Info)`\n color: ${colors.white};\n`\n\nexport const StyledReadOnlyValue = styled(Typography)`\n overflow-wrap: anywhere;\n margin-block-start: 0 !important;\n user-select: text;\n\n table {\n border-width: revert-layer;\n border-style: solid;\n border-color: ${colors.gray60};\n overflow-wrap: break-word;\n }\n\n td,\n tr,\n th,\n tbody {\n border-width: revert-layer;\n border-style: inherit;\n border-color: inherit;\n }\n\n p {\n line-height: normal;\n }\n`\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,qBAAqB;AAC1C,SAASC,YAAY,EAAEC,MAAM,EAAEC,IAAI,EAAEC,UAAU,QAAQ,qBAAqB;AAC5E,OAAOC,MAAM,IAAIC,iBAAiB,QAAQ,mBAAmB;AAE7D,OAAO,IAAMC,kBAAkB,gBAAGD,iBAAiB,
|
|
1
|
+
{"version":3,"file":"TextEditor.styles.js","names":["Info","borderRadius","colors","Flex","Typography","styled","createGlobalStyle","GlobalEditorStyles","_ref","zIndex","_ref2","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","StyledTextEditor","div","withConfig","displayName","componentId","_ref0","$ready","_ref1","error","concat","red50","StyledImageUploadWarningToast","blue40","md","white","StyledImageUploadWarningToastIcon","StyledReadOnlyValue","gray60"],"sources":["../../src/TextEditor/TextEditor.styles.ts"],"sourcesContent":["import { Info } from '@procore/core-icons'\nimport { borderRadius, colors, Flex, Typography } from '@procore/core-react'\nimport styled, { createGlobalStyle } from 'styled-components'\n\nexport const GlobalEditorStyles = createGlobalStyle<{\n zIndex: number\n}>`\n :root {\n --ck-z-default: ${({ zIndex }) => zIndex};\n --ck-z-modal: ${({ zIndex }) => zIndex + 999};\n --ck-z-dialog: ${({ zIndex }) => zIndex + 1000};\n }\n \n .ck-body-wrapper {\n --ck-z-default: ${({ zIndex }) => zIndex};\n --ck-z-modal: ${({ zIndex }) => zIndex + 999};\n --ck-z-dialog: ${({ zIndex }) => zIndex + 1000};\n }\n \n .ck-balloon-panel {\n z-index: ${({ zIndex }) => zIndex + 1000} !important;\n }\n\n .ck-dropdown__panel {\n z-index: ${({ zIndex }) => zIndex + 1000} !important;\n }\n\n .ck.ck-toolbar_grouping {\n container-type: inline-size;\n }\n\n .ck.ck-toolbar__grouped-dropdown > .ck-dropdown__panel {\n max-width: 100cqw !important;\n z-index: ${({ zIndex }) => zIndex + 1000} !important;\n }\n\n .ck.ck-toolbar__grouped-dropdown > .ck-dropdown__panel .ck-toolbar__items {\n flex-wrap: wrap !important;\n }\n\n .ck-content {\n padding: 16px 28px !important;\n --ck-content-font-family: Inter, 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans SC', 'Noto Sans TC', sans-serif;\n --ck-content-font-size: 14px;\n --ck-content-word-break: break-word;\n --ck-content-overflow-wrap: break-word;\n --ck-content-line-height: 1.4;\n overflow-x: auto;\n\n p {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n img {\n max-width: 100%;\n height: auto;\n }\n }\n\n [data-id=\"modal\"] .ck-sticky-panel__content_sticky {\n top: var(--modal-header-height, 84px) !important;\n }\n`\n\nexport const StyledTextEditor = styled.div<{\n error?: boolean\n $ready?: boolean\n}>`\n .ck.ck-editor {\n opacity: ${({ $ready }) => ($ready ? 1 : 0)};\n }\n\n ${({ error }) =>\n error &&\n `\n .ck-sticky-panel__content {\n border-top-color: ${colors.red50} !important;\n border-left-color: ${colors.red50} !important;\n border-right-color: ${colors.red50} !important;\n }\n\n .ck-editor__editable {\n border-left-color: ${colors.red50} !important;\n border-right-color: ${colors.red50} !important;\n border-bottom-color: ${colors.red50} !important;\n }\n `}\n`\n\nexport const StyledImageUploadWarningToast = styled(Flex)`\n background-color: ${colors.blue40};\n border-radius: ${borderRadius.md}px;\n box-shadow: 0px 8px 32px -4px hsla(200, 10%, 15%, 0.64);\n color: ${colors.white};\n min-height: 48px;\n width: 550px;\n`\n\nexport const StyledImageUploadWarningToastIcon = styled(Info)`\n color: ${colors.white};\n`\n\nexport const StyledReadOnlyValue = styled(Typography)`\n overflow-wrap: anywhere;\n margin-block-start: 0 !important;\n user-select: text;\n\n table {\n border-width: revert-layer;\n border-style: solid;\n border-color: ${colors.gray60};\n overflow-wrap: break-word;\n }\n\n td,\n tr,\n th,\n tbody {\n border-width: revert-layer;\n border-style: inherit;\n border-color: inherit;\n }\n\n p {\n line-height: normal;\n }\n`\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,qBAAqB;AAC1C,SAASC,YAAY,EAAEC,MAAM,EAAEC,IAAI,EAAEC,UAAU,QAAQ,qBAAqB;AAC5E,OAAOC,MAAM,IAAIC,iBAAiB,QAAQ,mBAAmB;AAE7D,OAAO,IAAMC,kBAAkB,gBAAGD,iBAAiB,48BAI7B,UAAAE,IAAA;EAAA,IAAGC,MAAM,GAAAD,IAAA,CAANC,MAAM;EAAA,OAAOA,MAAM;AAAA,GACxB,UAAAC,KAAA;EAAA,IAAGD,MAAM,GAAAC,KAAA,CAAND,MAAM;EAAA,OAAOA,MAAM,GAAG,GAAG;AAAA,GAC3B,UAAAE,KAAA;EAAA,IAAGF,MAAM,GAAAE,KAAA,CAANF,MAAM;EAAA,OAAOA,MAAM,GAAG,IAAI;AAAA,GAI5B,UAAAG,KAAA;EAAA,IAAGH,MAAM,GAAAG,KAAA,CAANH,MAAM;EAAA,OAAOA,MAAM;AAAA,GACxB,UAAAI,KAAA;EAAA,IAAGJ,MAAM,GAAAI,KAAA,CAANJ,MAAM;EAAA,OAAOA,MAAM,GAAG,GAAG;AAAA,GAC3B,UAAAK,KAAA;EAAA,IAAGL,MAAM,GAAAK,KAAA,CAANL,MAAM;EAAA,OAAOA,MAAM,GAAG,IAAI;AAAA,GAInC,UAAAM,KAAA;EAAA,IAAGN,MAAM,GAAAM,KAAA,CAANN,MAAM;EAAA,OAAOA,MAAM,GAAG,IAAI;AAAA,GAI7B,UAAAO,KAAA;EAAA,IAAGP,MAAM,GAAAO,KAAA,CAANP,MAAM;EAAA,OAAOA,MAAM,GAAG,IAAI;AAAA,GAS7B,UAAAQ,KAAA;EAAA,IAAGR,MAAM,GAAAQ,KAAA,CAANR,MAAM;EAAA,OAAOA,MAAM,GAAG,IAAI;AAAA,EA8B3C;AAED,OAAO,IAAMS,gBAAgB,gBAAGb,MAAM,CAACc,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,yCAK3B,UAAAC,KAAA;EAAA,IAAGC,MAAM,GAAAD,KAAA,CAANC,MAAM;EAAA,OAAQA,MAAM,GAAG,CAAC,GAAG,CAAC;AAAA,CAAC,EAG3C,UAAAC,KAAA;EAAA,IAAGC,KAAK,GAAAD,KAAA,CAALC,KAAK;EAAA,OACRA,KAAK,sEAAAC,MAAA,CAGmBzB,MAAM,CAAC0B,KAAK,+CAAAD,MAAA,CACXzB,MAAM,CAAC0B,KAAK,gDAAAD,MAAA,CACXzB,MAAM,CAAC0B,KAAK,wFAAAD,MAAA,CAIbzB,MAAM,CAAC0B,KAAK,gDAAAD,MAAA,CACXzB,MAAM,CAAC0B,KAAK,iDAAAD,MAAA,CACXzB,MAAM,CAAC0B,KAAK,gCAEtC;AAAA,EACJ;AAED,OAAO,IAAMC,6BAA6B,gBAAGxB,MAAM,CAACF,IAAI,CAAC,CAAAiB,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,+IACnCpB,MAAM,CAAC4B,MAAM,EAChB7B,YAAY,CAAC8B,EAAE,EAEvB7B,MAAM,CAAC8B,KAAK,CAGtB;AAED,OAAO,IAAMC,iCAAiC,gBAAG5B,MAAM,CAACL,IAAI,CAAC,CAAAoB,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,oBAClDpB,MAAM,CAAC8B,KAAK,CACtB;AAED,OAAO,IAAME,mBAAmB,gBAAG7B,MAAM,CAACD,UAAU,CAAC,CAAAgB,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,0RAQjCpB,MAAM,CAACiC,MAAM,CAgBhC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import styled from 'styled-components';
|
|
2
2
|
export var StyledEditor = /*#__PURE__*/styled.div.withConfig({
|
|
3
3
|
displayName: "StyledEditor",
|
|
4
|
-
componentId: "text-editor-
|
|
5
|
-
})([".ck-editor__top{height:0 !important;}.ck-content{border:none !important;padding:0 !important;--ck-content-font-family:Inter,'Noto Sans JP','Noto Sans KR','Noto Sans SC','Noto Sans TC',sans-serif;--ck-content-font-size:14px;--ck-content-word-break:break-word;--ck-content-overflow-wrap:break-word;--ck-content-line-height:1.4;p{margin:0;}img{margin-left:auto;margin-right:auto;max-width:100%;height:auto;}figure.table{display:table;margin-top:0.9em;margin-bottom:0.9em;}figure.table table,table{width:100%;border:1px double #b3b3b3;border-collapse:collapse;border-spacing:0;th{text-align:left;}& > thead,& > tbody{& > tr > td,& > tr > th{border:1px solid #bfbfbf;min-width:2em;padding:0.4em;}& > tr > th{background:rgba(0,0,0,0.05);font-weight:700;}}}}"]);
|
|
4
|
+
componentId: "text-editor-1_0_1__sc-1oujb2g-0"
|
|
5
|
+
})([".ck-editor__top{height:0 !important;}.ck-content{border:none !important;padding:0 !important;overflow-x:auto;--ck-content-font-family:Inter,'Noto Sans JP','Noto Sans KR','Noto Sans SC','Noto Sans TC',sans-serif;--ck-content-font-size:14px;--ck-content-word-break:break-word;--ck-content-overflow-wrap:break-word;--ck-content-line-height:1.4;p{margin:0;}img{margin-left:auto;margin-right:auto;max-width:100%;height:auto;}figure.table{display:table;margin-top:0.9em;margin-bottom:0.9em;}figure.table table,table{width:100%;border:1px double #b3b3b3;border-collapse:collapse;border-spacing:0;th{text-align:left;}& > thead,& > tbody{& > tr > td,& > tr > th{border:1px solid #bfbfbf;min-width:2em;padding:0.4em;}& > tr > th{background:rgba(0,0,0,0.05);font-weight:700;}}}}"]);
|
|
6
6
|
//# sourceMappingURL=TextEditorOutput.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditorOutput.styles.js","names":["styled","StyledEditor","div","withConfig","displayName","componentId"],"sources":["../../src/TextEditorOutput/TextEditorOutput.styles.ts"],"sourcesContent":["import styled from 'styled-components'\n\nexport const StyledEditor = styled.div`\n .ck-editor__top {\n height: 0 !important;\n }\n\n .ck-content {\n border: none !important;\n padding: 0 !important;\n --ck-content-font-family: Inter, 'Noto Sans JP', 'Noto Sans KR',\n 'Noto Sans SC', 'Noto Sans TC', sans-serif;\n --ck-content-font-size: 14px;\n --ck-content-word-break: break-word;\n --ck-content-overflow-wrap: break-word;\n --ck-content-line-height: 1.4;\n\n p {\n margin: 0;\n }\n\n img {\n margin-left: auto;\n margin-right: auto;\n max-width: 100%;\n height: auto;\n }\n\n figure.table {\n display: table;\n margin-top: 0.9em;\n margin-bottom: 0.9em;\n }\n\n figure.table table,\n table {\n width: 100%;\n border: 1px double #b3b3b3;\n border-collapse: collapse;\n border-spacing: 0;\n\n th {\n text-align: left;\n }\n\n & > thead,\n & > tbody {\n & > tr > td,\n & > tr > th {\n border: 1px solid #bfbfbf;\n min-width: 2em;\n padding: 0.4em;\n }\n\n & > tr > th {\n background: rgba(0, 0, 0, 0.05);\n font-weight: 700;\n }\n }\n }\n }\n`\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAEtC,OAAO,IAAMC,YAAY,gBAAGD,MAAM,CAACE,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"TextEditorOutput.styles.js","names":["styled","StyledEditor","div","withConfig","displayName","componentId"],"sources":["../../src/TextEditorOutput/TextEditorOutput.styles.ts"],"sourcesContent":["import styled from 'styled-components'\n\nexport const StyledEditor = styled.div`\n .ck-editor__top {\n height: 0 !important;\n }\n\n .ck-content {\n border: none !important;\n padding: 0 !important;\n overflow-x: auto;\n --ck-content-font-family: Inter, 'Noto Sans JP', 'Noto Sans KR',\n 'Noto Sans SC', 'Noto Sans TC', sans-serif;\n --ck-content-font-size: 14px;\n --ck-content-word-break: break-word;\n --ck-content-overflow-wrap: break-word;\n --ck-content-line-height: 1.4;\n\n p {\n margin: 0;\n }\n\n img {\n margin-left: auto;\n margin-right: auto;\n max-width: 100%;\n height: auto;\n }\n\n figure.table {\n display: table;\n margin-top: 0.9em;\n margin-bottom: 0.9em;\n }\n\n figure.table table,\n table {\n width: 100%;\n border: 1px double #b3b3b3;\n border-collapse: collapse;\n border-spacing: 0;\n\n th {\n text-align: left;\n }\n\n & > thead,\n & > tbody {\n & > tr > td,\n & > tr > th {\n border: 1px solid #bfbfbf;\n min-width: 2em;\n padding: 0.4em;\n }\n\n & > tr > th {\n background: rgba(0, 0, 0, 0.05);\n font-weight: 700;\n }\n }\n }\n }\n`\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAEtC,OAAO,IAAMC,YAAY,gBAAGD,MAAM,CAACE,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,uwBA4DrC"}
|
|
@@ -19,7 +19,10 @@ import sanitizeHtml from 'sanitize-html';
|
|
|
19
19
|
import { RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE } from '../TextEditor/utils/imageAttributes';
|
|
20
20
|
import { canonicalizeTextEditorImageUrl } from '../TextEditor/utils/imageUrls';
|
|
21
21
|
export { isAllowedTextEditorImageUrl } from '../TextEditor/utils/imageUrls';
|
|
22
|
-
var CKEDITOR_IMAGE_CLASSES = new Set(['image', 'image-inline', 'image_resized', 'image-style-align-left', 'image-style-align-right', 'image-style-block-align-left', 'image-style-block-align-right', 'image-style-side'
|
|
22
|
+
var CKEDITOR_IMAGE_CLASSES = new Set(['image', 'image-inline', 'image_resized', 'image-style-align-left', 'image-style-align-right', 'image-style-block-align-left', 'image-style-block-align-right', 'image-style-side',
|
|
23
|
+
// Keep as-is: the figure transform runs on ALL figures, and this is the
|
|
24
|
+
// table-figure marker (`<figure class="table">`). We can't filter it out
|
|
25
|
+
'table']);
|
|
23
26
|
var IMAGE_TAGS = new Set(['figure', 'figcaption', 'picture', 'source', 'img']);
|
|
24
27
|
var sanitizeSrcset = function sanitizeSrcset(srcset) {
|
|
25
28
|
var candidates = srcset.split(',').map(function (candidate) {
|
|
@@ -46,9 +49,13 @@ var sanitizeSrcset = function sanitizeSrcset(srcset) {
|
|
|
46
49
|
}
|
|
47
50
|
return sanitizedCandidates.join(', ');
|
|
48
51
|
};
|
|
52
|
+
|
|
53
|
+
// Keep it as-is — we can't filter it out or the output loses the table's
|
|
54
|
+
// alignment and always falls back to the default (centered).
|
|
55
|
+
var TABLE_ALIGNMENT_CLASS = /^table-style-(block-)?align-(left|center|right)$/;
|
|
49
56
|
var sanitizeImageClass = function sanitizeImageClass(className) {
|
|
50
57
|
var allowedClasses = className === null || className === void 0 ? void 0 : className.split(/\s+/).filter(function (name) {
|
|
51
|
-
return CKEDITOR_IMAGE_CLASSES.has(name);
|
|
58
|
+
return CKEDITOR_IMAGE_CLASSES.has(name) || TABLE_ALIGNMENT_CLASS.test(name);
|
|
52
59
|
});
|
|
53
60
|
return allowedClasses !== null && allowedClasses !== void 0 && allowedClasses.length ? allowedClasses.join(' ') : undefined;
|
|
54
61
|
};
|
|
@@ -186,7 +193,8 @@ export var sanitizeTextEditorHtml = function sanitizeTextEditorHtml(html) {
|
|
|
186
193
|
'list-style-type': [/.*/],
|
|
187
194
|
'vertical-align': [/.*/],
|
|
188
195
|
'white-space': [/.*/],
|
|
189
|
-
'aspect-ratio': [/^\d+(?:\.\d+)?(?:\s*\/\s*\d+(?:\.\d+)?)?$/]
|
|
196
|
+
'aspect-ratio': [/^\d+(?:\.\d+)?(?:\s*\/\s*\d+(?:\.\d+)?)?$/],
|
|
197
|
+
"float": [/^(?:left|right|none)$/]
|
|
190
198
|
}
|
|
191
199
|
},
|
|
192
200
|
allowedSchemes: ['http', 'https', 'mailto', 'tel'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditorOutput.utils.js","names":["sanitizeHtml","RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE","canonicalizeTextEditorImageUrl","isAllowedTextEditorImageUrl","CKEDITOR_IMAGE_CLASSES","Set","IMAGE_TAGS","sanitizeSrcset","srcset","candidates","split","map","candidate","trim","filter","Boolean","length","undefined","sanitizedCandidates","_candidate$split","_candidate$split2","_toArray","url","descriptors","slice","canonicalUrl","some","descriptor","test","concat","_toConsumableArray","join","includes","sanitizeImageClass","className","allowedClasses","name","has","sanitizeImageSizes","sizes","sanitizeProstoreFileId","id","SAFE_IMAGE_STYLE_PROPERTIES","filterImageStyle","style","safeDeclarations","declaration","_property$trim$toLowe","_declaration$split","_declaration$split2","_slicedToArray","property","toLowerCase","setOrDeleteAttribute","attributes","value","sanitizeImageTagAttributes","tagName","onclick","onload","sanitizeClassAttribute","sanitizeUrlAttribute","sanitize","sanitizeImageUrlAttributes","sanitizeProstoreFileIdAttribute","addLazyImageLoadingAttributes","src","loading","decoding","transformImageTag","attribs","sanitizedAttributes","_objectSpread","sanitizeTextEditorHtml","html","allowedTags","allowedAttributes","a","figure","picture","source","img","table","col","td","th","allowedStyles","color","width","height","margin","padding","border","allowedSchemes","allowedSchemesByTag","transformTags","figcaption","exclusiveFilter","frame","tag","allowedIframeHostnames"],"sources":["../../src/TextEditorOutput/TextEditorOutput.utils.ts"],"sourcesContent":["import sanitizeHtml from 'sanitize-html'\n\nimport { RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE } from '../TextEditor/utils/imageAttributes'\nimport { canonicalizeTextEditorImageUrl } from '../TextEditor/utils/imageUrls'\n\nexport { isAllowedTextEditorImageUrl } from '../TextEditor/utils/imageUrls'\n\ntype Attributes = Record<string, string>\n\nconst CKEDITOR_IMAGE_CLASSES = new Set([\n 'image',\n 'image-inline',\n 'image_resized',\n 'image-style-align-left',\n 'image-style-align-right',\n 'image-style-block-align-left',\n 'image-style-block-align-right',\n 'image-style-side',\n])\n\nconst IMAGE_TAGS = new Set(['figure', 'figcaption', 'picture', 'source', 'img'])\n\nconst sanitizeSrcset = (srcset: string) => {\n const candidates = srcset\n .split(',')\n .map((candidate) => candidate.trim())\n .filter(Boolean)\n\n if (candidates.length === 0) {\n return undefined\n }\n\n const sanitizedCandidates = candidates.map((candidate) => {\n const [url, ...descriptors] = candidate.split(/\\s+/)\n const canonicalUrl = canonicalizeTextEditorImageUrl(url)\n\n if (\n !canonicalUrl ||\n descriptors.some(\n (descriptor) => !/^(?:\\d+w|\\d+(?:\\.\\d+)?x)$/.test(descriptor)\n )\n ) {\n return undefined\n }\n\n return [canonicalUrl, ...descriptors].join(' ')\n })\n\n if (sanitizedCandidates.includes(undefined)) {\n return undefined\n }\n\n return sanitizedCandidates.join(', ')\n}\n\nconst sanitizeImageClass = (className?: string) => {\n const allowedClasses = className\n ?.split(/\\s+/)\n .filter((name) => CKEDITOR_IMAGE_CLASSES.has(name))\n\n return allowedClasses?.length ? allowedClasses.join(' ') : undefined\n}\n\nconst sanitizeImageSizes = (sizes?: string) => {\n if (!sizes || /url\\(|javascript:|data:/i.test(sizes)) {\n return undefined\n }\n\n return /^[\\w\\s().,:+\\-/%]+$/.test(sizes) ? sizes : undefined\n}\n\nconst sanitizeProstoreFileId = (id?: string) =>\n id && /^[\\w-]+$/.test(id) ? id : undefined\n\n// ImageResize writes inline `width: X%` (and occasionally `height`) on the\n// containing <figure>/<img>. Keep only those declarations so resized images\n// render at the user's chosen size, `allowedStyles` further validates the values.\nconst SAFE_IMAGE_STYLE_PROPERTIES = new Set(['width', 'height', 'aspect-ratio'])\n\nconst filterImageStyle = (style?: string) => {\n if (!style) {\n return undefined\n }\n\n const safeDeclarations = style\n .split(';')\n .map((declaration) => declaration.trim())\n .filter(Boolean)\n .filter((declaration) => {\n const [property] = declaration.split(':', 1)\n return SAFE_IMAGE_STYLE_PROPERTIES.has(\n property?.trim().toLowerCase() ?? ''\n )\n })\n\n return safeDeclarations.length ? `${safeDeclarations.join('; ')};` : undefined\n}\n\nconst setOrDeleteAttribute = (\n attributes: Attributes,\n name: string,\n value?: string\n) => {\n if (value) {\n attributes[name] = value\n } else {\n delete attributes[name]\n }\n}\n\nconst sanitizeImageTagAttributes = (\n tagName: string,\n attributes: Attributes\n) => {\n if (!IMAGE_TAGS.has(tagName)) {\n return\n }\n\n setOrDeleteAttribute(attributes, 'style', filterImageStyle(attributes.style))\n delete attributes.onclick\n delete attributes.onload\n}\n\nconst sanitizeClassAttribute = (attributes: Attributes) => {\n setOrDeleteAttribute(\n attributes,\n 'class',\n sanitizeImageClass(attributes.class)\n )\n}\n\nconst sanitizeUrlAttribute = (\n attributes: Attributes,\n name: string,\n sanitize: (value: string) => string | undefined\n) => {\n if (attributes[name]) {\n setOrDeleteAttribute(attributes, name, sanitize(attributes[name]))\n }\n}\n\nconst sanitizeImageUrlAttributes = (attributes: Attributes) => {\n sanitizeUrlAttribute(attributes, 'src', canonicalizeTextEditorImageUrl)\n sanitizeUrlAttribute(attributes, 'srcset', sanitizeSrcset)\n sanitizeUrlAttribute(attributes, 'sizes', sanitizeImageSizes)\n}\n\nconst sanitizeProstoreFileIdAttribute = (attributes: Attributes) => {\n setOrDeleteAttribute(\n attributes,\n RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n sanitizeProstoreFileId(attributes[RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE])\n )\n}\n\nconst addLazyImageLoadingAttributes = (\n tagName: string,\n attributes: Attributes\n) => {\n if (tagName === 'img' && attributes.src) {\n attributes.loading = 'lazy'\n attributes.decoding = 'async'\n }\n}\n\nconst transformImageTag = (tagName: string, attribs: Attributes) => {\n const sanitizedAttributes: Attributes = { ...attribs }\n\n sanitizeImageTagAttributes(tagName, sanitizedAttributes)\n sanitizeClassAttribute(sanitizedAttributes)\n sanitizeImageUrlAttributes(sanitizedAttributes)\n sanitizeProstoreFileIdAttribute(sanitizedAttributes)\n addLazyImageLoadingAttributes(tagName, sanitizedAttributes)\n\n return {\n tagName,\n attribs: sanitizedAttributes,\n }\n}\n\nexport const sanitizeTextEditorHtml = (html: string) => {\n if (!html) {\n return ''\n }\n\n return sanitizeHtml(html, {\n allowedTags: [\n 'p',\n 'br',\n 'strong',\n 'b',\n 'em',\n 'i',\n 'u',\n 's',\n 'span',\n 'div',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'ul',\n 'ol',\n 'li',\n 'a',\n 'figure',\n 'figcaption',\n 'table',\n 'colgroup',\n 'col',\n 'thead',\n 'tbody',\n 'tr',\n 'td',\n 'th',\n 'blockquote',\n 'pre',\n 'code',\n 'hr',\n 'img',\n 'picture',\n 'source',\n 'sub',\n 'sup',\n ],\n allowedAttributes: {\n '*': ['style', 'class'],\n a: ['href', 'title', 'target', 'rel'],\n figure: ['class', RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE],\n picture: ['class', RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE],\n source: ['srcset', 'sizes', 'type', 'media'],\n img: [\n 'src',\n 'srcset',\n 'sizes',\n 'alt',\n 'title',\n 'width',\n 'height',\n 'loading',\n 'decoding',\n 'class',\n RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n ],\n table: ['border', 'cellpadding', 'cellspacing'],\n col: ['span'],\n td: ['colspan', 'rowspan'],\n th: ['colspan', 'rowspan', 'scope'],\n },\n allowedStyles: {\n '*': {\n color: [\n /^#[0-9a-fA-F]{3,6}$/,\n /^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/,\n /^rgba\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*[\\d.]+\\s*\\)$/,\n ],\n 'background-color': [\n /^#[0-9a-fA-F]{3,6}$/,\n /^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/,\n /^rgba\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*[\\d.]+\\s*\\)$/,\n ],\n 'font-size': [/^\\d+(?:px|pt|em|rem|%)$/],\n 'font-weight': [/^(?:normal|bold|bolder|lighter|\\d{1,3})$/],\n 'font-style': [/^(?:normal|italic|oblique)$/],\n 'font-family': [/.*/],\n 'text-decoration': [/^(?:none|underline|line-through|overline)$/],\n 'text-align': [/^(?:left|right|center|justify)$/],\n 'line-height': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)?$/],\n width: [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n 'min-width': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n 'max-width': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n height: [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n 'min-height': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n 'max-height': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n margin: [/^\\d+(?:px|pt|em|rem|%)?(?:\\s+\\d+(?:px|pt|em|rem|%)?)*$/],\n 'margin-top': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'margin-bottom': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'margin-left': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'margin-right': [/^\\d+(?:px|pt|em|rem|%)?$/],\n padding: [/^\\d+(?:px|pt|em|rem|%)?(?:\\s+\\d+(?:px|pt|em|rem|%)?)*$/],\n 'padding-top': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'padding-bottom': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'padding-left': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'padding-right': [/^\\d+(?:px|pt|em|rem|%)?$/],\n border: [/.*/],\n 'border-top': [/.*/],\n 'border-bottom': [/.*/],\n 'border-left': [/.*/],\n 'border-right': [/.*/],\n 'border-color': [\n /^#[0-9a-fA-F]{3,6}$/,\n /^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/,\n /^rgba\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*[\\d.]+\\s*\\)$/,\n ],\n 'border-width': [/^\\d+(?:px|pt|em|rem)?$/],\n 'border-style': [/^(?:none|solid|dashed|dotted|double)$/],\n 'list-style-type': [/.*/],\n 'vertical-align': [/.*/],\n 'white-space': [/.*/],\n 'aspect-ratio': [/^\\d+(?:\\.\\d+)?(?:\\s*\\/\\s*\\d+(?:\\.\\d+)?)?$/],\n },\n },\n allowedSchemes: ['http', 'https', 'mailto', 'tel'],\n allowedSchemesByTag: {\n img: ['http', 'https'],\n source: ['http', 'https'],\n },\n transformTags: {\n figure: transformImageTag,\n figcaption: transformImageTag,\n picture: transformImageTag,\n source: transformImageTag,\n img: transformImageTag,\n },\n exclusiveFilter: (frame) =>\n (frame.tag === 'img' && !frame.attribs.src) ||\n (frame.tag === 'source' && !frame.attribs.srcset),\n allowedIframeHostnames: [],\n })\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TextEditorOutput.utils.js","names":["sanitizeHtml","RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE","canonicalizeTextEditorImageUrl","isAllowedTextEditorImageUrl","CKEDITOR_IMAGE_CLASSES","Set","IMAGE_TAGS","sanitizeSrcset","srcset","candidates","split","map","candidate","trim","filter","Boolean","length","undefined","sanitizedCandidates","_candidate$split","_candidate$split2","_toArray","url","descriptors","slice","canonicalUrl","some","descriptor","test","concat","_toConsumableArray","join","includes","TABLE_ALIGNMENT_CLASS","sanitizeImageClass","className","allowedClasses","name","has","sanitizeImageSizes","sizes","sanitizeProstoreFileId","id","SAFE_IMAGE_STYLE_PROPERTIES","filterImageStyle","style","safeDeclarations","declaration","_property$trim$toLowe","_declaration$split","_declaration$split2","_slicedToArray","property","toLowerCase","setOrDeleteAttribute","attributes","value","sanitizeImageTagAttributes","tagName","onclick","onload","sanitizeClassAttribute","sanitizeUrlAttribute","sanitize","sanitizeImageUrlAttributes","sanitizeProstoreFileIdAttribute","addLazyImageLoadingAttributes","src","loading","decoding","transformImageTag","attribs","sanitizedAttributes","_objectSpread","sanitizeTextEditorHtml","html","allowedTags","allowedAttributes","a","figure","picture","source","img","table","col","td","th","allowedStyles","color","width","height","margin","padding","border","allowedSchemes","allowedSchemesByTag","transformTags","figcaption","exclusiveFilter","frame","tag","allowedIframeHostnames"],"sources":["../../src/TextEditorOutput/TextEditorOutput.utils.ts"],"sourcesContent":["import sanitizeHtml from 'sanitize-html'\n\nimport { RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE } from '../TextEditor/utils/imageAttributes'\nimport { canonicalizeTextEditorImageUrl } from '../TextEditor/utils/imageUrls'\n\nexport { isAllowedTextEditorImageUrl } from '../TextEditor/utils/imageUrls'\n\ntype Attributes = Record<string, string>\n\nconst CKEDITOR_IMAGE_CLASSES = new Set([\n 'image',\n 'image-inline',\n 'image_resized',\n 'image-style-align-left',\n 'image-style-align-right',\n 'image-style-block-align-left',\n 'image-style-block-align-right',\n 'image-style-side',\n // Keep as-is: the figure transform runs on ALL figures, and this is the\n // table-figure marker (`<figure class=\"table\">`). We can't filter it out\n 'table',\n])\n\nconst IMAGE_TAGS = new Set(['figure', 'figcaption', 'picture', 'source', 'img'])\n\nconst sanitizeSrcset = (srcset: string) => {\n const candidates = srcset\n .split(',')\n .map((candidate) => candidate.trim())\n .filter(Boolean)\n\n if (candidates.length === 0) {\n return undefined\n }\n\n const sanitizedCandidates = candidates.map((candidate) => {\n const [url, ...descriptors] = candidate.split(/\\s+/)\n const canonicalUrl = canonicalizeTextEditorImageUrl(url)\n\n if (\n !canonicalUrl ||\n descriptors.some(\n (descriptor) => !/^(?:\\d+w|\\d+(?:\\.\\d+)?x)$/.test(descriptor)\n )\n ) {\n return undefined\n }\n\n return [canonicalUrl, ...descriptors].join(' ')\n })\n\n if (sanitizedCandidates.includes(undefined)) {\n return undefined\n }\n\n return sanitizedCandidates.join(', ')\n}\n\n// Keep it as-is — we can't filter it out or the output loses the table's\n// alignment and always falls back to the default (centered).\nconst TABLE_ALIGNMENT_CLASS = /^table-style-(block-)?align-(left|center|right)$/\n\nconst sanitizeImageClass = (className?: string) => {\n const allowedClasses = className\n ?.split(/\\s+/)\n .filter(\n (name) =>\n CKEDITOR_IMAGE_CLASSES.has(name) || TABLE_ALIGNMENT_CLASS.test(name)\n )\n\n return allowedClasses?.length ? allowedClasses.join(' ') : undefined\n}\n\nconst sanitizeImageSizes = (sizes?: string) => {\n if (!sizes || /url\\(|javascript:|data:/i.test(sizes)) {\n return undefined\n }\n\n return /^[\\w\\s().,:+\\-/%]+$/.test(sizes) ? sizes : undefined\n}\n\nconst sanitizeProstoreFileId = (id?: string) =>\n id && /^[\\w-]+$/.test(id) ? id : undefined\n\n// ImageResize writes inline `width: X%` (and occasionally `height`) on the\n// containing <figure>/<img>. Keep only those declarations so resized images\n// render at the user's chosen size, `allowedStyles` further validates the values.\nconst SAFE_IMAGE_STYLE_PROPERTIES = new Set(['width', 'height', 'aspect-ratio'])\n\nconst filterImageStyle = (style?: string) => {\n if (!style) {\n return undefined\n }\n\n const safeDeclarations = style\n .split(';')\n .map((declaration) => declaration.trim())\n .filter(Boolean)\n .filter((declaration) => {\n const [property] = declaration.split(':', 1)\n return SAFE_IMAGE_STYLE_PROPERTIES.has(\n property?.trim().toLowerCase() ?? ''\n )\n })\n\n return safeDeclarations.length ? `${safeDeclarations.join('; ')};` : undefined\n}\n\nconst setOrDeleteAttribute = (\n attributes: Attributes,\n name: string,\n value?: string\n) => {\n if (value) {\n attributes[name] = value\n } else {\n delete attributes[name]\n }\n}\n\nconst sanitizeImageTagAttributes = (\n tagName: string,\n attributes: Attributes\n) => {\n if (!IMAGE_TAGS.has(tagName)) {\n return\n }\n\n setOrDeleteAttribute(attributes, 'style', filterImageStyle(attributes.style))\n delete attributes.onclick\n delete attributes.onload\n}\n\nconst sanitizeClassAttribute = (attributes: Attributes) => {\n setOrDeleteAttribute(\n attributes,\n 'class',\n sanitizeImageClass(attributes.class)\n )\n}\n\nconst sanitizeUrlAttribute = (\n attributes: Attributes,\n name: string,\n sanitize: (value: string) => string | undefined\n) => {\n if (attributes[name]) {\n setOrDeleteAttribute(attributes, name, sanitize(attributes[name]))\n }\n}\n\nconst sanitizeImageUrlAttributes = (attributes: Attributes) => {\n sanitizeUrlAttribute(attributes, 'src', canonicalizeTextEditorImageUrl)\n sanitizeUrlAttribute(attributes, 'srcset', sanitizeSrcset)\n sanitizeUrlAttribute(attributes, 'sizes', sanitizeImageSizes)\n}\n\nconst sanitizeProstoreFileIdAttribute = (attributes: Attributes) => {\n setOrDeleteAttribute(\n attributes,\n RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n sanitizeProstoreFileId(attributes[RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE])\n )\n}\n\nconst addLazyImageLoadingAttributes = (\n tagName: string,\n attributes: Attributes\n) => {\n if (tagName === 'img' && attributes.src) {\n attributes.loading = 'lazy'\n attributes.decoding = 'async'\n }\n}\n\nconst transformImageTag = (tagName: string, attribs: Attributes) => {\n const sanitizedAttributes: Attributes = { ...attribs }\n\n sanitizeImageTagAttributes(tagName, sanitizedAttributes)\n sanitizeClassAttribute(sanitizedAttributes)\n sanitizeImageUrlAttributes(sanitizedAttributes)\n sanitizeProstoreFileIdAttribute(sanitizedAttributes)\n addLazyImageLoadingAttributes(tagName, sanitizedAttributes)\n\n return {\n tagName,\n attribs: sanitizedAttributes,\n }\n}\n\nexport const sanitizeTextEditorHtml = (html: string) => {\n if (!html) {\n return ''\n }\n\n return sanitizeHtml(html, {\n allowedTags: [\n 'p',\n 'br',\n 'strong',\n 'b',\n 'em',\n 'i',\n 'u',\n 's',\n 'span',\n 'div',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'ul',\n 'ol',\n 'li',\n 'a',\n 'figure',\n 'figcaption',\n 'table',\n 'colgroup',\n 'col',\n 'thead',\n 'tbody',\n 'tr',\n 'td',\n 'th',\n 'blockquote',\n 'pre',\n 'code',\n 'hr',\n 'img',\n 'picture',\n 'source',\n 'sub',\n 'sup',\n ],\n allowedAttributes: {\n '*': ['style', 'class'],\n a: ['href', 'title', 'target', 'rel'],\n figure: ['class', RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE],\n picture: ['class', RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE],\n source: ['srcset', 'sizes', 'type', 'media'],\n img: [\n 'src',\n 'srcset',\n 'sizes',\n 'alt',\n 'title',\n 'width',\n 'height',\n 'loading',\n 'decoding',\n 'class',\n RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n ],\n table: ['border', 'cellpadding', 'cellspacing'],\n col: ['span'],\n td: ['colspan', 'rowspan'],\n th: ['colspan', 'rowspan', 'scope'],\n },\n allowedStyles: {\n '*': {\n color: [\n /^#[0-9a-fA-F]{3,6}$/,\n /^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/,\n /^rgba\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*[\\d.]+\\s*\\)$/,\n ],\n 'background-color': [\n /^#[0-9a-fA-F]{3,6}$/,\n /^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/,\n /^rgba\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*[\\d.]+\\s*\\)$/,\n ],\n 'font-size': [/^\\d+(?:px|pt|em|rem|%)$/],\n 'font-weight': [/^(?:normal|bold|bolder|lighter|\\d{1,3})$/],\n 'font-style': [/^(?:normal|italic|oblique)$/],\n 'font-family': [/.*/],\n 'text-decoration': [/^(?:none|underline|line-through|overline)$/],\n 'text-align': [/^(?:left|right|center|justify)$/],\n 'line-height': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)?$/],\n width: [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n 'min-width': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n 'max-width': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n height: [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n 'min-height': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n 'max-height': [/^\\d+(?:\\.\\d+)?(?:px|pt|em|rem|%)$/],\n margin: [/^\\d+(?:px|pt|em|rem|%)?(?:\\s+\\d+(?:px|pt|em|rem|%)?)*$/],\n 'margin-top': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'margin-bottom': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'margin-left': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'margin-right': [/^\\d+(?:px|pt|em|rem|%)?$/],\n padding: [/^\\d+(?:px|pt|em|rem|%)?(?:\\s+\\d+(?:px|pt|em|rem|%)?)*$/],\n 'padding-top': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'padding-bottom': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'padding-left': [/^\\d+(?:px|pt|em|rem|%)?$/],\n 'padding-right': [/^\\d+(?:px|pt|em|rem|%)?$/],\n border: [/.*/],\n 'border-top': [/.*/],\n 'border-bottom': [/.*/],\n 'border-left': [/.*/],\n 'border-right': [/.*/],\n 'border-color': [\n /^#[0-9a-fA-F]{3,6}$/,\n /^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/,\n /^rgba\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*[\\d.]+\\s*\\)$/,\n ],\n 'border-width': [/^\\d+(?:px|pt|em|rem)?$/],\n 'border-style': [/^(?:none|solid|dashed|dotted|double)$/],\n 'list-style-type': [/.*/],\n 'vertical-align': [/.*/],\n 'white-space': [/.*/],\n 'aspect-ratio': [/^\\d+(?:\\.\\d+)?(?:\\s*\\/\\s*\\d+(?:\\.\\d+)?)?$/],\n float: [/^(?:left|right|none)$/],\n },\n },\n allowedSchemes: ['http', 'https', 'mailto', 'tel'],\n allowedSchemesByTag: {\n img: ['http', 'https'],\n source: ['http', 'https'],\n },\n transformTags: {\n figure: transformImageTag,\n figcaption: transformImageTag,\n picture: transformImageTag,\n source: transformImageTag,\n img: transformImageTag,\n },\n exclusiveFilter: (frame) =>\n (frame.tag === 'img' && !frame.attribs.src) ||\n (frame.tag === 'source' && !frame.attribs.srcset),\n allowedIframeHostnames: [],\n })\n}\n"],"mappings":"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"}
|