@pie-lib/editable-html 13.0.7 → 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 (50) hide show
  1. package/CHANGELOG.md +0 -22
  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/drag-in-the-blank/choice.js +3 -0
  29. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  30. package/lib/plugins/respArea/math-templated/index.js +2 -2
  31. package/lib/plugins/respArea/math-templated/index.js.map +1 -1
  32. package/lib/plugins/table/__tests__/index.test.js +416 -0
  33. package/lib/plugins/table/__tests__/index.test.js.map +1 -0
  34. package/lib/plugins/table/__tests__/table-toolbar.test.js +81 -0
  35. package/lib/plugins/table/__tests__/table-toolbar.test.js.map +1 -0
  36. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +153 -0
  37. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js.map +1 -0
  38. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +47 -0
  39. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js.map +1 -0
  40. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +112 -0
  41. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js.map +1 -0
  42. package/lib/plugins/toolbar/__tests__/toolbar.test.js +118 -0
  43. package/lib/plugins/toolbar/__tests__/toolbar.test.js.map +1 -0
  44. package/lib/shared/alert-dialog.js +68 -0
  45. package/package.json +7 -7
  46. package/src/__tests__/utils.js +1 -1
  47. package/src/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js +71 -0
  48. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +3 -0
  49. package/src/plugins/respArea/math-templated/index.jsx +1 -1
  50. package/LICENSE.md +0 -5
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _react2 = require("@testing-library/react");
7
+ var _tableToolbar = require("../table-toolbar");
8
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
9
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
+ describe('table-toolbar', function () {
11
+ var onDone, onAddColumn, onAddRow, onRemoveColumn, onRemoveRow, onRemoveTable, onToggleBorder;
12
+ beforeEach(function () {
13
+ onAddColumn = jest.fn();
14
+ onAddRow = jest.fn();
15
+ onRemoveColumn = jest.fn();
16
+ onRemoveRow = jest.fn();
17
+ onRemoveTable = jest.fn();
18
+ onDone = jest.fn();
19
+ onToggleBorder = jest.fn();
20
+ });
21
+ var renderComponent = function renderComponent() {
22
+ var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
23
+ var props = _objectSpread({
24
+ onDone: onDone,
25
+ onAddRow: onAddRow,
26
+ onRemoveRow: onRemoveRow,
27
+ onAddColumn: onAddColumn,
28
+ onRemoveColumn: onRemoveColumn,
29
+ onRemoveTable: onRemoveTable,
30
+ hasBorder: true,
31
+ onToggleBorder: onToggleBorder,
32
+ classes: {
33
+ tableToolbar: 'table-toolbar'
34
+ },
35
+ plugins: [],
36
+ value: {},
37
+ onChange: jest.fn()
38
+ }, extras);
39
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tableToolbar.TableToolbar, props));
40
+ };
41
+ describe('rendering', function () {
42
+ it('renders toolbar without crashing', function () {
43
+ var _renderComponent = renderComponent(),
44
+ container = _renderComponent.container;
45
+
46
+ // Check that the toolbar container is rendered
47
+ expect(container.firstChild).toBeInTheDocument();
48
+
49
+ // Check for Done button (only one with aria-label)
50
+ expect(_react2.screen.getByLabelText('Done')).toBeInTheDocument();
51
+
52
+ // Check that there are multiple buttons (table manipulation buttons)
53
+ var buttons = container.querySelectorAll('button');
54
+ expect(buttons.length).toBeGreaterThan(1);
55
+ });
56
+ it('renders with hasBorder prop', function () {
57
+ var _renderComponent2 = renderComponent({
58
+ hasBorder: false
59
+ }),
60
+ container = _renderComponent2.container;
61
+ expect(container.firstChild).toBeInTheDocument();
62
+
63
+ // Verify hasBorder affects rendering - button with aria-pressed attribute
64
+ var borderButton = container.querySelector('button[aria-pressed]');
65
+ expect(borderButton).toBeInTheDocument();
66
+ expect(borderButton).toHaveAttribute('aria-pressed', 'false');
67
+ });
68
+ it('renders with hasBorder true', function () {
69
+ var _renderComponent3 = renderComponent({
70
+ hasBorder: true
71
+ }),
72
+ container = _renderComponent3.container;
73
+
74
+ // Verify hasBorder affects rendering
75
+ var borderButton = container.querySelector('button[aria-pressed]');
76
+ expect(borderButton).toBeInTheDocument();
77
+ expect(borderButton).toHaveAttribute('aria-pressed', 'true');
78
+ });
79
+ });
80
+ });
81
+ //# sourceMappingURL=table-toolbar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-toolbar.test.js","names":["_react","_interopRequireDefault","require","_react2","_tableToolbar","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","describe","onDone","onAddColumn","onAddRow","onRemoveColumn","onRemoveRow","onRemoveTable","onToggleBorder","beforeEach","jest","fn","renderComponent","extras","undefined","props","hasBorder","classes","tableToolbar","plugins","value","onChange","render","createElement","TableToolbar","it","_renderComponent","container","expect","firstChild","toBeInTheDocument","screen","getByLabelText","buttons","querySelectorAll","toBeGreaterThan","_renderComponent2","borderButton","querySelector","toHaveAttribute","_renderComponent3"],"sources":["../../../../src/plugins/table/__tests__/table-toolbar.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render, screen } from '@testing-library/react';\nimport { TableToolbar } from '../table-toolbar';\n\ndescribe('table-toolbar', () => {\n let onDone, onAddColumn, onAddRow, onRemoveColumn, onRemoveRow, onRemoveTable, onToggleBorder;\n\n beforeEach(() => {\n onAddColumn = jest.fn();\n onAddRow = jest.fn();\n onRemoveColumn = jest.fn();\n onRemoveRow = jest.fn();\n onRemoveTable = jest.fn();\n onDone = jest.fn();\n onToggleBorder = jest.fn();\n });\n\n const renderComponent = (extras = {}) => {\n const props = {\n onDone,\n onAddRow,\n onRemoveRow,\n onAddColumn,\n onRemoveColumn,\n onRemoveTable,\n hasBorder: true,\n onToggleBorder,\n classes: {\n tableToolbar: 'table-toolbar',\n },\n plugins: [],\n value: {},\n onChange: jest.fn(),\n ...extras,\n };\n\n return render(<TableToolbar {...props} />);\n };\n\n describe('rendering', () => {\n it('renders toolbar without crashing', () => {\n const { container } = renderComponent();\n\n // Check that the toolbar container is rendered\n expect(container.firstChild).toBeInTheDocument();\n\n // Check for Done button (only one with aria-label)\n expect(screen.getByLabelText('Done')).toBeInTheDocument();\n\n // Check that there are multiple buttons (table manipulation buttons)\n const buttons = container.querySelectorAll('button');\n expect(buttons.length).toBeGreaterThan(1);\n });\n\n it('renders with hasBorder prop', () => {\n const { container } = renderComponent({ hasBorder: false });\n\n expect(container.firstChild).toBeInTheDocument();\n\n // Verify hasBorder affects rendering - button with aria-pressed attribute\n const borderButton = container.querySelector('button[aria-pressed]');\n expect(borderButton).toBeInTheDocument();\n expect(borderButton).toHaveAttribute('aria-pressed', 'false');\n });\n\n it('renders with hasBorder true', () => {\n const { container } = renderComponent({ hasBorder: true });\n\n // Verify hasBorder affects rendering\n const borderButton = container.querySelector('button[aria-pressed]');\n expect(borderButton).toBeInTheDocument();\n expect(borderButton).toHaveAttribute('aria-pressed', 'true');\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -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":[]}