@pie-lib/editable-html 13.0.8 → 13.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +0 -28
  2. package/lib/__tests__/editor-utils.test.js +164 -0
  3. package/lib/__tests__/editor-utils.test.js.map +1 -0
  4. package/lib/__tests__/serialization.test.js +241 -0
  5. package/lib/__tests__/serialization.test.js.map +1 -0
  6. package/lib/__tests__/utils.js +79 -0
  7. package/lib/__tests__/utils.js.map +1 -0
  8. package/lib/plugins/image/__tests__/component.test.js +96 -0
  9. package/lib/plugins/image/__tests__/component.test.js.map +1 -0
  10. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +131 -0
  11. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js.map +1 -0
  12. package/lib/plugins/image/__tests__/image-toolbar.test.js +21 -0
  13. package/lib/plugins/image/__tests__/image-toolbar.test.js.map +1 -0
  14. package/lib/plugins/image/__tests__/index.test.js +86 -0
  15. package/lib/plugins/image/__tests__/index.test.js.map +1 -0
  16. package/lib/plugins/image/__tests__/insert-image-handler.test.js +112 -0
  17. package/lib/plugins/image/__tests__/insert-image-handler.test.js.map +1 -0
  18. package/lib/plugins/image/__tests__/mock-change.js +22 -0
  19. package/lib/plugins/image/__tests__/mock-change.js.map +1 -0
  20. package/lib/plugins/list/__tests__/index.test.js +63 -0
  21. package/lib/plugins/list/__tests__/index.test.js.map +1 -0
  22. package/lib/plugins/math/__tests__/index.test.js +284 -0
  23. package/lib/plugins/math/__tests__/index.test.js.map +1 -0
  24. package/lib/plugins/media/__tests__/index.test.js +69 -0
  25. package/lib/plugins/media/__tests__/index.test.js.map +1 -0
  26. package/lib/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js +93 -0
  27. package/lib/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js.map +1 -0
  28. package/lib/plugins/respArea/math-templated/index.js +2 -2
  29. package/lib/plugins/respArea/math-templated/index.js.map +1 -1
  30. package/lib/plugins/table/__tests__/index.test.js +416 -0
  31. package/lib/plugins/table/__tests__/index.test.js.map +1 -0
  32. package/lib/plugins/table/__tests__/table-toolbar.test.js +81 -0
  33. package/lib/plugins/table/__tests__/table-toolbar.test.js.map +1 -0
  34. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +153 -0
  35. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js.map +1 -0
  36. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +47 -0
  37. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js.map +1 -0
  38. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +112 -0
  39. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js.map +1 -0
  40. package/lib/plugins/toolbar/__tests__/toolbar.test.js +118 -0
  41. package/lib/plugins/toolbar/__tests__/toolbar.test.js.map +1 -0
  42. package/lib/shared/alert-dialog.js +68 -0
  43. package/package.json +7 -7
  44. package/src/__tests__/utils.js +1 -1
  45. package/src/plugins/respArea/math-templated/index.jsx +1 -1
  46. package/LICENSE.md +0 -5
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _react2 = require("@testing-library/react");
9
+ var _slate = require("slate");
10
+ var _defaultToolbar = require("../default-toolbar");
11
+ // Mock the DoneButton component directly to avoid styled component issues
12
+ jest.mock('../done-button', function () {
13
+ return {
14
+ DoneButton: function DoneButton(props) {
15
+ return /*#__PURE__*/_react["default"].createElement("button", {
16
+ "aria-label": "Done",
17
+ onClick: props.onClick,
18
+ "data-testid": "done-button"
19
+ }, "Done");
20
+ },
21
+ RawDoneButton: function RawDoneButton(props) {
22
+ return /*#__PURE__*/_react["default"].createElement("button", {
23
+ "aria-label": "Done",
24
+ onClick: props.onClick,
25
+ className: "RawDoneButton"
26
+ }, "Done");
27
+ }
28
+ };
29
+ });
30
+ describe('default-toolbar', function () {
31
+ var onDone;
32
+ var onChange;
33
+ var getFocusedValue;
34
+ var defaultProps;
35
+ beforeEach(function () {
36
+ onDone = jest.fn();
37
+ onChange = jest.fn();
38
+ getFocusedValue = jest.fn();
39
+ defaultProps = {
40
+ classes: {},
41
+ value: _slate.Value.fromJSON({}),
42
+ plugins: [],
43
+ className: 'className',
44
+ onDone: onDone,
45
+ onChange: onChange,
46
+ getFocusedValue: getFocusedValue,
47
+ deletable: false,
48
+ showDone: true
49
+ };
50
+ });
51
+ describe('rendering', function () {
52
+ it('renders toolbar', function () {
53
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_defaultToolbar.DefaultToolbar, (0, _extends2["default"])({}, defaultProps, {
54
+ deletable: false
55
+ }))),
56
+ container = _render.container;
57
+ expect(container.firstChild).toBeInTheDocument();
58
+ });
59
+ it('renders with 1 plugin', function () {
60
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_defaultToolbar.DefaultToolbar, (0, _extends2["default"])({}, defaultProps, {
61
+ plugins: [{
62
+ toolbar: {
63
+ icon: /*#__PURE__*/_react["default"].createElement("span", null, "Icon1")
64
+ },
65
+ name: 'plugin-one'
66
+ }]
67
+ }))),
68
+ container = _render2.container;
69
+ expect(container.firstChild).toBeInTheDocument();
70
+ // Should render plugin toolbar button
71
+ });
72
+ it('renders with 2 plugins', function () {
73
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_defaultToolbar.DefaultToolbar, (0, _extends2["default"])({}, defaultProps, {
74
+ plugins: [{
75
+ toolbar: {
76
+ icon: /*#__PURE__*/_react["default"].createElement("span", null, "Icon1")
77
+ },
78
+ name: 'plugin-one'
79
+ }, {
80
+ toolbar: {
81
+ icon: /*#__PURE__*/_react["default"].createElement("span", null, "Icon2")
82
+ },
83
+ name: 'plugin-two'
84
+ }]
85
+ }))),
86
+ container = _render3.container;
87
+ expect(container.firstChild).toBeInTheDocument();
88
+ // Should render both plugin toolbar buttons
89
+ });
90
+ it('renders only enabled plugins when one is disabled', function () {
91
+ var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_defaultToolbar.DefaultToolbar, (0, _extends2["default"])({}, defaultProps, {
92
+ pluginProps: {
93
+ 'plugin-one': {
94
+ disabled: true
95
+ }
96
+ },
97
+ plugins: [{
98
+ toolbar: {
99
+ icon: /*#__PURE__*/_react["default"].createElement("span", null, "Icon1")
100
+ },
101
+ name: 'plugin-one'
102
+ }, {
103
+ toolbar: {
104
+ icon: /*#__PURE__*/_react["default"].createElement("span", null, "Icon2")
105
+ },
106
+ name: 'plugin-two'
107
+ }]
108
+ }))),
109
+ container = _render4.container;
110
+ expect(container.firstChild).toBeInTheDocument();
111
+ // Only plugin-two should be rendered (plugin-one is disabled)
112
+ });
113
+ it('renders done button when not deletable', function () {
114
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_defaultToolbar.DefaultToolbar, (0, _extends2["default"])({}, defaultProps, {
115
+ deletable: false
116
+ })));
117
+ expect(_react2.screen.getByLabelText('Done')).toBeInTheDocument();
118
+ });
119
+ it('does not render done button when deletable', function () {
120
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_defaultToolbar.DefaultToolbar, (0, _extends2["default"])({}, defaultProps, {
121
+ deletable: true
122
+ })));
123
+ expect(_react2.screen.queryByLabelText('Done')).not.toBeInTheDocument();
124
+ });
125
+ it('does not render done button when showDone is false', function () {
126
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_defaultToolbar.DefaultToolbar, (0, _extends2["default"])({}, defaultProps, {
127
+ showDone: false,
128
+ deletable: false
129
+ })));
130
+ expect(_react2.screen.queryByLabelText('Done')).not.toBeInTheDocument();
131
+ });
132
+ });
133
+ describe('interactions', function () {
134
+ it('calls onDone when done button is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
135
+ var doneButton;
136
+ return _regenerator["default"].wrap(function (_context) {
137
+ while (1) switch (_context.prev = _context.next) {
138
+ case 0:
139
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_defaultToolbar.DefaultToolbar, (0, _extends2["default"])({}, defaultProps, {
140
+ deletable: false
141
+ })));
142
+ doneButton = _react2.screen.getByLabelText('Done');
143
+ _react2.fireEvent.click(doneButton);
144
+ expect(onDone).toHaveBeenCalled();
145
+ case 1:
146
+ case "end":
147
+ return _context.stop();
148
+ }
149
+ }, _callee);
150
+ })));
151
+ });
152
+ });
153
+ //# sourceMappingURL=default-toolbar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-toolbar.test.js","names":["_react","_interopRequireDefault","require","_react2","_slate","_defaultToolbar","jest","mock","DoneButton","props","createElement","onClick","RawDoneButton","className","describe","onDone","onChange","getFocusedValue","defaultProps","beforeEach","fn","classes","value","Value","fromJSON","plugins","deletable","showDone","it","_render","render","DefaultToolbar","_extends2","container","expect","firstChild","toBeInTheDocument","_render2","toolbar","icon","name","_render3","_render4","pluginProps","disabled","screen","getByLabelText","queryByLabelText","not","_asyncToGenerator2","_regenerator","mark","_callee","doneButton","wrap","_context","prev","next","fireEvent","click","toHaveBeenCalled","stop"],"sources":["../../../../src/plugins/toolbar/__tests__/default-toolbar.test.jsx"],"sourcesContent":["import React from 'react';\nimport { fireEvent, render, screen } from '@testing-library/react';\nimport { Value } from 'slate';\nimport { DefaultToolbar } from '../default-toolbar';\n\n// Mock the DoneButton component directly to avoid styled component issues\njest.mock('../done-button', () => ({\n DoneButton: (props) => (\n <button aria-label=\"Done\" onClick={props.onClick} data-testid=\"done-button\">\n Done\n </button>\n ),\n RawDoneButton: (props) => (\n <button aria-label=\"Done\" onClick={props.onClick} className=\"RawDoneButton\">\n Done\n </button>\n ),\n}));\n\ndescribe('default-toolbar', () => {\n let onDone;\n let onChange;\n let getFocusedValue;\n let defaultProps;\n\n beforeEach(() => {\n onDone = jest.fn();\n onChange = jest.fn();\n getFocusedValue = jest.fn();\n\n defaultProps = {\n classes: {},\n value: Value.fromJSON({}),\n plugins: [],\n className: 'className',\n onDone,\n onChange,\n getFocusedValue,\n deletable: false,\n showDone: true,\n };\n });\n\n describe('rendering', () => {\n it('renders toolbar', () => {\n const { container } = render(<DefaultToolbar {...defaultProps} deletable={false} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders with 1 plugin', () => {\n const { container } = render(\n <DefaultToolbar {...defaultProps} plugins={[{ toolbar: { icon: <span>Icon1</span> }, name: 'plugin-one' }]} />,\n );\n\n expect(container.firstChild).toBeInTheDocument();\n // Should render plugin toolbar button\n });\n\n it('renders with 2 plugins', () => {\n const { container } = render(\n <DefaultToolbar\n {...defaultProps}\n plugins={[\n { toolbar: { icon: <span>Icon1</span> }, name: 'plugin-one' },\n { toolbar: { icon: <span>Icon2</span> }, name: 'plugin-two' },\n ]}\n />,\n );\n\n expect(container.firstChild).toBeInTheDocument();\n // Should render both plugin toolbar buttons\n });\n\n it('renders only enabled plugins when one is disabled', () => {\n const { container } = render(\n <DefaultToolbar\n {...defaultProps}\n pluginProps={{\n 'plugin-one': {\n disabled: true,\n },\n }}\n plugins={[\n { toolbar: { icon: <span>Icon1</span> }, name: 'plugin-one' },\n { toolbar: { icon: <span>Icon2</span> }, name: 'plugin-two' },\n ]}\n />,\n );\n\n expect(container.firstChild).toBeInTheDocument();\n // Only plugin-two should be rendered (plugin-one is disabled)\n });\n\n it('renders done button when not deletable', () => {\n render(<DefaultToolbar {...defaultProps} deletable={false} />);\n\n expect(screen.getByLabelText('Done')).toBeInTheDocument();\n });\n\n it('does not render done button when deletable', () => {\n render(<DefaultToolbar {...defaultProps} deletable={true} />);\n\n expect(screen.queryByLabelText('Done')).not.toBeInTheDocument();\n });\n\n it('does not render done button when showDone is false', () => {\n render(<DefaultToolbar {...defaultProps} showDone={false} deletable={false} />);\n\n expect(screen.queryByLabelText('Done')).not.toBeInTheDocument();\n });\n });\n\n describe('interactions', () => {\n it('calls onDone when done button is clicked', async () => {\n render(<DefaultToolbar {...defaultProps} deletable={false} />);\n\n const doneButton = screen.getByLabelText('Done');\n fireEvent.click(doneButton);\n\n expect(onDone).toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _utils = require("../../../__tests__/utils");
5
+ var _slate = require("slate");
6
+ var _editorAndToolbar = require("../editor-and-toolbar");
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _debug = _interopRequireDefault(require("debug"));
9
+ var _react2 = require("@testing-library/react");
10
+ jest.mock('../toolbar', function () {
11
+ return function () {
12
+ return /*#__PURE__*/_react["default"].createElement("div", null, "---- toolbar ------ ");
13
+ };
14
+ });
15
+ (0, _utils.mockIconButton)();
16
+ var log = (0, _debug["default"])('@pie-lib:editable-html:test:editor-and-toolbar');
17
+ describe('toolbar', function () {
18
+ var onDelete, classes;
19
+ beforeEach(function () {
20
+ onDelete = jest.fn();
21
+ classes = (0, _utils.classObject)('root', 'editorHolder', 'editorInFocus');
22
+ });
23
+ it('renders EditorAndToolbar component', function () {
24
+ var value = _slate.Value.fromJSON({});
25
+ Object.defineProperty(value, 'isFocused', {
26
+ get: jest.fn(function () {
27
+ return true;
28
+ })
29
+ });
30
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_editorAndToolbar.EditorAndToolbar, {
31
+ classes: classes,
32
+ value: value,
33
+ plugins: [],
34
+ onDone: jest.fn(),
35
+ onChange: jest.fn()
36
+ }, "children")),
37
+ container = _render.container;
38
+
39
+ // Verify component rendered
40
+ expect(container.firstChild).toBeInTheDocument();
41
+ // Verify toolbar is present
42
+ expect(_react2.screen.getByText('---- toolbar ------')).toBeInTheDocument();
43
+ // Verify children are rendered
44
+ expect(_react2.screen.getByText('children')).toBeInTheDocument();
45
+ });
46
+ });
47
+ //# sourceMappingURL=editor-and-toolbar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-and-toolbar.test.js","names":["_utils","require","_slate","_editorAndToolbar","_react","_interopRequireDefault","_debug","_react2","jest","mock","createElement","mockIconButton","log","debug","describe","onDelete","classes","beforeEach","fn","classObject","it","value","Value","fromJSON","Object","defineProperty","get","_render","render","EditorAndToolbar","plugins","onDone","onChange","container","expect","firstChild","toBeInTheDocument","screen","getByText"],"sources":["../../../../src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx"],"sourcesContent":["import { classObject, mockIconButton } from '../../../__tests__/utils';\n\nimport { Value } from 'slate';\nimport { EditorAndToolbar } from '../editor-and-toolbar';\nimport React from 'react';\nimport debug from 'debug';\nimport { render, screen } from '@testing-library/react';\n\njest.mock('../toolbar', () => () => <div>---- toolbar ------ </div>);\n\nmockIconButton();\n\nconst log = debug('@pie-lib:editable-html:test:editor-and-toolbar');\n\ndescribe('toolbar', () => {\n let onDelete, classes;\n\n beforeEach(() => {\n onDelete = jest.fn();\n classes = classObject('root', 'editorHolder', 'editorInFocus');\n });\n\n it('renders EditorAndToolbar component', () => {\n const value = Value.fromJSON({});\n Object.defineProperty(value, 'isFocused', { get: jest.fn(() => true) });\n\n const { container } = render(\n <EditorAndToolbar classes={classes} value={value} plugins={[]} onDone={jest.fn()} onChange={jest.fn()}>\n children\n </EditorAndToolbar>,\n );\n\n // Verify component rendered\n expect(container.firstChild).toBeInTheDocument();\n // Verify toolbar is present\n expect(screen.getByText('---- toolbar ------')).toBeInTheDocument();\n // Verify children are rendered\n expect(screen.getByText('children')).toBeInTheDocument();\n });\n});\n"],"mappings":";;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAD,sBAAA,CAAAJ,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AAEAO,IAAI,CAACC,IAAI,CAAC,YAAY,EAAE;EAAA,OAAM;IAAA,oBAAML,MAAA,YAAAM,aAAA,cAAK,sBAAyB,CAAC;EAAA;AAAA,EAAC;AAEpE,IAAAC,qBAAc,EAAC,CAAC;AAEhB,IAAMC,GAAG,GAAG,IAAAC,iBAAK,EAAC,gDAAgD,CAAC;AAEnEC,QAAQ,CAAC,SAAS,EAAE,YAAM;EACxB,IAAIC,QAAQ,EAAEC,OAAO;EAErBC,UAAU,CAAC,YAAM;IACfF,QAAQ,GAAGP,IAAI,CAACU,EAAE,CAAC,CAAC;IACpBF,OAAO,GAAG,IAAAG,kBAAW,EAAC,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC;EAChE,CAAC,CAAC;EAEFC,EAAE,CAAC,oCAAoC,EAAE,YAAM;IAC7C,IAAMC,KAAK,GAAGC,YAAK,CAACC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChCC,MAAM,CAACC,cAAc,CAACJ,KAAK,EAAE,WAAW,EAAE;MAAEK,GAAG,EAAElB,IAAI,CAACU,EAAE,CAAC;QAAA,OAAM,IAAI;MAAA;IAAE,CAAC,CAAC;IAEvE,IAAAS,OAAA,GAAsB,IAAAC,cAAM,eAC1BxB,MAAA,YAAAM,aAAA,CAACP,iBAAA,CAAA0B,gBAAgB;QAACb,OAAO,EAAEA,OAAQ;QAACK,KAAK,EAAEA,KAAM;QAACS,OAAO,EAAE,EAAG;QAACC,MAAM,EAAEvB,IAAI,CAACU,EAAE,CAAC,CAAE;QAACc,QAAQ,EAAExB,IAAI,CAACU,EAAE,CAAC;MAAE,GAAC,UAErF,CACpB,CAAC;MAJOe,SAAS,GAAAN,OAAA,CAATM,SAAS;;IAMjB;IACAC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAChD;IACAF,MAAM,CAACG,cAAM,CAACC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAACF,iBAAiB,CAAC,CAAC;IACnE;IACAF,MAAM,CAACG,cAAM,CAACC,SAAS,CAAC,UAAU,CAAC,CAAC,CAACF,iBAAiB,CAAC,CAAC;EAC1D,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _utils = require("../../../__tests__/utils");
7
+ var _toolbarButtons = require("../toolbar-buttons");
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _react2 = require("@testing-library/react");
10
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
11
+ // Mock IconButton
12
+ jest.mock('@mui/material/IconButton', function () {
13
+ return function IconButton(_ref) {
14
+ var children = _ref.children,
15
+ onClick = _ref.onClick,
16
+ className = _ref.className;
17
+ return /*#__PURE__*/_react["default"].createElement("button", {
18
+ onClick: onClick,
19
+ className: className,
20
+ "data-testid": "icon-button"
21
+ }, children);
22
+ };
23
+ });
24
+ describe('Button', function () {
25
+ var onClick = jest.fn();
26
+ beforeEach(function () {
27
+ onClick.mockClear();
28
+ });
29
+ it('renders with children', function () {
30
+ var classes = (0, _utils.classObject)('root');
31
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
32
+ onClick: onClick,
33
+ classes: classes
34
+ }, "children"));
35
+ expect(_react2.screen.getByText('children')).toBeInTheDocument();
36
+ });
37
+ it('calls onClick when clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
38
+ var user, classes, button;
39
+ return _regenerator["default"].wrap(function (_context) {
40
+ while (1) switch (_context.prev = _context.next) {
41
+ case 0:
42
+ user = _userEvent["default"].setup();
43
+ classes = (0, _utils.classObject)('root');
44
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
45
+ onClick: onClick,
46
+ classes: classes
47
+ }, "children"));
48
+ button = _react2.screen.getByText('children');
49
+ _context.next = 1;
50
+ return user.click(button);
51
+ case 1:
52
+ expect(onClick).toHaveBeenCalled();
53
+ case 2:
54
+ case "end":
55
+ return _context.stop();
56
+ }
57
+ }, _callee);
58
+ })));
59
+ });
60
+ describe('MarkButton', function () {
61
+ var classes = (0, _utils.classObject)('button', 'root', 'active');
62
+ var onToggle = jest.fn();
63
+ beforeEach(function () {
64
+ onToggle.mockClear();
65
+ });
66
+ it('renders when not active', function () {
67
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
68
+ mark: 'i',
69
+ onToggle: onToggle,
70
+ active: false,
71
+ classes: classes
72
+ }, "children"));
73
+ var button = _react2.screen.getByText('children');
74
+ expect(button).toBeInTheDocument();
75
+ expect(button).toHaveAttribute('aria-pressed', 'false');
76
+ });
77
+ it('renders when active', function () {
78
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
79
+ mark: 'i',
80
+ onToggle: onToggle,
81
+ active: true,
82
+ classes: classes
83
+ }, "children"));
84
+ var button = _react2.screen.getByText('children');
85
+ expect(button).toBeInTheDocument();
86
+ expect(button).toHaveAttribute('aria-pressed', 'true');
87
+ });
88
+ it('calls onToggle when clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
89
+ var user, button;
90
+ return _regenerator["default"].wrap(function (_context2) {
91
+ while (1) switch (_context2.prev = _context2.next) {
92
+ case 0:
93
+ user = _userEvent["default"].setup();
94
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
95
+ mark: 'i',
96
+ onToggle: onToggle,
97
+ active: false,
98
+ classes: classes
99
+ }, "children"));
100
+ button = _react2.screen.getByText('children');
101
+ _context2.next = 1;
102
+ return user.click(button);
103
+ case 1:
104
+ expect(onToggle).toHaveBeenCalled();
105
+ case 2:
106
+ case "end":
107
+ return _context2.stop();
108
+ }
109
+ }, _callee2);
110
+ })));
111
+ });
112
+ //# sourceMappingURL=toolbar-buttons.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar-buttons.test.js","names":["_utils","require","_toolbarButtons","_react","_interopRequireDefault","_react2","_userEvent","jest","mock","IconButton","_ref","children","onClick","className","createElement","describe","fn","beforeEach","mockClear","it","classes","classObject","render","RawButton","expect","screen","getByText","toBeInTheDocument","_asyncToGenerator2","_regenerator","mark","_callee","user","button","wrap","_context","prev","next","userEvent","setup","click","toHaveBeenCalled","stop","onToggle","RawMarkButton","active","toHaveAttribute","_callee2","_context2"],"sources":["../../../../src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx"],"sourcesContent":["import { classObject } from '../../../__tests__/utils';\nimport { RawButton, RawMarkButton } from '../toolbar-buttons';\nimport React from 'react';\nimport { render, screen } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\n\n// Mock IconButton\njest.mock('@mui/material/IconButton', () => {\n return function IconButton({ children, onClick, className }) {\n return (\n <button onClick={onClick} className={className} data-testid=\"icon-button\">\n {children}\n </button>\n );\n };\n});\n\ndescribe('Button', () => {\n const onClick = jest.fn();\n\n beforeEach(() => {\n onClick.mockClear();\n });\n\n it('renders with children', () => {\n const classes = classObject('root');\n render(\n <RawButton onClick={onClick} classes={classes}>\n children\n </RawButton>,\n );\n\n expect(screen.getByText('children')).toBeInTheDocument();\n });\n\n it('calls onClick when clicked', async () => {\n const user = userEvent.setup();\n const classes = classObject('root');\n render(\n <RawButton onClick={onClick} classes={classes}>\n children\n </RawButton>,\n );\n\n const button = screen.getByText('children');\n await user.click(button);\n\n expect(onClick).toHaveBeenCalled();\n });\n});\n\ndescribe('MarkButton', () => {\n const classes = classObject('button', 'root', 'active');\n const onToggle = jest.fn();\n\n beforeEach(() => {\n onToggle.mockClear();\n });\n\n it('renders when not active', () => {\n render(\n <RawMarkButton mark={'i'} onToggle={onToggle} active={false} classes={classes}>\n children\n </RawMarkButton>,\n );\n\n const button = screen.getByText('children');\n expect(button).toBeInTheDocument();\n expect(button).toHaveAttribute('aria-pressed', 'false');\n });\n\n it('renders when active', () => {\n render(\n <RawMarkButton mark={'i'} onToggle={onToggle} active={true} classes={classes}>\n children\n </RawMarkButton>,\n );\n\n const button = screen.getByText('children');\n expect(button).toBeInTheDocument();\n expect(button).toHaveAttribute('aria-pressed', 'true');\n });\n\n it('calls onToggle when clicked', async () => {\n const user = userEvent.setup();\n render(\n <RawMarkButton mark={'i'} onToggle={onToggle} active={false} classes={classes}>\n children\n </RawMarkButton>,\n );\n\n const button = screen.getByText('children');\n await user.click(button);\n\n expect(onToggle).toHaveBeenCalled();\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
5
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
6
+ var _utils = require("../../../__tests__/utils");
7
+ var _slate = require("slate");
8
+ var _toolbar = require("../toolbar");
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _react2 = require("@testing-library/react");
11
+ var _excluded = ["children", "onClick", "buttonRef"];
12
+ (0, _utils.mockMathInput)();
13
+ jest.mock('@mui/material/IconButton', function () {
14
+ return function (props) {
15
+ var children = props.children,
16
+ onClick = props.onClick,
17
+ buttonRef = props.buttonRef,
18
+ rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
19
+ return /*#__PURE__*/_react["default"].createElement("button", (0, _extends2["default"])({
20
+ onClick: onClick
21
+ }, rest), children);
22
+ };
23
+ });
24
+ var node = _slate.Inline.fromJSON({
25
+ type: 'i'
26
+ });
27
+ var parentNode = _slate.Inline.fromJSON({
28
+ type: 'i'
29
+ });
30
+ var value;
31
+ describe('toolbar', function () {
32
+ var onDelete, classes, document, toolbarOpts;
33
+ beforeEach(function () {
34
+ onDelete = jest.fn();
35
+ toolbarOpts = {
36
+ position: 'bottom',
37
+ alwaysVisible: false
38
+ };
39
+ value = _slate.Value.fromJSON({});
40
+ document = {
41
+ getClosestInline: jest.fn().mockReturnValue(node),
42
+ getParent: jest.fn().mockReturnValue()
43
+ };
44
+ Object.defineProperties(value, {
45
+ isCollapsed: {
46
+ get: jest.fn(function () {
47
+ return true;
48
+ })
49
+ },
50
+ startKey: {
51
+ get: jest.fn(function () {
52
+ return '1';
53
+ })
54
+ },
55
+ document: {
56
+ get: jest.fn(function () {
57
+ return document;
58
+ })
59
+ }
60
+ });
61
+ classes = (0, _utils.classObject)('iconRoot', 'inline', 'toolbar', 'focused', 'shared', 'inline', 'pie-toolbar');
62
+ });
63
+ test('renders custom toolbar', function () {
64
+ var plugins = [{
65
+ deleteNode: function deleteNode() {
66
+ return true;
67
+ },
68
+ toolbar: {
69
+ supports: function supports() {
70
+ return true;
71
+ },
72
+ customToolbar: function customToolbar() {
73
+ return function () {
74
+ return /*#__PURE__*/_react["default"].createElement("div", null, "custom toolbar content");
75
+ };
76
+ }
77
+ }
78
+ }];
79
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
80
+ toolbarOpts: toolbarOpts,
81
+ plugins: plugins,
82
+ classes: classes,
83
+ value: value,
84
+ onDone: jest.fn(),
85
+ onChange: jest.fn()
86
+ })),
87
+ container = _render.container;
88
+
89
+ // Verify the custom toolbar content is rendered
90
+ expect(container.firstChild).toBeInTheDocument();
91
+ expect(_react2.screen.getByText('custom toolbar content')).toBeInTheDocument();
92
+ });
93
+ describe('default', function () {
94
+ var plugins;
95
+ beforeEach(function () {
96
+ plugins = [];
97
+ });
98
+ test('renders default toolbar', function () {
99
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
100
+ toolbarOpts: toolbarOpts,
101
+ plugins: plugins,
102
+ classes: classes,
103
+ value: value,
104
+ onDone: jest.fn(),
105
+ onChange: jest.fn()
106
+ })),
107
+ container = _render2.container;
108
+
109
+ // Verify the toolbar is rendered
110
+ expect(container.firstChild).toBeInTheDocument();
111
+
112
+ // The default toolbar should render the DefaultToolbar component
113
+ // which includes a Done button
114
+ expect(_react2.screen.getByLabelText('Done')).toBeInTheDocument();
115
+ });
116
+ });
117
+ });
118
+ //# sourceMappingURL=toolbar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.test.js","names":["_utils","require","_slate","_toolbar","_react","_interopRequireDefault","_react2","_excluded","mockMathInput","jest","mock","props","children","onClick","buttonRef","rest","_objectWithoutProperties2","createElement","_extends2","node","Inline","fromJSON","type","parentNode","value","describe","onDelete","classes","document","toolbarOpts","beforeEach","fn","position","alwaysVisible","Value","getClosestInline","mockReturnValue","getParent","Object","defineProperties","isCollapsed","get","startKey","classObject","test","plugins","deleteNode","toolbar","supports","customToolbar","_render","render","Toolbar","onDone","onChange","container","expect","firstChild","toBeInTheDocument","screen","getByText","_render2","getByLabelText"],"sources":["../../../../src/plugins/toolbar/__tests__/toolbar.test.jsx"],"sourcesContent":["import { classObject, mockMathInput } from '../../../__tests__/utils';\nimport { Inline, Value } from 'slate';\nimport { Toolbar } from '../toolbar';\nimport React from 'react';\nimport { render, screen } from '@testing-library/react';\n\nmockMathInput();\n\njest.mock('@mui/material/IconButton', () => {\n return (props) => {\n const { children, onClick, buttonRef, ...rest } = props;\n return (\n <button onClick={onClick} {...rest}>\n {children}\n </button>\n );\n };\n});\n\nlet node = Inline.fromJSON({ type: 'i' });\nlet parentNode = Inline.fromJSON({\n type: 'i',\n});\nlet value;\n\ndescribe('toolbar', () => {\n let onDelete, classes, document, toolbarOpts;\n\n beforeEach(() => {\n onDelete = jest.fn();\n\n toolbarOpts = {\n position: 'bottom',\n alwaysVisible: false,\n };\n\n value = Value.fromJSON({});\n document = {\n getClosestInline: jest.fn().mockReturnValue(node),\n getParent: jest.fn().mockReturnValue(),\n };\n\n Object.defineProperties(value, {\n isCollapsed: {\n get: jest.fn(() => true),\n },\n startKey: {\n get: jest.fn(() => '1'),\n },\n document: {\n get: jest.fn(() => document),\n },\n });\n\n classes = classObject('iconRoot', 'inline', 'toolbar', 'focused', 'shared', 'inline', 'pie-toolbar');\n });\n\n test('renders custom toolbar', () => {\n const plugins = [\n {\n deleteNode: () => true,\n toolbar: {\n supports: () => true,\n customToolbar: () => () => <div>custom toolbar content</div>,\n },\n },\n ];\n\n const { container } = render(\n <Toolbar\n toolbarOpts={toolbarOpts}\n plugins={plugins}\n classes={classes}\n value={value}\n onDone={jest.fn()}\n onChange={jest.fn()}\n />,\n );\n\n // Verify the custom toolbar content is rendered\n expect(container.firstChild).toBeInTheDocument();\n expect(screen.getByText('custom toolbar content')).toBeInTheDocument();\n });\n\n describe('default', () => {\n let plugins;\n\n beforeEach(() => {\n plugins = [];\n });\n\n test('renders default toolbar', () => {\n const { container } = render(\n <Toolbar\n toolbarOpts={toolbarOpts}\n plugins={plugins}\n classes={classes}\n value={value}\n onDone={jest.fn()}\n onChange={jest.fn()}\n />,\n );\n\n // Verify the toolbar is rendered\n expect(container.firstChild).toBeInTheDocument();\n\n // The default toolbar should render the DefaultToolbar component\n // which includes a Done button\n expect(screen.getByLabelText('Done')).toBeInTheDocument();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _material = require("@mui/material");
11
+ var _styles = require("@mui/material/styles");
12
+ var StyledDialogTitle = (0, _styles.styled)(_material.DialogTitle)(function () {
13
+ return {
14
+ fontSize: 'max(1.25rem, 18px)'
15
+ };
16
+ });
17
+ var StyledDialogContentText = (0, _styles.styled)(_material.DialogContentText)(function () {
18
+ return {
19
+ fontSize: 'max(1rem, 14px)'
20
+ };
21
+ });
22
+ var AlertDialog = function AlertDialog(_ref) {
23
+ var text = _ref.text,
24
+ title = _ref.title,
25
+ onClose = _ref.onClose,
26
+ onConfirm = _ref.onConfirm,
27
+ open = _ref.open,
28
+ onCloseText = _ref.onCloseText,
29
+ onConfirmText = _ref.onConfirmText,
30
+ disableAutoFocus = _ref.disableAutoFocus,
31
+ disableEnforceFocus = _ref.disableEnforceFocus,
32
+ disableRestoreFocus = _ref.disableRestoreFocus;
33
+ return /*#__PURE__*/_react["default"].createElement(_material.Dialog, {
34
+ open: open,
35
+ disableAutoFocus: disableAutoFocus,
36
+ disableEnforceFocus: disableEnforceFocus,
37
+ disableRestoreFocus: disableRestoreFocus,
38
+ onClose: onClose
39
+ }, title && /*#__PURE__*/_react["default"].createElement(StyledDialogTitle, null, title), text && /*#__PURE__*/_react["default"].createElement(_material.DialogContent, null, /*#__PURE__*/_react["default"].createElement(StyledDialogContentText, null, text)), /*#__PURE__*/_react["default"].createElement(_material.DialogActions, null, onClose && /*#__PURE__*/_react["default"].createElement(_material.Button, {
40
+ onClick: onClose,
41
+ color: "primary"
42
+ }, onCloseText), onConfirm && /*#__PURE__*/_react["default"].createElement(_material.Button, {
43
+ autoFocus: true,
44
+ onClick: onConfirm,
45
+ color: "primary"
46
+ }, onConfirmText)));
47
+ };
48
+ AlertDialog.defaultProps = {
49
+ onCloseText: 'CANCEL',
50
+ onConfirmText: 'OK',
51
+ disableAutoFocus: false,
52
+ disableEnforceFocus: false,
53
+ disableRestoreFocus: false
54
+ };
55
+ AlertDialog.propTypes = {
56
+ text: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
57
+ title: _propTypes["default"].string,
58
+ onClose: _propTypes["default"].func,
59
+ onConfirm: _propTypes["default"].func,
60
+ open: _propTypes["default"].bool,
61
+ onConfirmText: _propTypes["default"].string,
62
+ onCloseText: _propTypes["default"].string,
63
+ disableAutoFocus: _propTypes["default"].bool,
64
+ disableEnforceFocus: _propTypes["default"].bool,
65
+ disableRestoreFocus: _propTypes["default"].bool
66
+ };
67
+ var _default = exports["default"] = AlertDialog;
68
+ //# sourceMappingURL=alert-dialog.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "13.0.8",
3
+ "version": "13.1.0-beta.1",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -15,11 +15,11 @@
15
15
  "@emotion/styled": "^11.14.1",
16
16
  "@mui/icons-material": "^7.3.4",
17
17
  "@mui/material": "^7.3.4",
18
- "@pie-lib/drag": "^4.0.6",
19
- "@pie-lib/math-input": "^8.1.1",
20
- "@pie-lib/math-rendering": "^5.1.0",
21
- "@pie-lib/math-toolbar": "^3.0.6",
22
- "@pie-lib/render-ui": "^6.1.3",
18
+ "@pie-lib/drag": "^4.0.2",
19
+ "@pie-lib/math-input-mathlive": "^1.0.7",
20
+ "@pie-lib/math-rendering": "^5.0.2",
21
+ "@pie-lib/math-toolbar": "^3.1.0-beta.2",
22
+ "@pie-lib/render-ui": "^6.1.0",
23
23
  "change-case": "^3.0.2",
24
24
  "classnames": "^2.2.6",
25
25
  "debug": "^4.1.1",
@@ -51,6 +51,6 @@
51
51
  "publishConfig": {
52
52
  "access": "public"
53
53
  },
54
- "gitHead": "674bec751a99ddb5a3525f08ff48fdc52c68cb02",
54
+ "gitHead": "433bcb776c2975739e7417f133d31cd996164116",
55
55
  "scripts": {}
56
56
  }
@@ -28,7 +28,7 @@ export function mockIconButton() {
28
28
  });
29
29
  }
30
30
  export function mockMathInput() {
31
- jest.mock('@pie-lib/math-input', () => ({
31
+ jest.mock('@pie-lib/math-input-mathlive', () => ({
32
32
  addBrackets: jest.fn((s) => s),
33
33
  removeBrackets: jest.fn((s) => s),
34
34
  ...mockComponents('Keypad', 'MathQuillInput', 'EditableMathInput', 'HorizontalKeypad'),
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { styled } from '@mui/material/styles';
4
- import { mq } from '@pie-lib/math-input';
4
+ import { mq } from '@pie-lib/math-input-mathlive';
5
5
 
6
6
  const StyledSpanContainer = styled('span')(() => ({
7
7
  display: 'inline-flex',
package/LICENSE.md DELETED
@@ -1,5 +0,0 @@
1
- Copyright 2019 CoreSpring Inc
2
-
3
- Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
4
-
5
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.