@pie-element/placement-ordering 14.1.2-next.5 → 14.1.3

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 (108) hide show
  1. package/CHANGELOG.json +1312 -0
  2. package/CHANGELOG.md +2444 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +57 -0
  5. package/configure/CHANGELOG.json +952 -0
  6. package/configure/CHANGELOG.md +2139 -0
  7. package/configure/lib/choice-editor.js +252 -0
  8. package/configure/lib/choice-editor.js.map +1 -0
  9. package/configure/lib/choice-tile.js +205 -0
  10. package/configure/lib/choice-tile.js.map +1 -0
  11. package/configure/lib/defaults.js +211 -0
  12. package/configure/lib/defaults.js.map +1 -0
  13. package/configure/lib/design.js +427 -0
  14. package/configure/lib/design.js.map +1 -0
  15. package/configure/lib/help.js +14 -0
  16. package/configure/lib/help.js.map +1 -0
  17. package/configure/lib/index.js +155 -0
  18. package/configure/lib/index.js.map +1 -0
  19. package/configure/lib/utils.js +108 -0
  20. package/configure/lib/utils.js.map +1 -0
  21. package/configure/package.json +26 -0
  22. package/controller/CHANGELOG.json +517 -0
  23. package/controller/CHANGELOG.md +1518 -0
  24. package/controller/lib/defaults.js +29 -0
  25. package/controller/lib/defaults.js.map +1 -0
  26. package/controller/lib/index.js +285 -0
  27. package/controller/lib/index.js.map +1 -0
  28. package/controller/lib/scoring.js +109 -0
  29. package/controller/lib/scoring.js.map +1 -0
  30. package/controller/package.json +15 -0
  31. package/docs/config-schema.json +2964 -0
  32. package/docs/config-schema.json.md +2190 -0
  33. package/docs/demo/config.js +8 -0
  34. package/docs/demo/generate.js +50 -0
  35. package/docs/demo/index.html +1 -0
  36. package/docs/demo/session.js +7 -0
  37. package/docs/pie-schema.json +1613 -0
  38. package/docs/pie-schema.json.md +973 -0
  39. package/icon.png +0 -0
  40. package/lib/index.js +122 -0
  41. package/lib/index.js.map +1 -0
  42. package/lib/main.js +32 -0
  43. package/lib/main.js.map +1 -0
  44. package/lib/ordering.js +165 -0
  45. package/lib/ordering.js.map +1 -0
  46. package/lib/placement-ordering.js +419 -0
  47. package/lib/placement-ordering.js.map +1 -0
  48. package/lib/tile.js +259 -0
  49. package/lib/tile.js.map +1 -0
  50. package/lib/tiler.js +165 -0
  51. package/lib/tiler.js.map +1 -0
  52. package/lib/utils.js +18 -0
  53. package/lib/utils.js.map +1 -0
  54. package/package.json +21 -88
  55. package/configure.js +0 -2
  56. package/controller.js +0 -1
  57. package/dist/author/choice-editor.d.ts +0 -39
  58. package/dist/author/choice-editor.js +0 -156
  59. package/dist/author/choice-tile.d.ts +0 -40
  60. package/dist/author/choice-tile.js +0 -132
  61. package/dist/author/defaults.d.ts +0 -213
  62. package/dist/author/defaults.js +0 -159
  63. package/dist/author/design.d.ts +0 -21
  64. package/dist/author/design.js +0 -273
  65. package/dist/author/help.d.ts +0 -11
  66. package/dist/author/index.d.ts +0 -45
  67. package/dist/author/index.js +0 -85
  68. package/dist/author/utils.d.ts +0 -15
  69. package/dist/author/utils.js +0 -62
  70. package/dist/browser/author/index.js +0 -46600
  71. package/dist/browser/author/index.js.map +0 -1
  72. package/dist/browser/browser-DHPggtaA.js +0 -376
  73. package/dist/browser/browser-DHPggtaA.js.map +0 -1
  74. package/dist/browser/controller/index.js +0 -242
  75. package/dist/browser/controller/index.js.map +0 -1
  76. package/dist/browser/delivery/index.js +0 -1035
  77. package/dist/browser/delivery/index.js.map +0 -1
  78. package/dist/browser/dist-D9ARZhQk.js +0 -1426
  79. package/dist/browser/dist-D9ARZhQk.js.map +0 -1
  80. package/dist/browser/drag-provider-C1slTlsc.js +0 -10555
  81. package/dist/browser/drag-provider-C1slTlsc.js.map +0 -1
  82. package/dist/browser/placement-ordering.css +0 -2
  83. package/dist/controller/defaults.d.ts +0 -31
  84. package/dist/controller/defaults.js +0 -25
  85. package/dist/controller/index.d.ts +0 -29
  86. package/dist/controller/index.js +0 -123
  87. package/dist/controller/scoring.d.ts +0 -27
  88. package/dist/controller/scoring.js +0 -30
  89. package/dist/delivery/index.d.ts +0 -26
  90. package/dist/delivery/index.js +0 -70
  91. package/dist/delivery/main.d.ts +0 -19
  92. package/dist/delivery/main.js +0 -22
  93. package/dist/delivery/ordering.d.ts +0 -18
  94. package/dist/delivery/ordering.js +0 -93
  95. package/dist/delivery/placement-ordering.d.ts +0 -28
  96. package/dist/delivery/placement-ordering.js +0 -213
  97. package/dist/delivery/tile.d.ts +0 -28
  98. package/dist/delivery/tile.js +0 -165
  99. package/dist/delivery/tiler.d.ts +0 -42
  100. package/dist/delivery/tiler.js +0 -89
  101. package/dist/delivery/utils.d.ts +0 -9
  102. package/dist/delivery/utils.js +0 -8
  103. package/dist/index.d.ts +0 -1
  104. package/dist/index.iife.d.ts +0 -8
  105. package/dist/index.iife.js +0 -152
  106. package/dist/index.js +0 -2
  107. package/dist/runtime-support.d.ts +0 -12
  108. package/dist/runtime-support.js +0 -12
package/lib/tile.js ADDED
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Tile = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _debug = _interopRequireDefault(require("debug"));
12
+ var _core = require("@dnd-kit/core");
13
+ var _styles = require("@mui/material/styles");
14
+ var _drag = require("@pie-lib/drag");
15
+ var _renderUi = require("@pie-lib/render-ui");
16
+ const log = (0, _debug.default)('pie-elements:placement-ordering:tile');
17
+ const StyledNumberContainer = (0, _styles.styled)('div')(({
18
+ theme
19
+ }) => ({
20
+ width: '100%',
21
+ fontSize: theme.typography.fontSize + 4,
22
+ textAlign: 'center',
23
+ color: `rgba(${theme.palette.common.black}, 0.6)`
24
+ }));
25
+ const Holder = ({
26
+ type,
27
+ index,
28
+ isOver,
29
+ disabled
30
+ }) => /*#__PURE__*/_react.default.createElement(_drag.PlaceHolder, {
31
+ type: type,
32
+ isOver: isOver,
33
+ disabled: disabled
34
+ }, type === 'target' && index !== undefined && /*#__PURE__*/_react.default.createElement(StyledNumberContainer, null, index));
35
+ Holder.propTypes = {
36
+ type: _propTypes.default.string,
37
+ index: _propTypes.default.number,
38
+ isOver: _propTypes.default.bool,
39
+ disabled: _propTypes.default.bool
40
+ };
41
+ const StyledTileContent = (0, _styles.styled)('div')(({
42
+ theme,
43
+ isDragging,
44
+ isOver,
45
+ disabled,
46
+ outcome,
47
+ label,
48
+ type
49
+ }) => ({
50
+ cursor: disabled ? 'not-allowed' : 'grab',
51
+ width: '100%',
52
+ height: '100%',
53
+ padding: '10px',
54
+ boxSizing: 'border-box',
55
+ overflow: 'hidden',
56
+ border: type === 'choice' || type === 'target' ? `1px solid ${theme.palette.grey[400]}` : '1px solid transparent',
57
+ backgroundColor: type === 'choice' || type === 'target' ? _renderUi.color.background() : 'transparent',
58
+ transition: type === 'choice' || type === 'target' ? 'background-color 150ms ease, border-color 150ms ease, opacity 150ms ease' : 'none',
59
+ pointerEvents: 'none',
60
+ userSelect: 'none',
61
+ ...((type === 'choice' || type === 'target') && {
62
+ '&:hover': {
63
+ backgroundColor: disabled ? _renderUi.color.background() : _renderUi.color.secondary(),
64
+ borderColor: disabled ? theme.palette.grey[400] : theme.palette.primary.main,
65
+ transform: disabled ? 'none' : 'scale(1.02)'
66
+ }
67
+ }),
68
+ // Apply conditional styles based on props (only if not empty spacing tile)
69
+ ...((type === 'choice' || type === 'target') && isOver && !disabled && {
70
+ opacity: 0.4,
71
+ backgroundColor: _renderUi.color.primaryLight(),
72
+ borderColor: theme.palette.primary.main,
73
+ borderStyle: 'dashed',
74
+ transform: 'scale(1.05)'
75
+ }),
76
+ ...((type === 'choice' || type === 'target') && isDragging && !disabled && {
77
+ opacity: 0.6,
78
+ backgroundColor: _renderUi.color.secondaryLight(),
79
+ transform: 'scale(1.05) rotate(2deg)',
80
+ boxShadow: '0 8px 16px rgba(0,0,0,0.2)',
81
+ cursor: 'grabbing'
82
+ }),
83
+ ...((type === 'choice' || type === 'target') && disabled && {
84
+ cursor: 'not-allowed',
85
+ '&:hover': {
86
+ backgroundColor: _renderUi.color.background(),
87
+ transform: 'none'
88
+ }
89
+ }),
90
+ ...((type === 'choice' || type === 'target') && outcome === 'incorrect' && {
91
+ border: `1px solid ${_renderUi.color.incorrect()}`
92
+ }),
93
+ ...((type === 'choice' || type === 'target') && outcome === 'correct' && {
94
+ border: `1px solid ${_renderUi.color.correct()}`
95
+ }),
96
+ ...(!label && {
97
+ border: 'none',
98
+ '&:hover': {
99
+ backgroundColor: 'unset'
100
+ }
101
+ })
102
+ }));
103
+ const TileContent = props => {
104
+ const {
105
+ type,
106
+ isDragging,
107
+ empty,
108
+ isOver,
109
+ label,
110
+ disabled,
111
+ outcome,
112
+ guideIndex
113
+ } = props;
114
+ if (empty) {
115
+ return /*#__PURE__*/_react.default.createElement(Holder, {
116
+ type: type,
117
+ index: guideIndex,
118
+ isOver: isOver,
119
+ disabled: disabled
120
+ });
121
+ } else {
122
+ return /*#__PURE__*/_react.default.createElement(StyledTileContent, {
123
+ type: type,
124
+ isDragging: isDragging,
125
+ isOver: isOver,
126
+ disabled: disabled,
127
+ outcome: outcome,
128
+ label: label,
129
+ dangerouslySetInnerHTML: {
130
+ __html: label
131
+ }
132
+ });
133
+ }
134
+ };
135
+ const Tile = props => {
136
+ const {
137
+ label,
138
+ type,
139
+ id,
140
+ empty,
141
+ disabled,
142
+ outcome,
143
+ index,
144
+ guideIndex,
145
+ instanceId,
146
+ draggable,
147
+ tileIndex
148
+ } = props;
149
+
150
+ // Use type + tileIndex in the IDs to guarantee uniqueness in all modes.
151
+ // In includeTargets mode, a choice (id:'c1', type:'choice') and a target (id:'c1', type:'target')
152
+ // can coexist — the type differentiates them.
153
+ // tileIndex (array position from tiler) ensures empty placeholders are also unique.
154
+ const dragId = `tile-${type}-${id != null ? id : 'empty'}-${tileIndex}-${instanceId}`;
155
+ const dropId = `drop-${type}-${id != null ? id : 'empty'}-${tileIndex}-${instanceId}`;
156
+ const {
157
+ attributes,
158
+ listeners,
159
+ setNodeRef: setDragRef,
160
+ transform,
161
+ isDragging
162
+ } = (0, _core.useDraggable)({
163
+ id: dragId,
164
+ data: {
165
+ id,
166
+ type,
167
+ instanceId,
168
+ value: label,
169
+ index
170
+ },
171
+ disabled: !draggable || disabled
172
+ });
173
+ const {
174
+ setNodeRef: setDropRef,
175
+ isOver: dropIsOver
176
+ } = (0, _core.useDroppable)({
177
+ id: dropId,
178
+ data: {
179
+ id,
180
+ type,
181
+ instanceId,
182
+ value: label,
183
+ index
184
+ },
185
+ // Disable droppable on the tile currently being dragged so closestCenter
186
+ // cannot pick it as the drop target (prevents self-collision and wrong matches).
187
+ disabled: isDragging
188
+ });
189
+ const ref = _react.default.useRef(null);
190
+ _react.default.useEffect(() => {
191
+ const currentRef = ref.current;
192
+ const handleTouchStart = e => {
193
+ e.preventDefault(); // Prevent the default touch event behavior
194
+ };
195
+ if (currentRef) {
196
+ currentRef.addEventListener('touchstart', handleTouchStart, {
197
+ passive: false
198
+ });
199
+ }
200
+ return () => {
201
+ if (currentRef) {
202
+ currentRef.removeEventListener('touchstart', handleTouchStart);
203
+ }
204
+ };
205
+ }, []);
206
+ const setRefs = element => {
207
+ ref.current = element;
208
+ setDragRef(element);
209
+ setDropRef(element);
210
+ };
211
+ log('[render], props: ', props);
212
+ const style = {
213
+ transform: transform ? `translate3d(${transform.x}px, ${transform.y}px, 0)` : undefined,
214
+ boxSizing: 'border-box',
215
+ overflow: 'visible',
216
+ padding: 0,
217
+ margin: 0,
218
+ textAlign: 'center',
219
+ pointerEvents: 'auto',
220
+ cursor: disabled ? 'not-allowed' : isDragging ? 'grabbing' : 'grab',
221
+ zIndex: isDragging ? 1000 : 'auto',
222
+ willChange: isDragging ? 'transform' : 'auto'
223
+ };
224
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
225
+ ref: setRefs,
226
+ style: style
227
+ }, draggable && !disabled ? {
228
+ ...listeners,
229
+ ...attributes
230
+ } : {}), /*#__PURE__*/_react.default.createElement(TileContent, {
231
+ label: label,
232
+ id: id,
233
+ empty: empty,
234
+ index: index,
235
+ guideIndex: guideIndex,
236
+ isOver: dropIsOver,
237
+ isDragging: isDragging,
238
+ disabled: disabled,
239
+ outcome: outcome,
240
+ type: type
241
+ }));
242
+ };
243
+ exports.Tile = Tile;
244
+ Tile.propTypes = {
245
+ id: _propTypes.default.any,
246
+ label: _propTypes.default.string,
247
+ isOver: _propTypes.default.bool,
248
+ type: _propTypes.default.string,
249
+ empty: _propTypes.default.bool,
250
+ disabled: _propTypes.default.bool,
251
+ outcome: _propTypes.default.string,
252
+ index: _propTypes.default.number,
253
+ guideIndex: _propTypes.default.number,
254
+ instanceId: _propTypes.default.any,
255
+ draggable: _propTypes.default.bool,
256
+ tileIndex: _propTypes.default.number
257
+ };
258
+ var _default = exports.default = Tile;
259
+ //# sourceMappingURL=tile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_core","_styles","_drag","_renderUi","log","debug","StyledNumberContainer","styled","theme","width","fontSize","typography","textAlign","color","palette","common","black","Holder","type","index","isOver","disabled","default","createElement","PlaceHolder","undefined","propTypes","PropTypes","string","number","bool","StyledTileContent","isDragging","outcome","label","cursor","height","padding","boxSizing","overflow","border","grey","backgroundColor","background","transition","pointerEvents","userSelect","secondary","borderColor","primary","main","transform","opacity","primaryLight","borderStyle","secondaryLight","boxShadow","incorrect","correct","TileContent","props","empty","guideIndex","dangerouslySetInnerHTML","__html","Tile","id","instanceId","draggable","tileIndex","dragId","dropId","attributes","listeners","setNodeRef","setDragRef","useDraggable","data","value","setDropRef","dropIsOver","useDroppable","ref","React","useRef","useEffect","currentRef","current","handleTouchStart","e","preventDefault","addEventListener","passive","removeEventListener","setRefs","element","style","x","y","margin","zIndex","willChange","_extends2","exports","any","_default"],"sources":["../src/tile.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\nimport { styled } from '@mui/material/styles';\n\nimport { PlaceHolder } from '@pie-lib/drag';\nimport { color } from '@pie-lib/render-ui';\n\nconst log = debug('pie-elements:placement-ordering:tile');\n\nconst StyledNumberContainer = styled('div')(({ theme }) => ({\n width: '100%',\n fontSize: theme.typography.fontSize + 4,\n textAlign: 'center',\n color: `rgba(${theme.palette.common.black}, 0.6)`,\n}));\n\nconst Holder = ({ type, index, isOver, disabled }) => (\n <PlaceHolder type={type} isOver={isOver} disabled={disabled}>\n {type === 'target' && index !== undefined && <StyledNumberContainer>{index}</StyledNumberContainer>}\n </PlaceHolder>\n);\n\nHolder.propTypes = {\n type: PropTypes.string,\n index: PropTypes.number,\n isOver: PropTypes.bool,\n disabled: PropTypes.bool,\n};\n\nconst StyledTileContent = styled('div')(({ theme, isDragging, isOver, disabled, outcome, label, type }) => ({\n cursor: disabled ? 'not-allowed' : 'grab',\n width: '100%',\n height: '100%',\n padding: '10px',\n boxSizing: 'border-box',\n overflow: 'hidden',\n border: (type === 'choice' || type === 'target') ? `1px solid ${theme.palette.grey[400]}` : '1px solid transparent',\n backgroundColor: (type === 'choice' || type === 'target') ? color.background() : 'transparent',\n transition: (type === 'choice' || type === 'target') ? 'background-color 150ms ease, border-color 150ms ease, opacity 150ms ease' : 'none',\n pointerEvents: 'none',\n userSelect: 'none',\n\n ...((type === 'choice' || type === 'target') && {\n '&:hover': {\n backgroundColor: disabled ? color.background() : color.secondary(),\n borderColor: disabled ? theme.palette.grey[400] : theme.palette.primary.main,\n transform: disabled ? 'none' : 'scale(1.02)',\n },\n }),\n\n // Apply conditional styles based on props (only if not empty spacing tile)\n ...((type === 'choice' || type === 'target') && isOver && !disabled && {\n opacity: 0.4,\n backgroundColor: color.primaryLight(),\n borderColor: theme.palette.primary.main,\n borderStyle: 'dashed',\n transform: 'scale(1.05)',\n }),\n\n ...((type === 'choice' || type === 'target') && isDragging && !disabled && {\n opacity: 0.6,\n backgroundColor: color.secondaryLight(),\n transform: 'scale(1.05) rotate(2deg)',\n boxShadow: '0 8px 16px rgba(0,0,0,0.2)',\n cursor: 'grabbing',\n }),\n\n ...((type === 'choice' || type === 'target') && disabled && {\n cursor: 'not-allowed',\n '&:hover': {\n backgroundColor: color.background(),\n transform: 'none',\n },\n }),\n\n ...((type === 'choice' || type === 'target') && outcome === 'incorrect' && {\n border: `1px solid ${color.incorrect()}`,\n }),\n\n ...((type === 'choice' || type === 'target') && outcome === 'correct' && {\n border: `1px solid ${color.correct()}`,\n }),\n\n ...(!label && {\n border: 'none',\n '&:hover': {\n backgroundColor: 'unset',\n },\n }),\n}));\n\nconst TileContent = (props) => {\n const { type, isDragging, empty, isOver, label, disabled, outcome, guideIndex } = props;\n\n if (empty) {\n return <Holder type={type} index={guideIndex} isOver={isOver} disabled={disabled} />;\n } else {\n return (\n <StyledTileContent\n type={type}\n isDragging={isDragging}\n isOver={isOver}\n disabled={disabled}\n outcome={outcome}\n label={label}\n dangerouslySetInnerHTML={{ __html: label }}\n />\n );\n }\n};\n\nexport const Tile = (props) => {\n const {\n label,\n type,\n id,\n empty,\n disabled,\n outcome,\n index,\n guideIndex,\n instanceId,\n draggable,\n tileIndex,\n } = props;\n\n // Use type + tileIndex in the IDs to guarantee uniqueness in all modes.\n // In includeTargets mode, a choice (id:'c1', type:'choice') and a target (id:'c1', type:'target')\n // can coexist — the type differentiates them.\n // tileIndex (array position from tiler) ensures empty placeholders are also unique.\n const dragId = `tile-${type}-${id != null ? id : 'empty'}-${tileIndex}-${instanceId}`;\n const dropId = `drop-${type}-${id != null ? id : 'empty'}-${tileIndex}-${instanceId}`;\n\n const {\n attributes,\n listeners,\n setNodeRef: setDragRef,\n transform,\n isDragging,\n } = useDraggable({\n id: dragId,\n data: {\n id,\n type,\n instanceId,\n value: label,\n index\n },\n disabled: !draggable || disabled,\n });\n\n const {\n setNodeRef: setDropRef,\n isOver: dropIsOver,\n } = useDroppable({\n id: dropId,\n data: {\n id,\n type,\n instanceId,\n value: label,\n index\n },\n // Disable droppable on the tile currently being dragged so closestCenter\n // cannot pick it as the drop target (prevents self-collision and wrong matches).\n disabled: isDragging,\n });\n\n const ref = React.useRef(null);\n\n React.useEffect(() => {\n const currentRef = ref.current;\n\n const handleTouchStart = (e) => {\n e.preventDefault(); // Prevent the default touch event behavior\n };\n\n if (currentRef) {\n currentRef.addEventListener('touchstart', handleTouchStart, { passive: false });\n }\n\n return () => {\n if (currentRef) {\n currentRef.removeEventListener('touchstart', handleTouchStart);\n }\n };\n }, []);\n\n const setRefs = (element) => {\n ref.current = element;\n setDragRef(element);\n setDropRef(element);\n };\n\n log('[render], props: ', props);\n\n const style = {\n transform: transform ? `translate3d(${transform.x}px, ${transform.y}px, 0)` : undefined,\n boxSizing: 'border-box',\n overflow: 'visible',\n padding: 0,\n margin: 0,\n textAlign: 'center',\n pointerEvents: 'auto',\n cursor: disabled ? 'not-allowed' : (isDragging ? 'grabbing' : 'grab'),\n zIndex: isDragging ? 1000 : 'auto',\n willChange: isDragging ? 'transform' : 'auto',\n };\n\n return (\n <div\n ref={setRefs}\n style={style}\n {...(draggable && !disabled ? { ...listeners, ...attributes } : {})}\n >\n <TileContent\n label={label}\n id={id}\n empty={empty}\n index={index}\n guideIndex={guideIndex}\n isOver={dropIsOver}\n isDragging={isDragging}\n disabled={disabled}\n outcome={outcome}\n type={type}\n />\n </div>\n );\n};\n\nTile.propTypes = {\n id: PropTypes.any,\n label: PropTypes.string,\n isOver: PropTypes.bool,\n type: PropTypes.string,\n empty: PropTypes.bool,\n disabled: PropTypes.bool,\n outcome: PropTypes.string,\n index: PropTypes.number,\n guideIndex: PropTypes.number,\n instanceId: PropTypes.any,\n draggable: PropTypes.bool,\n tileIndex: PropTypes.number,\n};\n\nexport default Tile;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAEA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AAEA,MAAMO,GAAG,GAAG,IAAAC,cAAK,EAAC,sCAAsC,CAAC;AAEzD,MAAMC,qBAAqB,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EAC1DC,KAAK,EAAE,MAAM;EACbC,QAAQ,EAAEF,KAAK,CAACG,UAAU,CAACD,QAAQ,GAAG,CAAC;EACvCE,SAAS,EAAE,QAAQ;EACnBC,KAAK,EAAE,QAAQL,KAAK,CAACM,OAAO,CAACC,MAAM,CAACC,KAAK;AAC3C,CAAC,CAAC,CAAC;AAEH,MAAMC,MAAM,GAAGA,CAAC;EAAEC,IAAI;EAAEC,KAAK;EAAEC,MAAM;EAAEC;AAAS,CAAC,kBAC/C1B,MAAA,CAAA2B,OAAA,CAAAC,aAAA,CAACrB,KAAA,CAAAsB,WAAW;EAACN,IAAI,EAAEA,IAAK;EAACE,MAAM,EAAEA,MAAO;EAACC,QAAQ,EAAEA;AAAS,GACzDH,IAAI,KAAK,QAAQ,IAAIC,KAAK,KAAKM,SAAS,iBAAI9B,MAAA,CAAA2B,OAAA,CAAAC,aAAA,CAACjB,qBAAqB,QAAEa,KAA6B,CACvF,CACd;AAEDF,MAAM,CAACS,SAAS,GAAG;EACjBR,IAAI,EAAES,kBAAS,CAACC,MAAM;EACtBT,KAAK,EAAEQ,kBAAS,CAACE,MAAM;EACvBT,MAAM,EAAEO,kBAAS,CAACG,IAAI;EACtBT,QAAQ,EAAEM,kBAAS,CAACG;AACtB,CAAC;AAED,MAAMC,iBAAiB,GAAG,IAAAxB,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC,KAAK;EAAEwB,UAAU;EAAEZ,MAAM;EAAEC,QAAQ;EAAEY,OAAO;EAAEC,KAAK;EAAEhB;AAAK,CAAC,MAAM;EAC1GiB,MAAM,EAAEd,QAAQ,GAAG,aAAa,GAAG,MAAM;EACzCZ,KAAK,EAAE,MAAM;EACb2B,MAAM,EAAE,MAAM;EACdC,OAAO,EAAE,MAAM;EACfC,SAAS,EAAE,YAAY;EACvBC,QAAQ,EAAE,QAAQ;EAClBC,MAAM,EAAGtB,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,GAAI,aAAaV,KAAK,CAACM,OAAO,CAAC2B,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,uBAAuB;EACnHC,eAAe,EAAGxB,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,GAAIL,eAAK,CAAC8B,UAAU,CAAC,CAAC,GAAG,aAAa;EAC9FC,UAAU,EAAG1B,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,GAAI,0EAA0E,GAAG,MAAM;EAC1I2B,aAAa,EAAE,MAAM;EACrBC,UAAU,EAAE,MAAM;EAElB,IAAI,CAAC5B,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,KAAK;IAC9C,SAAS,EAAE;MACTwB,eAAe,EAAErB,QAAQ,GAAGR,eAAK,CAAC8B,UAAU,CAAC,CAAC,GAAG9B,eAAK,CAACkC,SAAS,CAAC,CAAC;MAClEC,WAAW,EAAE3B,QAAQ,GAAGb,KAAK,CAACM,OAAO,CAAC2B,IAAI,CAAC,GAAG,CAAC,GAAGjC,KAAK,CAACM,OAAO,CAACmC,OAAO,CAACC,IAAI;MAC5EC,SAAS,EAAE9B,QAAQ,GAAG,MAAM,GAAG;IACjC;EACF,CAAC,CAAC;EAEF;EACA,IAAI,CAACH,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,KAAKE,MAAM,IAAI,CAACC,QAAQ,IAAI;IACrE+B,OAAO,EAAE,GAAG;IACZV,eAAe,EAAE7B,eAAK,CAACwC,YAAY,CAAC,CAAC;IACrCL,WAAW,EAAExC,KAAK,CAACM,OAAO,CAACmC,OAAO,CAACC,IAAI;IACvCI,WAAW,EAAE,QAAQ;IACrBH,SAAS,EAAE;EACb,CAAC,CAAC;EAEF,IAAI,CAACjC,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,KAAKc,UAAU,IAAI,CAACX,QAAQ,IAAI;IACzE+B,OAAO,EAAE,GAAG;IACZV,eAAe,EAAE7B,eAAK,CAAC0C,cAAc,CAAC,CAAC;IACvCJ,SAAS,EAAE,0BAA0B;IACrCK,SAAS,EAAE,4BAA4B;IACvCrB,MAAM,EAAE;EACV,CAAC,CAAC;EAEF,IAAI,CAACjB,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,KAAKG,QAAQ,IAAI;IAC1Dc,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE;MACTO,eAAe,EAAE7B,eAAK,CAAC8B,UAAU,CAAC,CAAC;MACnCQ,SAAS,EAAE;IACb;EACF,CAAC,CAAC;EAEF,IAAI,CAACjC,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,KAAKe,OAAO,KAAK,WAAW,IAAI;IACzEO,MAAM,EAAE,aAAa3B,eAAK,CAAC4C,SAAS,CAAC,CAAC;EACxC,CAAC,CAAC;EAEF,IAAI,CAACvC,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,QAAQ,KAAKe,OAAO,KAAK,SAAS,IAAI;IACvEO,MAAM,EAAE,aAAa3B,eAAK,CAAC6C,OAAO,CAAC,CAAC;EACtC,CAAC,CAAC;EAEF,IAAI,CAACxB,KAAK,IAAI;IACZM,MAAM,EAAE,MAAM;IACd,SAAS,EAAE;MACTE,eAAe,EAAE;IACnB;EACF,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAMiB,WAAW,GAAIC,KAAK,IAAK;EAC7B,MAAM;IAAE1C,IAAI;IAAEc,UAAU;IAAE6B,KAAK;IAAEzC,MAAM;IAAEc,KAAK;IAAEb,QAAQ;IAAEY,OAAO;IAAE6B;EAAW,CAAC,GAAGF,KAAK;EAEvF,IAAIC,KAAK,EAAE;IACT,oBAAOlE,MAAA,CAAA2B,OAAA,CAAAC,aAAA,CAACN,MAAM;MAACC,IAAI,EAAEA,IAAK;MAACC,KAAK,EAAE2C,UAAW;MAAC1C,MAAM,EAAEA,MAAO;MAACC,QAAQ,EAAEA;IAAS,CAAE,CAAC;EACtF,CAAC,MAAM;IACL,oBACE1B,MAAA,CAAA2B,OAAA,CAAAC,aAAA,CAACQ,iBAAiB;MAChBb,IAAI,EAAEA,IAAK;MACXc,UAAU,EAAEA,UAAW;MACvBZ,MAAM,EAAEA,MAAO;MACfC,QAAQ,EAAEA,QAAS;MACnBY,OAAO,EAAEA,OAAQ;MACjBC,KAAK,EAAEA,KAAM;MACb6B,uBAAuB,EAAE;QAAEC,MAAM,EAAE9B;MAAM;IAAE,CAC5C,CAAC;EAEN;AACF,CAAC;AAEM,MAAM+B,IAAI,GAAIL,KAAK,IAAK;EAC7B,MAAM;IACJ1B,KAAK;IACLhB,IAAI;IACJgD,EAAE;IACFL,KAAK;IACLxC,QAAQ;IACRY,OAAO;IACPd,KAAK;IACL2C,UAAU;IACVK,UAAU;IACVC,SAAS;IACTC;EACF,CAAC,GAAGT,KAAK;;EAET;EACA;EACA;EACA;EACA,MAAMU,MAAM,GAAG,QAAQpD,IAAI,IAAIgD,EAAE,IAAI,IAAI,GAAGA,EAAE,GAAG,OAAO,IAAIG,SAAS,IAAIF,UAAU,EAAE;EACrF,MAAMI,MAAM,GAAG,QAAQrD,IAAI,IAAIgD,EAAE,IAAI,IAAI,GAAGA,EAAE,GAAG,OAAO,IAAIG,SAAS,IAAIF,UAAU,EAAE;EAErF,MAAM;IACJK,UAAU;IACVC,SAAS;IACTC,UAAU,EAAEC,UAAU;IACtBxB,SAAS;IACTnB;EACF,CAAC,GAAG,IAAA4C,kBAAY,EAAC;IACfV,EAAE,EAAEI,MAAM;IACVO,IAAI,EAAE;MACJX,EAAE;MACFhD,IAAI;MACJiD,UAAU;MACVW,KAAK,EAAE5C,KAAK;MACZf;IACF,CAAC;IACDE,QAAQ,EAAE,CAAC+C,SAAS,IAAI/C;EAC1B,CAAC,CAAC;EAEF,MAAM;IACJqD,UAAU,EAAEK,UAAU;IACtB3D,MAAM,EAAE4D;EACV,CAAC,GAAG,IAAAC,kBAAY,EAAC;IACff,EAAE,EAAEK,MAAM;IACVM,IAAI,EAAE;MACJX,EAAE;MACFhD,IAAI;MACJiD,UAAU;MACVW,KAAK,EAAE5C,KAAK;MACZf;IACF,CAAC;IACD;IACA;IACAE,QAAQ,EAAEW;EACZ,CAAC,CAAC;EAEF,MAAMkD,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAC,IAAI,CAAC;EAE9BD,cAAK,CAACE,SAAS,CAAC,MAAM;IACpB,MAAMC,UAAU,GAAGJ,GAAG,CAACK,OAAO;IAE9B,MAAMC,gBAAgB,GAAIC,CAAC,IAAK;MAC9BA,CAAC,CAACC,cAAc,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,IAAIJ,UAAU,EAAE;MACdA,UAAU,CAACK,gBAAgB,CAAC,YAAY,EAAEH,gBAAgB,EAAE;QAAEI,OAAO,EAAE;MAAM,CAAC,CAAC;IACjF;IAEA,OAAO,MAAM;MACX,IAAIN,UAAU,EAAE;QACdA,UAAU,CAACO,mBAAmB,CAAC,YAAY,EAAEL,gBAAgB,CAAC;MAChE;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMM,OAAO,GAAIC,OAAO,IAAK;IAC3Bb,GAAG,CAACK,OAAO,GAAGQ,OAAO;IACrBpB,UAAU,CAACoB,OAAO,CAAC;IACnBhB,UAAU,CAACgB,OAAO,CAAC;EACrB,CAAC;EAED3F,GAAG,CAAC,mBAAmB,EAAEwD,KAAK,CAAC;EAE/B,MAAMoC,KAAK,GAAG;IACZ7C,SAAS,EAAEA,SAAS,GAAG,eAAeA,SAAS,CAAC8C,CAAC,OAAO9C,SAAS,CAAC+C,CAAC,QAAQ,GAAGzE,SAAS;IACvFa,SAAS,EAAE,YAAY;IACvBC,QAAQ,EAAE,SAAS;IACnBF,OAAO,EAAE,CAAC;IACV8D,MAAM,EAAE,CAAC;IACTvF,SAAS,EAAE,QAAQ;IACnBiC,aAAa,EAAE,MAAM;IACrBV,MAAM,EAAEd,QAAQ,GAAG,aAAa,GAAIW,UAAU,GAAG,UAAU,GAAG,MAAO;IACrEoE,MAAM,EAAEpE,UAAU,GAAG,IAAI,GAAG,MAAM;IAClCqE,UAAU,EAAErE,UAAU,GAAG,WAAW,GAAG;EACzC,CAAC;EAED,oBACErC,MAAA,CAAA2B,OAAA,CAAAC,aAAA,YAAA+E,SAAA,CAAAhF,OAAA;IACE4D,GAAG,EAAEY,OAAQ;IACbE,KAAK,EAAEA;EAAM,GACR5B,SAAS,IAAI,CAAC/C,QAAQ,GAAG;IAAE,GAAGoD,SAAS;IAAE,GAAGD;EAAW,CAAC,GAAG,CAAC,CAAC,gBAElE7E,MAAA,CAAA2B,OAAA,CAAAC,aAAA,CAACoC,WAAW;IACVzB,KAAK,EAAEA,KAAM;IACbgC,EAAE,EAAEA,EAAG;IACPL,KAAK,EAAEA,KAAM;IACb1C,KAAK,EAAEA,KAAM;IACb2C,UAAU,EAAEA,UAAW;IACvB1C,MAAM,EAAE4D,UAAW;IACnBhD,UAAU,EAAEA,UAAW;IACvBX,QAAQ,EAAEA,QAAS;IACnBY,OAAO,EAAEA,OAAQ;IACjBf,IAAI,EAAEA;EAAK,CACZ,CACE,CAAC;AAEV,CAAC;AAACqF,OAAA,CAAAtC,IAAA,GAAAA,IAAA;AAEFA,IAAI,CAACvC,SAAS,GAAG;EACfwC,EAAE,EAAEvC,kBAAS,CAAC6E,GAAG;EACjBtE,KAAK,EAAEP,kBAAS,CAACC,MAAM;EACvBR,MAAM,EAAEO,kBAAS,CAACG,IAAI;EACtBZ,IAAI,EAAES,kBAAS,CAACC,MAAM;EACtBiC,KAAK,EAAElC,kBAAS,CAACG,IAAI;EACrBT,QAAQ,EAAEM,kBAAS,CAACG,IAAI;EACxBG,OAAO,EAAEN,kBAAS,CAACC,MAAM;EACzBT,KAAK,EAAEQ,kBAAS,CAACE,MAAM;EACvBiC,UAAU,EAAEnC,kBAAS,CAACE,MAAM;EAC5BsC,UAAU,EAAExC,kBAAS,CAAC6E,GAAG;EACzBpC,SAAS,EAAEzC,kBAAS,CAACG,IAAI;EACzBuC,SAAS,EAAE1C,kBAAS,CAACE;AACvB,CAAC;AAAC,IAAA4E,QAAA,GAAAF,OAAA,CAAAjF,OAAA,GAEa2C,IAAI","ignoreList":[]}
package/lib/tiler.js ADDED
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.VerticalTiler = exports.HorizontalTiler = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _styles = require("@mui/material/styles");
13
+ var _tile = _interopRequireDefault(require("./tile"));
14
+ const types = {
15
+ choiceLabel: _propTypes.default.string,
16
+ targetLabel: _propTypes.default.string,
17
+ disabled: _propTypes.default.bool,
18
+ tiles: _propTypes.default.array.isRequired,
19
+ tileSize: _propTypes.default.string,
20
+ addGuide: _propTypes.default.bool
21
+ };
22
+ const defaults = {
23
+ tileSize: '1fr',
24
+ disabled: false,
25
+ addGuide: false
26
+ };
27
+ const buildTiles = props => {
28
+ const T = (tile, index) => {
29
+ tile.instanceId = props.instanceId;
30
+ tile.disabled = props.disabled;
31
+ tile.guideIndex = props.addGuide ? tile.index + 1 : undefined;
32
+ // unique key for dnd-kit IDs
33
+ tile.tileIndex = index;
34
+ if (props.includeTargets) {
35
+ return /*#__PURE__*/_react.default.createElement(_tile.default, (0, _extends2.default)({}, tile, {
36
+ key: index
37
+ }));
38
+ } else {
39
+ return tile.type === 'choice' ? /*#__PURE__*/_react.default.createElement(_tile.default, (0, _extends2.default)({}, tile, {
40
+ key: index
41
+ })) : /*#__PURE__*/_react.default.createElement(_tile.default, (0, _extends2.default)({}, tile, {
42
+ label: "",
43
+ key: index
44
+ }));
45
+ }
46
+ };
47
+ T.propTypes = {
48
+ ...types
49
+ };
50
+ return T;
51
+ };
52
+ const StyledHTilerContainer = (0, _styles.styled)('div')(({
53
+ theme,
54
+ includeTargets
55
+ }) => ({
56
+ display: 'grid',
57
+ paddingBottom: theme.spacing(2),
58
+ ...(includeTargets && {
59
+ gridGap: '10px'
60
+ })
61
+ }));
62
+ const StyledChoiceLabel = (0, _styles.styled)('div')({
63
+ textAlign: 'center'
64
+ });
65
+ const StyledTargetLabel = (0, _styles.styled)('div')({
66
+ textAlign: 'center',
67
+ gridRow: '3/4'
68
+ });
69
+ const StyledVTilerContainer = (0, _styles.styled)('div')(({
70
+ includeTargets
71
+ }) => ({
72
+ gridAutoFlow: 'column',
73
+ display: 'grid',
74
+ ...(includeTargets && {
75
+ gridGap: '10px'
76
+ })
77
+ }));
78
+ const StyledVChoiceLabel = (0, _styles.styled)('div')({
79
+ gridColumn: '1/2',
80
+ textAlign: 'center'
81
+ });
82
+ const StyledVTargetLabel = (0, _styles.styled)('div')({
83
+ gridColumn: '2/3',
84
+ textAlign: 'center'
85
+ });
86
+ class HorizontalTiler extends _react.default.Component {
87
+ render() {
88
+ const {
89
+ includeTargets,
90
+ choiceLabelEnabled,
91
+ choiceLabel,
92
+ targetLabel,
93
+ tiles,
94
+ tileSize
95
+ } = this.props;
96
+ const rows = includeTargets ? `auto ${tileSize} auto ${tileSize}` : `auto ${tileSize} auto`;
97
+ const columns = includeTargets ? tiles.length / 2 : tiles.length;
98
+ const style = {
99
+ gridTemplateColumns: includeTargets ? `repeat(${columns}, ${tileSize})` : `auto repeat(${Math.floor(columns / 2) - 1}, ${tileSize} 10px) ${tileSize} auto`,
100
+ gridTemplateRows: rows
101
+ };
102
+ const labelStyle = {
103
+ gridColumn: `1/${columns + 1}`
104
+ };
105
+ return /*#__PURE__*/_react.default.createElement(StyledHTilerContainer, {
106
+ includeTargets: includeTargets,
107
+ style: style
108
+ }, /*#__PURE__*/_react.default.createElement(StyledChoiceLabel, {
109
+ style: labelStyle,
110
+ dangerouslySetInnerHTML: {
111
+ __html: choiceLabelEnabled ? choiceLabel : ''
112
+ }
113
+ }), includeTargets && /*#__PURE__*/_react.default.createElement(StyledTargetLabel, {
114
+ style: labelStyle,
115
+ dangerouslySetInnerHTML: {
116
+ __html: targetLabel
117
+ }
118
+ }), tiles.map(buildTiles(this.props)));
119
+ }
120
+ }
121
+ exports.HorizontalTiler = HorizontalTiler;
122
+ (0, _defineProperty2.default)(HorizontalTiler, "propTypes", {
123
+ ...types
124
+ });
125
+ (0, _defineProperty2.default)(HorizontalTiler, "defaultProps", {
126
+ ...defaults
127
+ });
128
+ class VerticalTiler extends _react.default.Component {
129
+ render() {
130
+ const {
131
+ includeTargets,
132
+ choiceLabelEnabled,
133
+ choiceLabel,
134
+ targetLabel,
135
+ tiles,
136
+ tileSize
137
+ } = this.props;
138
+ const columns = includeTargets ? 2 : 1;
139
+ const rows = includeTargets ? tiles.length / 2 : tiles.length;
140
+ const style = {
141
+ gridTemplateColumns: `repeat(${columns}, ${tileSize})`,
142
+ gridTemplateRows: includeTargets ? `auto repeat(${rows}, ${tileSize})` : `auto auto repeat(${Math.floor(rows / 2) - 1}, ${tileSize} 10px) ${tileSize} auto`
143
+ };
144
+ return /*#__PURE__*/_react.default.createElement(StyledVTilerContainer, {
145
+ includeTargets: includeTargets,
146
+ style: style
147
+ }, /*#__PURE__*/_react.default.createElement(StyledVChoiceLabel, {
148
+ dangerouslySetInnerHTML: {
149
+ __html: choiceLabelEnabled ? choiceLabel : ''
150
+ }
151
+ }), includeTargets && /*#__PURE__*/_react.default.createElement(StyledVTargetLabel, {
152
+ dangerouslySetInnerHTML: {
153
+ __html: targetLabel
154
+ }
155
+ }), tiles.map(buildTiles(this.props)));
156
+ }
157
+ }
158
+ exports.VerticalTiler = VerticalTiler;
159
+ (0, _defineProperty2.default)(VerticalTiler, "propTypes", {
160
+ ...types
161
+ });
162
+ (0, _defineProperty2.default)(VerticalTiler, "defaultProps", {
163
+ ...defaults
164
+ });
165
+ //# sourceMappingURL=tiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiler.js","names":["_propTypes","_interopRequireDefault","require","_react","_styles","_tile","types","choiceLabel","PropTypes","string","targetLabel","disabled","bool","tiles","array","isRequired","tileSize","addGuide","defaults","buildTiles","props","T","tile","index","instanceId","guideIndex","undefined","tileIndex","includeTargets","default","createElement","_extends2","key","type","label","propTypes","StyledHTilerContainer","styled","theme","display","paddingBottom","spacing","gridGap","StyledChoiceLabel","textAlign","StyledTargetLabel","gridRow","StyledVTilerContainer","gridAutoFlow","StyledVChoiceLabel","gridColumn","StyledVTargetLabel","HorizontalTiler","React","Component","render","choiceLabelEnabled","rows","columns","length","style","gridTemplateColumns","Math","floor","gridTemplateRows","labelStyle","dangerouslySetInnerHTML","__html","map","exports","_defineProperty2","VerticalTiler"],"sources":["../src/tiler.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport { styled } from '@mui/material/styles';\n\nimport Tile from './tile';\n\nconst types = {\n choiceLabel: PropTypes.string,\n targetLabel: PropTypes.string,\n disabled: PropTypes.bool,\n tiles: PropTypes.array.isRequired,\n tileSize: PropTypes.string,\n addGuide: PropTypes.bool,\n};\n\nconst defaults = {\n tileSize: '1fr',\n disabled: false,\n addGuide: false,\n};\n\nconst buildTiles = (props) => {\n const T = (tile, index) => {\n tile.instanceId = props.instanceId;\n tile.disabled = props.disabled;\n tile.guideIndex = props.addGuide ? tile.index + 1 : undefined;\n // unique key for dnd-kit IDs\n tile.tileIndex = index;\n\n if (props.includeTargets) {\n return <Tile {...tile} key={index} />;\n } else {\n return tile.type === 'choice' ? <Tile {...tile} key={index} /> : <Tile {...tile} label=\"\" key={index} />;\n }\n };\n\n T.propTypes = { ...types };\n return T;\n};\n\nconst StyledHTilerContainer = styled('div')(({ theme, includeTargets }) => ({\n display: 'grid',\n paddingBottom: theme.spacing(2),\n ...(includeTargets && {\n gridGap: '10px',\n }),\n}));\n\nconst StyledChoiceLabel = styled('div')({\n textAlign: 'center',\n});\n\nconst StyledTargetLabel = styled('div')({\n textAlign: 'center',\n gridRow: '3/4',\n});\n\nconst StyledVTilerContainer = styled('div')(({ includeTargets }) => ({\n gridAutoFlow: 'column',\n display: 'grid',\n ...(includeTargets && {\n gridGap: '10px',\n }),\n}));\n\nconst StyledVChoiceLabel = styled('div')({\n gridColumn: '1/2',\n textAlign: 'center',\n});\n\nconst StyledVTargetLabel = styled('div')({\n gridColumn: '2/3',\n textAlign: 'center',\n});\n\nexport class HorizontalTiler extends React.Component {\n static propTypes = { ...types };\n static defaultProps = { ...defaults };\n render() {\n const { includeTargets, choiceLabelEnabled, choiceLabel, targetLabel, tiles, tileSize } = this.props;\n\n const rows = includeTargets ? `auto ${tileSize} auto ${tileSize}` : `auto ${tileSize} auto`;\n const columns = includeTargets ? tiles.length / 2 : tiles.length;\n\n const style = {\n gridTemplateColumns: includeTargets\n ? `repeat(${columns}, ${tileSize})`\n : `auto repeat(${Math.floor(columns / 2) - 1}, ${tileSize} 10px) ${tileSize} auto`,\n gridTemplateRows: rows,\n };\n\n const labelStyle = {\n gridColumn: `1/${columns + 1}`,\n };\n\n return (\n <StyledHTilerContainer includeTargets={includeTargets} style={style}>\n <StyledChoiceLabel\n style={labelStyle}\n dangerouslySetInnerHTML={{ __html: choiceLabelEnabled ? choiceLabel : '' }}\n />\n {includeTargets && (\n <StyledTargetLabel style={labelStyle} dangerouslySetInnerHTML={{ __html: targetLabel }} />\n )}\n {tiles.map(buildTiles(this.props))}\n </StyledHTilerContainer>\n );\n }\n}\n\nexport class VerticalTiler extends React.Component {\n static propTypes = { ...types };\n static defaultProps = { ...defaults };\n render() {\n const { includeTargets, choiceLabelEnabled, choiceLabel, targetLabel, tiles, tileSize } = this.props;\n\n const columns = includeTargets ? 2 : 1;\n const rows = includeTargets ? tiles.length / 2 : tiles.length;\n\n const style = {\n gridTemplateColumns: `repeat(${columns}, ${tileSize})`,\n gridTemplateRows: includeTargets\n ? `auto repeat(${rows}, ${tileSize})`\n : `auto auto repeat(${Math.floor(rows / 2) - 1}, ${tileSize} 10px) ${tileSize} auto`,\n };\n\n return (\n <StyledVTilerContainer includeTargets={includeTargets} style={style}>\n <StyledVChoiceLabel\n dangerouslySetInnerHTML={{ __html: choiceLabelEnabled ? choiceLabel : '' }}\n />\n\n {includeTargets && <StyledVTargetLabel dangerouslySetInnerHTML={{ __html: targetLabel }} />}\n {tiles.map(buildTiles(this.props))}\n </StyledVTilerContainer>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/utils.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.haveSameValuesButDifferentOrder = void 0;
7
+ const haveSameValuesButDifferentOrder = (arr1, arr2) => {
8
+ if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false;
9
+ if (arr1.length !== arr2.length) return false;
10
+ const toSortedJson = arr => arr.map(item => JSON.stringify(item)).sort();
11
+ const sortedArr1 = toSortedJson(arr1);
12
+ const sortedArr2 = toSortedJson(arr2);
13
+ const hasSameValues = sortedArr1.every((val, i) => val === sortedArr2[i]);
14
+ const hasSameOrder = arr1.every((item, i) => JSON.stringify(item) === JSON.stringify(arr2[i]));
15
+ return hasSameValues && !hasSameOrder;
16
+ };
17
+ exports.haveSameValuesButDifferentOrder = haveSameValuesButDifferentOrder;
18
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["haveSameValuesButDifferentOrder","arr1","arr2","Array","isArray","length","toSortedJson","arr","map","item","JSON","stringify","sort","sortedArr1","sortedArr2","hasSameValues","every","val","i","hasSameOrder","exports"],"sources":["../src/utils.js"],"sourcesContent":["export const haveSameValuesButDifferentOrder = (arr1, arr2) => {\n if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false;\n if (arr1.length !== arr2.length) return false;\n\n const toSortedJson = (arr) =>\n arr\n .map((item) => JSON.stringify(item))\n .sort();\n\n const sortedArr1 = toSortedJson(arr1);\n const sortedArr2 = toSortedJson(arr2);\n\n const hasSameValues = sortedArr1.every((val, i) => val === sortedArr2[i]);\n const hasSameOrder = arr1.every((item, i) =>\n JSON.stringify(item) === JSON.stringify(arr2[i])\n );\n\n return hasSameValues && !hasSameOrder;\n};\n"],"mappings":";;;;;;AAAO,MAAMA,+BAA+B,GAAGA,CAACC,IAAI,EAAEC,IAAI,KAAK;EAC3D,IAAI,CAACC,KAAK,CAACC,OAAO,CAACH,IAAI,CAAC,IAAI,CAACE,KAAK,CAACC,OAAO,CAACF,IAAI,CAAC,EAAE,OAAO,KAAK;EAC9D,IAAID,IAAI,CAACI,MAAM,KAAKH,IAAI,CAACG,MAAM,EAAE,OAAO,KAAK;EAE7C,MAAMC,YAAY,GAAIC,GAAG,IACrBA,GAAG,CACEC,GAAG,CAAEC,IAAI,IAAKC,IAAI,CAACC,SAAS,CAACF,IAAI,CAAC,CAAC,CACnCG,IAAI,CAAC,CAAC;EAEf,MAAMC,UAAU,GAAGP,YAAY,CAACL,IAAI,CAAC;EACrC,MAAMa,UAAU,GAAGR,YAAY,CAACJ,IAAI,CAAC;EAErC,MAAMa,aAAa,GAAGF,UAAU,CAACG,KAAK,CAAC,CAACC,GAAG,EAAEC,CAAC,KAAKD,GAAG,KAAKH,UAAU,CAACI,CAAC,CAAC,CAAC;EACzE,MAAMC,YAAY,GAAGlB,IAAI,CAACe,KAAK,CAAC,CAACP,IAAI,EAAES,CAAC,KACpCR,IAAI,CAACC,SAAS,CAACF,IAAI,CAAC,KAAKC,IAAI,CAACC,SAAS,CAACT,IAAI,CAACgB,CAAC,CAAC,CACnD,CAAC;EAED,OAAOH,aAAa,IAAI,CAACI,YAAY;AACzC,CAAC;AAACC,OAAA,CAAApB,+BAAA,GAAAA,+BAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,104 +1,37 @@
1
1
  {
2
2
  "name": "@pie-element/placement-ordering",
3
- "version": "14.1.2-next.5",
3
+ "repository": "pie-framework/pie-elements",
4
+ "version": "14.1.3",
4
5
  "description": "",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
5
9
  "dependencies": {
6
10
  "@dnd-kit/core": "6.3.1",
7
11
  "@emotion/react": "^11.14.0",
8
12
  "@emotion/style": "^0.8.0",
9
13
  "@mui/icons-material": "^7.3.4",
10
14
  "@mui/material": "^7.3.4",
11
- "@pie-lib/correct-answer-toggle": "4.0.3-next.38",
12
- "@pie-lib/drag": "4.0.3-next.38",
13
- "@pie-lib/render-ui": "6.1.1-next.38",
14
- "@pie-lib/translator": "4.0.3-next.1",
15
+ "@pie-framework/pie-player-events": "^0.1.0",
16
+ "@pie-lib/correct-answer-toggle": "4.0.4",
17
+ "@pie-lib/drag": "4.0.4",
18
+ "@pie-lib/math-rendering": "5.0.2",
19
+ "@pie-lib/render-ui": "6.1.2",
20
+ "@pie-lib/translator": "4.0.2",
15
21
  "debug": "^4.1.1",
16
22
  "decimal.js": "^10.0.0",
23
+ "lodash-es": "^4.17.23",
17
24
  "prop-types": "^15.8.1",
18
- "react-transition-group": "^4.4.5",
19
- "@pie-element/shared-lodash": "0.1.1-next.1",
20
- "@pie-lib/config-ui": "13.0.4-next.31",
21
- "@pie-lib/editable-html-tip-tap": "2.1.2-next.31",
22
- "nested-property": "^4.0.0",
23
- "pluralize": "^8.0.0",
24
- "@pie-element/shared-configure-events": "0.1.0",
25
- "@pie-element/shared-feedback": "0.1.0",
26
- "@pie-element/shared-controller-utils": "0.1.1-next.1",
27
- "js-combinatorics": "^2.1.2",
28
- "@pie-element/shared-math-rendering-mathjax": "0.1.1-next.0",
29
- "@pie-element/shared-player-events": "0.1.0"
30
- },
31
- "peerDependencies": {
32
- "react": "^18.0.0",
33
- "react-dom": "^18.0.0"
34
- },
35
- "exports": {
36
- ".": {
37
- "types": "./dist/index.d.ts",
38
- "default": "./dist/index.js"
39
- },
40
- "./delivery": {
41
- "types": "./dist/delivery/index.d.ts",
42
- "default": "./dist/delivery/index.js"
43
- },
44
- "./browser/delivery": {
45
- "default": "./dist/browser/delivery/index.js"
46
- },
47
- "./author": {
48
- "types": "./dist/author/index.d.ts",
49
- "default": "./dist/author/index.js"
50
- },
51
- "./browser/author": {
52
- "default": "./dist/browser/author/index.js"
53
- },
54
- "./configure": {
55
- "types": "./dist/author/index.d.ts",
56
- "default": "./dist/author/index.js"
57
- },
58
- "./controller": {
59
- "types": "./dist/controller/index.d.ts",
60
- "default": "./dist/controller/index.js"
61
- },
62
- "./controller.js": {
63
- "types": "./dist/controller/index.d.ts",
64
- "default": "./dist/controller/index.js"
65
- },
66
- "./browser/controller": {
67
- "default": "./dist/browser/controller/index.js"
68
- },
69
- "./runtime-support": {
70
- "types": "./dist/runtime-support.d.ts",
71
- "default": "./dist/runtime-support.js"
72
- }
73
- },
74
- "type": "module",
75
- "main": "./dist/index.js",
76
- "types": "./dist/index.d.ts",
77
- "files": [
78
- "configure.js",
79
- "controller.js",
80
- "dist"
81
- ],
82
- "sideEffects": false,
83
- "devDependencies": {
84
- "vite": "^8.0.1",
85
- "typescript": "^5.9.3",
86
- "@vitejs/plugin-react": "^6.0.1",
87
- "@types/react": "^18.2.0",
88
- "@types/react-dom": "^18.2.0"
25
+ "react": "18.3.1",
26
+ "react-dom": "18.3.1",
27
+ "react-transition-group": "^4.4.5"
89
28
  },
29
+ "author": "",
30
+ "license": "ISC",
31
+ "gitHead": "213c3a293da2591ffaf2ba5c5fb50f0fe7577cfa",
90
32
  "scripts": {
91
- "build": "bun x vite build && bun x vite build --config ../../../tools/vite/element-browser.config.ts && bun x vite build --config vite.config.iife.ts && bun x tsc --emitDeclarationOnly",
92
- "dev": "bun x vite",
93
- "demo": "bun x vite --mode demo",
94
- "test": "bun x vitest run"
33
+ "postpublish": "../../scripts/postpublish"
95
34
  },
96
- "pie": {
97
- "controller": "@pie-element/placement-ordering/controller",
98
- "configure": "@pie-element/placement-ordering/configure",
99
- "browserSharedDependencies": {
100
- "react": "18.2.0",
101
- "react-dom": "18.2.0"
102
- }
103
- }
35
+ "main": "lib/index.js",
36
+ "module": "src/index.js"
104
37
  }
package/configure.js DELETED
@@ -1,2 +0,0 @@
1
- export { default } from './dist/author/index.js';
2
- export * from './dist/author/index.js';
package/controller.js DELETED
@@ -1 +0,0 @@
1
- export * from './dist/controller/index.js';