@procore/text-editor 1.0.1 → 1.1.0

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.
Files changed (94) hide show
  1. package/.jest/ckeditorMock.js +2 -0
  2. package/.jest/ckeditorUtilsMock.js +14 -0
  3. package/CHANGELOG.md +15 -0
  4. package/dist/DebouncedTextEditor/DebouncedTextEditor.js +1 -1
  5. package/dist/DebouncedTextEditor/DebouncedTextEditor.js.map +1 -1
  6. package/dist/DebouncedTextEditor/index.js.map +1 -1
  7. package/dist/TextEditor/CKTextEditor.js +5 -5
  8. package/dist/TextEditor/CKTextEditor.js.map +1 -1
  9. package/dist/TextEditor/EditorError.js.map +1 -1
  10. package/dist/TextEditor/Providers/FeatureFlagProvider.js.map +1 -1
  11. package/dist/TextEditor/StickyToolbar/index.js.map +1 -1
  12. package/dist/TextEditor/StickyToolbar/useStickyToolbar.js.map +1 -1
  13. package/dist/TextEditor/StickyToolbar/useStickyToolbar.types.js.map +1 -1
  14. package/dist/TextEditor/TextEditor.js.map +1 -1
  15. package/dist/TextEditor/TextEditor.styles.d.ts +7 -8
  16. package/dist/TextEditor/TextEditor.styles.js +4 -4
  17. package/dist/TextEditor/TextEditor.styles.js.map +1 -1
  18. package/dist/TextEditor/TextEditor.types.d.ts +1 -1
  19. package/dist/TextEditor/TextEditor.types.js.map +1 -1
  20. package/dist/TextEditor/TextEditorI18nProvider.js.map +1 -1
  21. package/dist/TextEditor/TextEditorProvider.js.map +1 -1
  22. package/dist/TextEditor/TextEditorProvider.types.d.ts +1 -1
  23. package/dist/TextEditor/TextEditorProvider.types.js.map +1 -1
  24. package/dist/TextEditor/TinyMCETextEditor.js.map +1 -1
  25. package/dist/TextEditor/index.d.ts +1 -1
  26. package/dist/TextEditor/index.js +0 -1
  27. package/dist/TextEditor/index.js.map +1 -1
  28. package/dist/TextEditor/license_key.js.map +1 -1
  29. package/dist/TextEditor/plugins/CutPlugin/CutCommand.js +21 -29
  30. package/dist/TextEditor/plugins/CutPlugin/CutCommand.js.map +1 -1
  31. package/dist/TextEditor/plugins/CutPlugin/CutPlugin.js +2 -2
  32. package/dist/TextEditor/plugins/CutPlugin/CutPlugin.js.map +1 -1
  33. package/dist/TextEditor/plugins/CutPlugin/index.js.map +1 -1
  34. package/dist/TextEditor/plugins/IndentPaddingToMarginPlugin/IndentPaddingToMarginPlugin.js.map +1 -1
  35. package/dist/TextEditor/plugins/IndentPaddingToMarginPlugin/index.js.map +1 -1
  36. package/dist/TextEditor/plugins/NormalizeTableWidthPlugin/NormalizeTableWidthPlugin.js.map +1 -1
  37. package/dist/TextEditor/plugins/NormalizeTableWidthPlugin/index.js.map +1 -1
  38. package/dist/TextEditor/plugins/PasteAsTextPlugin/PasteAsTextCommand.js +20 -28
  39. package/dist/TextEditor/plugins/PasteAsTextPlugin/PasteAsTextCommand.js.map +1 -1
  40. package/dist/TextEditor/plugins/PasteAsTextPlugin/PasteAsTextPlugin.js +2 -2
  41. package/dist/TextEditor/plugins/PasteAsTextPlugin/PasteAsTextPlugin.js.map +1 -1
  42. package/dist/TextEditor/plugins/PasteAsTextPlugin/index.js.map +1 -1
  43. package/dist/TextEditor/plugins/PastePlugin/PasteCommand.js +54 -62
  44. package/dist/TextEditor/plugins/PastePlugin/PasteCommand.js.map +1 -1
  45. package/dist/TextEditor/plugins/PastePlugin/PastePlugin.js +2 -2
  46. package/dist/TextEditor/plugins/PastePlugin/PastePlugin.js.map +1 -1
  47. package/dist/TextEditor/plugins/PastePlugin/index.js.map +1 -1
  48. package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.d.ts +1 -1
  49. package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.js +50 -59
  50. package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.js.map +1 -1
  51. package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/index.js.map +1 -1
  52. package/dist/TextEditor/plugins/TabSpacesPlugin/TabSpacesPlugin.js.map +1 -1
  53. package/dist/TextEditor/plugins/TabSpacesPlugin/index.js.map +1 -1
  54. package/dist/TextEditor/textEditorTheming/icons.js.map +1 -1
  55. package/dist/TextEditor/textEditorTheming/index.js.map +1 -1
  56. package/dist/TextEditor/textEditorTheming/textEditorTheming.styles.d.ts +0 -1
  57. package/dist/TextEditor/textEditorTheming/textEditorTheming.styles.js.map +1 -1
  58. package/dist/TextEditor/useCKEditorCss.js.map +1 -1
  59. package/dist/TextEditor/useCKEditorFocusScope.js.map +1 -1
  60. package/dist/TextEditor/useTabAsNavigation.js.map +1 -1
  61. package/dist/TextEditor/utils/config.js +29 -4
  62. package/dist/TextEditor/utils/config.js.map +1 -1
  63. package/dist/TextEditor/utils/imageAttributes.js.map +1 -1
  64. package/dist/TextEditor/utils/imageUrls.js.map +1 -1
  65. package/dist/TextEditor/utils/index.js.map +1 -1
  66. package/dist/TextEditor/utils/locale.js +12 -1
  67. package/dist/TextEditor/utils/locale.js.map +1 -1
  68. package/dist/TextEditor/utils/richTextEditorHandlers.d.ts +2 -2
  69. package/dist/TextEditor/utils/richTextEditorHandlers.js +62 -81
  70. package/dist/TextEditor/utils/richTextEditorHandlers.js.map +1 -1
  71. package/dist/TextEditorOutput/TextEditorOutput.js.map +1 -1
  72. package/dist/TextEditorOutput/TextEditorOutput.styles.d.ts +0 -1
  73. package/dist/TextEditorOutput/TextEditorOutput.styles.js +1 -1
  74. package/dist/TextEditorOutput/TextEditorOutput.styles.js.map +1 -1
  75. package/dist/TextEditorOutput/TextEditorOutput.types.d.ts +0 -1
  76. package/dist/TextEditorOutput/TextEditorOutput.types.js.map +1 -1
  77. package/dist/TextEditorOutput/TextEditorOutput.utils.js +1 -1
  78. package/dist/TextEditorOutput/TextEditorOutput.utils.js.map +1 -1
  79. package/dist/TextEditorOutput/index.js.map +1 -1
  80. package/dist/_storyHelpers/constants.js.map +1 -1
  81. package/dist/_typedoc/TextEditor/TextEditor.types.json +153 -153
  82. package/dist/_typedoc/TextEditor/TextEditorProvider.types.json +4 -4
  83. package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +9 -9
  84. package/dist/_utils/propsTypedoc.d.ts +3 -3
  85. package/dist/_utils/propsTypedoc.js +1 -3
  86. package/dist/_utils/propsTypedoc.js.map +1 -1
  87. package/dist/ckeditor5-premium-features.d.js.map +1 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/stories/util.js.map +1 -1
  90. package/dist/utils/debounce.js +1 -1
  91. package/dist/utils/debounce.js.map +1 -1
  92. package/jestConfig.js +0 -2
  93. package/package.json +44 -42
  94. package/.jest/translationMock.js +0 -12
@@ -27,6 +27,7 @@ MockCKEditor.displayName = 'CKEditor'
27
27
  module.exports = {
28
28
  CKEditor: MockCKEditor,
29
29
  Command: MockCommand,
30
+ add: () => {},
30
31
  Plugin: class extends MockPlugin {},
31
32
  Alignment: class extends MockPlugin {},
32
33
  Autoformat: class extends MockPlugin {},
@@ -63,6 +64,7 @@ module.exports = {
63
64
  MultiLevelList: class extends MockPlugin {},
64
65
  PageBreak: class extends MockPlugin {},
65
66
  Paragraph: class extends MockPlugin {},
67
+ PasteFromOffice: class extends MockPlugin {},
66
68
  RemoveFormat: class extends MockPlugin {},
67
69
  SpecialCharacters: class extends MockPlugin {},
68
70
  SpecialCharactersEssentials: class extends MockPlugin {},
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @file Mock for `@ckeditor/ckeditor5-utils`.
3
+ *
4
+ * Keeps every real export and only stubs `add` (the sole symbol we import from
5
+ * the package root, in TextEditor/utils/locale.ts). `add` registers translation
6
+ * strings on the global `window.CKEDITOR_TRANSLATIONS` store as a side effect at
7
+ * import time, which is unnecessary under Jest.
8
+ */
9
+ const actual = jest.requireActual('@ckeditor/ckeditor5-utils')
10
+
11
+ module.exports = {
12
+ ...actual,
13
+ add: jest.fn(),
14
+ }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @procore/text-editor
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a78988d: Add an "Open in a new tab" option to CKEditor links. When enabled in the link "Link properties" panel, the link is saved with `target="_blank"` and `rel="noopener noreferrer"`. Also set a default `https://` protocol so links typed without a scheme (for example `www.example.com`) are not treated as relative URLs.
8
+
9
+ ### Patch Changes
10
+
11
+ - 9dcbd9d: Add PasteFromOffice plugin to CKEditor config
12
+ - 6e916ea: Import `add` from `ckeditor5` instead of `@ckeditor/ckeditor5-utils` which not a declared dependency — it only worked through hoisting and could cause duplicate CKEditor modules.
13
+ - e4fb2ba: Mock `@ckeditor/ckeditor5-utils` in the package's Jest setup to avoid the `ckeditor-duplicated-modules` error.
14
+ - `locale.ts` imports `add` from `@ckeditor/ckeditor5-utils` to register the custom Cut/Paste/Paste-as-Text command labels on the global `window.CKEDITOR_TRANSLATIONS` store. Under Jest, the unmocked root import loaded ckeditor5-utils' version guard as a separate instance and threw `ckeditor-duplicated-modules`.
15
+ - The package's Jest config now maps `^@ckeditor/ckeditor5-utils # @procore/text-editor` to a local mock that keeps every real export and only stubs `add` (whose sole purpose at import time is a translation side effect that isn't needed under test). Runtime behavior is unchanged.
16
+ - Updated dependencies
17
+
3
18
  ## 1.0.1
4
19
 
5
20
  ### Patch Changes
@@ -57,7 +57,7 @@ export var DebouncedTextEditor = function DebouncedTextEditor(_ref) {
57
57
  internalValue = _useState2[0],
58
58
  setInternalValue = _useState2[1];
59
59
  var debouncedOnChange = useCallback(debounce(function (newValue) {
60
- onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
60
+ onChange === null || onChange === void 0 || onChange(newValue);
61
61
  }, DEBOUNCE_MS), []);
62
62
  function handleChange(newValue) {
63
63
  setInternalValue(newValue);
@@ -1 +1 @@
1
- {"version":3,"file":"DebouncedTextEditor.js","names":["React","useCallback","useEffect","useState","TextEditor","debounce","DEBOUNCE_MS","DebouncedTextEditor","_ref","onChange","value","rest","_objectWithoutProperties","_excluded","_useState","_useState2","_slicedToArray","internalValue","setInternalValue","debouncedOnChange","newValue","handleChange","createElement","_extends"],"sources":["../../src/DebouncedTextEditor/DebouncedTextEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react'\nimport type { TextEditorProps } from '../TextEditor'\nimport { TextEditor } from '../TextEditor'\nimport { debounce } from '../utils/debounce'\n\nconst DEBOUNCE_MS = 300\n\n/**\n * @deprecated `DebouncedTextEditor` is deprecated and will be removed in a future version.\n * Use `TextEditor` directly instead — it now debounces `getData()` internally.\n *\n * A performance-optimized version of `TextEditor` with built-in debounce on the `onChange` callback.\n *\n * ## When to use `DebouncedTextEditor`\n *\n * Use this component when:\n * - The `onChange` handler triggers expensive operations (API calls, complex state updates, re-renders)\n * - You want to reduce the frequency of updates while the user is actively typing\n * - Performance is a concern in forms with multiple rich text editors\n *\n * ## How it works\n *\n * The component waits 300ms after the user stops typing before calling `onChange`.\n * If the user continues typing, the timer resets. This reduces unnecessary updates\n * while maintaining a responsive editing experience.\n *\n * @example\n * ```tsx\n * import { DebouncedTextEditor } from '@procore/text-editor'\n *\n * function MyComponent() {\n * const [value, setValue] = React.useState('')\n *\n * return (\n * <DebouncedTextEditor\n * value={value}\n * onChange={(newValue) => setValue(newValue)}\n * />\n * )\n * }\n * ```\n */\nexport const DebouncedTextEditor = ({\n onChange,\n value,\n ...rest\n}: TextEditorProps) => {\n const [internalValue, setInternalValue] = useState(value ?? '')\n\n const debouncedOnChange = useCallback(\n debounce((newValue: string) => {\n onChange?.(newValue)\n }, DEBOUNCE_MS),\n []\n )\n\n function handleChange(newValue: string) {\n setInternalValue(newValue)\n debouncedOnChange(newValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? '')\n }, [value])\n\n return <TextEditor {...rest} value={internalValue} onChange={handleChange} />\n}\n"],"mappings":";;;;;;;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAE/D,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,QAAQ,QAAQ,mBAAmB;AAE5C,IAAMC,WAAW,GAAG,GAAG;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAAC,IAAA,EAIT;EAAA,IAHrBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACFC,IAAI,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,SAAA;EAEP,IAAAC,SAAA,GAA0CX,QAAQ,CAACO,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,CAAC;IAAAK,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAxDG,aAAa,GAAAF,UAAA;IAAEG,gBAAgB,GAAAH,UAAA;EAEtC,IAAMI,iBAAiB,GAAGlB,WAAW,CACnCI,QAAQ,CAAC,UAACe,QAAgB,EAAK;IAC7BX,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGW,QAAQ,CAAC;EACtB,CAAC,EAAEd,WAAW,CAAC,EACf,EACF,CAAC;EAED,SAASe,YAAYA,CAACD,QAAgB,EAAE;IACtCF,gBAAgB,CAACE,QAAQ,CAAC;IAC1BD,iBAAiB,CAACC,QAAQ,CAAC;EAC7B;EAEAlB,SAAS,CAAC,YAAM;IACdgB,gBAAgB,CAACR,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,CAAC;EAC/B,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,oBAAOV,KAAA,CAAAsB,aAAA,CAAClB,UAAU,EAAAmB,QAAA,KAAKZ,IAAI;IAAED,KAAK,EAAEO,aAAc;IAACR,QAAQ,EAAEY;EAAa,EAAE,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"DebouncedTextEditor.js","names":["React","useCallback","useEffect","useState","TextEditor","debounce","DEBOUNCE_MS","DebouncedTextEditor","_ref","onChange","value","rest","_objectWithoutProperties","_excluded","_useState","_useState2","_slicedToArray","internalValue","setInternalValue","debouncedOnChange","newValue","handleChange","createElement","_extends"],"sources":["../../src/DebouncedTextEditor/DebouncedTextEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react'\nimport type { TextEditorProps } from '../TextEditor'\nimport { TextEditor } from '../TextEditor'\nimport { debounce } from '../utils/debounce'\n\nconst DEBOUNCE_MS = 300\n\n/**\n * @deprecated `DebouncedTextEditor` is deprecated and will be removed in a future version.\n * Use `TextEditor` directly instead — it now debounces `getData()` internally.\n *\n * A performance-optimized version of `TextEditor` with built-in debounce on the `onChange` callback.\n *\n * ## When to use `DebouncedTextEditor`\n *\n * Use this component when:\n * - The `onChange` handler triggers expensive operations (API calls, complex state updates, re-renders)\n * - You want to reduce the frequency of updates while the user is actively typing\n * - Performance is a concern in forms with multiple rich text editors\n *\n * ## How it works\n *\n * The component waits 300ms after the user stops typing before calling `onChange`.\n * If the user continues typing, the timer resets. This reduces unnecessary updates\n * while maintaining a responsive editing experience.\n *\n * @example\n * ```tsx\n * import { DebouncedTextEditor } from '@procore/text-editor'\n *\n * function MyComponent() {\n * const [value, setValue] = React.useState('')\n *\n * return (\n * <DebouncedTextEditor\n * value={value}\n * onChange={(newValue) => setValue(newValue)}\n * />\n * )\n * }\n * ```\n */\nexport const DebouncedTextEditor = ({\n onChange,\n value,\n ...rest\n}: TextEditorProps) => {\n const [internalValue, setInternalValue] = useState(value ?? '')\n\n const debouncedOnChange = useCallback(\n debounce((newValue: string) => {\n onChange?.(newValue)\n }, DEBOUNCE_MS),\n []\n )\n\n function handleChange(newValue: string) {\n setInternalValue(newValue)\n debouncedOnChange(newValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? '')\n }, [value])\n\n return <TextEditor {...rest} value={internalValue} onChange={handleChange} />\n}\n"],"mappings":";;;;;;;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAE/D,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,QAAQ,QAAQ,mBAAmB;AAE5C,IAAMC,WAAW,GAAG,GAAG;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAAC,IAAA,EAIT;EAAA,IAHrBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACFC,IAAI,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,SAAA;EAEP,IAAAC,SAAA,GAA0CX,QAAQ,CAACO,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,CAAC;IAAAK,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAxDG,aAAa,GAAAF,UAAA;IAAEG,gBAAgB,GAAAH,UAAA;EAEtC,IAAMI,iBAAiB,GAAGlB,WAAW,CACnCI,QAAQ,CAAC,UAACe,QAAgB,EAAK;IAC7BX,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAGW,QAAQ,CAAC;EACtB,CAAC,EAAEd,WAAW,CAAC,EACf,EACF,CAAC;EAED,SAASe,YAAYA,CAACD,QAAgB,EAAE;IACtCF,gBAAgB,CAACE,QAAQ,CAAC;IAC1BD,iBAAiB,CAACC,QAAQ,CAAC;EAC7B;EAEAlB,SAAS,CAAC,YAAM;IACdgB,gBAAgB,CAACR,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,CAAC;EAC/B,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,oBAAOV,KAAA,CAAAsB,aAAA,CAAClB,UAAU,EAAAmB,QAAA,KAAKZ,IAAI;IAAED,KAAK,EAAEO,aAAc;IAACR,QAAQ,EAAEY;EAAa,EAAE,CAAC;AAC/E,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["DebouncedTextEditor"],"sources":["../../src/DebouncedTextEditor/index.ts"],"sourcesContent":["export { DebouncedTextEditor } from './DebouncedTextEditor'\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,uBAAuB"}
1
+ {"version":3,"file":"index.js","names":["DebouncedTextEditor"],"sources":["../../src/DebouncedTextEditor/index.ts"],"sourcesContent":["export { DebouncedTextEditor } from './DebouncedTextEditor'\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,uBAAuB","ignoreList":[]}
@@ -203,7 +203,7 @@ export var CKTextEditor = function CKTextEditor(props) {
203
203
  if (domEvent.key === 'Enter') {
204
204
  domEvent.stopPropagation();
205
205
  }
206
- onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(domEvent, editor);
206
+ onKeyDown === null || onKeyDown === void 0 || onKeyDown(domEvent, editor);
207
207
  };
208
208
  keyDownListenerRef.current = keyDownListener;
209
209
 
@@ -216,12 +216,12 @@ export var CKTextEditor = function CKTextEditor(props) {
216
216
  var hasPendingUploads = hasPendingImageUploads(editor);
217
217
  if (isDirty && !isDirtyState) {
218
218
  setIsDirtyState(true);
219
- onDirty === null || onDirty === void 0 ? void 0 : onDirty();
219
+ onDirty === null || onDirty === void 0 || onDirty();
220
220
  }
221
221
  if (hasPendingUploads) {
222
222
  return;
223
223
  }
224
- onChange === null || onChange === void 0 ? void 0 : onChange(data, isDirty);
224
+ onChange === null || onChange === void 0 || onChange(data, isDirty);
225
225
  }, DEBOUNCE_MS)).current;
226
226
  var handleChange = debouncedChange;
227
227
  var handleReady = function handleReady(editor) {
@@ -257,11 +257,11 @@ export var CKTextEditor = function CKTextEditor(props) {
257
257
 
258
258
  // Bind keydown handler when editor is ready
259
259
  bindKeyDownHandler(editor);
260
- onInit === null || onInit === void 0 ? void 0 : onInit(editor);
260
+ onInit === null || onInit === void 0 || onInit(editor);
261
261
  };
262
262
  var handleBlur = function handleBlur(event, editor) {
263
263
  debouncedChange.flush();
264
- onBlur === null || onBlur === void 0 ? void 0 : onBlur(event, editor);
264
+ onBlur === null || onBlur === void 0 || onBlur(event, editor);
265
265
  };
266
266
  useStickyToolbar({
267
267
  enabled: enableStickyToolbar,
@@ -1 +1 @@
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":"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"}
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":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"EditorError.js","names":["Banner","React","EditorError","_ref","children","createElement","variant","Content","Body"],"sources":["../../src/TextEditor/EditorError.tsx"],"sourcesContent":["import { Banner } from '@procore/core-react'\nimport React, { type PropsWithChildren } from 'react'\n\nexport const EditorError = ({ children }: PropsWithChildren<{}>) => {\n return (\n <Banner variant=\"error\">\n <Banner.Content>\n <Banner.Body>{children}</Banner.Body>\n </Banner.Content>\n </Banner>\n )\n}\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,OAAOC,KAAK,MAAkC,OAAO;AAErD,OAAO,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAAC,IAAA,EAA4C;EAAA,IAAtCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EACpC,oBACEH,KAAA,CAAAI,aAAA,CAACL,MAAM;IAACM,OAAO,EAAC;EAAO,gBACrBL,KAAA,CAAAI,aAAA,CAACL,MAAM,CAACO,OAAO,qBACbN,KAAA,CAAAI,aAAA,CAACL,MAAM,CAACQ,IAAI,QAAEJ,QAAsB,CACtB,CACV,CAAC;AAEb,CAAC"}
1
+ {"version":3,"file":"EditorError.js","names":["Banner","React","EditorError","_ref","children","createElement","variant","Content","Body"],"sources":["../../src/TextEditor/EditorError.tsx"],"sourcesContent":["import { Banner } from '@procore/core-react'\nimport React, { type PropsWithChildren } from 'react'\n\nexport const EditorError = ({ children }: PropsWithChildren<{}>) => {\n return (\n <Banner variant=\"error\">\n <Banner.Content>\n <Banner.Body>{children}</Banner.Body>\n </Banner.Content>\n </Banner>\n )\n}\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,OAAOC,KAAK,MAAkC,OAAO;AAErD,OAAO,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAAC,IAAA,EAA4C;EAAA,IAAtCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EACpC,oBACEH,KAAA,CAAAI,aAAA,CAACL,MAAM;IAACM,OAAO,EAAC;EAAO,gBACrBL,KAAA,CAAAI,aAAA,CAACL,MAAM,CAACO,OAAO,qBACbN,KAAA,CAAAI,aAAA,CAACL,MAAM,CAACQ,IAAI,QAAEJ,QAAsB,CACtB,CACV,CAAC;AAEb,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureFlagProvider.js","names":["getProcoreZone","getProviderParams","FeatureToggleProvider","React","useId","useMemo","useRef","LAUNCH_DARKLY_KEYS","development","staging","production","getEnvironment","_getProcoreZone","globalThis","location","hostname","environment","FeatureFlagProvider","_ref","children","_getProviderParams","companyId","projectId","idRef","context","user","email","current","createElement","apiKey"],"sources":["../../../src/TextEditor/Providers/FeatureFlagProvider.tsx"],"sourcesContent":["import { getProcoreZone, getProviderParams } from '@procore/web-sdk-env-utils'\nimport { FeatureToggleProvider } from '@procore/web-sdk-feature-toggle'\nimport type { ReactElement } from 'react'\nimport React, { useId, useMemo, useRef } from 'react'\n\nconst LAUNCH_DARKLY_KEYS: Record<string, string> = {\n development: '570f37b4eee8b907140070c5',\n staging: '570f2f6e348a2806d7006b6f',\n production: '570e9423348a2806d7004354',\n}\n\nconst getEnvironment = () =>\n getProcoreZone(globalThis.location.hostname)?.environment\n\nexport function FeatureFlagProvider({\n children,\n}: Readonly<{ children: ReactElement }>) {\n const { companyId, projectId } = getProviderParams()\n const environment = getEnvironment()\n const idRef = useRef(useId())\n\n const context = useMemo(\n () => ({ user: { email: idRef.current, projectId, companyId } }),\n [projectId, companyId]\n )\n\n return (\n <FeatureToggleProvider\n apiKey={LAUNCH_DARKLY_KEYS[environment]}\n context={context}\n >\n {children}\n </FeatureToggleProvider>\n )\n}\n"],"mappings":"AAAA,SAASA,cAAc,EAAEC,iBAAiB,QAAQ,4BAA4B;AAC9E,SAASC,qBAAqB,QAAQ,iCAAiC;AAEvE,OAAOC,KAAK,IAAIC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAErD,IAAMC,kBAA0C,GAAG;EACjDC,WAAW,EAAE,0BAA0B;EACvCC,OAAO,EAAE,0BAA0B;EACnCC,UAAU,EAAE;AACd,CAAC;AAED,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAA;EAAA,IAAAC,eAAA;EAAA,QAAAA,eAAA,GAClBZ,cAAc,CAACa,UAAU,CAACC,QAAQ,CAACC,QAAQ,CAAC,cAAAH,eAAA,uBAA5CA,eAAA,CAA8CI,WAAW;AAAA;AAE3D,OAAO,SAASC,mBAAmBA,CAAAC,IAAA,EAEM;EAAA,IADvCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAER,IAAAC,kBAAA,GAAiCnB,iBAAiB,CAAC,CAAC;IAA5CoB,SAAS,GAAAD,kBAAA,CAATC,SAAS;IAAEC,SAAS,GAAAF,kBAAA,CAATE,SAAS;EAC5B,IAAMN,WAAW,GAAGL,cAAc,CAAC,CAAC;EACpC,IAAMY,KAAK,GAAGjB,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC;EAE7B,IAAMoB,OAAO,GAAGnB,OAAO,CACrB;IAAA,OAAO;MAAEoB,IAAI,EAAE;QAAEC,KAAK,EAAEH,KAAK,CAACI,OAAO;QAAEL,SAAS,EAATA,SAAS;QAAED,SAAS,EAATA;MAAU;IAAE,CAAC;EAAA,CAAC,EAChE,CAACC,SAAS,EAAED,SAAS,CACvB,CAAC;EAED,oBACElB,KAAA,CAAAyB,aAAA,CAAC1B,qBAAqB;IACpB2B,MAAM,EAAEtB,kBAAkB,CAACS,WAAW,CAAE;IACxCQ,OAAO,EAAEA;EAAQ,GAEhBL,QACoB,CAAC;AAE5B"}
1
+ {"version":3,"file":"FeatureFlagProvider.js","names":["getProcoreZone","getProviderParams","FeatureToggleProvider","React","useId","useMemo","useRef","LAUNCH_DARKLY_KEYS","development","staging","production","getEnvironment","_getProcoreZone","globalThis","location","hostname","environment","FeatureFlagProvider","_ref","children","_getProviderParams","companyId","projectId","idRef","context","user","email","current","createElement","apiKey"],"sources":["../../../src/TextEditor/Providers/FeatureFlagProvider.tsx"],"sourcesContent":["import { getProcoreZone, getProviderParams } from '@procore/web-sdk-env-utils'\nimport { FeatureToggleProvider } from '@procore/web-sdk-feature-toggle'\nimport type { ReactElement } from 'react'\nimport React, { useId, useMemo, useRef } from 'react'\n\nconst LAUNCH_DARKLY_KEYS: Record<string, string> = {\n development: '570f37b4eee8b907140070c5',\n staging: '570f2f6e348a2806d7006b6f',\n production: '570e9423348a2806d7004354',\n}\n\nconst getEnvironment = () =>\n getProcoreZone(globalThis.location.hostname)?.environment\n\nexport function FeatureFlagProvider({\n children,\n}: Readonly<{ children: ReactElement }>) {\n const { companyId, projectId } = getProviderParams()\n const environment = getEnvironment()\n const idRef = useRef(useId())\n\n const context = useMemo(\n () => ({ user: { email: idRef.current, projectId, companyId } }),\n [projectId, companyId]\n )\n\n return (\n <FeatureToggleProvider\n apiKey={LAUNCH_DARKLY_KEYS[environment]}\n context={context}\n >\n {children}\n </FeatureToggleProvider>\n )\n}\n"],"mappings":"AAAA,SAASA,cAAc,EAAEC,iBAAiB,QAAQ,4BAA4B;AAC9E,SAASC,qBAAqB,QAAQ,iCAAiC;AAEvE,OAAOC,KAAK,IAAIC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAErD,IAAMC,kBAA0C,GAAG;EACjDC,WAAW,EAAE,0BAA0B;EACvCC,OAAO,EAAE,0BAA0B;EACnCC,UAAU,EAAE;AACd,CAAC;AAED,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAA;EAAA,IAAAC,eAAA;EAAA,QAAAA,eAAA,GAClBZ,cAAc,CAACa,UAAU,CAACC,QAAQ,CAACC,QAAQ,CAAC,cAAAH,eAAA,uBAA5CA,eAAA,CAA8CI,WAAW;AAAA;AAE3D,OAAO,SAASC,mBAAmBA,CAAAC,IAAA,EAEM;EAAA,IADvCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAER,IAAAC,kBAAA,GAAiCnB,iBAAiB,CAAC,CAAC;IAA5CoB,SAAS,GAAAD,kBAAA,CAATC,SAAS;IAAEC,SAAS,GAAAF,kBAAA,CAATE,SAAS;EAC5B,IAAMN,WAAW,GAAGL,cAAc,CAAC,CAAC;EACpC,IAAMY,KAAK,GAAGjB,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC;EAE7B,IAAMoB,OAAO,GAAGnB,OAAO,CACrB;IAAA,OAAO;MAAEoB,IAAI,EAAE;QAAEC,KAAK,EAAEH,KAAK,CAACI,OAAO;QAAEL,SAAS,EAATA,SAAS;QAAED,SAAS,EAATA;MAAU;IAAE,CAAC;EAAA,CAAC,EAChE,CAACC,SAAS,EAAED,SAAS,CACvB,CAAC;EAED,oBACElB,KAAA,CAAAyB,aAAA,CAAC1B,qBAAqB;IACpB2B,MAAM,EAAEtB,kBAAkB,CAACS,WAAW,CAAE;IACxCQ,OAAO,EAAEA;EAAQ,GAEhBL,QACoB,CAAC;AAE5B","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useStickyToolbar"],"sources":["../../../src/TextEditor/StickyToolbar/index.ts"],"sourcesContent":["export { useStickyToolbar } from './useStickyToolbar'\nexport type { UseStickyToolbarProps } from './useStickyToolbar.types'\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,oBAAoB"}
1
+ {"version":3,"file":"index.js","names":["useStickyToolbar"],"sources":["../../../src/TextEditor/StickyToolbar/index.ts"],"sourcesContent":["export { useStickyToolbar } from './useStickyToolbar'\nexport type { UseStickyToolbarProps } from './useStickyToolbar.types'\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,oBAAoB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useStickyToolbar.js","names":["useEffect","useRef","useStickyToolbar","_ref","enabled","editor","editorRef","cssLoading","originalLimiterElementRef","current","modal","closest","modalHeader","querySelector","resizeObserver","ResizeObserver","entries","_iterator","_createForOfIteratorHelper","_step","s","n","done","entry","value","_getComputedStyle","getComputedStyle","target","height","heightValue","parseInt","setAttribute","concat","err","e","f","observe","disconnect","ui","view","stickyPanel","limiterElement"],"sources":["../../../src/TextEditor/StickyToolbar/useStickyToolbar.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport type { UseStickyToolbarProps } from './useStickyToolbar.types'\n\nexport function useStickyToolbar({\n enabled,\n editor,\n editorRef,\n cssLoading,\n}: UseStickyToolbarProps) {\n const originalLimiterElementRef = useRef<HTMLElement | null>(null)\n\n useEffect(() => {\n if (!editorRef.current || !editor) {\n return\n }\n\n const modal = editorRef.current.closest('[data-id=\"modal\"]')\n if (!modal) {\n return\n }\n\n const modalHeader = modal.querySelector('[data-id=\"modal-header\"]')\n if (!modalHeader) {\n return\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { height } = getComputedStyle(entry.target)\n const heightValue = parseInt(height, 10) - 1\n modal.setAttribute('style', `--modal-header-height: ${heightValue}px`)\n }\n })\n\n resizeObserver.observe(modalHeader)\n return () => resizeObserver.disconnect()\n }, [editorRef, editor])\n\n useEffect(() => {\n if (!editorRef.current || cssLoading || !editor?.ui.view.stickyPanel) {\n return\n }\n\n const stickyPanel = editor.ui.view.stickyPanel\n\n if (!enabled) {\n originalLimiterElementRef.current = stickyPanel.limiterElement\n stickyPanel.limiterElement = null\n } else if (originalLimiterElementRef.current) {\n stickyPanel.limiterElement = originalLimiterElementRef.current\n originalLimiterElementRef.current = null\n }\n }, [enabled, editorRef, editor, cssLoading])\n}\n"],"mappings":";;;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAIzC,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAKN;EAAA,IAJxBC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IACPC,MAAM,GAAAF,IAAA,CAANE,MAAM;IACNC,SAAS,GAAAH,IAAA,CAATG,SAAS;IACTC,UAAU,GAAAJ,IAAA,CAAVI,UAAU;EAEV,IAAMC,yBAAyB,GAAGP,MAAM,CAAqB,IAAI,CAAC;EAElED,SAAS,CAAC,YAAM;IACd,IAAI,CAACM,SAAS,CAACG,OAAO,IAAI,CAACJ,MAAM,EAAE;MACjC;IACF;IAEA,IAAMK,KAAK,GAAGJ,SAAS,CAACG,OAAO,CAACE,OAAO,CAAC,mBAAmB,CAAC;IAC5D,IAAI,CAACD,KAAK,EAAE;MACV;IACF;IAEA,IAAME,WAAW,GAAGF,KAAK,CAACG,aAAa,CAAC,0BAA0B,CAAC;IACnE,IAAI,CAACD,WAAW,EAAE;MAChB;IACF;IAEA,IAAME,cAAc,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAK;MAAA,IAAAC,SAAA,GAAAC,0BAAA,CACjCF,OAAO;QAAAG,KAAA;MAAA;QAA3B,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA6B;UAAA,IAAlBC,KAAK,GAAAJ,KAAA,CAAAK,KAAA;UACd,IAAAC,iBAAA,GAAmBC,gBAAgB,CAACH,KAAK,CAACI,MAAM,CAAC;YAAzCC,MAAM,GAAAH,iBAAA,CAANG,MAAM;UACd,IAAMC,WAAW,GAAGC,QAAQ,CAACF,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC;UAC5ClB,KAAK,CAACqB,YAAY,CAAC,OAAO,4BAAAC,MAAA,CAA4BH,WAAW,OAAI,CAAC;QACxE;MAAC,SAAAI,GAAA;QAAAhB,SAAA,CAAAiB,CAAA,CAAAD,GAAA;MAAA;QAAAhB,SAAA,CAAAkB,CAAA;MAAA;IACH,CAAC,CAAC;IAEFrB,cAAc,CAACsB,OAAO,CAACxB,WAAW,CAAC;IACnC,OAAO;MAAA,OAAME,cAAc,CAACuB,UAAU,CAAC,CAAC;IAAA;EAC1C,CAAC,EAAE,CAAC/B,SAAS,EAAED,MAAM,CAAC,CAAC;EAEvBL,SAAS,CAAC,YAAM;IACd,IAAI,CAACM,SAAS,CAACG,OAAO,IAAIF,UAAU,IAAI,EAACF,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEiC,EAAE,CAACC,IAAI,CAACC,WAAW,GAAE;MACpE;IACF;IAEA,IAAMA,WAAW,GAAGnC,MAAM,CAACiC,EAAE,CAACC,IAAI,CAACC,WAAW;IAE9C,IAAI,CAACpC,OAAO,EAAE;MACZI,yBAAyB,CAACC,OAAO,GAAG+B,WAAW,CAACC,cAAc;MAC9DD,WAAW,CAACC,cAAc,GAAG,IAAI;IACnC,CAAC,MAAM,IAAIjC,yBAAyB,CAACC,OAAO,EAAE;MAC5C+B,WAAW,CAACC,cAAc,GAAGjC,yBAAyB,CAACC,OAAO;MAC9DD,yBAAyB,CAACC,OAAO,GAAG,IAAI;IAC1C;EACF,CAAC,EAAE,CAACL,OAAO,EAAEE,SAAS,EAAED,MAAM,EAAEE,UAAU,CAAC,CAAC;AAC9C"}
1
+ {"version":3,"file":"useStickyToolbar.js","names":["useEffect","useRef","useStickyToolbar","_ref","enabled","editor","editorRef","cssLoading","originalLimiterElementRef","current","modal","closest","modalHeader","querySelector","resizeObserver","ResizeObserver","entries","_iterator","_createForOfIteratorHelper","_step","s","n","done","entry","value","_getComputedStyle","getComputedStyle","target","height","heightValue","parseInt","setAttribute","concat","err","e","f","observe","disconnect","ui","view","stickyPanel","limiterElement"],"sources":["../../../src/TextEditor/StickyToolbar/useStickyToolbar.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport type { UseStickyToolbarProps } from './useStickyToolbar.types'\n\nexport function useStickyToolbar({\n enabled,\n editor,\n editorRef,\n cssLoading,\n}: UseStickyToolbarProps) {\n const originalLimiterElementRef = useRef<HTMLElement | null>(null)\n\n useEffect(() => {\n if (!editorRef.current || !editor) {\n return\n }\n\n const modal = editorRef.current.closest('[data-id=\"modal\"]')\n if (!modal) {\n return\n }\n\n const modalHeader = modal.querySelector('[data-id=\"modal-header\"]')\n if (!modalHeader) {\n return\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { height } = getComputedStyle(entry.target)\n const heightValue = parseInt(height, 10) - 1\n modal.setAttribute('style', `--modal-header-height: ${heightValue}px`)\n }\n })\n\n resizeObserver.observe(modalHeader)\n return () => resizeObserver.disconnect()\n }, [editorRef, editor])\n\n useEffect(() => {\n if (!editorRef.current || cssLoading || !editor?.ui.view.stickyPanel) {\n return\n }\n\n const stickyPanel = editor.ui.view.stickyPanel\n\n if (!enabled) {\n originalLimiterElementRef.current = stickyPanel.limiterElement\n stickyPanel.limiterElement = null\n } else if (originalLimiterElementRef.current) {\n stickyPanel.limiterElement = originalLimiterElementRef.current\n originalLimiterElementRef.current = null\n }\n }, [enabled, editorRef, editor, cssLoading])\n}\n"],"mappings":";;;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAIzC,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAKN;EAAA,IAJxBC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IACPC,MAAM,GAAAF,IAAA,CAANE,MAAM;IACNC,SAAS,GAAAH,IAAA,CAATG,SAAS;IACTC,UAAU,GAAAJ,IAAA,CAAVI,UAAU;EAEV,IAAMC,yBAAyB,GAAGP,MAAM,CAAqB,IAAI,CAAC;EAElED,SAAS,CAAC,YAAM;IACd,IAAI,CAACM,SAAS,CAACG,OAAO,IAAI,CAACJ,MAAM,EAAE;MACjC;IACF;IAEA,IAAMK,KAAK,GAAGJ,SAAS,CAACG,OAAO,CAACE,OAAO,CAAC,mBAAmB,CAAC;IAC5D,IAAI,CAACD,KAAK,EAAE;MACV;IACF;IAEA,IAAME,WAAW,GAAGF,KAAK,CAACG,aAAa,CAAC,0BAA0B,CAAC;IACnE,IAAI,CAACD,WAAW,EAAE;MAChB;IACF;IAEA,IAAME,cAAc,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAK;MAAA,IAAAC,SAAA,GAAAC,0BAAA,CACjCF,OAAO;QAAAG,KAAA;MAAA;QAA3B,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA6B;UAAA,IAAlBC,KAAK,GAAAJ,KAAA,CAAAK,KAAA;UACd,IAAAC,iBAAA,GAAmBC,gBAAgB,CAACH,KAAK,CAACI,MAAM,CAAC;YAAzCC,MAAM,GAAAH,iBAAA,CAANG,MAAM;UACd,IAAMC,WAAW,GAAGC,QAAQ,CAACF,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC;UAC5ClB,KAAK,CAACqB,YAAY,CAAC,OAAO,4BAAAC,MAAA,CAA4BH,WAAW,OAAI,CAAC;QACxE;MAAC,SAAAI,GAAA;QAAAhB,SAAA,CAAAiB,CAAA,CAAAD,GAAA;MAAA;QAAAhB,SAAA,CAAAkB,CAAA;MAAA;IACH,CAAC,CAAC;IAEFrB,cAAc,CAACsB,OAAO,CAACxB,WAAW,CAAC;IACnC,OAAO;MAAA,OAAME,cAAc,CAACuB,UAAU,CAAC,CAAC;IAAA;EAC1C,CAAC,EAAE,CAAC/B,SAAS,EAAED,MAAM,CAAC,CAAC;EAEvBL,SAAS,CAAC,YAAM;IACd,IAAI,CAACM,SAAS,CAACG,OAAO,IAAIF,UAAU,IAAI,EAACF,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEiC,EAAE,CAACC,IAAI,CAACC,WAAW,GAAE;MACpE;IACF;IAEA,IAAMA,WAAW,GAAGnC,MAAM,CAACiC,EAAE,CAACC,IAAI,CAACC,WAAW;IAE9C,IAAI,CAACpC,OAAO,EAAE;MACZI,yBAAyB,CAACC,OAAO,GAAG+B,WAAW,CAACC,cAAc;MAC9DD,WAAW,CAACC,cAAc,GAAG,IAAI;IACnC,CAAC,MAAM,IAAIjC,yBAAyB,CAACC,OAAO,EAAE;MAC5C+B,WAAW,CAACC,cAAc,GAAGjC,yBAAyB,CAACC,OAAO;MAC9DD,yBAAyB,CAACC,OAAO,GAAG,IAAI;IAC1C;EACF,CAAC,EAAE,CAACL,OAAO,EAAEE,SAAS,EAAED,MAAM,EAAEE,UAAU,CAAC,CAAC;AAC9C","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useStickyToolbar.types.js","names":[],"sources":["../../../src/TextEditor/StickyToolbar/useStickyToolbar.types.ts"],"sourcesContent":["import type { ClassicEditor } from 'ckeditor5'\nimport type { RefObject } from 'react'\n\nexport interface UseStickyToolbarProps {\n enabled: boolean\n editorRef: RefObject<HTMLDivElement>\n editor?: ClassicEditor | null\n cssLoading?: boolean\n}\n"],"mappings":""}
1
+ {"version":3,"file":"useStickyToolbar.types.js","names":[],"sources":["../../../src/TextEditor/StickyToolbar/useStickyToolbar.types.ts"],"sourcesContent":["import type { ClassicEditor } from 'ckeditor5'\nimport type { RefObject } from 'react'\n\nexport interface UseStickyToolbarProps {\n enabled: boolean\n editorRef: RefObject<HTMLDivElement>\n editor?: ClassicEditor | null\n cssLoading?: boolean\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.js","names":["ToastAlertProvider","useFeatureFlag","React","CKTextEditor","FeatureFlagProvider","TextEditorI18nProvider","TinyMCETextEditor","FLAG_NAME","TextEditor","props","createElement","TextEditorInner","enforceCKEditor","editorProps","_objectWithoutProperties","_excluded","flagValue","isCKEditorEnabled"],"sources":["../../src/TextEditor/TextEditor.tsx"],"sourcesContent":["import { ToastAlertProvider } from '@procore/toast-alert'\nimport { useFeatureFlag } from '@procore/web-sdk-feature-toggle'\nimport React from 'react'\n\nimport { CKTextEditor } from './CKTextEditor'\nimport { FeatureFlagProvider } from './Providers/FeatureFlagProvider'\nimport type { TextEditorProps } from './TextEditor.types'\nimport { TextEditorI18nProvider } from './TextEditorI18nProvider'\nimport { TinyMCETextEditor } from './TinyMCETextEditor'\n\nconst FLAG_NAME = 'pmqs-ck-editor-enabled'\n\n/**\n * To ensure your Jest tests work with the CKEditor implementation, wrap your Jest configuration with `textEditorJestConfig`:\n *\n * @example\n *\n * // Using Jest config file\n *\n * const { textEditorJestConfig } = require('@procore/text-editor/jestConfig')\n *\n * module.exports = textEditorJestConfig({\n * // Your existing Jest config\n * })\n *\n * @example\n *\n * // Using Hammer\n *\n * import { textEditorJestConfig } from '@procore/text-editor/jestConfig'\n *\n * export default {\n * testJest: (defaultConfig) =>\n * textEditorJestConfig({\n * ...defaultConfig,\n * // Your existing Jest config\n * }),\n * }\n *\n * @example\n *\n * // Using Core Scripts\n *\n * const { textEditorJestConfig } = require('@procore/text-editor/jestConfig')\n *\n * module.exports = () => ({\n * jestOverride: (defaultConfig) =>\n * textEditorJestConfig({\n * ...defaultConfig,\n * // Your existing Jest config\n * }),\n * })\n */\nexport function TextEditor(props: Readonly<TextEditorProps>) {\n return (\n <TextEditorI18nProvider>\n <ToastAlertProvider>\n <FeatureFlagProvider>\n <TextEditorInner {...props} />\n </FeatureFlagProvider>\n </ToastAlertProvider>\n </TextEditorI18nProvider>\n )\n}\n\nfunction TextEditorInner(props: Readonly<TextEditorProps>) {\n const { enforceCKEditor, ...editorProps } = props\n const flagValue = useFeatureFlag<boolean>(FLAG_NAME, false)\n const isCKEditorEnabled = enforceCKEditor ?? flagValue\n\n return isCKEditorEnabled ? (\n <CKTextEditor {...editorProps} />\n ) : (\n <TinyMCETextEditor {...editorProps} />\n )\n}\n"],"mappings":";;;AAAA,SAASA,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,cAAc,QAAQ,iCAAiC;AAChE,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,mBAAmB,QAAQ,iCAAiC;AAErE,SAASC,sBAAsB,QAAQ,0BAA0B;AACjE,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,IAAMC,SAAS,GAAG,wBAAwB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,KAAgC,EAAE;EAC3D,oBACEP,KAAA,CAAAQ,aAAA,CAACL,sBAAsB,qBACrBH,KAAA,CAAAQ,aAAA,CAACV,kBAAkB,qBACjBE,KAAA,CAAAQ,aAAA,CAACN,mBAAmB,qBAClBF,KAAA,CAAAQ,aAAA,CAACC,eAAe,EAAKF,KAAQ,CACV,CACH,CACE,CAAC;AAE7B;AAEA,SAASE,eAAeA,CAACF,KAAgC,EAAE;EACzD,IAAQG,eAAe,GAAqBH,KAAK,CAAzCG,eAAe;IAAKC,WAAW,GAAAC,wBAAA,CAAKL,KAAK,EAAAM,SAAA;EACjD,IAAMC,SAAS,GAAGf,cAAc,CAAUM,SAAS,EAAE,KAAK,CAAC;EAC3D,IAAMU,iBAAiB,GAAGL,eAAe,aAAfA,eAAe,cAAfA,eAAe,GAAII,SAAS;EAEtD,OAAOC,iBAAiB,gBACtBf,KAAA,CAAAQ,aAAA,CAACP,YAAY,EAAKU,WAAc,CAAC,gBAEjCX,KAAA,CAAAQ,aAAA,CAACJ,iBAAiB,EAAKO,WAAc,CACtC;AACH"}
1
+ {"version":3,"file":"TextEditor.js","names":["ToastAlertProvider","useFeatureFlag","React","CKTextEditor","FeatureFlagProvider","TextEditorI18nProvider","TinyMCETextEditor","FLAG_NAME","TextEditor","props","createElement","TextEditorInner","enforceCKEditor","editorProps","_objectWithoutProperties","_excluded","flagValue","isCKEditorEnabled"],"sources":["../../src/TextEditor/TextEditor.tsx"],"sourcesContent":["import { ToastAlertProvider } from '@procore/toast-alert'\nimport { useFeatureFlag } from '@procore/web-sdk-feature-toggle'\nimport React from 'react'\n\nimport { CKTextEditor } from './CKTextEditor'\nimport { FeatureFlagProvider } from './Providers/FeatureFlagProvider'\nimport type { TextEditorProps } from './TextEditor.types'\nimport { TextEditorI18nProvider } from './TextEditorI18nProvider'\nimport { TinyMCETextEditor } from './TinyMCETextEditor'\n\nconst FLAG_NAME = 'pmqs-ck-editor-enabled'\n\n/**\n * To ensure your Jest tests work with the CKEditor implementation, wrap your Jest configuration with `textEditorJestConfig`:\n *\n * @example\n *\n * // Using Jest config file\n *\n * const { textEditorJestConfig } = require('@procore/text-editor/jestConfig')\n *\n * module.exports = textEditorJestConfig({\n * // Your existing Jest config\n * })\n *\n * @example\n *\n * // Using Hammer\n *\n * import { textEditorJestConfig } from '@procore/text-editor/jestConfig'\n *\n * export default {\n * testJest: (defaultConfig) =>\n * textEditorJestConfig({\n * ...defaultConfig,\n * // Your existing Jest config\n * }),\n * }\n *\n * @example\n *\n * // Using Core Scripts\n *\n * const { textEditorJestConfig } = require('@procore/text-editor/jestConfig')\n *\n * module.exports = () => ({\n * jestOverride: (defaultConfig) =>\n * textEditorJestConfig({\n * ...defaultConfig,\n * // Your existing Jest config\n * }),\n * })\n */\nexport function TextEditor(props: Readonly<TextEditorProps>) {\n return (\n <TextEditorI18nProvider>\n <ToastAlertProvider>\n <FeatureFlagProvider>\n <TextEditorInner {...props} />\n </FeatureFlagProvider>\n </ToastAlertProvider>\n </TextEditorI18nProvider>\n )\n}\n\nfunction TextEditorInner(props: Readonly<TextEditorProps>) {\n const { enforceCKEditor, ...editorProps } = props\n const flagValue = useFeatureFlag<boolean>(FLAG_NAME, false)\n const isCKEditorEnabled = enforceCKEditor ?? flagValue\n\n return isCKEditorEnabled ? (\n <CKTextEditor {...editorProps} />\n ) : (\n <TinyMCETextEditor {...editorProps} />\n )\n}\n"],"mappings":";;;AAAA,SAASA,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,cAAc,QAAQ,iCAAiC;AAChE,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,mBAAmB,QAAQ,iCAAiC;AAErE,SAASC,sBAAsB,QAAQ,0BAA0B;AACjE,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,IAAMC,SAAS,GAAG,wBAAwB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,KAAgC,EAAE;EAC3D,oBACEP,KAAA,CAAAQ,aAAA,CAACL,sBAAsB,qBACrBH,KAAA,CAAAQ,aAAA,CAACV,kBAAkB,qBACjBE,KAAA,CAAAQ,aAAA,CAACN,mBAAmB,qBAClBF,KAAA,CAAAQ,aAAA,CAACC,eAAe,EAAKF,KAAQ,CACV,CACH,CACE,CAAC;AAE7B;AAEA,SAASE,eAAeA,CAACF,KAAgC,EAAE;EACzD,IAAQG,eAAe,GAAqBH,KAAK,CAAzCG,eAAe;IAAKC,WAAW,GAAAC,wBAAA,CAAKL,KAAK,EAAAM,SAAA;EACjD,IAAMC,SAAS,GAAGf,cAAc,CAAUM,SAAS,EAAE,KAAK,CAAC;EAC3D,IAAMU,iBAAiB,GAAGL,eAAe,aAAfA,eAAe,cAAfA,eAAe,GAAII,SAAS;EAEtD,OAAOC,iBAAiB,gBACtBf,KAAA,CAAAQ,aAAA,CAACP,YAAY,EAAKU,WAAc,CAAC,gBAEjCX,KAAA,CAAAQ,aAAA,CAACJ,iBAAiB,EAAKO,WAAc,CACtC;AACH","ignoreList":[]}
@@ -1,21 +1,20 @@
1
- /// <reference types="react" />
2
1
  export declare const GlobalEditorStyles: import("react").NamedExoticComponent<import("styled-components").ExecutionProps & {
3
2
  zIndex: number;
4
3
  }>;
5
4
  export declare const StyledTextEditor: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
6
- error?: boolean | undefined;
7
- $ready?: boolean | undefined;
5
+ error?: boolean;
6
+ $ready?: boolean;
8
7
  }>> & string;
9
8
  export declare const StyledImageUploadWarningToast: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("react").HTMLAttributes<HTMLDivElement> & import("@procore/core-react").FlexProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
10
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
9
+ ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
11
10
  }, never>> & string & Omit<import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & import("@procore/core-react").FlexProps & import("react").RefAttributes<HTMLDivElement>>, keyof import("react").Component<any, {}, any>>;
12
11
  export declare const StyledImageUploadWarningToastIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<{
13
- size?: import("@procore/core-icons/dist/Icon").IconSize | undefined;
12
+ size?: import("@procore/core-icons/dist/Icon").IconSize;
14
13
  } & import("react").SVGAttributes<SVGElement> & import("react").RefAttributes<SVGSVGElement>, "ref"> & {
15
- ref?: ((instance: SVGSVGElement | null) => void) | import("react").RefObject<SVGSVGElement> | null | undefined;
14
+ ref?: ((instance: SVGSVGElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<SVGSVGElement> | null | undefined;
16
15
  }, never>> & string & Omit<import("react").ForwardRefExoticComponent<{
17
- size?: import("@procore/core-icons/dist/Icon").IconSize | undefined;
16
+ size?: import("@procore/core-icons/dist/Icon").IconSize;
18
17
  } & import("react").SVGAttributes<SVGElement> & import("react").RefAttributes<SVGSVGElement>>, keyof import("react").Component<any, {}, any>>;
19
18
  export declare const StyledReadOnlyValue: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("react").HTMLAttributes<HTMLSpanElement> & import("@procore/core-react").TypographyProps & import("react").RefAttributes<HTMLSpanElement>, "ref"> & {
20
- ref?: ((instance: HTMLSpanElement | null) => void) | import("react").RefObject<HTMLSpanElement> | null | undefined;
19
+ ref?: ((instance: HTMLSpanElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLSpanElement> | null | undefined;
21
20
  }, never>> & string & Omit<import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLSpanElement> & import("@procore/core-react").TypographyProps & import("react").RefAttributes<HTMLSpanElement>>, keyof import("react").Component<any, {}, any>>;
@@ -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-1_0_1__sc-iim79x-0"
34
+ componentId: "text-editor-1_1_0__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-1_0_1__sc-iim79x-1"
44
+ componentId: "text-editor-1_1_0__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-1_0_1__sc-iim79x-2"
48
+ componentId: "text-editor-1_1_0__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-1_0_1__sc-iim79x-3"
52
+ componentId: "text-editor-1_1_0__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 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
+ {"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","ignoreList":[]}
@@ -201,6 +201,6 @@ export interface TextEditorProps extends TextEditorImageUploadOptions {
201
201
  */
202
202
  enforceCKEditor?: true;
203
203
  }
204
- export declare type KeyDownListener = (event: EventInfo, data: {
204
+ export type KeyDownListener = (event: EventInfo, data: {
205
205
  domEvent: Event;
206
206
  }) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.types.js","names":[],"sources":["../../src/TextEditor/TextEditor.types.ts"],"sourcesContent":["import type { I18njs } from '@procore/core-i18n-js'\nimport type { TextEditorProps as CoreTextEditorProps } from '@procore/core-react'\nimport type { Locale } from '@procore/globalization-toolkit'\nimport type { ClassicEditor, EventInfo } from 'ckeditor5'\n\nexport interface TextEditorImageUploadResult {\n urls: {\n default: string\n }\n /**\n * Durable ProstoreFile id. The text editor embeds this ID in saved markup to\n * mark the image as a first-party upload (backend email/PDF sanitizers rely on\n * it). The persisted URL is a permanent, publicly fetchable Prostore URL, so\n * it renders as-is in the app, emails, and exports.\n *\n * @since 0.6.0\n */\n prostoreFileId: number | string\n width?: number\n height?: number\n}\n\nexport interface TextEditorImageUploadHandlers {\n /**\n * Uploads the selected image and returns durable backend-approved image URLs.\n *\n * @since 0.4.2\n */\n upload: (\n file: File,\n context: { signal: AbortSignal },\n callbacks: { onProgress?: (uploaded: number, total?: number) => void }\n ) => Promise<TextEditorImageUploadResult>\n i18n: Pick<I18njs, 't'>\n onError?: (message: string) => void\n onWarning?: (message: string) => void\n}\n\nexport interface TextEditorImageUploadOptions {\n /**\n * Required to enable image uploads. When omitted, the editor renders without\n * the Procore image-upload plugin.\n *\n * @since 0.5.0\n */\n companyId?: number | string\n projectId?: number | string\n /**\n * Identifier of the tool hosting the editor (e.g. `rfis`, `submittal_log`).\n * Required to enable image uploads: it is sent with each upload for\n * attribution/audit and is validated by the backend against known tools.\n * When omitted, the editor renders without the Procore image-upload plugin.\n *\n * @since 0.7.0\n */\n toolName?: string\n}\n\nexport interface TextEditorProps extends TextEditorImageUploadOptions {\n /**\n * Unique identifier for the editor\n *\n * @since 0.0.1\n */\n id?: string\n\n /**\n * Initial value of the editor\n *\n * @deprecated `initialValue` has been deprecated and will be removed in a future version.\n * Please use the `value` prop instead\n * @deprecatedSince 0.0.1\n * @since 0.0.1\n */\n initialValue?: string\n\n /**\n * The current value of the editor\n *\n * @since 0.0.1\n */\n value?: string\n\n /**\n * Indicates if the editor is disabled\n *\n * @since 0.0.1\n */\n disabled?: boolean\n\n /**\n * Indicates if the editor is in an error state\n *\n * @since 0.0.1\n */\n error?: boolean\n\n /**\n * Indicates if the editor is in readonly mode.\n * When true, renders the content using TextEditorOutput instead of the editable editor.\n *\n * @since 0.2.0\n */\n readonly?: boolean\n\n /**\n * Accessible label for the editor's editable area. This text will be\n * announced by screen readers when the user focuses the editor. It should\n * match or include the visible label associated with this editor field.\n * If not provided, screen readers will announce a generic \"Rich Text Editor\" message.\n *\n * @since 0.1.0\n */\n 'aria-label'?: string\n\n /**\n * Accessible description for the editor's editable area.\n * This text provides additional context to screen reader users. It will be\n * announced after the label when the user focuses the editor.\n *\n * @since 0.1.0\n */\n 'aria-description'?: string\n\n /**\n * Locale which will be used for localization. Can be passed directly or\n * set by wrapping components in I18n provider.\n * @since 0.0.1\n */\n locale?: Locale\n\n /**\n * Callback fired when the editor content changes\n *\n * @param value - The current content of the editor\n * @param isDirty - Whether the content differs from the initial value\n * @since 0.0.1\n */\n onChange?: (value: string, isDirty?: boolean) => void\n\n /**\n * Callback fired when the editor gains focus\n *\n * @since 0.0.1\n */\n onFocus?: (event: EventInfo, editor: ClassicEditor) => void\n\n /**\n * Callback fired when the editor loses focus\n *\n * @since 0.0.1\n */\n onBlur?: (event: EventInfo, editor: ClassicEditor) => void\n\n /**\n * Callback fired when an error occurs in the editor\n *\n * @since 0.0.1\n */\n onError?: (\n error: Error,\n details: {\n phase: 'initialization' | 'runtime'\n willEditorRestart?: boolean\n }\n ) => void\n\n /**\n * Callback fired when the editor is ready\n *\n * @since 0.0.1\n */\n onInit?: (editor: ClassicEditor) => void\n\n /**\n * Callback fired after the editor instance is destroyed\n *\n * @since 0.0.1\n */\n onAfterDestroy?: () => void\n\n /**\n * Callback fired when the editor becomes dirty (content differs from initial value)\n *\n * @since 0.0.1\n */\n onDirty?: () => void\n\n /**\n * Callback fired when a key is pressed in the editor\n *\n * @param event - The keyboard event\n * @param editor - The CKEditor instance\n * @since 0.0.1\n */\n onKeyDown?: (event: KeyboardEvent, editor: ClassicEditor) => void\n\n /**\n * Placeholder text shown when the editor is empty\n *\n * @since 1.0.0\n */\n placeholder?: string\n\n /**\n * TinyMCE init configuration. Merged with internal defaults; use this to\n * pass custom content_style, paste hooks, or other TinyMCE-specific options.\n * Has no effect when CKEditor is active.\n *\n * @since 1.0.0\n */\n init?: CoreTextEditorProps['init']\n\n /**\n * Number of rows to control the editor height. When set, the editor height\n * is fixed. When omitted, the editor grows with content.\n *\n * @since 1.0.0\n */\n rows?: number\n\n /**\n * Opt in to CKEditor immediately, bypassing the gradual feature flag rollout.\n * Use this only when you explicitly want to ignore the rollout schedule.\n * When enabled, the LaunchDarkly flag is bypassed and CKEditor is rendered directly.\n *\n * @since 1.0.0\n */\n enforceCKEditor?: true\n}\n\nexport type KeyDownListener = (\n event: EventInfo,\n data: { domEvent: Event }\n) => void\n"],"mappings":""}
1
+ {"version":3,"file":"TextEditor.types.js","names":[],"sources":["../../src/TextEditor/TextEditor.types.ts"],"sourcesContent":["import type { I18njs } from '@procore/core-i18n-js'\nimport type { TextEditorProps as CoreTextEditorProps } from '@procore/core-react'\nimport type { Locale } from '@procore/globalization-toolkit'\nimport type { ClassicEditor, EventInfo } from 'ckeditor5'\n\nexport interface TextEditorImageUploadResult {\n urls: {\n default: string\n }\n /**\n * Durable ProstoreFile id. The text editor embeds this ID in saved markup to\n * mark the image as a first-party upload (backend email/PDF sanitizers rely on\n * it). The persisted URL is a permanent, publicly fetchable Prostore URL, so\n * it renders as-is in the app, emails, and exports.\n *\n * @since 0.6.0\n */\n prostoreFileId: number | string\n width?: number\n height?: number\n}\n\nexport interface TextEditorImageUploadHandlers {\n /**\n * Uploads the selected image and returns durable backend-approved image URLs.\n *\n * @since 0.4.2\n */\n upload: (\n file: File,\n context: { signal: AbortSignal },\n callbacks: { onProgress?: (uploaded: number, total?: number) => void }\n ) => Promise<TextEditorImageUploadResult>\n i18n: Pick<I18njs, 't'>\n onError?: (message: string) => void\n onWarning?: (message: string) => void\n}\n\nexport interface TextEditorImageUploadOptions {\n /**\n * Required to enable image uploads. When omitted, the editor renders without\n * the Procore image-upload plugin.\n *\n * @since 0.5.0\n */\n companyId?: number | string\n projectId?: number | string\n /**\n * Identifier of the tool hosting the editor (e.g. `rfis`, `submittal_log`).\n * Required to enable image uploads: it is sent with each upload for\n * attribution/audit and is validated by the backend against known tools.\n * When omitted, the editor renders without the Procore image-upload plugin.\n *\n * @since 0.7.0\n */\n toolName?: string\n}\n\nexport interface TextEditorProps extends TextEditorImageUploadOptions {\n /**\n * Unique identifier for the editor\n *\n * @since 0.0.1\n */\n id?: string\n\n /**\n * Initial value of the editor\n *\n * @deprecated `initialValue` has been deprecated and will be removed in a future version.\n * Please use the `value` prop instead\n * @deprecatedSince 0.0.1\n * @since 0.0.1\n */\n initialValue?: string\n\n /**\n * The current value of the editor\n *\n * @since 0.0.1\n */\n value?: string\n\n /**\n * Indicates if the editor is disabled\n *\n * @since 0.0.1\n */\n disabled?: boolean\n\n /**\n * Indicates if the editor is in an error state\n *\n * @since 0.0.1\n */\n error?: boolean\n\n /**\n * Indicates if the editor is in readonly mode.\n * When true, renders the content using TextEditorOutput instead of the editable editor.\n *\n * @since 0.2.0\n */\n readonly?: boolean\n\n /**\n * Accessible label for the editor's editable area. This text will be\n * announced by screen readers when the user focuses the editor. It should\n * match or include the visible label associated with this editor field.\n * If not provided, screen readers will announce a generic \"Rich Text Editor\" message.\n *\n * @since 0.1.0\n */\n 'aria-label'?: string\n\n /**\n * Accessible description for the editor's editable area.\n * This text provides additional context to screen reader users. It will be\n * announced after the label when the user focuses the editor.\n *\n * @since 0.1.0\n */\n 'aria-description'?: string\n\n /**\n * Locale which will be used for localization. Can be passed directly or\n * set by wrapping components in I18n provider.\n * @since 0.0.1\n */\n locale?: Locale\n\n /**\n * Callback fired when the editor content changes\n *\n * @param value - The current content of the editor\n * @param isDirty - Whether the content differs from the initial value\n * @since 0.0.1\n */\n onChange?: (value: string, isDirty?: boolean) => void\n\n /**\n * Callback fired when the editor gains focus\n *\n * @since 0.0.1\n */\n onFocus?: (event: EventInfo, editor: ClassicEditor) => void\n\n /**\n * Callback fired when the editor loses focus\n *\n * @since 0.0.1\n */\n onBlur?: (event: EventInfo, editor: ClassicEditor) => void\n\n /**\n * Callback fired when an error occurs in the editor\n *\n * @since 0.0.1\n */\n onError?: (\n error: Error,\n details: {\n phase: 'initialization' | 'runtime'\n willEditorRestart?: boolean\n }\n ) => void\n\n /**\n * Callback fired when the editor is ready\n *\n * @since 0.0.1\n */\n onInit?: (editor: ClassicEditor) => void\n\n /**\n * Callback fired after the editor instance is destroyed\n *\n * @since 0.0.1\n */\n onAfterDestroy?: () => void\n\n /**\n * Callback fired when the editor becomes dirty (content differs from initial value)\n *\n * @since 0.0.1\n */\n onDirty?: () => void\n\n /**\n * Callback fired when a key is pressed in the editor\n *\n * @param event - The keyboard event\n * @param editor - The CKEditor instance\n * @since 0.0.1\n */\n onKeyDown?: (event: KeyboardEvent, editor: ClassicEditor) => void\n\n /**\n * Placeholder text shown when the editor is empty\n *\n * @since 1.0.0\n */\n placeholder?: string\n\n /**\n * TinyMCE init configuration. Merged with internal defaults; use this to\n * pass custom content_style, paste hooks, or other TinyMCE-specific options.\n * Has no effect when CKEditor is active.\n *\n * @since 1.0.0\n */\n init?: CoreTextEditorProps['init']\n\n /**\n * Number of rows to control the editor height. When set, the editor height\n * is fixed. When omitted, the editor grows with content.\n *\n * @since 1.0.0\n */\n rows?: number\n\n /**\n * Opt in to CKEditor immediately, bypassing the gradual feature flag rollout.\n * Use this only when you explicitly want to ignore the rollout schedule.\n * When enabled, the LaunchDarkly flag is bypassed and CKEditor is rendered directly.\n *\n * @since 1.0.0\n */\n enforceCKEditor?: true\n}\n\nexport type KeyDownListener = (\n event: EventInfo,\n data: { domEvent: Event }\n) => void\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditorI18nProvider.js","names":["useRequestTranslations","I18nProvider","useI18nContext","React","en","pseudo","TextEditorI18nProvider","_ref","children","clientI18n","cdnTranslations","locale","type","absolute_file_path","concat","oldTranslations","enableCDN","createElement","translations"],"sources":["../../src/TextEditor/TextEditorI18nProvider.tsx"],"sourcesContent":["import { useRequestTranslations } from '@procore/cdn-translations'\nimport { I18nProvider, useI18nContext } from '@procore/core-react'\nimport React from 'react'\n\nimport en from '../locales/en.json'\nimport pseudo from '../locales/pseudo.json'\n\nexport function TextEditorI18nProvider({\n children,\n}: Readonly<React.PropsWithChildren>) {\n const clientI18n = useI18nContext()\n\n const cdnTranslations = useRequestTranslations(\n {\n locale: clientI18n.locale,\n type: 'file',\n absolute_file_path: (locale) =>\n `core/packages/text-editor/src/locales/${locale}.json`,\n },\n {\n en,\n pseudo,\n },\n {\n oldTranslations: {},\n enableCDN: true,\n }\n )\n\n return (\n <I18nProvider\n locale={clientI18n.locale}\n translations={cdnTranslations.translations}\n >\n {children}\n </I18nProvider>\n )\n}\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,2BAA2B;AAClE,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,OAAOC,KAAK,MAAM,OAAO;AAEzB,OAAOC,EAAE,MAAM,oBAAoB;AACnC,OAAOC,MAAM,MAAM,wBAAwB;AAE3C,OAAO,SAASC,sBAAsBA,CAAAC,IAAA,EAEA;EAAA,IADpCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAER,IAAMC,UAAU,GAAGP,cAAc,CAAC,CAAC;EAEnC,IAAMQ,eAAe,GAAGV,sBAAsB,CAC5C;IACEW,MAAM,EAAEF,UAAU,CAACE,MAAM;IACzBC,IAAI,EAAE,MAAM;IACZC,kBAAkB,EAAE,SAApBA,kBAAkBA,CAAGF,MAAM;MAAA,gDAAAG,MAAA,CACgBH,MAAM;IAAA;EACnD,CAAC,EACD;IACEP,EAAE,EAAFA,EAAE;IACFC,MAAM,EAANA;EACF,CAAC,EACD;IACEU,eAAe,EAAE,CAAC,CAAC;IACnBC,SAAS,EAAE;EACb,CACF,CAAC;EAED,oBACEb,KAAA,CAAAc,aAAA,CAAChB,YAAY;IACXU,MAAM,EAAEF,UAAU,CAACE,MAAO;IAC1BO,YAAY,EAAER,eAAe,CAACQ;EAAa,GAE1CV,QACW,CAAC;AAEnB"}
1
+ {"version":3,"file":"TextEditorI18nProvider.js","names":["useRequestTranslations","I18nProvider","useI18nContext","React","en","pseudo","TextEditorI18nProvider","_ref","children","clientI18n","cdnTranslations","locale","type","absolute_file_path","concat","oldTranslations","enableCDN","createElement","translations"],"sources":["../../src/TextEditor/TextEditorI18nProvider.tsx"],"sourcesContent":["import { useRequestTranslations } from '@procore/cdn-translations'\nimport { I18nProvider, useI18nContext } from '@procore/core-react'\nimport React from 'react'\n\nimport en from '../locales/en.json'\nimport pseudo from '../locales/pseudo.json'\n\nexport function TextEditorI18nProvider({\n children,\n}: Readonly<React.PropsWithChildren>) {\n const clientI18n = useI18nContext()\n\n const cdnTranslations = useRequestTranslations(\n {\n locale: clientI18n.locale,\n type: 'file',\n absolute_file_path: (locale) =>\n `core/packages/text-editor/src/locales/${locale}.json`,\n },\n {\n en,\n pseudo,\n },\n {\n oldTranslations: {},\n enableCDN: true,\n }\n )\n\n return (\n <I18nProvider\n locale={clientI18n.locale}\n translations={cdnTranslations.translations}\n >\n {children}\n </I18nProvider>\n )\n}\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,2BAA2B;AAClE,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,OAAOC,KAAK,MAAM,OAAO;AAEzB,OAAOC,EAAE,MAAM,oBAAoB;AACnC,OAAOC,MAAM,MAAM,wBAAwB;AAE3C,OAAO,SAASC,sBAAsBA,CAAAC,IAAA,EAEA;EAAA,IADpCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAER,IAAMC,UAAU,GAAGP,cAAc,CAAC,CAAC;EAEnC,IAAMQ,eAAe,GAAGV,sBAAsB,CAC5C;IACEW,MAAM,EAAEF,UAAU,CAACE,MAAM;IACzBC,IAAI,EAAE,MAAM;IACZC,kBAAkB,EAAE,SAApBA,kBAAkBA,CAAGF,MAAM;MAAA,gDAAAG,MAAA,CACgBH,MAAM;IAAA;EACnD,CAAC,EACD;IACEP,EAAE,EAAFA,EAAE;IACFC,MAAM,EAANA;EACF,CAAC,EACD;IACEU,eAAe,EAAE,CAAC,CAAC;IACnBC,SAAS,EAAE;EACb,CACF,CAAC;EAED,oBACEb,KAAA,CAAAc,aAAA,CAAChB,YAAY;IACXU,MAAM,EAAEF,UAAU,CAACE,MAAO;IAC1BO,YAAY,EAAER,eAAe,CAACQ;EAAa,GAE1CV,QACW,CAAC;AAEnB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditorProvider.js","names":["React","TextEditorContext","createContext","features","tabAsNavigation","stickyToolbar","undefined","TextEditorProvider","_ref","children","createElement","Provider","value"],"sources":["../../src/TextEditor/TextEditorProvider.tsx"],"sourcesContent":["import React from 'react'\nimport type { TextEditorProviderProps } from './TextEditorProvider.types'\n\nexport const TextEditorContext = React.createContext<\n Omit<TextEditorProviderProps, 'children'>\n>({\n features: {\n tabAsNavigation: true,\n stickyToolbar: undefined,\n },\n})\n\nexport function TextEditorProvider({\n children,\n features,\n}: TextEditorProviderProps) {\n return (\n <TextEditorContext.Provider value={{ features }}>\n {children}\n </TextEditorContext.Provider>\n )\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,OAAO,IAAMC,iBAAiB,gBAAGD,KAAK,CAACE,aAAa,CAElD;EACAC,QAAQ,EAAE;IACRC,eAAe,EAAE,IAAI;IACrBC,aAAa,EAAEC;EACjB;AACF,CAAC,CAAC;AAEF,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAGN;EAAA,IAF1BC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRN,QAAQ,GAAAK,IAAA,CAARL,QAAQ;EAER,oBACEH,KAAA,CAAAU,aAAA,CAACT,iBAAiB,CAACU,QAAQ;IAACC,KAAK,EAAE;MAAET,QAAQ,EAARA;IAAS;EAAE,GAC7CM,QACyB,CAAC;AAEjC"}
1
+ {"version":3,"file":"TextEditorProvider.js","names":["React","TextEditorContext","createContext","features","tabAsNavigation","stickyToolbar","undefined","TextEditorProvider","_ref","children","createElement","Provider","value"],"sources":["../../src/TextEditor/TextEditorProvider.tsx"],"sourcesContent":["import React from 'react'\nimport type { TextEditorProviderProps } from './TextEditorProvider.types'\n\nexport const TextEditorContext = React.createContext<\n Omit<TextEditorProviderProps, 'children'>\n>({\n features: {\n tabAsNavigation: true,\n stickyToolbar: undefined,\n },\n})\n\nexport function TextEditorProvider({\n children,\n features,\n}: TextEditorProviderProps) {\n return (\n <TextEditorContext.Provider value={{ features }}>\n {children}\n </TextEditorContext.Provider>\n )\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,OAAO,IAAMC,iBAAiB,gBAAGD,KAAK,CAACE,aAAa,CAElD;EACAC,QAAQ,EAAE;IACRC,eAAe,EAAE,IAAI;IACrBC,aAAa,EAAEC;EACjB;AACF,CAAC,CAAC;AAEF,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAGN;EAAA,IAF1BC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRN,QAAQ,GAAAK,IAAA,CAARL,QAAQ;EAER,oBACEH,KAAA,CAAAU,aAAA,CAACT,iBAAiB,CAACU,QAAQ;IAACC,KAAK,EAAE;MAAET,QAAQ,EAARA;IAAS;EAAE,GAC7CM,QACyB,CAAC;AAEjC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- declare type TextEditorFeatureToggle = {
2
+ type TextEditorFeatureToggle = {
3
3
  stickyToolbar?: boolean;
4
4
  tabAsNavigation?: boolean;
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditorProvider.types.js","names":[],"sources":["../../src/TextEditor/TextEditorProvider.types.ts"],"sourcesContent":["import type React from 'react'\n\ntype TextEditorFeatureToggle = {\n stickyToolbar?: boolean\n tabAsNavigation?: boolean\n}\n\nexport interface TextEditorProviderProps {\n children: React.ReactNode\n /**\n * - `stickyToolbar` - Have the editor toolbar stick to the top when content is longer than the page length.\n * - `tabAsNavigation` - Have `Tab` key exit the editor. Support `Alt`/`Opt` + `Tab` as triple space indent.\n */\n features?: TextEditorFeatureToggle\n}\n"],"mappings":""}
1
+ {"version":3,"file":"TextEditorProvider.types.js","names":[],"sources":["../../src/TextEditor/TextEditorProvider.types.ts"],"sourcesContent":["import type React from 'react'\n\ntype TextEditorFeatureToggle = {\n stickyToolbar?: boolean\n tabAsNavigation?: boolean\n}\n\nexport interface TextEditorProviderProps {\n children: React.ReactNode\n /**\n * - `stickyToolbar` - Have the editor toolbar stick to the top when content is longer than the page length.\n * - `tabAsNavigation` - Have `Tab` key exit the editor. Support `Alt`/`Opt` + `Tab` as triple space indent.\n */\n features?: TextEditorFeatureToggle\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"TinyMCETextEditor.js","names":["TextEditor","TinyMCEEditor","tinyMCE","React","useMemo","sanitizeTextEditorHtml","StyledReadOnlyValue","TinyMCETextEditor","props","id","value","disabled","error","readonly","placeholder","rows","onChange","onBlur","onFocus","onKeyDown","init","baseHeight","rowHeight","height","undefined","sanitizedValue","createElement","dangerouslySetInnerHTML","__html","textareaName","plugins","concat","_toConsumableArray","defaultPlugins","_objectSpread","contextmenu","min_height","max_height"],"sources":["../../src/TextEditor/TinyMCETextEditor.tsx"],"sourcesContent":["import { TextEditor as TinyMCEEditor, tinyMCE } from '@procore/core-react'\nimport React, { useMemo } from 'react'\nimport { sanitizeTextEditorHtml } from '../TextEditorOutput/TextEditorOutput.utils'\nimport { StyledReadOnlyValue } from './TextEditor.styles'\nimport type { TextEditorProps } from './TextEditor.types'\n\nexport const TinyMCETextEditor = (props: TextEditorProps) => {\n const {\n id,\n value,\n disabled,\n error,\n readonly,\n placeholder,\n rows,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n init,\n } = props\n\n const baseHeight = 74\n const rowHeight = 22\n const height = rows === undefined ? undefined : rows * rowHeight + baseHeight\n\n const sanitizedValue = useMemo(\n () => sanitizeTextEditorHtml(value || '') || '--',\n [value]\n )\n\n if (readonly) {\n return (\n <StyledReadOnlyValue>\n <div dangerouslySetInnerHTML={{ __html: sanitizedValue }} />\n </StyledReadOnlyValue>\n )\n }\n\n return (\n <TinyMCEEditor\n id={id}\n value={value}\n disabled={disabled}\n error={error}\n aria-label={props['aria-label']}\n textareaName={props['aria-label']}\n plugins={[...tinyMCE.defaultPlugins, 'link', 'table']}\n init={{\n contextmenu: false,\n min_height: height,\n max_height: height,\n placeholder,\n ...init,\n }}\n onChange={onChange}\n onBlur={onBlur as React.ComponentProps<typeof TinyMCEEditor>['onBlur']}\n onFocus={onFocus as React.ComponentProps<typeof TinyMCEEditor>['onFocus']}\n onKeyDown={\n onKeyDown as React.ComponentProps<typeof TinyMCEEditor>['onKeyDown']\n }\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAASA,UAAU,IAAIC,aAAa,EAAEC,OAAO,QAAQ,qBAAqB;AAC1E,OAAOC,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,sBAAsB,QAAQ,4CAA4C;AACnF,SAASC,mBAAmB,QAAQ,qBAAqB;AAGzD,OAAO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,KAAsB,EAAK;EAC3D,IACEC,EAAE,GAYAD,KAAK,CAZPC,EAAE;IACFC,KAAK,GAWHF,KAAK,CAXPE,KAAK;IACLC,QAAQ,GAUNH,KAAK,CAVPG,QAAQ;IACRC,KAAK,GASHJ,KAAK,CATPI,KAAK;IACLC,QAAQ,GAQNL,KAAK,CARPK,QAAQ;IACRC,WAAW,GAOTN,KAAK,CAPPM,WAAW;IACXC,IAAI,GAMFP,KAAK,CANPO,IAAI;IACJC,QAAQ,GAKNR,KAAK,CALPQ,QAAQ;IACRC,MAAM,GAIJT,KAAK,CAJPS,MAAM;IACNC,OAAO,GAGLV,KAAK,CAHPU,OAAO;IACPC,SAAS,GAEPX,KAAK,CAFPW,SAAS;IACTC,IAAI,GACFZ,KAAK,CADPY,IAAI;EAGN,IAAMC,UAAU,GAAG,EAAE;EACrB,IAAMC,SAAS,GAAG,EAAE;EACpB,IAAMC,MAAM,GAAGR,IAAI,KAAKS,SAAS,GAAGA,SAAS,GAAGT,IAAI,GAAGO,SAAS,GAAGD,UAAU;EAE7E,IAAMI,cAAc,GAAGrB,OAAO,CAC5B;IAAA,OAAMC,sBAAsB,CAACK,KAAK,IAAI,EAAE,CAAC,IAAI,IAAI;EAAA,GACjD,CAACA,KAAK,CACR,CAAC;EAED,IAAIG,QAAQ,EAAE;IACZ,oBACEV,KAAA,CAAAuB,aAAA,CAACpB,mBAAmB,qBAClBH,KAAA,CAAAuB,aAAA;MAAKC,uBAAuB,EAAE;QAAEC,MAAM,EAAEH;MAAe;IAAE,CAAE,CACxC,CAAC;EAE1B;EAEA,oBACEtB,KAAA,CAAAuB,aAAA,CAACzB,aAAa;IACZQ,EAAE,EAAEA,EAAG;IACPC,KAAK,EAAEA,KAAM;IACbC,QAAQ,EAAEA,QAAS;IACnBC,KAAK,EAAEA,KAAM;IACb,cAAYJ,KAAK,CAAC,YAAY,CAAE;IAChCqB,YAAY,EAAErB,KAAK,CAAC,YAAY,CAAE;IAClCsB,OAAO,KAAAC,MAAA,CAAAC,kBAAA,CAAM9B,OAAO,CAAC+B,cAAc,IAAE,MAAM,EAAE,OAAO,EAAE;IACtDb,IAAI,EAAAc,aAAA;MACFC,WAAW,EAAE,KAAK;MAClBC,UAAU,EAAEb,MAAM;MAClBc,UAAU,EAAEd,MAAM;MAClBT,WAAW,EAAXA;IAAW,GACRM,IAAI,CACP;IACFJ,QAAQ,EAAEA,QAAS;IACnBC,MAAM,EAAEA,MAA+D;IACvEC,OAAO,EAAEA,OAAiE;IAC1EC,SAAS,EACPA;EACD,CACF,CAAC;AAEN,CAAC"}
1
+ {"version":3,"file":"TinyMCETextEditor.js","names":["TextEditor","TinyMCEEditor","tinyMCE","React","useMemo","sanitizeTextEditorHtml","StyledReadOnlyValue","TinyMCETextEditor","props","id","value","disabled","error","readonly","placeholder","rows","onChange","onBlur","onFocus","onKeyDown","init","baseHeight","rowHeight","height","undefined","sanitizedValue","createElement","dangerouslySetInnerHTML","__html","textareaName","plugins","concat","_toConsumableArray","defaultPlugins","_objectSpread","contextmenu","min_height","max_height"],"sources":["../../src/TextEditor/TinyMCETextEditor.tsx"],"sourcesContent":["import { TextEditor as TinyMCEEditor, tinyMCE } from '@procore/core-react'\nimport React, { useMemo } from 'react'\nimport { sanitizeTextEditorHtml } from '../TextEditorOutput/TextEditorOutput.utils'\nimport { StyledReadOnlyValue } from './TextEditor.styles'\nimport type { TextEditorProps } from './TextEditor.types'\n\nexport const TinyMCETextEditor = (props: TextEditorProps) => {\n const {\n id,\n value,\n disabled,\n error,\n readonly,\n placeholder,\n rows,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n init,\n } = props\n\n const baseHeight = 74\n const rowHeight = 22\n const height = rows === undefined ? undefined : rows * rowHeight + baseHeight\n\n const sanitizedValue = useMemo(\n () => sanitizeTextEditorHtml(value || '') || '--',\n [value]\n )\n\n if (readonly) {\n return (\n <StyledReadOnlyValue>\n <div dangerouslySetInnerHTML={{ __html: sanitizedValue }} />\n </StyledReadOnlyValue>\n )\n }\n\n return (\n <TinyMCEEditor\n id={id}\n value={value}\n disabled={disabled}\n error={error}\n aria-label={props['aria-label']}\n textareaName={props['aria-label']}\n plugins={[...tinyMCE.defaultPlugins, 'link', 'table']}\n init={{\n contextmenu: false,\n min_height: height,\n max_height: height,\n placeholder,\n ...init,\n }}\n onChange={onChange}\n onBlur={onBlur as React.ComponentProps<typeof TinyMCEEditor>['onBlur']}\n onFocus={onFocus as React.ComponentProps<typeof TinyMCEEditor>['onFocus']}\n onKeyDown={\n onKeyDown as React.ComponentProps<typeof TinyMCEEditor>['onKeyDown']\n }\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAASA,UAAU,IAAIC,aAAa,EAAEC,OAAO,QAAQ,qBAAqB;AAC1E,OAAOC,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,sBAAsB,QAAQ,4CAA4C;AACnF,SAASC,mBAAmB,QAAQ,qBAAqB;AAGzD,OAAO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,KAAsB,EAAK;EAC3D,IACEC,EAAE,GAYAD,KAAK,CAZPC,EAAE;IACFC,KAAK,GAWHF,KAAK,CAXPE,KAAK;IACLC,QAAQ,GAUNH,KAAK,CAVPG,QAAQ;IACRC,KAAK,GASHJ,KAAK,CATPI,KAAK;IACLC,QAAQ,GAQNL,KAAK,CARPK,QAAQ;IACRC,WAAW,GAOTN,KAAK,CAPPM,WAAW;IACXC,IAAI,GAMFP,KAAK,CANPO,IAAI;IACJC,QAAQ,GAKNR,KAAK,CALPQ,QAAQ;IACRC,MAAM,GAIJT,KAAK,CAJPS,MAAM;IACNC,OAAO,GAGLV,KAAK,CAHPU,OAAO;IACPC,SAAS,GAEPX,KAAK,CAFPW,SAAS;IACTC,IAAI,GACFZ,KAAK,CADPY,IAAI;EAGN,IAAMC,UAAU,GAAG,EAAE;EACrB,IAAMC,SAAS,GAAG,EAAE;EACpB,IAAMC,MAAM,GAAGR,IAAI,KAAKS,SAAS,GAAGA,SAAS,GAAGT,IAAI,GAAGO,SAAS,GAAGD,UAAU;EAE7E,IAAMI,cAAc,GAAGrB,OAAO,CAC5B;IAAA,OAAMC,sBAAsB,CAACK,KAAK,IAAI,EAAE,CAAC,IAAI,IAAI;EAAA,GACjD,CAACA,KAAK,CACR,CAAC;EAED,IAAIG,QAAQ,EAAE;IACZ,oBACEV,KAAA,CAAAuB,aAAA,CAACpB,mBAAmB,qBAClBH,KAAA,CAAAuB,aAAA;MAAKC,uBAAuB,EAAE;QAAEC,MAAM,EAAEH;MAAe;IAAE,CAAE,CACxC,CAAC;EAE1B;EAEA,oBACEtB,KAAA,CAAAuB,aAAA,CAACzB,aAAa;IACZQ,EAAE,EAAEA,EAAG;IACPC,KAAK,EAAEA,KAAM;IACbC,QAAQ,EAAEA,QAAS;IACnBC,KAAK,EAAEA,KAAM;IACb,cAAYJ,KAAK,CAAC,YAAY,CAAE;IAChCqB,YAAY,EAAErB,KAAK,CAAC,YAAY,CAAE;IAClCsB,OAAO,KAAAC,MAAA,CAAAC,kBAAA,CAAM9B,OAAO,CAAC+B,cAAc,IAAE,MAAM,EAAE,OAAO,EAAE;IACtDb,IAAI,EAAAc,aAAA;MACFC,WAAW,EAAE,KAAK;MAClBC,UAAU,EAAEb,MAAM;MAClBc,UAAU,EAAEd,MAAM;MAClBT,WAAW,EAAXA;IAAW,GACRM,IAAI,CACP;IACFJ,QAAQ,EAAEA,QAAS;IACnBC,MAAM,EAAEA,MAA+D;IACvEC,OAAO,EAAEA,OAAiE;IAC1EC,SAAS,EACPA;EACD,CACF,CAAC;AAEN,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
1
  export { TextEditor } from './TextEditor';
2
- export * from './TextEditor.types';
2
+ export type * from './TextEditor.types';
3
3
  export { TextEditorProvider } from './TextEditorProvider';
4
4
  export type { TextEditorProviderProps } from './TextEditorProvider.types';
@@ -1,4 +1,3 @@
1
1
  export { TextEditor } from './TextEditor';
2
- export * from './TextEditor.types';
3
2
  export { TextEditorProvider } from './TextEditorProvider';
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TextEditor","TextEditorProvider"],"sources":["../../src/TextEditor/index.ts"],"sourcesContent":["export { TextEditor } from './TextEditor'\nexport * from './TextEditor.types'\nexport { TextEditorProvider } from './TextEditorProvider'\nexport type { TextEditorProviderProps } from './TextEditorProvider.types'\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,cAAc,oBAAoB;AAClC,SAASC,kBAAkB,QAAQ,sBAAsB"}
1
+ {"version":3,"file":"index.js","names":["TextEditor","TextEditorProvider"],"sources":["../../src/TextEditor/index.ts"],"sourcesContent":["export { TextEditor } from './TextEditor'\nexport type * from './TextEditor.types'\nexport { TextEditorProvider } from './TextEditorProvider'\nexport type { TextEditorProviderProps } from './TextEditorProvider.types'\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,SAASC,kBAAkB,QAAQ,sBAAsB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"license_key.js","names":["DEV_CK_EDITOR_LICENSE_KEY","CK_EDITOR_LICENSE_KEY"],"sources":["../../src/TextEditor/license_key.ts"],"sourcesContent":["export const DEV_CK_EDITOR_LICENSE_KEY =\n 'eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE4MDU5MzI3OTksImp0aSI6IjVkZTZmZjM1LTkyOGMtNDVmOC1hZThjLTIxMTQ4M2JhNTJiYyIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOlsic2giLCJkcnVwYWwiXSwid2hpdGVMYWJlbCI6dHJ1ZSwibGljZW5zZVR5cGUiOiJkZXZlbG9wbWVudCIsImZlYXR1cmVzIjpbIkRSVVAiLCJETyIsIkZQIiwiU0MiLCJUT0MiLCJUUEwiLCJQT0UiLCJDQyIsIk1GIiwiU0VFIiwiRUNIIiwiRUlTIiwiTEgiLCJGT08iLCJNTEwiXSwidmMiOiI3YTc1ZTA4YyJ9.B19JLbq858FIBVNHUCaplYuN5-F1ahTg74ihITpucJJxSe0ZjYKBQV_9LH7oYtF6S56dkN6Cp4KWPBKVF1bJLw'\n\nexport const CK_EDITOR_LICENSE_KEY =\n 'eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE4MDU5MzI3OTksImp0aSI6ImJkYTE4MzliLWU3NDAtNDBkNy1hYmEyLWZkN2IxMDU1YWZhYyIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOlsic2giLCJkcnVwYWwiXSwid2hpdGVMYWJlbCI6dHJ1ZSwiZmVhdHVyZXMiOlsiRFJVUCIsIkRPIiwiRlAiLCJTQyIsIlRPQyIsIlRQTCIsIlBPRSIsIkNDIiwiTUYiLCJTRUUiLCJFQ0giLCJFSVMiLCJMSCIsIkZPTyIsIk1MTCJdLCJ2YyI6IjVkZDhlMmRiIn0.Ksi_3ee7IjEUAtZRWi_rJb7HTFpjnxDZPJ529UCqkIbMu8ujPAYzv3eDtdwAEFkWdWTa0H-8G-o19QSAJjemPg'\n"],"mappings":"AAAA,OAAO,IAAMA,yBAAyB,GACpC,0cAA0c;AAE5c,OAAO,IAAMC,qBAAqB,GAChC,qaAAqa"}
1
+ {"version":3,"file":"license_key.js","names":["DEV_CK_EDITOR_LICENSE_KEY","CK_EDITOR_LICENSE_KEY"],"sources":["../../src/TextEditor/license_key.ts"],"sourcesContent":["export const DEV_CK_EDITOR_LICENSE_KEY =\n 'eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE4MDU5MzI3OTksImp0aSI6IjVkZTZmZjM1LTkyOGMtNDVmOC1hZThjLTIxMTQ4M2JhNTJiYyIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOlsic2giLCJkcnVwYWwiXSwid2hpdGVMYWJlbCI6dHJ1ZSwibGljZW5zZVR5cGUiOiJkZXZlbG9wbWVudCIsImZlYXR1cmVzIjpbIkRSVVAiLCJETyIsIkZQIiwiU0MiLCJUT0MiLCJUUEwiLCJQT0UiLCJDQyIsIk1GIiwiU0VFIiwiRUNIIiwiRUlTIiwiTEgiLCJGT08iLCJNTEwiXSwidmMiOiI3YTc1ZTA4YyJ9.B19JLbq858FIBVNHUCaplYuN5-F1ahTg74ihITpucJJxSe0ZjYKBQV_9LH7oYtF6S56dkN6Cp4KWPBKVF1bJLw'\n\nexport const CK_EDITOR_LICENSE_KEY =\n 'eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE4MDU5MzI3OTksImp0aSI6ImJkYTE4MzliLWU3NDAtNDBkNy1hYmEyLWZkN2IxMDU1YWZhYyIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOlsic2giLCJkcnVwYWwiXSwid2hpdGVMYWJlbCI6dHJ1ZSwiZmVhdHVyZXMiOlsiRFJVUCIsIkRPIiwiRlAiLCJTQyIsIlRPQyIsIlRQTCIsIlBPRSIsIkNDIiwiTUYiLCJTRUUiLCJFQ0giLCJFSVMiLCJMSCIsIkZPTyIsIk1MTCJdLCJ2YyI6IjVkZDhlMmRiIn0.Ksi_3ee7IjEUAtZRWi_rJb7HTFpjnxDZPJ529UCqkIbMu8ujPAYzv3eDtdwAEFkWdWTa0H-8G-o19QSAJjemPg'\n"],"mappings":"AAAA,OAAO,IAAMA,yBAAyB,GACpC,0cAA0c;AAE5c,OAAO,IAAMC,qBAAqB,GAChC,qaAAqa","ignoreList":[]}