@pie-lib/drag 2.2.10-next.1 → 2.4.0-beta.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.
@@ -9,6 +9,8 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports["default"] = void 0;
11
11
 
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
12
14
  var _react = _interopRequireDefault(require("react"));
13
15
 
14
16
  var _reactDndMultiBackend = _interopRequireWildcard(require("react-dnd-multi-backend"));
@@ -26,7 +28,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
26
28
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
29
 
28
30
  var backends = [{
29
- backend: _reactDndHtml5Backend.HTML5Backend
31
+ backend: _reactDndHtml5Backend.HTML5Backend,
32
+ transition: _reactDndMultiBackend.MouseTransition
30
33
  }, {
31
34
  backend: _reactDndTouchBackend.TouchBackend,
32
35
  options: {
@@ -40,15 +43,17 @@ var backends = [{
40
43
 
41
44
  var _default = function _default(Component) {
42
45
  return function (props) {
43
- return /*#__PURE__*/_react["default"].createElement(_reactDnd.DndProvider, {
46
+ var isClient = typeof window !== 'undefined';
47
+ return /*#__PURE__*/_react["default"].createElement(_reactDnd.DndProvider, (0, _extends2["default"])({
44
48
  backend: _reactDndMultiBackend["default"],
45
49
  options: {
46
50
  backends: backends
47
- },
51
+ }
52
+ }, isClient && {
48
53
  context: window
49
- }, /*#__PURE__*/_react["default"].createElement(Component, props), /*#__PURE__*/_react["default"].createElement(_previewComponent["default"], null));
54
+ }), /*#__PURE__*/_react["default"].createElement(Component, props), /*#__PURE__*/_react["default"].createElement(_previewComponent["default"], null));
50
55
  };
51
56
  };
52
57
 
53
58
  exports["default"] = _default;
54
- //# sourceMappingURL=with-drag-context.js.map
59
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93aXRoLWRyYWctY29udGV4dC5qcyJdLCJuYW1lcyI6WyJiYWNrZW5kcyIsImJhY2tlbmQiLCJIVE1MNUJhY2tlbmQiLCJ0cmFuc2l0aW9uIiwiTW91c2VUcmFuc2l0aW9uIiwiVG91Y2hCYWNrZW5kIiwib3B0aW9ucyIsImVuYWJsZU1vdXNlRXZlbnRzIiwiZW5hYmxlVG91Y2hFdmVudHMiLCJwcmV2aWV3IiwiVG91Y2hUcmFuc2l0aW9uIiwic2tpcERpc3BhdGNoT25UcmFuc2l0aW9uIiwiQ29tcG9uZW50IiwicHJvcHMiLCJpc0NsaWVudCIsIndpbmRvdyIsIk11bHRpQmFja2VuZCIsImNvbnRleHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7O0FBRUEsSUFBTUEsUUFBUSxHQUFHLENBQ2Y7QUFDRUMsRUFBQUEsT0FBTyxFQUFFQyxrQ0FEWDtBQUVFQyxFQUFBQSxVQUFVLEVBQUVDO0FBRmQsQ0FEZSxFQUtmO0FBQ0VILEVBQUFBLE9BQU8sRUFBRUksa0NBRFg7QUFFRUMsRUFBQUEsT0FBTyxFQUFFO0FBQUVDLElBQUFBLGlCQUFpQixFQUFFLElBQXJCO0FBQTJCQyxJQUFBQSxpQkFBaUIsRUFBRTtBQUE5QyxHQUZYO0FBR0VDLEVBQUFBLE9BQU8sRUFBRSxJQUhYO0FBSUVOLEVBQUFBLFVBQVUsRUFBRU8scUNBSmQ7QUFLRUMsRUFBQUEsd0JBQXdCLEVBQUU7QUFMNUIsQ0FMZSxDQUFqQjs7ZUFjZSxrQkFBQ0MsU0FBRDtBQUFBLFNBQWUsVUFBQUMsS0FBSyxFQUFJO0FBQ3JDLFFBQU1DLFFBQVEsR0FBRyxPQUFPQyxNQUFQLEtBQWtCLFdBQW5DO0FBRUEsd0JBQ0UsZ0NBQUMscUJBQUQ7QUFBYSxNQUFBLE9BQU8sRUFBRUMsZ0NBQXRCO0FBQW9DLE1BQUEsT0FBTyxFQUFFO0FBQUVoQixRQUFBQSxRQUFRLEVBQVJBO0FBQUY7QUFBN0MsT0FBZ0VjLFFBQVEsSUFBSTtBQUFFRyxNQUFBQSxPQUFPLEVBQUVGO0FBQVgsS0FBNUUsZ0JBQ0UsZ0NBQUMsU0FBRCxFQUFlRixLQUFmLENBREYsZUFFRSxnQ0FBQyw0QkFBRCxPQUZGLENBREY7QUFNRCxHQVRjO0FBQUEsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTXVsdGlCYWNrZW5kLCB7IFRvdWNoVHJhbnNpdGlvbiwgTW91c2VUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtZG5kLW11bHRpLWJhY2tlbmQnO1xuaW1wb3J0IHsgRG5kUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1kbmQnO1xuaW1wb3J0IHsgVG91Y2hCYWNrZW5kIH0gZnJvbSAncmVhY3QtZG5kLXRvdWNoLWJhY2tlbmQnO1xuaW1wb3J0IHsgSFRNTDVCYWNrZW5kIH0gZnJvbSAncmVhY3QtZG5kLWh0bWw1LWJhY2tlbmQnO1xuXG5pbXBvcnQgUHJldmlld0NvbXBvbmVudCBmcm9tICcuL3ByZXZpZXctY29tcG9uZW50JztcblxuY29uc3QgYmFja2VuZHMgPSBbXG4gIHtcbiAgICBiYWNrZW5kOiBIVE1MNUJhY2tlbmQsXG4gICAgdHJhbnNpdGlvbjogTW91c2VUcmFuc2l0aW9uLFxuICB9LFxuICB7XG4gICAgYmFja2VuZDogVG91Y2hCYWNrZW5kLFxuICAgIG9wdGlvbnM6IHsgZW5hYmxlTW91c2VFdmVudHM6IHRydWUsIGVuYWJsZVRvdWNoRXZlbnRzOiB0cnVlIH0sXG4gICAgcHJldmlldzogdHJ1ZSxcbiAgICB0cmFuc2l0aW9uOiBUb3VjaFRyYW5zaXRpb24sXG4gICAgc2tpcERpc3BhdGNoT25UcmFuc2l0aW9uOiB0cnVlLFxuICB9LFxuXTtcblxuZXhwb3J0IGRlZmF1bHQgKENvbXBvbmVudCkgPT4gcHJvcHMgPT4ge1xuICBjb25zdCBpc0NsaWVudCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4gIHJldHVybiAoXG4gICAgPERuZFByb3ZpZGVyIGJhY2tlbmQ9e011bHRpQmFja2VuZH0gb3B0aW9ucz17eyBiYWNrZW5kcyB9fSB7Li4uKGlzQ2xpZW50ICYmIHsgY29udGV4dDogd2luZG93IH0pfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgICAgPFByZXZpZXdDb21wb25lbnQgLz5cbiAgICA8L0RuZFByb3ZpZGVyPlxuICApO1xufTtcbiJdfQ==
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@pie-lib/drag",
3
- "version": "2.2.10-next.1+23991a09",
3
+ "version": "2.4.0-beta.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
7
7
  "dependencies": {
8
8
  "@material-ui/core": "^3.8.3",
9
- "@pie-lib/math-rendering": "2.5.18",
10
- "@pie-lib/render-ui": "^4.15.10-next.1+23991a09",
9
+ "@pie-lib/math-rendering": "^3.4.0-beta.0",
10
+ "@pie-lib/render-ui": "^4.17.0-beta.0",
11
11
  "classnames": "^2.2.6",
12
12
  "lodash": "^4.17.11",
13
13
  "react-dnd": "^14.0.5",
@@ -21,5 +21,5 @@
21
21
  "scripts": {},
22
22
  "author": "",
23
23
  "license": "ISC",
24
- "gitHead": "23991a09b77492c24dcb5235049667cdcc211d80"
24
+ "gitHead": "3818c24530f62b5bb9be7a2c6aa5428f13a17e0a"
25
25
  }
@@ -0,0 +1,68 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`placeholder snapshot className 1`] = `
4
+ <div
5
+ className="placeholder bar"
6
+ style={
7
+ Object {
8
+ "minHeight": undefined,
9
+ }
10
+ }
11
+ >
12
+ Foo
13
+ </div>
14
+ `;
15
+
16
+ exports[`placeholder snapshot disabled: true 1`] = `
17
+ <div
18
+ className="placeholder disabled"
19
+ style={
20
+ Object {
21
+ "minHeight": undefined,
22
+ }
23
+ }
24
+ >
25
+ Foo
26
+ </div>
27
+ `;
28
+
29
+ exports[`placeholder snapshot isOver: true 1`] = `
30
+ <div
31
+ className="placeholder over"
32
+ style={
33
+ Object {
34
+ "minHeight": undefined,
35
+ }
36
+ }
37
+ >
38
+ Foo
39
+ </div>
40
+ `;
41
+
42
+ exports[`placeholder snapshot reqular 1`] = `
43
+ <div
44
+ className="placeholder"
45
+ style={
46
+ Object {
47
+ "minHeight": undefined,
48
+ }
49
+ }
50
+ >
51
+ Foo
52
+ </div>
53
+ `;
54
+
55
+ exports[`placeholder snapshot specific grid rowsRepeatValue 1`] = `
56
+ <div
57
+ className="placeholder"
58
+ style={
59
+ Object {
60
+ "gridTemplateColumns": "repeat(1, 1fr)",
61
+ "gridTemplateRows": "repeat(2, min-content)",
62
+ "minHeight": undefined,
63
+ }
64
+ }
65
+ >
66
+ Foo
67
+ </div>
68
+ `;
@@ -0,0 +1,48 @@
1
+ import { shallow } from 'enzyme';
2
+ import React from 'react';
3
+ import { PlaceHolder } from '../placeholder';
4
+
5
+ describe('placeholder', () => {
6
+ const wrapper = (extras) => {
7
+ const defaults = {
8
+ classes: {
9
+ placeholder: 'placeholder',
10
+ disabled: 'disabled',
11
+ over: 'over',
12
+ number: 'number',
13
+ },
14
+ };
15
+ const props = { ...defaults, ...extras };
16
+ return shallow(<PlaceHolder {...props}> Foo </PlaceHolder>);
17
+ };
18
+
19
+ describe('snapshot', () => {
20
+ it('reqular', () => {
21
+ const w = wrapper();
22
+ expect(w).toMatchSnapshot();
23
+ });
24
+
25
+ it('isOver: true', () => {
26
+ expect(wrapper({ isOver: true })).toMatchSnapshot();
27
+ });
28
+
29
+ it('disabled: true', () => {
30
+ expect(wrapper({ disabled: true })).toMatchSnapshot();
31
+ });
32
+
33
+ it('className', () => {
34
+ expect(wrapper({ className: 'bar' })).toMatchSnapshot();
35
+ });
36
+
37
+ it('specific grid rowsRepeatValue', () => {
38
+ const w = wrapper({
39
+ grid: {
40
+ rows: 2,
41
+ columns: 1,
42
+ rowsRepeatValue: 'min-content',
43
+ },
44
+ });
45
+ expect(w).toMatchSnapshot();
46
+ });
47
+ });
48
+ });
@@ -0,0 +1,21 @@
1
+ import { createContext, createElement } from 'react';
2
+ import { withUid } from '../uid-context';
3
+
4
+ jest.mock('react', () => ({
5
+ createElement: jest.fn((c) => c),
6
+ createContext: jest.fn().mockReturnValue({
7
+ Consumer: jest.fn((fn) => fn),
8
+ Provider: jest.fn(),
9
+ }),
10
+ }));
11
+
12
+ describe('id-context', () => {
13
+ describe('withUid', () => {
14
+ it('calls createElement', () => {
15
+ const Wrapped = withUid(() => ({}));
16
+
17
+ const Consumer = Wrapped({});
18
+ expect(createElement).toBeCalledWith(expect.any(Function), null, expect.anything());
19
+ });
20
+ });
21
+ });
@@ -1,5 +1,5 @@
1
1
  import { DropTarget } from 'react-dnd';
2
- import { DroppablePlaceholder } from '../lib/droppable-placeholder';
2
+ import { DroppablePlaceholder } from './droppable-placeholder';
3
3
  import dragType from './drag-type';
4
4
 
5
5
  export const spec = {
@@ -4,12 +4,6 @@ import PropTypes from 'prop-types';
4
4
 
5
5
  const preventInteractionStyle = {
6
6
  flex: 1,
7
- WebkitTouchCallout: 'none',
8
- WebkitUserSelect: 'none',
9
- KhtmlUserSelect: 'none',
10
- MozUserSelect: 'none',
11
- MsUserSelect: 'none',
12
- UserSelect: 'none',
13
7
  };
14
8
 
15
9
  export class DroppablePlaceholder extends React.Component {
@@ -19,14 +13,23 @@ export class DroppablePlaceholder extends React.Component {
19
13
  isOver: PropTypes.bool,
20
14
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
21
15
  disabled: PropTypes.bool,
16
+ isVerticalPool: PropTypes.bool,
17
+ minHeight: PropTypes.number,
22
18
  };
23
19
 
24
20
  render() {
25
- const { children, connectDropTarget, isOver, disabled, classes } = this.props;
21
+ const { children, connectDropTarget, isOver, disabled, classes, isVerticalPool, minHeight } = this.props;
26
22
 
27
23
  return connectDropTarget(
28
24
  <div style={preventInteractionStyle}>
29
- <PlaceHolder disabled={disabled} isOver={isOver} choiceBoard={true} className={classes}>
25
+ <PlaceHolder
26
+ disabled={disabled}
27
+ isOver={isOver}
28
+ choiceBoard={true}
29
+ className={classes}
30
+ isVerticalPool={isVerticalPool}
31
+ minHeight={minHeight}
32
+ >
30
33
  {children}
31
34
  </PlaceHolder>
32
35
  </div>,
@@ -3,9 +3,23 @@ import { withStyles } from '@material-ui/core/styles';
3
3
  import classNames from 'classnames';
4
4
  import PropTypes from 'prop-types';
5
5
  import grey from '@material-ui/core/colors/grey';
6
+ import { color } from '@pie-lib/render-ui';
6
7
 
7
8
  export const PlaceHolder = (props) => {
8
- const { children, classes, className, isOver, type, grid, disabled, choiceBoard } = props;
9
+ const {
10
+ children,
11
+ classes,
12
+ className,
13
+ isOver,
14
+ type,
15
+ grid,
16
+ disabled,
17
+ choiceBoard,
18
+ isCategorize,
19
+ isVerticalPool,
20
+ minHeight,
21
+ } = props;
22
+
9
23
  const names = classNames(
10
24
  classes.placeholder,
11
25
  disabled && classes.disabled,
@@ -19,14 +33,33 @@ export const PlaceHolder = (props) => {
19
33
  if (grid && grid.columns) {
20
34
  style.gridTemplateColumns = `repeat(${grid.columns}, 1fr)`;
21
35
  }
36
+
22
37
  if (grid && grid.rows) {
23
38
  const repeatValue = grid.rowsRepeatValue || '1fr';
24
39
 
25
40
  style.gridTemplateRows = `repeat(${grid.rows}, ${repeatValue})`;
26
41
  }
27
42
 
43
+ // The "type" is only sent through placement-ordering / placeholder
44
+ // It can be "choice" or "target"
45
+ // We apply a different style for the "choice" type
46
+ // For any other type, use a dashed black border and a white fill
47
+ if (type === 'choice') {
48
+ style.border = `1px solid ${color.borderLight()}`;
49
+ style.background = color.backgroundDark();
50
+ }
51
+
52
+ const boardStyle = isCategorize ? classes.categorizeBoard : classes.board;
53
+
28
54
  return (
29
- <div style={style} className={choiceBoard ? classes.board : names}>
55
+ <div
56
+ style={{ ...style, minHeight: minHeight }}
57
+ className={classNames(
58
+ classes.noSelectStyles,
59
+ choiceBoard ? boardStyle : names,
60
+ isVerticalPool && classes.verticalPool,
61
+ )}
62
+ >
30
63
  {children}
31
64
  </div>
32
65
  );
@@ -47,20 +80,31 @@ PlaceHolder.propTypes = {
47
80
  index: PropTypes.number,
48
81
  type: PropTypes.string,
49
82
  disabled: PropTypes.bool,
83
+ isCategorize: PropTypes.bool,
84
+ isVerticalPool: PropTypes.bool,
85
+ minHeight: PropTypes.number,
50
86
  };
51
87
 
52
88
  const styles = (theme) => ({
89
+ noSelectStyles: {
90
+ WebkitTouchCallout: 'none',
91
+ WebkitUserSelect: 'none',
92
+ KhtmlUserSelect: 'none',
93
+ MozUserSelect: 'none',
94
+ MsUserSelect: 'none',
95
+ userSelect: 'none',
96
+ },
53
97
  placeholder: {
54
98
  width: '100%',
55
99
  height: '100%',
56
- background: theme.palette.grey[200],
57
- border: '1px solid #D1D1D1',
100
+ background: color.white(),
58
101
  transition: 'background-color 200ms linear, border-color 200ms linear',
59
102
  boxSizing: 'border-box',
60
103
  display: 'grid',
61
104
  gridRowGap: `${theme.spacing.unit}px`,
62
105
  gridColumnGap: `${theme.spacing.unit}px`,
63
106
  padding: theme.spacing.unit * 1,
107
+ border: `2px dashed ${color.black()}`,
64
108
  },
65
109
  disabled: {
66
110
  boxShadow: 'none',
@@ -71,15 +115,30 @@ const styles = (theme) => ({
71
115
  backgroundColor: `${grey[300]}`,
72
116
  },
73
117
  board: {
74
- border: '1px solid #D1D1D1',
75
118
  padding: theme.spacing.unit,
76
119
  display: 'flex',
77
120
  flexWrap: 'wrap',
78
121
  alignItems: 'center',
79
- minHeight: '200px',
122
+ minHeight: '100px',
123
+ justifyContent: 'center',
124
+ overflow: 'hidden',
125
+ touchAction: 'none',
126
+ backgroundColor: color.backgroundDark(),
127
+ },
128
+ categorizeBoard: {
129
+ padding: theme.spacing.unit / 2,
130
+ display: 'flex',
131
+ flexWrap: 'wrap',
132
+ alignItems: 'center',
133
+ minHeight: '100px',
80
134
  justifyContent: 'center',
81
135
  overflow: 'hidden',
82
136
  touchAction: 'none',
137
+ backgroundColor: color.backgroundDark(),
138
+ },
139
+ verticalPool: {
140
+ display: 'flex',
141
+ flexFlow: 'column wrap',
83
142
  },
84
143
  });
85
144
 
@@ -1,26 +1,28 @@
1
- import React, { useEffect, useRef } from 'react';
1
+ import React, { useEffect, useRef, useState, useCallback } from 'react';
2
2
  import { usePreview } from 'react-dnd-multi-backend';
3
- import { PreviewPrompt } from '@pie-lib/render-ui';
3
+ import { PreviewPrompt, color } from '@pie-lib/render-ui';
4
4
  import { renderMath } from '@pie-lib/math-rendering';
5
- import { color } from '@pie-lib/render-ui';
6
5
 
7
6
  const styles = {
8
7
  maskBlank: {
9
- border: '1px solid black',
10
- color: 'black',
11
- minWidth: '90px',
8
+ // this style is applied only on small screens and for touch devices when dragging, for drag-in-the-blank.
9
+ // It is styled to be identical to the drag-in-the-blank chip
10
+ backgroundColor: color.white(),
11
+ border: `1px solid ${color.text()}`,
12
+ color: color.text(),
13
+ alignItems: 'center',
14
+ display: 'inline-flex',
15
+ height: 'initial',
12
16
  minHeight: '32px',
13
- height: 'auto',
17
+ fontSize: 'inherit',
18
+ whiteSpace: 'pre-wrap',
14
19
  maxWidth: '374px',
15
- display: 'flex',
16
- padding: '4px',
17
- alignItems: 'center',
18
- justifyContent: 'center',
19
- borderRadius: '16px',
20
+ borderRadius: '3px',
21
+ padding: '12px',
20
22
  },
21
23
  ica: {
22
24
  backgroundColor: color.background(),
23
- border: `1px solid ${color.primary()}`,
25
+ border: `1px solid ${color.borderDark()}`,
24
26
  display: 'flex',
25
27
  alignItems: 'center',
26
28
  justifyContent: 'center',
@@ -71,36 +73,73 @@ const getPrompt = (itemType, item) => {
71
73
  }
72
74
  };
73
75
 
74
- const getCustomStyle = (itemType, item, style) => {
75
- const baseStyle = {
76
- ...style,
76
+ const getCustomStyle = (itemType, item, touchPosition, style) => {
77
+ const transform = `translate(${touchPosition.x}px, ${touchPosition.y}px)`;
78
+ const top = style?.top || 0;
79
+ const left = style?.left || 0;
80
+ const position = style?.position || 'fixed';
81
+
82
+ return {
83
+ position,
84
+ top,
85
+ left,
86
+ transform,
77
87
  ...(itemType === 'MaskBlank' ? styles.maskBlank : {}),
78
88
  ...(item?.itemType === 'categorize' ? styles.categorize : {}),
79
89
  ...(itemType === 'Answer' ? styles.matchList : {}),
80
90
  ...(itemType === 'Tile' ? styles.placementOrdering : {}),
81
91
  ...(itemType === 'react-dnd-response' ? styles.ica : {}),
82
92
  };
83
-
84
- return baseStyle;
85
93
  };
86
94
 
87
95
  const PreviewComponent = () => {
88
96
  const preview = usePreview();
89
97
  const { itemType, item, style, display } = preview;
98
+ const [touchPosition, setTouchPosition] = useState({ x: 0, y: 0 });
99
+ const [zoomLevel, setZoomLevel] = useState(1);
100
+
101
+ const handleTouchMove = useCallback(
102
+ (event) => {
103
+ if (event.touches.length > 0) {
104
+ const touch = event.touches[0];
105
+ const touchOffset = 1;
106
+ setTouchPosition({
107
+ x: (touch.clientX + touchOffset) / zoomLevel,
108
+ y: (touch.clientY + touchOffset) / zoomLevel,
109
+ });
110
+ }
111
+ },
112
+ [zoomLevel],
113
+ );
90
114
 
91
115
  const root = useRef(null);
92
116
 
93
117
  useEffect(() => {
94
118
  if (display && root.current) {
95
119
  renderMath(root.current);
120
+
121
+ // Adjusted for precise zoom level calculation in Online Testing, targeting the specific class pattern .asmt-zoomable.asmt-zoom-NR .asmt-question .padding
122
+ const zoomAffectedElement = document.querySelector('.padding') || document.body;
123
+
124
+ setZoomLevel(parseFloat(getComputedStyle(zoomAffectedElement).zoom) || 1);
96
125
  }
97
126
  }, [display, item?.choice?.value, item?.value, itemType, item]);
98
127
 
128
+ useEffect(() => {
129
+ const touchMoveListener = (event) => handleTouchMove(event);
130
+ if (display) {
131
+ window.addEventListener('touchmove', touchMoveListener);
132
+ }
133
+ return () => {
134
+ window.removeEventListener('touchmove', touchMoveListener);
135
+ };
136
+ }, [display, handleTouchMove]);
137
+
99
138
  if (!display) {
100
139
  return null;
101
140
  }
102
141
 
103
- const customStyle = getCustomStyle(itemType, item, style);
142
+ const customStyle = getCustomStyle(itemType, item, touchPosition, style);
104
143
 
105
144
  const prompt = getPrompt(itemType, item);
106
145
 
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import MultiBackend, { TouchTransition } from 'react-dnd-multi-backend';
2
+ import MultiBackend, { TouchTransition, MouseTransition } from 'react-dnd-multi-backend';
3
3
  import { DndProvider } from 'react-dnd';
4
4
  import { TouchBackend } from 'react-dnd-touch-backend';
5
5
  import { HTML5Backend } from 'react-dnd-html5-backend';
@@ -7,7 +7,10 @@ import { HTML5Backend } from 'react-dnd-html5-backend';
7
7
  import PreviewComponent from './preview-component';
8
8
 
9
9
  const backends = [
10
- { backend: HTML5Backend },
10
+ {
11
+ backend: HTML5Backend,
12
+ transition: MouseTransition,
13
+ },
11
14
  {
12
15
  backend: TouchBackend,
13
16
  options: { enableMouseEvents: true, enableTouchEvents: true },
@@ -17,9 +20,13 @@ const backends = [
17
20
  },
18
21
  ];
19
22
 
20
- export default (Component) => (props) => (
21
- <DndProvider backend={MultiBackend} options={{ backends }} context={window}>
22
- <Component {...props} />
23
- <PreviewComponent />
24
- </DndProvider>
25
- );
23
+ export default (Component) => props => {
24
+ const isClient = typeof window !== 'undefined';
25
+
26
+ return (
27
+ <DndProvider backend={MultiBackend} options={{ backends }} {...(isClient && { context: window })}>
28
+ <Component {...props} />
29
+ <PreviewComponent />
30
+ </DndProvider>
31
+ );
32
+ };
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # @pie-lib/drag
2
-
3
- Some shared components for drag.
package/lib/choice.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/choice.jsx"],"names":["DRAG_TYPE","Choice","props","classes","className","children","connectDragSource","choice","React","Component","PropTypes","object","isRequired","string","oneOfType","arrayOf","node","func","styles","theme","backgroundColor","palette","background","paper","border","grey","padding","spacing","unit","minHeight","minWidth","maxWidth","choiceSource","canDrag","disabled","beginDrag","out","choiceId","id","from","category","alternateResponseIndex","choiceIndex","endDrag","monitor","didDrop","item","getItem","onRemoveChoice","styledChoice","DraggableChoice","uid","connect","dragSource","connectDragPreview","dragPreview","isDragging"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport grey from '@material-ui/core/colors/grey';\n\nimport { DragSource } from 'react-dnd';\nimport { withUid } from './uid-context';\n\nexport const DRAG_TYPE = 'CHOICE';\n\nexport class Choice extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n connectDragSource: PropTypes.func.isRequired,\n };\n\n static defaultProps = {};\n\n render() {\n const { classes, className, children, connectDragSource } = this.props;\n\n return connectDragSource(<div className={classNames(classes.choice, className)}>{children}</div>);\n }\n}\n\nconst styles = (theme) => ({\n choice: {\n backgroundColor: theme.palette.background.paper,\n border: `solid 1px ${grey[400]}`,\n padding: theme.spacing.unit,\n minHeight: '30px',\n minWidth: theme.spacing.unit * 20,\n maxWidth: theme.spacing.unit * 75,\n },\n});\n\nconst choiceSource = {\n canDrag(props) {\n return !props.disabled;\n },\n beginDrag(props) {\n const out = {\n choiceId: props.choice.id,\n from: props.category.id,\n alternateResponseIndex: props.alternateResponseIndex,\n choiceIndex: props.choiceIndex,\n };\n return out;\n },\n\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.from) {\n props.onRemoveChoice(item);\n }\n }\n },\n};\n\nconst styledChoice = withStyles(styles)(Choice);\n\nconst DraggableChoice = DragSource(\n ({ uid }) => uid,\n choiceSource,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging(),\n }),\n)(styledChoice);\n\nexport default withUid(DraggableChoice);\n"],"file":"choice.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/drag-in-the-blank-dp.jsx"],"names":["spec","canDrop","props","disabled","drop","dropped","WithTarget","dragType","types","db","connect","monitor","connectDropTarget","dropTarget","isOver","DroppablePlaceholder"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEO,IAAMA,IAAI,GAAG;AAClBC,EAAAA,OAAO,EAAE,iBAACC,KAAD,EAAW;AAClB,WAAO,CAACA,KAAK,CAACC,QAAd;AACD,GAHiB;AAIlBC,EAAAA,IAAI,EAAE;AAAA,WAAO;AACXC,MAAAA,OAAO,EAAE;AADE,KAAP;AAAA;AAJY,CAAb;;AASP,IAAMC,UAAU,GAAG,0BAAWC,qBAASC,KAAT,CAAeC,EAA1B,EAA8BT,IAA9B,EAAoC,UAACU,OAAD,EAAUC,OAAV;AAAA,SAAuB;AAC5EC,IAAAA,iBAAiB,EAAEF,OAAO,CAACG,UAAR,EADyD;AAE5EC,IAAAA,MAAM,EAAEH,OAAO,CAACG,MAAR;AAFoE,GAAvB;AAAA,CAApC,EAGfC,0CAHe,CAAnB;eAKeT,U","sourcesContent":["import { DropTarget } from 'react-dnd';\nimport { DroppablePlaceholder } from '../lib/droppable-placeholder';\nimport dragType from './drag-type';\n\nexport const spec = {\n canDrop: (props) => {\n return !props.disabled;\n },\n drop: () => ({\n dropped: true,\n }),\n};\n\nconst WithTarget = DropTarget(dragType.types.db, spec, (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n}))(DroppablePlaceholder);\n\nexport default WithTarget;\n"],"file":"drag-in-the-blank-dp.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/drag-type.js"],"names":["types","ica","ml","db"],"mappings":";;;;;;eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,GAAG,EAAE,oBADA;AAELC,IAAAA,EAAE,EAAE,QAFC;AAGLC,IAAAA,EAAE,EAAE;AAHC;AADM,C","sourcesContent":["export default {\n types: {\n ica: 'react-dnd-response',\n ml: 'Answer',\n db: 'MaskBlank',\n },\n};\n"],"file":"drag-type.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/droppable-placeholder.jsx"],"names":["preventInteractionStyle","flex","WebkitTouchCallout","WebkitUserSelect","KhtmlUserSelect","MozUserSelect","MsUserSelect","UserSelect","DroppablePlaceholder","props","children","connectDropTarget","isOver","disabled","classes","React","Component","PropTypes","object","func","isRequired","bool","oneOfType","arrayOf","node"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAEA,IAAMA,uBAAuB,GAAG;AAC9BC,EAAAA,IAAI,EAAE,CADwB;AAE9BC,EAAAA,kBAAkB,EAAE,MAFU;AAG9BC,EAAAA,gBAAgB,EAAE,MAHY;AAI9BC,EAAAA,eAAe,EAAE,MAJa;AAK9BC,EAAAA,aAAa,EAAE,MALe;AAM9BC,EAAAA,YAAY,EAAE,MANgB;AAO9BC,EAAAA,UAAU,EAAE;AAPkB,CAAhC;;IAUaC,oB;;;;;;;;;;;;WASX,kBAAS;AACP,wBAAmE,KAAKC,KAAxE;AAAA,UAAQC,QAAR,eAAQA,QAAR;AAAA,UAAkBC,iBAAlB,eAAkBA,iBAAlB;AAAA,UAAqCC,MAArC,eAAqCA,MAArC;AAAA,UAA6CC,QAA7C,eAA6CA,QAA7C;AAAA,UAAuDC,OAAvD,eAAuDA,OAAvD;AAEA,aAAOH,iBAAiB,eACtB;AAAK,QAAA,KAAK,EAAEX;AAAZ,sBACE,gCAAC,uBAAD;AAAa,QAAA,QAAQ,EAAEa,QAAvB;AAAiC,QAAA,MAAM,EAAED,MAAzC;AAAiD,QAAA,WAAW,EAAE,IAA9D;AAAoE,QAAA,SAAS,EAAEE;AAA/E,SACGJ,QADH,CADF,CADsB,CAAxB;AAOD;;;EAnBuCK,kBAAMC,S;;;iCAAnCR,oB,eACQ;AACjBM,EAAAA,OAAO,EAAEG,sBAAUC,MADF;AAEjBP,EAAAA,iBAAiB,EAAEM,sBAAUE,IAAV,CAAeC,UAFjB;AAGjBR,EAAAA,MAAM,EAAEK,sBAAUI,IAHD;AAIjBX,EAAAA,QAAQ,EAAEO,sBAAUK,SAAV,CAAoB,CAACL,sBAAUM,OAAV,CAAkBN,sBAAUO,IAA5B,CAAD,EAAoCP,sBAAUO,IAA9C,CAApB,EAAyEJ,UAJlE;AAKjBP,EAAAA,QAAQ,EAAEI,sBAAUI;AALH,C","sourcesContent":["import React from 'react';\nimport PlaceHolder from './placeholder';\nimport PropTypes from 'prop-types';\n\nconst preventInteractionStyle = {\n flex: 1,\n WebkitTouchCallout: 'none',\n WebkitUserSelect: 'none',\n KhtmlUserSelect: 'none',\n MozUserSelect: 'none',\n MsUserSelect: 'none',\n UserSelect: 'none',\n};\n\nexport class DroppablePlaceholder extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n disabled: PropTypes.bool,\n };\n\n render() {\n const { children, connectDropTarget, isOver, disabled, classes } = this.props;\n\n return connectDropTarget(\n <div style={preventInteractionStyle}>\n <PlaceHolder disabled={disabled} isOver={isOver} choiceBoard={true} className={classes}>\n {children}\n </PlaceHolder>\n </div>,\n );\n }\n}\n"],"file":"droppable-placeholder.js"}
package/lib/ica-dp.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ica-dp.jsx"],"names":["spec","canDrop","props","disabled","drop","monitor","item","getItem","onRemoveAnswer","WithTarget","dragType","types","ica","connect","connectDropTarget","dropTarget","isOver","DroppablePlaceholder"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEO,IAAMA,IAAI,GAAG;AAClBC,EAAAA,OAAO,EAAE,iBAACC,KAAD,EAAW;AAClB,WAAO,CAACA,KAAK,CAACC,QAAd;AACD,GAHiB;AAIlBC,EAAAA,IAAI,EAAE,cAACF,KAAD,EAAQG,OAAR,EAAoB;AACxB,QAAMC,IAAI,GAAGD,OAAO,CAACE,OAAR,EAAb;;AAEA,QAAIL,KAAK,CAACM,cAAV,EAA0B;AACxBN,MAAAA,KAAK,CAACM,cAAN,CAAqBF,IAArB;AACD;AACF;AAViB,CAAb;;AAaP,IAAMG,UAAU,GAAG,0BAAWC,qBAASC,KAAT,CAAeC,GAA1B,EAA+BZ,IAA/B,EAAqC,UAACa,OAAD,EAAUR,OAAV;AAAA,SAAuB;AAC7ES,IAAAA,iBAAiB,EAAED,OAAO,CAACE,UAAR,EAD0D;AAE7EC,IAAAA,MAAM,EAAEX,OAAO,CAACW,MAAR;AAFqE,GAAvB;AAAA,CAArC,EAGfC,0CAHe,CAAnB;eAKeR,U","sourcesContent":["import { DropTarget } from 'react-dnd';\nimport { DroppablePlaceholder } from './droppable-placeholder';\nimport dragType from './drag-type';\n\nexport const spec = {\n canDrop: (props) => {\n return !props.disabled;\n },\n drop: (props, monitor) => {\n const item = monitor.getItem();\n\n if (props.onRemoveAnswer) {\n props.onRemoveAnswer(item);\n }\n },\n};\n\nconst WithTarget = DropTarget(dragType.types.ica, spec, (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n}))(DroppablePlaceholder);\n\nexport default WithTarget;\n"],"file":"ica-dp.js"}
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;AACA;;AACA;;AACA","sourcesContent":["import { DragSource, DropTarget } from 'react-dnd';\n\nimport PlaceHolder from './placeholder';\nimport Choice from './choice';\nimport withDragContext from './with-drag-context';\nimport swap from './swap';\nimport * as uid from './uid-context';\nimport MatchDroppablePlaceholder from './match-list-dp';\nimport DragDroppablePlaceholder from './drag-in-the-blank-dp';\nimport ICADroppablePlaceholder from './ica-dp';\n\nexport {\n PlaceHolder,\n MatchDroppablePlaceholder,\n DragDroppablePlaceholder,\n ICADroppablePlaceholder,\n withDragContext,\n Choice,\n swap,\n uid,\n DragSource,\n DropTarget,\n};\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/match-list-dp.jsx"],"names":["spec","canDrop","props","disabled","drop","monitor","item","getItem","onRemoveAnswer","promptId","WithTarget","dragType","types","ml","connect","connectDropTarget","dropTarget","isOver","DroppablePlaceholder"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEO,IAAMA,IAAI,GAAG;AAClBC,EAAAA,OAAO,EAAE,iBAACC,KAAD,EAAW;AAClB,WAAO,CAACA,KAAK,CAACC,QAAd;AACD,GAHiB;AAIlBC,EAAAA,IAAI,EAAE,cAACF,KAAD,EAAQG,OAAR,EAAoB;AACxB,QAAMC,IAAI,GAAGD,OAAO,CAACE,OAAR,EAAb;;AAEA,QAAIL,KAAK,CAACM,cAAV,EAA0B;AACxBN,MAAAA,KAAK,CAACM,cAAN,CAAqBF,IAAI,CAACG,QAA1B;AACD;AACF;AAViB,CAAb;;AAaP,IAAMC,UAAU,GAAG,0BAAWC,qBAASC,KAAT,CAAeC,EAA1B,EAA8Bb,IAA9B,EAAoC,UAACc,OAAD,EAAUT,OAAV;AAAA,SAAuB;AAC5EU,IAAAA,iBAAiB,EAAED,OAAO,CAACE,UAAR,EADyD;AAE5EC,IAAAA,MAAM,EAAEZ,OAAO,CAACY,MAAR;AAFoE,GAAvB;AAAA,CAApC,EAGfC,0CAHe,CAAnB;eAKeR,U","sourcesContent":["import { DropTarget } from 'react-dnd';\nimport { DroppablePlaceholder } from './droppable-placeholder';\nimport dragType from './drag-type';\n\nexport const spec = {\n canDrop: (props) => {\n return !props.disabled;\n },\n drop: (props, monitor) => {\n const item = monitor.getItem();\n\n if (props.onRemoveAnswer) {\n props.onRemoveAnswer(item.promptId);\n }\n },\n};\n\nconst WithTarget = DropTarget(dragType.types.ml, spec, (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n}))(DroppablePlaceholder);\n\nexport default WithTarget;\n"],"file":"match-list-dp.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/placeholder.jsx"],"names":["PlaceHolder","props","children","classes","className","isOver","type","grid","disabled","choiceBoard","names","placeholder","over","style","columns","gridTemplateColumns","rows","repeatValue","rowsRepeatValue","gridTemplateRows","board","propTypes","PropTypes","object","isRequired","bool","shape","number","string","oneOfType","arrayOf","node","index","styles","theme","width","height","background","palette","grey","border","transition","boxSizing","display","gridRowGap","spacing","unit","gridColumnGap","padding","boxShadow","paper","backgroundColor","flexWrap","alignItems","minHeight","justifyContent","overflow","touchAction"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport grey from '@material-ui/core/colors/grey';\n\nexport const PlaceHolder = (props) => {\n const { children, classes, className, isOver, type, grid, disabled, choiceBoard } = props;\n const names = classNames(\n classes.placeholder,\n disabled && classes.disabled,\n isOver && classes.over,\n classes[type],\n className,\n );\n\n const style = {};\n\n if (grid && grid.columns) {\n style.gridTemplateColumns = `repeat(${grid.columns}, 1fr)`;\n }\n if (grid && grid.rows) {\n const repeatValue = grid.rowsRepeatValue || '1fr';\n\n style.gridTemplateRows = `repeat(${grid.rows}, ${repeatValue})`;\n }\n\n return (\n <div style={style} className={choiceBoard ? classes.board : names}>\n {children}\n </div>\n );\n};\n\nPlaceHolder.propTypes = {\n classes: PropTypes.object.isRequired,\n choiceBoard: PropTypes.bool,\n grid: PropTypes.shape({\n columns: PropTypes.number,\n rows: PropTypes.number,\n // if a different value then 1fr is wanted\n rowsRepeatValue: PropTypes.string,\n }),\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n className: PropTypes.string,\n isOver: PropTypes.bool,\n index: PropTypes.number,\n type: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nconst styles = (theme) => ({\n placeholder: {\n width: '100%',\n height: '100%',\n background: theme.palette.grey[200],\n border: '1px solid #D1D1D1',\n transition: 'background-color 200ms linear, border-color 200ms linear',\n boxSizing: 'border-box',\n display: 'grid',\n gridRowGap: `${theme.spacing.unit}px`,\n gridColumnGap: `${theme.spacing.unit}px`,\n padding: theme.spacing.unit * 1,\n },\n disabled: {\n boxShadow: 'none',\n background: theme.palette.background.paper,\n },\n over: {\n border: `1px solid ${grey[500]}`,\n backgroundColor: `${grey[300]}`,\n },\n board: {\n border: '1px solid #D1D1D1',\n padding: theme.spacing.unit,\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n minHeight: '200px',\n justifyContent: 'center',\n overflow: 'hidden',\n touchAction: 'none',\n },\n});\n\nexport default withStyles(styles)(PlaceHolder);\n"],"file":"placeholder.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/preview-component.jsx"],"names":["styles","maskBlank","border","color","minWidth","minHeight","height","maxWidth","display","padding","alignItems","justifyContent","borderRadius","ica","backgroundColor","background","primary","marginLeft","marginTop","width","categorize","text","matchList","boxSizing","placementOrdering","getPrompt","itemType","item","choice","value","undefined","getCustomStyle","style","baseStyle","PreviewComponent","preview","root","current","customStyle","prompt"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { usePreview } from 'react-dnd-multi-backend';\nimport { PreviewPrompt } from '@pie-lib/render-ui';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { color } from '@pie-lib/render-ui';\n\nconst styles = {\n maskBlank: {\n border: '1px solid black',\n color: 'black',\n minWidth: '90px',\n minHeight: '32px',\n height: 'auto',\n maxWidth: '374px',\n display: 'flex',\n padding: '4px',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '16px',\n },\n ica: {\n backgroundColor: color.background(),\n border: `1px solid ${color.primary()}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '28px',\n padding: '0 3px',\n marginLeft: 2,\n marginTop: 2,\n width: 'fit-content',\n },\n categorize: {\n color: color.text(),\n backgroundColor: color.background(),\n padding: '16px',\n borderRadius: '4px',\n border: '1px solid',\n },\n matchList: {\n color: color.text(),\n backgroundColor: color.background(),\n padding: '10px',\n boxSizing: 'border-box',\n border: '1px solid #D1D1D1',\n },\n placementOrdering: {\n padding: '10px',\n boxSizing: 'border-box',\n border: '1px solid #D1D1D1',\n backgroundColor: color.background(),\n },\n};\n\nconst getPrompt = (itemType, item) => {\n switch (itemType) {\n // DRAG-IN-THE-BLANK\n case 'MaskBlank':\n return item?.choice?.value;\n // IMAGE-CLOZE-ASSOCIATION\n case 'react-dnd-response':\n return item?.value;\n // MATCH-LIST\n case 'Answer':\n return item?.value;\n // PLACEMENT-ORDERING\n case 'Tile':\n return item?.value;\n default:\n return item?.itemType === 'categorize' ? item?.value : undefined;\n }\n};\n\nconst getCustomStyle = (itemType, item, style) => {\n const baseStyle = {\n ...style,\n ...(itemType === 'MaskBlank' ? styles.maskBlank : {}),\n ...(item?.itemType === 'categorize' ? styles.categorize : {}),\n ...(itemType === 'Answer' ? styles.matchList : {}),\n ...(itemType === 'Tile' ? styles.placementOrdering : {}),\n ...(itemType === 'react-dnd-response' ? styles.ica : {}),\n };\n\n return baseStyle;\n};\n\nconst PreviewComponent = () => {\n const preview = usePreview();\n const { itemType, item, style, display } = preview;\n\n const root = useRef(null);\n\n useEffect(() => {\n if (display && root.current) {\n renderMath(root.current);\n }\n }, [display, item?.choice?.value, item?.value, itemType, item]);\n\n if (!display) {\n return null;\n }\n\n const customStyle = getCustomStyle(itemType, item, style);\n\n const prompt = getPrompt(itemType, item);\n\n return (\n <div ref={root} style={customStyle}>\n <PreviewPrompt className=\"label\" prompt={prompt} tagName=\"span\" />\n </div>\n );\n};\n\nexport default PreviewComponent;\n"],"file":"preview-component.js"}
package/lib/swap.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/swap.js"],"names":["arr","fromIndex","toIndex","length","undefined","Error","update","tmp"],"mappings":";;;;;;;;;AAAA;;eAEe,kBAACA,GAAD,EAAMC,SAAN,EAAiBC,OAAjB,EAA6B;AAC1C,MAAI,CAACF,GAAD,IAAQA,GAAG,CAACG,MAAJ,IAAc,CAAtB,IAA2BF,SAAS,KAAKG,SAAzC,IAAsDF,OAAO,KAAKE,SAAtE,EAAiF;AAC/E,UAAM,IAAIC,KAAJ,gEAAkEL,GAAlE,eAA0EC,SAA1E,cAAuFC,OAAvF,EAAN;AACD;;AAED,MAAMI,MAAM,GAAG,2BAAUN,GAAV,CAAf;AACA,MAAMO,GAAG,GAAGP,GAAG,CAACE,OAAD,CAAf;AACAI,EAAAA,MAAM,CAACJ,OAAD,CAAN,GAAkBI,MAAM,CAACL,SAAD,CAAxB;AACAK,EAAAA,MAAM,CAACL,SAAD,CAAN,GAAoBM,GAApB;AAEA,SAAOD,MAAP;AACD,C","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\n\nexport default (arr, fromIndex, toIndex) => {\n if (!arr || arr.length <= 1 || fromIndex === undefined || toIndex === undefined) {\n throw new Error(`swap requires a non-empty array, fromIndex, toIndex: ${arr}, ${fromIndex} ${toIndex}`);\n }\n\n const update = cloneDeep(arr);\n const tmp = arr[toIndex];\n update[toIndex] = update[fromIndex];\n update[fromIndex] = tmp;\n\n return update;\n};\n"],"file":"swap.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/uid-context.js"],"names":["React","createContext","Consumer","Provider","generateId","Math","random","toFixed","withUid","Component","Wrapped","props","uid"],"mappings":";;;;;;;;;;;AAAA;;AAEA,wCAA+BA,kBAAMC,aAAN,CAAoB,CAAC,CAArB,CAA/B;AAAA,IAAQC,QAAR,wBAAQA,QAAR;AAAA,IAAkBC,QAAlB,wBAAkBA,QAAlB;;;;;AAIO,IAAMC,UAAU,GAAG,SAAbA,UAAa;AAAA,SAAM,CAACC,IAAI,CAACC,MAAL,KAAgB,OAAjB,EAA0BC,OAA1B,CAAkC,CAAlC,CAAN;AAAA,CAAnB;;;;AAEA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAACC,SAAD,EAAe;AACpC,MAAMC,OAAO,GAAG,SAAVA,OAAU,CAACC,KAAD;AAAA,wBAAW,gCAAC,QAAD,QAAW,UAACC,GAAD;AAAA,0BAAS,gCAAC,SAAD,gCAAeD,KAAf;AAAsB,QAAA,GAAG,EAAEC;AAA3B,SAAT;AAAA,KAAX,CAAX;AAAA,GAAhB;;AAEA,SAAOF,OAAP;AACD,CAJM","sourcesContent":["import React from 'react';\n\nconst { Consumer, Provider } = React.createContext(-1);\n\nexport { Provider, Consumer };\n\nexport const generateId = () => (Math.random() * 1000001).toFixed(0);\n\nexport const withUid = (Component) => {\n const Wrapped = (props) => <Consumer>{(uid) => <Component {...props} uid={uid} />}</Consumer>;\n\n return Wrapped;\n};\n"],"file":"uid-context.js"}