@squiz/formatted-text-editor 2.0.1 → 2.2.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 (53) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/demo/App.tsx +5 -0
  3. package/demo/AppContext.tsx +111 -51
  4. package/jest.config.ts +1 -1
  5. package/jest.setup.ts +16 -0
  6. package/lib/EditorToolbar/FloatingToolbar.js +1 -1
  7. package/lib/EditorToolbar/Toolbar.js +3 -1
  8. package/lib/EditorToolbar/Tools/ContentTools/ContentToolsDropdown.d.ts +3 -0
  9. package/lib/EditorToolbar/Tools/ContentTools/ContentToolsDropdown.js +35 -0
  10. package/lib/EditorToolbar/Tools/Image/Form/ImageForm.d.ts +2 -1
  11. package/lib/EditorToolbar/Tools/Image/Form/ImageForm.js +53 -10
  12. package/lib/EditorToolbar/Tools/Image/ImageButton.js +8 -5
  13. package/lib/EditorToolbar/Tools/Image/ImageModal.js +3 -1
  14. package/lib/EditorToolbar/Tools/Table/TableButton.js +1 -3
  15. package/lib/Extensions/Extensions.d.ts +1 -0
  16. package/lib/Extensions/Extensions.js +3 -0
  17. package/lib/Extensions/FetchUrlExtension/FetchUrlExtension.js +6 -0
  18. package/lib/Extensions/ImageExtension/DAMImageExtension.d.ts +17 -0
  19. package/lib/Extensions/ImageExtension/DAMImageExtension.js +97 -0
  20. package/lib/Icons/AiIcon.d.ts +2 -0
  21. package/lib/Icons/AiIcon.js +60 -0
  22. package/lib/index.css +4224 -0
  23. package/lib/ui/Fields/ResourceBrowserSelector/ResourceBrowserSelector.d.ts +28 -0
  24. package/lib/ui/Fields/ResourceBrowserSelector/ResourceBrowserSelector.js +88 -0
  25. package/lib/utils/converters/remirrorNodeToSquizNode/remirrorNodeToSquizNode.js +9 -0
  26. package/lib/utils/converters/squizNodeToRemirrorNode/squizNodeToRemirrorNode.js +9 -0
  27. package/package.json +6 -2
  28. package/src/EditorToolbar/FloatingToolbar.spec.tsx +3 -1
  29. package/src/EditorToolbar/FloatingToolbar.tsx +1 -1
  30. package/src/EditorToolbar/Toolbar.tsx +2 -0
  31. package/src/EditorToolbar/Tools/ContentTools/ContentToolsDropdown.spec.tsx +78 -0
  32. package/src/EditorToolbar/Tools/ContentTools/ContentToolsDropdown.tsx +46 -0
  33. package/src/EditorToolbar/Tools/ContentTools/_content-tools.scss +45 -0
  34. package/src/EditorToolbar/Tools/Image/Form/ImageForm.spec.tsx +27 -2
  35. package/src/EditorToolbar/Tools/Image/Form/ImageForm.tsx +61 -14
  36. package/src/EditorToolbar/Tools/Image/ImageButton.spec.tsx +70 -2
  37. package/src/EditorToolbar/Tools/Image/ImageButton.tsx +12 -6
  38. package/src/EditorToolbar/Tools/Image/ImageModal.tsx +4 -1
  39. package/src/EditorToolbar/Tools/Table/TableButton.tsx +0 -2
  40. package/src/Extensions/Extensions.ts +3 -0
  41. package/src/Extensions/FetchUrlExtension/FetchUrlExtension.ts +9 -0
  42. package/src/Extensions/ImageExtension/DAMImageExtension.spec.ts +87 -0
  43. package/src/Extensions/ImageExtension/DAMImageExtension.ts +119 -0
  44. package/src/Icons/AiIcon.tsx +140 -0
  45. package/src/index.scss +4 -0
  46. package/src/ui/Fields/ResourceBrowserSelector/ResourceBrowserSelector.spec.tsx +219 -0
  47. package/src/ui/Fields/ResourceBrowserSelector/ResourceBrowserSelector.tsx +109 -0
  48. package/src/utils/converters/mocks/squizNodeJson.mock.ts +21 -0
  49. package/src/utils/converters/remirrorNodeToSquizNode/remirrorNodeToSquizNode.ts +10 -0
  50. package/src/utils/converters/squizNodeToRemirrorNode/squizNodeToRemirrorNode.ts +8 -0
  51. package/src/utils/getNodeNamesByGroup.spec.ts +1 -0
  52. package/tests/index.ts +1 -0
  53. package/tests/mockResourceBrowser.tsx +46 -0
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DAMImageExtension = void 0;
10
+ const core_1 = require("@remirror/core");
11
+ const remirror_1 = require("remirror");
12
+ const Extensions_1 = require("../Extensions");
13
+ let DAMImageExtension = class DAMImageExtension extends core_1.NodeExtension {
14
+ get name() {
15
+ return Extensions_1.NodeName.DAMImage;
16
+ }
17
+ createTags() {
18
+ return [core_1.ExtensionTag.InlineNode, core_1.ExtensionTag.Media];
19
+ }
20
+ createNodeSpec(extra, override) {
21
+ return {
22
+ inline: true,
23
+ draggable: true,
24
+ selectable: true,
25
+ ...override,
26
+ attrs: {
27
+ ...extra.defaults(),
28
+ damObjectId: {},
29
+ damSystemIdentifier: {},
30
+ damSystemType: {},
31
+ damAdditional: { default: undefined },
32
+ src: { default: '' },
33
+ },
34
+ parseDOM: [
35
+ {
36
+ tag: 'img[data-dam-object-id]',
37
+ getAttrs: (node) => {
38
+ if (!(0, core_1.isElementDomNode)(node)) {
39
+ return false;
40
+ }
41
+ const damObjectId = node.getAttribute('data-dam-object-id');
42
+ const damSystemIdentifier = node.getAttribute('data-dam-system-identifier');
43
+ const damSystemType = node.getAttribute('data-dam-system-type');
44
+ let damAdditional = node.getAttribute('data-dam-additional') || undefined;
45
+ if (!damObjectId || !damSystemIdentifier || !damSystemType) {
46
+ return false;
47
+ }
48
+ if (damAdditional) {
49
+ damAdditional = JSON.parse(damAdditional);
50
+ }
51
+ return {
52
+ ...extra.parse(node),
53
+ damObjectId,
54
+ damSystemIdentifier,
55
+ damSystemType,
56
+ damAdditional,
57
+ src: '',
58
+ };
59
+ },
60
+ },
61
+ ],
62
+ toDOM: (node) => {
63
+ const { damObjectId, damSystemIdentifier, damSystemType, damAdditional, src, ...rest } = (0, core_1.omitExtraAttributes)(node.attrs, extra);
64
+ return [
65
+ 'img',
66
+ {
67
+ ...extra.dom(node),
68
+ ...rest,
69
+ src,
70
+ 'data-dam-object-id': damObjectId,
71
+ 'data-dam-system-identifier': damSystemIdentifier,
72
+ 'data-dam-system-type': damSystemType,
73
+ 'data-dam-additional': damAdditional ? JSON.stringify(damAdditional) : undefined,
74
+ },
75
+ ];
76
+ },
77
+ };
78
+ }
79
+ insertDAMImage(attrs) {
80
+ return ({ tr, dispatch }) => {
81
+ const { from, to } = (0, remirror_1.getTextSelection)(tr.selection, tr.doc);
82
+ const node = this.type.create({ ...attrs, src: attrs.url });
83
+ dispatch?.(tr.replaceRangeWith(from, to, node));
84
+ return true;
85
+ };
86
+ }
87
+ };
88
+ __decorate([
89
+ (0, core_1.command)()
90
+ ], DAMImageExtension.prototype, "insertDAMImage", null);
91
+ DAMImageExtension = __decorate([
92
+ (0, core_1.extension)({
93
+ defaultOptions: {},
94
+ defaultPriority: core_1.ExtensionPriority.High,
95
+ })
96
+ ], DAMImageExtension);
97
+ exports.DAMImageExtension = DAMImageExtension;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ICON_AI: React.JSX.Element;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ICON_AI = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ exports.ICON_AI = (react_1.default.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
9
+ react_1.default.createElement("g", { id: "sq-AI-icon", clipPath: "url(#clip0_3060_44545)" },
10
+ react_1.default.createElement("g", { id: "circle", filter: "url(#filter0_dd_3060_44545)" },
11
+ react_1.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "10", fill: "url(#paint0_linear_3060_44545)" }),
12
+ react_1.default.createElement("rect", { x: "1.5", y: "1.5", width: "21", height: "21", rx: "10.5", stroke: "white" })),
13
+ react_1.default.createElement("g", { id: "Vector", filter: "url(#filter1_d_3060_44545)" },
14
+ react_1.default.createElement("path", { d: "M11.2084 9.79157L10.1219 7.39977C9.88269 6.86674 9.11731 6.86674 8.87813 7.39977L7.79157 9.79157L5.39977 10.8781C4.86674 11.1241 4.86674 11.8827 5.39977 12.1219L7.79157 13.2084L8.87813 15.6002C9.12415 16.1333 9.88269 16.1333 10.1219 15.6002L11.2084 13.2084L13.6002 12.1219C14.1333 11.8759 14.1333 11.1173 13.6002 10.8781L11.2084 9.79157Z", fill: "white" })),
15
+ react_1.default.createElement("g", { id: "Vector_2", opacity: "0.8", filter: "url(#filter2_d_3060_44545)" },
16
+ react_1.default.createElement("path", { d: "M17.4491 10.4491L16.8493 11.7779C16.7126 12.074 16.2874 12.074 16.1507 11.7779L15.5509 10.4415L14.2221 9.84169C13.926 9.70501 13.926 9.2874 14.2221 9.15072L15.5585 8.55087L16.1583 7.2221C16.295 6.92597 16.7126 6.92597 16.8493 7.2221L17.4491 8.55847L18.7779 9.15831C19.074 9.29499 19.074 9.7126 18.7779 9.84928L17.4491 10.4491Z", fill: "white" })),
17
+ react_1.default.createElement("g", { id: "Ellipse 55", opacity: "0.8", filter: "url(#filter3_d_3060_44545)" },
18
+ react_1.default.createElement("circle", { cx: "14.5", cy: "16.5", r: "1.5", fill: "white" }))),
19
+ react_1.default.createElement("defs", null,
20
+ react_1.default.createElement("filter", { id: "filter0_dd_3060_44545", x: "0", y: "0", width: "24", height: "24", filterUnits: "userSpaceOnUse", colorInterpolationFilters: "sRGB" },
21
+ react_1.default.createElement("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
22
+ react_1.default.createElement("feColorMatrix", { in: "SourceAlpha", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0", result: "hardAlpha" }),
23
+ react_1.default.createElement("feOffset", { dx: "1", dy: "1" }),
24
+ react_1.default.createElement("feComposite", { in2: "hardAlpha", operator: "out" }),
25
+ react_1.default.createElement("feColorMatrix", { type: "matrix", values: "0 0 0 0 0.2 0 0 0 0 0.709941 0 0 0 0 1 0 0 0 0.64 0" }),
26
+ react_1.default.createElement("feBlend", { mode: "normal", in2: "BackgroundImageFix", result: "effect1_dropShadow_3060_44545" }),
27
+ react_1.default.createElement("feColorMatrix", { in: "SourceAlpha", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0", result: "hardAlpha" }),
28
+ react_1.default.createElement("feOffset", { dx: "-1", dy: "-1" }),
29
+ react_1.default.createElement("feComposite", { in2: "hardAlpha", operator: "out" }),
30
+ react_1.default.createElement("feColorMatrix", { type: "matrix", values: "0 0 0 0 0.96 0 0 0 0 0.76 0 0 0 0 0.48 0 0 0 0.64 0" }),
31
+ react_1.default.createElement("feBlend", { mode: "normal", in2: "effect1_dropShadow_3060_44545", result: "effect2_dropShadow_3060_44545" }),
32
+ react_1.default.createElement("feBlend", { mode: "normal", in: "SourceGraphic", in2: "effect2_dropShadow_3060_44545", result: "shape" })),
33
+ react_1.default.createElement("filter", { id: "filter1_d_3060_44545", x: "5", y: "7", width: "9", height: "10", filterUnits: "userSpaceOnUse", colorInterpolationFilters: "sRGB" },
34
+ react_1.default.createElement("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
35
+ react_1.default.createElement("feColorMatrix", { in: "SourceAlpha", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0", result: "hardAlpha" }),
36
+ react_1.default.createElement("feOffset", { dy: "1" }),
37
+ react_1.default.createElement("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.16 0" }),
38
+ react_1.default.createElement("feBlend", { mode: "normal", in2: "BackgroundImageFix", result: "effect1_dropShadow_3060_44545" }),
39
+ react_1.default.createElement("feBlend", { mode: "normal", in: "SourceGraphic", in2: "effect1_dropShadow_3060_44545", result: "shape" })),
40
+ react_1.default.createElement("filter", { id: "filter2_d_3060_44545", x: "14", y: "7", width: "5", height: "6.30682", filterUnits: "userSpaceOnUse", colorInterpolationFilters: "sRGB" },
41
+ react_1.default.createElement("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
42
+ react_1.default.createElement("feColorMatrix", { in: "SourceAlpha", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0", result: "hardAlpha" }),
43
+ react_1.default.createElement("feOffset", { dy: "1.30682" }),
44
+ react_1.default.createElement("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.16 0" }),
45
+ react_1.default.createElement("feBlend", { mode: "normal", in2: "BackgroundImageFix", result: "effect1_dropShadow_3060_44545" }),
46
+ react_1.default.createElement("feBlend", { mode: "normal", in: "SourceGraphic", in2: "effect1_dropShadow_3060_44545", result: "shape" })),
47
+ react_1.default.createElement("filter", { id: "filter3_d_3060_44545", x: "13", y: "15", width: "3", height: "4.32373", filterUnits: "userSpaceOnUse", colorInterpolationFilters: "sRGB" },
48
+ react_1.default.createElement("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
49
+ react_1.default.createElement("feColorMatrix", { in: "SourceAlpha", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0", result: "hardAlpha" }),
50
+ react_1.default.createElement("feOffset", { dy: "1.32373" }),
51
+ react_1.default.createElement("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.16 0" }),
52
+ react_1.default.createElement("feBlend", { mode: "normal", in2: "BackgroundImageFix", result: "effect1_dropShadow_3060_44545" }),
53
+ react_1.default.createElement("feBlend", { mode: "normal", in: "SourceGraphic", in2: "effect1_dropShadow_3060_44545", result: "shape" })),
54
+ react_1.default.createElement("linearGradient", { id: "paint0_linear_3060_44545", x1: "6.54545", y1: "3.81818", x2: "17", y2: "20.1818", gradientUnits: "userSpaceOnUse" },
55
+ react_1.default.createElement("stop", { stopColor: "#F5D6AB" }),
56
+ react_1.default.createElement("stop", { offset: "0.251162", stopColor: "#F895A7" }),
57
+ react_1.default.createElement("stop", { offset: "0.585", stopColor: "#77A1F1" }),
58
+ react_1.default.createElement("stop", { offset: "0.861262", stopColor: "#68C8FF" })),
59
+ react_1.default.createElement("clipPath", { id: "clip0_3060_44545" },
60
+ react_1.default.createElement("rect", { width: "24", height: "24", fill: "white" })))));