@pie-element/categorize 6.7.2 → 6.7.3-next.1008

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 (75) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/configure/CHANGELOG.md +117 -0
  3. package/configure/lib/defaults.js +11 -1
  4. package/configure/lib/defaults.js.map +1 -1
  5. package/configure/lib/design/builder.js +1 -1
  6. package/configure/lib/design/buttons.js +6 -4
  7. package/configure/lib/design/buttons.js.map +1 -1
  8. package/configure/lib/design/categories/alternateResponses.js +4 -2
  9. package/configure/lib/design/categories/alternateResponses.js.map +1 -1
  10. package/configure/lib/design/categories/category.js +9 -4
  11. package/configure/lib/design/categories/category.js.map +1 -1
  12. package/configure/lib/design/categories/choice-preview.js +4 -4
  13. package/configure/lib/design/categories/choice-preview.js.map +1 -1
  14. package/configure/lib/design/categories/droppable-placeholder.js +3 -3
  15. package/configure/lib/design/categories/droppable-placeholder.js.map +1 -1
  16. package/configure/lib/design/categories/index.js +69 -10
  17. package/configure/lib/design/categories/index.js.map +1 -1
  18. package/configure/lib/design/choices/choice.js +21 -6
  19. package/configure/lib/design/choices/choice.js.map +1 -1
  20. package/configure/lib/design/choices/config.js +5 -3
  21. package/configure/lib/design/choices/config.js.map +1 -1
  22. package/configure/lib/design/choices/index.js +34 -8
  23. package/configure/lib/design/choices/index.js.map +1 -1
  24. package/configure/lib/design/header.js +15 -5
  25. package/configure/lib/design/header.js.map +1 -1
  26. package/configure/lib/design/index.js +41 -11
  27. package/configure/lib/design/index.js.map +1 -1
  28. package/configure/lib/design/input-header.js +12 -4
  29. package/configure/lib/design/input-header.js.map +1 -1
  30. package/configure/lib/index.js +3 -3
  31. package/configure/lib/main.js +1 -1
  32. package/configure/lib/main.js.map +1 -1
  33. package/configure/lib/utils.js +20 -0
  34. package/configure/lib/utils.js.map +1 -0
  35. package/configure/package.json +4 -4
  36. package/controller/CHANGELOG.md +16 -0
  37. package/controller/lib/index.js +83 -3
  38. package/controller/lib/index.js.map +1 -1
  39. package/controller/package.json +1 -1
  40. package/docs/config-schema.json +31 -0
  41. package/docs/config-schema.json.md +24 -0
  42. package/docs/demo/generate.js +1 -0
  43. package/docs/pie-schema.json +16 -0
  44. package/docs/pie-schema.json.md +15 -0
  45. package/lib/categorize/categories.js +9 -4
  46. package/lib/categorize/categories.js.map +1 -1
  47. package/lib/categorize/category.js +4 -4
  48. package/lib/categorize/category.js.map +1 -1
  49. package/lib/categorize/choice.js +5 -4
  50. package/lib/categorize/choice.js.map +1 -1
  51. package/lib/categorize/choices.js +12 -5
  52. package/lib/categorize/choices.js.map +1 -1
  53. package/lib/categorize/droppable-placeholder.js +2 -2
  54. package/lib/categorize/droppable-placeholder.js.map +1 -1
  55. package/lib/categorize/grid-content.js +3 -3
  56. package/lib/categorize/grid-content.js.map +1 -1
  57. package/lib/categorize/index.js +11 -15
  58. package/lib/categorize/index.js.map +1 -1
  59. package/lib/index.js +4 -1
  60. package/lib/index.js.map +1 -1
  61. package/package.json +5 -5
  62. package/docs/demo/.pie/.configure/package.json +0 -10
  63. package/docs/demo/.pie/.configure/yarn.lock +0 -1128
  64. package/docs/demo/.pie/.controllers/package.json +0 -10
  65. package/docs/demo/.pie/.controllers/yarn.lock +0 -43
  66. package/docs/demo/.pie/info.entry.js +0 -89
  67. package/docs/demo/.pie/info.webpack.config.js +0 -108
  68. package/docs/demo/.pie/package.json +0 -10
  69. package/docs/demo/.pie/yarn.lock +0 -579
  70. package/module/configure.js +0 -3155
  71. package/module/controller.js +0 -19950
  72. package/module/demo.js +0 -118
  73. package/module/element.js +0 -1470
  74. package/module/index.html +0 -16
  75. package/module/manifest.json +0 -10
@@ -5,16 +5,19 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.outcome = exports.normalize = exports.model = exports.getTotalScore = exports.getPartialScore = exports.getCorrectness = exports.createDefaultModel = exports.createCorrectResponseSession = void 0;
8
9
  Object.defineProperty(exports, "score", {
9
10
  enumerable: true,
10
11
  get: function get() {
11
12
  return _categorize.score;
12
13
  }
13
14
  });
14
- exports.createCorrectResponseSession = exports.outcome = exports.model = exports.normalize = exports.createDefaultModel = exports.getCorrectness = exports.getTotalScore = exports.getPartialScore = void 0;
15
+ exports.validate = void 0;
15
16
 
16
17
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
17
18
 
19
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
20
+
18
21
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
19
22
 
20
23
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -29,9 +32,9 @@ var _controllerUtils = require("@pie-lib/controller-utils");
29
32
 
30
33
  var _defaults = _interopRequireDefault(require("./defaults"));
31
34
 
32
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
35
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
33
36
 
34
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
37
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
35
38
 
36
39
  var getPartialScore = function getPartialScore(correctResponse, builtCategories) {
37
40
  // in the resulted best scenario we make a sum with all the correct responses
@@ -295,4 +298,81 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
295
298
  };
296
299
 
297
300
  exports.createCorrectResponseSession = createCorrectResponseSession;
301
+
302
+ var validate = function validate() {
303
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
304
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
305
+ var categories = model.categories,
306
+ choices = model.choices,
307
+ correctResponse = model.correctResponse;
308
+ var _config$minChoices = config.minChoices,
309
+ minChoices = _config$minChoices === void 0 ? 1 : _config$minChoices,
310
+ maxChoices = config.maxChoices,
311
+ maxCategories = config.maxCategories;
312
+ var reversedChoices = (0, _toConsumableArray2["default"])(choices || []).reverse();
313
+ var errors = {};
314
+ var choicesErrors = {};
315
+ reversedChoices.forEach(function (choice, index) {
316
+ var id = choice.id,
317
+ content = choice.content;
318
+
319
+ if (content === '' || content === '<div></div>') {
320
+ choicesErrors[id] = 'Content should not be empty.';
321
+ } else {
322
+ var identicalAnswer = reversedChoices.slice(index + 1).some(function (c) {
323
+ return c.content === content;
324
+ });
325
+
326
+ if (identicalAnswer) {
327
+ choicesErrors[id] = 'Content should be unique.';
328
+ }
329
+ }
330
+ });
331
+ var nbOfCategories = (categories || []).length;
332
+ var nbOfChoices = (choices || []).length;
333
+
334
+ if (nbOfCategories > maxCategories) {
335
+ errors.categoriesError = "No more than ".concat(maxCategories, " categories should be defined.");
336
+ } else if (nbOfCategories < 1) {
337
+ errors.categoriesError = 'There should be at least 1 category defined.';
338
+ }
339
+
340
+ if (nbOfChoices < minChoices) {
341
+ errors.choicesError = "There should be at least ".concat(minChoices, " choices defined.");
342
+ } else if (nbOfChoices > maxChoices) {
343
+ errors.choicesError = "No more than ".concat(maxChoices, " choices should be defined.");
344
+ }
345
+
346
+ if (nbOfChoices && nbOfCategories) {
347
+ var hasAssociations = false;
348
+ (correctResponse || []).forEach(function (response) {
349
+ var _response$choices = response.choices,
350
+ choices = _response$choices === void 0 ? [] : _response$choices,
351
+ _response$alternateRe = response.alternateResponses,
352
+ alternateResponses = _response$alternateRe === void 0 ? [] : _response$alternateRe;
353
+
354
+ if (choices.length) {
355
+ hasAssociations = true;
356
+ } else {
357
+ alternateResponses.forEach(function (alternate) {
358
+ if ((alternate || []).length) {
359
+ hasAssociations = true;
360
+ }
361
+ });
362
+ }
363
+ });
364
+
365
+ if (!hasAssociations) {
366
+ errors.associationError = 'At least one token should be assigned to at least one category.';
367
+ }
368
+ }
369
+
370
+ if (!(0, _isEmpty["default"])(choicesErrors)) {
371
+ errors.choicesErrors = choicesErrors;
372
+ }
373
+
374
+ return errors;
375
+ };
376
+
377
+ exports.validate = validate;
298
378
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["getPartialScore","correctResponse","builtCategories","reduce","acc","choices","placements","length","score","filter","ch","correct","maxScore","extraPlacements","totalScore","parseFloat","toFixed","getAlternates","map","c","alternateResponses","alternate","getTotalScore","question","session","env","Object","keys","categories","answers","alternates","enabled","partialScoring","getCorrectness","Promise","resolve","mode","undefined","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","answerCorrectness","role","categoriesPerRow","choicesLabel","choicesPosition","feedback","prompt","removeTilesAfterPlacing","rowLabels","rationale","note","teacherInstructions","lockChoiceOrder","fb","out","correctness","disabled","showNote","outcome","reject","Error","empty","createCorrectResponseSession","id"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAKA;;;;;;AAMO,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,CAACC,eAAD,EAAkBC,eAAlB,EAAsC;AACnE;AACA;AAFmE,8BAGrCA,eAAe,CAACC,MAAhB,CAC5B,UAACC,GAAD;AAAA,4BAAQC,OAAR;AAAA,QAAQA,OAAR,6BAAkB,EAAlB;AAAA,WAA4B;AAC1BC,MAAAA,UAAU,EAAEF,GAAG,CAACE,UAAJ,GAAiBD,OAAO,CAACE,MADX;AAE1BC,MAAAA,KAAK,EAAEJ,GAAG,CAACI,KAAJ,GAAYH,OAAO,CAACI,MAAR,CAAe,UAACC,EAAD;AAAA,eAAQA,EAAE,CAACC,OAAX;AAAA,OAAf,EAAmCJ;AAF5B,KAA5B;AAAA,GAD4B,EAK5B;AAAED,IAAAA,UAAU,EAAE,CAAd;AAAiBE,IAAAA,KAAK,EAAE;AAAxB,GAL4B,CAHqC;AAAA,MAG3DF,UAH2D,yBAG3DA,UAH2D;AAAA,MAG/CE,KAH+C,yBAG/CA,KAH+C,EAWnE;;;AAXmE,8BAY9CP,eAAe,CAACE,MAAhB,CACnB,UAACC,GAAD;AAAA,QAAQC,OAAR,SAAQA,OAAR;AAAA,WAAuB;AACrBO,MAAAA,QAAQ,EAAER,GAAG,CAACQ,QAAJ,GAAeP,OAAO,CAACE;AADZ,KAAvB;AAAA,GADmB,EAInB;AAAEK,IAAAA,QAAQ,EAAE;AAAZ,GAJmB,CAZ8C;AAAA,MAY3DA,QAZ2D,yBAY3DA,QAZ2D,EAmBnE;;;AACA,MAAMC,eAAe,GAAGP,UAAU,GAAGM,QAAb,GAAwBN,UAAU,GAAGM,QAArC,GAAgD,CAAxE;AACA,MAAME,UAAU,GAAG,CAACN,KAAK,GAAGK,eAAT,IAA4BD,QAA/C;AAEA,SAAOE,UAAU,GAAG,CAAb,GAAiB,CAAjB,GAAqBC,UAAU,CAACD,UAAU,CAACE,OAAX,CAAmB,CAAnB,CAAD,CAAtC;AACD,CAxBM;;;;AA0BP,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAAAhB,eAAe;AAAA,SAAIA,eAAe,CACrDiB,GADsC,CAClC,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACC,kBAAT;AAAA,GADkC,EAEtCX,MAFsC,CAE/B,UAACY,SAAD;AAAA,WAAeA,SAAf;AAAA,GAF+B,CAAJ;AAAA,CAArC;;AAIO,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,QAAD,EAAWC,OAAX,EAAoBC,GAApB,EAA4B;AACvD,MAAI,CAACD,OAAL,EAAc;AACZ,WAAO,CAAP;AACD;;AAED,MAAIE,MAAM,CAACC,IAAP,CAAYH,OAAZ,EAAqBjB,MAArB,KAAgC,CAApC,EAAuC;AACrC,WAAO,CAAP;AACD;;AAPsD,cAQvBgB,QAAQ,IAAI,EARW;AAAA,MAQ/CK,UAR+C,SAQ/CA,UAR+C;AAAA,MAQnCvB,OARmC,SAQnCA,OARmC;;AAAA,cAS7BkB,QAAQ,IAAI,EATiB;AAAA,MASjDtB,eATiD,SASjDA,eATiD;;AAAA,cAUrCuB,OAAO,IAAI,EAV0B;AAAA,MAUjDK,OAViD,SAUjDA,OAViD;;AAWvDA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;AACA5B,EAAAA,eAAe,GAAGA,eAAe,IAAI,EAArC,CAZuD,CAcvD;AACA;;AAfuD,oBAgBN,4BAC/C2B,UAD+C,EAE/CvB,OAF+C,EAG/CwB,OAH+C,EAI/C5B,eAJ+C,CAhBM;AAAA,MAgBnCC,eAhBmC,eAgB/C0B,UAhB+C;AAAA,MAgBlBjB,OAhBkB,eAgBlBA,OAhBkB;;AAuBvD,MAAMmB,UAAU,GAAGb,aAAa,CAAChB,eAAD,CAAhC;;AACA,MAAM8B,OAAO,GAAGC,gCAAeD,OAAf,CAAuBR,QAAvB,EAAiCE,GAAjC,CAAhB,CAxBuD,CA0BvD;;;AACA,MAAIM,OAAO,IAAI,CAACD,UAAU,CAACvB,MAA3B,EAAmC;AACjC;AACA,WAAOP,eAAe,CAACC,eAAD,EAAkBC,eAAlB,CAAtB;AACD,GA9BsD,CAgCvD;;;AACA,SAAOS,OAAO,GAAG,CAAH,GAAO,CAArB;AACD,CAlCM;;;;AAoCA,IAAMsB,cAAc,GAAG,SAAjBA,cAAiB,CAACV,QAAD,EAAWC,OAAX,EAAoBC,GAApB,EAA4B;AACxD,SAAO,IAAIS,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9B,QAAIV,GAAG,CAACW,IAAJ,KAAa,UAAjB,EAA6B;AAC3B,UAAM5B,MAAK,GAAGc,aAAa,CAACC,QAAD,EAAWC,OAAX,EAAoBC,GAApB,CAA3B;;AACA,UAAIjB,MAAK,KAAK,CAAd,EAAiB;AACf2B,QAAAA,OAAO,CAAC,SAAD,CAAP;AACD,OAFD,MAEO,IAAI3B,MAAK,KAAK,CAAd,EAAiB;AACtB2B,QAAAA,OAAO,CAAC,WAAD,CAAP;AACD,OAFM,MAEA;AACLA,QAAAA,OAAO,CAAC,mBAAD,CAAP;AACD;AACF,KATD,MASO;AACLA,MAAAA,OAAO,CAACE,SAAD,CAAP;AACD;AACF,GAbM,CAAP;AAcD,CAfM;;;;AAiBA,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB;AAAA,MAACC,KAAD,uEAAS,EAAT;AAAA,SAChC,IAAIL,OAAJ,CAAY,UAACC,OAAD,EAAa;AACvBA,IAAAA,OAAO,iCACFK,oBADE,GAEFD,KAFE,EAAP;AAID,GALD,CADgC;AAAA,CAA3B;;;;AAQA,IAAME,SAAS,GAAG,SAAZA,SAAY,CAAClB,QAAD;AAAA;AACvBmB,IAAAA,eAAe,EAAE,IADM;AAEvBC,IAAAA,gBAAgB,EAAE,IAFK;AAGvBC,IAAAA,aAAa,EAAE,IAHQ;AAIvBC,IAAAA,0BAA0B,EAAE,IAJL;AAKvBC,IAAAA,0BAA0B,EAAE;AALL,KAMpBvB,QANoB;AAAA,CAAlB;AASP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,IAAMgB,KAAK,GAAG,SAARA,KAAQ,CAAChB,QAAD,EAAWC,OAAX,EAAoBC,GAApB,EAAyBsB,aAAzB;AAAA,SACnB,IAAIb,OAAJ;AAAA,8FAAY,iBAAOC,OAAP;AAAA;;AAAA;AAAA;AAAA;AAAA;AACJa,cAAAA,kBADI,GACiBP,SAAS,CAAClB,QAAD,CAD1B;AAAA;AAAA,qBAEsBU,cAAc,CAACe,kBAAD,EAAqBxB,OAArB,EAA8BC,GAA9B,CAFpC;;AAAA;AAEJwB,cAAAA,iBAFI;AAAA,sBAIaxB,GAAG,IAAI,EAJpB,EAIFW,IAJE,SAIFA,IAJE,EAIIc,IAJJ,SAIIA,IAJJ;AAORtB,cAAAA,UAPQ,GAuBNoB,kBAvBM,CAORpB,UAPQ,EAQRuB,gBARQ,GAuBNH,kBAvBM,CAQRG,gBARQ,EASRC,YATQ,GAuBNJ,kBAvBM,CASRI,YATQ,EAURC,eAVQ,GAuBNL,kBAvBM,CAURK,eAVQ,EAWRpD,eAXQ,GAuBN+C,kBAvBM,CAWR/C,eAXQ,EAYRqD,QAZQ,GAuBNN,kBAvBM,CAYRM,QAZQ,EAaRZ,eAbQ,GAuBNM,kBAvBM,CAaRN,eAbQ,EAcRE,aAdQ,GAuBNI,kBAvBM,CAcRJ,aAdQ,EAeRW,MAfQ,GAuBNP,kBAvBM,CAeRO,MAfQ,EAgBRC,uBAhBQ,GAuBNR,kBAvBM,CAgBRQ,uBAhBQ,EAiBRC,SAjBQ,GAuBNT,kBAvBM,CAiBRS,SAjBQ,EAkBRd,gBAlBQ,GAuBNK,kBAvBM,CAkBRL,gBAlBQ,EAmBRe,SAnBQ,GAuBNV,kBAvBM,CAmBRU,SAnBQ,EAoBRC,IApBQ,GAuBNX,kBAvBM,CAoBRW,IApBQ,EAqBRd,0BArBQ,GAuBNG,kBAvBM,CAqBRH,0BArBQ,EAsBRe,mBAtBQ,GAuBNZ,kBAvBM,CAsBRY,mBAtBQ;AAwBJvD,cAAAA,OAxBI,GAwBQ2C,kBAxBR,CAwBJ3C,OAxBI;AA2BJwD,cAAAA,eA3BI,GA2Bc,kCAAYb,kBAAZ,EAAgCxB,OAAhC,EAAyCC,GAAzC,CA3Bd;;AAAA,oBA6BNW,IAAI,KAAK,UAAT,IAAuBM,eA7BjB;AAAA;AAAA;AAAA;;AAAA;AAAA,qBA8BG,yCACTO,iBADS,EAETK,QAFS,CA9BH;;AAAA;AA8BRQ,cAAAA,EA9BQ;;AAAA;AAAA,kBAoCLD,eApCK;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAqCQ,yCAAmBxD,OAAnB,EAA4BmB,OAA5B,EAAqCuB,aAArC,EAAoD,IAApD,CArCR;;AAAA;AAqCR1C,cAAAA,OArCQ;;AAAA;AAwCJyB,cAAAA,UAxCI,GAwCSb,aAAa,CAAChB,eAAD,CAxCtB;AAyCJ8D,cAAAA,GAzCI,GAyCE;AACVnC,gBAAAA,UAAU,EAAEA,UAAU,IAAI,EADhB;AAEVuB,gBAAAA,gBAAgB,EAAEA,gBAAgB,IAAI,CAF5B;AAGVa,gBAAAA,WAAW,EAAEf,iBAHH;AAIV5C,gBAAAA,OAAO,EAAEA,OAAO,IAAI,EAJV;AAKV+C,gBAAAA,YAAY,EAAEA,YAAY,IAAI,EALpB;AAMVC,gBAAAA,eAAe,EAAfA,eANU;AAOVY,gBAAAA,QAAQ,EAAE7B,IAAI,KAAK,QAPT;AAQVkB,gBAAAA,QAAQ,EAAEQ,EARA;AASVD,gBAAAA,eAAe,EAAfA,eATU;AAUVN,gBAAAA,MAAM,EAAEX,aAAa,GAAGW,MAAH,GAAY,IAVvB;AAWVC,gBAAAA,uBAAuB,EAAvBA,uBAXU;AAYVC,gBAAAA,SAAS,EAATA,SAZU;AAaVE,gBAAAA,IAAI,EAAJA,IAbU;AAcVlC,gBAAAA,GAAG,EAAHA,GAdU;AAeVyC,gBAAAA,QAAQ,EAAEpC,UAAU,IAAIA,UAAU,CAACvB,MAAX,GAAoB,CAflC;AAgBVN,gBAAAA,eAAe,EAAEmC,IAAI,KAAK,UAAT,GAAsBnC,eAAtB,GAAwCoC;AAhB/C,eAzCF;;AA4DV,kBAAIa,IAAI,KAAK,YAAT,KAA0Bd,IAAI,KAAK,MAAT,IAAmBA,IAAI,KAAK,UAAtD,CAAJ,EAAuE;AACrE2B,gBAAAA,GAAG,CAACL,SAAJ,GAAgBf,gBAAgB,GAAGe,SAAH,GAAe,IAA/C;AACAK,gBAAAA,GAAG,CAACH,mBAAJ,GAA0Bf,0BAA0B,GAChDe,mBADgD,GAEhD,IAFJ;AAGD,eALD,MAKO;AACLG,gBAAAA,GAAG,CAACL,SAAJ,GAAgB,IAAhB;AACAK,gBAAAA,GAAG,CAACH,mBAAJ,GAA0B,IAA1B;AACD;;AAEDzB,cAAAA,OAAO,CAAC4B,GAAD,CAAP;;AAtEU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAZ;;AAAA;AAAA;AAAA;AAAA,MADmB;AAAA,CAAd;;;;AA0EA,IAAMI,OAAO,GAAG,SAAVA,OAAU,CAAC5C,QAAD,EAAWC,OAAX,EAAoBC,GAApB,EAA4B;AACjD,MAAIA,GAAG,CAACW,IAAJ,KAAa,UAAjB,EAA6B;AAC3B,WAAOF,OAAO,CAACkC,MAAR,CACL,IAAIC,KAAJ,CAAU,gDAAV,CADK,CAAP;AAGD,GAJD,MAIO;AACL,WAAO,IAAInC,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9BA,MAAAA,OAAO,CAAC;AACN3B,QAAAA,KAAK,EAAEc,aAAa,CAACC,QAAD,EAAWC,OAAX,EAAoBC,GAApB,CADd;AAEN6C,QAAAA,KAAK,EAAE,CAAC9C,OAAD,IAAY,yBAAQA,OAAR;AAFb,OAAD,CAAP;AAID,KALM,CAAP;AAMD;AACF,CAbM;;;;AAeA,IAAM+C,4BAA4B,GAAG,SAA/BA,4BAA+B,CAAChD,QAAD,EAAWE,GAAX,EAAmB;AAC7D,SAAO,IAAIS,OAAJ,CAAY,UAACC,OAAD,EAAa;AAAA,gBACPV,GAAG,IAAI,EADA;AAAA,QACtBW,IADsB,SACtBA,IADsB;AAAA,QAChBc,IADgB,SAChBA,IADgB;;AAG9B,QAAId,IAAI,KAAK,UAAT,IAAuBc,IAAI,KAAK,YAApC,EAAkD;AAAA,UACxCjD,eADwC,GACpBsB,QADoB,CACxCtB,eADwC;AAGhDkC,MAAAA,OAAO,CAAC;AAAEN,QAAAA,OAAO,EAAE5B,eAAX;AAA4BuE,QAAAA,EAAE,EAAE;AAAhC,OAAD,CAAP;AACD,KAJD,MAIO;AACL,aAAOrC,OAAO,CAAC,IAAD,CAAd;AACD;AACF,GAVM,CAAP;AAWD,CAZM","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { buildState, score } from '@pie-lib/categorize';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport {\n lockChoices,\n getShuffledChoices,\n partialScoring,\n} from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\n// eslint-disable-next-line no-console\n\nexport { score };\n\nexport const getPartialScore = (correctResponse, builtCategories) => {\n // in the resulted best scenario we make a sum with all the correct responses\n // and all the placements\n const { placements, score } = builtCategories.reduce(\n (acc, { choices = [] }) => ({\n placements: acc.placements + choices.length,\n score: acc.score + choices.filter((ch) => ch.correct).length,\n }),\n { placements: 0, score: 0 }\n );\n\n // in the correct response, we make a sum of the max possible score\n const { maxScore } = correctResponse.reduce(\n (acc, { choices }) => ({\n maxScore: acc.maxScore + choices.length,\n }),\n { maxScore: 0 }\n );\n\n // if there are any extra placements, we subtract from the obtained score\n const extraPlacements = placements > maxScore ? placements - maxScore : 0;\n const totalScore = (score - extraPlacements) / maxScore;\n\n return totalScore < 0 ? 0 : parseFloat(totalScore.toFixed(2));\n};\n\nconst getAlternates = correctResponse => correctResponse\n .map((c) => c.alternateResponses)\n .filter((alternate) => alternate);\n\nexport const getTotalScore = (question, session, env) => {\n if (!session) {\n return 0;\n }\n\n if (Object.keys(session).length === 0) {\n return 0;\n }\n const { categories, choices } = question || {};\n let { correctResponse } = question || {};\n let { answers } = session || {};\n answers = answers || [];\n correctResponse = correctResponse || [];\n\n // this function is used in pie-ui/categorize as well, in order to get the best scenario\n // so we get the best scenario and calculate the score\n const { categories: builtCategories, correct } = buildState(\n categories,\n choices,\n answers,\n correctResponse\n );\n\n const alternates = getAlternates(correctResponse);\n const enabled = partialScoring.enabled(question, env);\n\n // if there are any alternates, there will be no partial scoring!\n if (enabled && !alternates.length) {\n // we apply partial scoring\n return getPartialScore(correctResponse, builtCategories);\n }\n\n // else we apply dichotomous\n return correct ? 1 : 0;\n};\n\nexport const getCorrectness = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode === 'evaluate') {\n const score = getTotalScore(question, session, env);\n if (score === 1) {\n resolve('correct');\n } else if (score === 0) {\n resolve('incorrect');\n } else {\n resolve('partially-correct');\n }\n } else {\n resolve(undefined);\n }\n });\n};\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport const model = (question, session, env, updateSession) =>\n new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const answerCorrectness = await getCorrectness(normalizedQuestion, session, env);\n\n const { mode, role } = env || {};\n\n const {\n categories,\n categoriesPerRow,\n choicesLabel,\n choicesPosition,\n correctResponse,\n feedback,\n feedbackEnabled,\n promptEnabled,\n prompt,\n removeTilesAfterPlacing,\n rowLabels,\n rationaleEnabled,\n rationale,\n note,\n teacherInstructionsEnabled,\n teacherInstructions,\n } = normalizedQuestion;\n let { choices } = normalizedQuestion;\n let fb;\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (mode === 'evaluate' && feedbackEnabled) {\n fb = await getFeedbackForCorrectness(\n answerCorrectness,\n feedback\n );\n }\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const alternates = getAlternates(correctResponse);\n const out = {\n categories: categories || [],\n categoriesPerRow: categoriesPerRow || 2,\n correctness: answerCorrectness,\n choices: choices || [],\n choicesLabel: choicesLabel || '',\n choicesPosition,\n disabled: mode !== 'gather',\n feedback: fb,\n lockChoiceOrder,\n prompt: promptEnabled ? prompt : null,\n removeTilesAfterPlacing,\n rowLabels,\n note,\n env,\n showNote: alternates && alternates.length > 0,\n correctResponse: mode === 'evaluate' ? correctResponse : undefined,\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = rationaleEnabled ? rationale : null;\n out.teacherInstructions = teacherInstructionsEnabled\n ? teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n\nexport const outcome = (question, session, env) => {\n if (env.mode !== 'evaluate') {\n return Promise.reject(\n new Error('Can not call outcome when mode is not evaluate')\n );\n } else {\n return new Promise((resolve) => {\n resolve({\n score: getTotalScore(question, session, env),\n empty: !session || isEmpty(session),\n });\n });\n }\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n const { mode, role } = env || {};\n\n if (mode !== 'evaluate' && role === 'instructor') {\n const { correctResponse } = question;\n\n resolve({ answers: correctResponse, id: 1 });\n } else {\n return resolve(null);\n }\n });\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["getPartialScore","correctResponse","builtCategories","reduce","acc","choices","placements","length","score","filter","ch","correct","maxScore","extraPlacements","totalScore","parseFloat","toFixed","getAlternates","map","c","alternateResponses","alternate","getTotalScore","question","session","env","Object","keys","categories","answers","alternates","enabled","partialScoring","getCorrectness","Promise","resolve","mode","undefined","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","answerCorrectness","role","categoriesPerRow","choicesLabel","choicesPosition","feedback","prompt","removeTilesAfterPlacing","rowLabels","rationale","note","teacherInstructions","lockChoiceOrder","fb","out","correctness","disabled","showNote","outcome","reject","Error","empty","createCorrectResponseSession","id","validate","config","minChoices","maxChoices","maxCategories","reversedChoices","reverse","errors","choicesErrors","forEach","choice","index","content","identicalAnswer","slice","some","nbOfCategories","nbOfChoices","categoriesError","choicesError","hasAssociations","response","associationError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { buildState, score } from '@pie-lib/categorize';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport {\n lockChoices,\n getShuffledChoices,\n partialScoring,\n} from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\n// eslint-disable-next-line no-console\n\nexport { score };\n\nexport const getPartialScore = (correctResponse, builtCategories) => {\n // in the resulted best scenario we make a sum with all the correct responses\n // and all the placements\n const { placements, score } = builtCategories.reduce(\n (acc, { choices = [] }) => ({\n placements: acc.placements + choices.length,\n score: acc.score + choices.filter((ch) => ch.correct).length,\n }),\n { placements: 0, score: 0 }\n );\n\n // in the correct response, we make a sum of the max possible score\n const { maxScore } = correctResponse.reduce(\n (acc, { choices }) => ({\n maxScore: acc.maxScore + choices.length,\n }),\n { maxScore: 0 }\n );\n\n // if there are any extra placements, we subtract from the obtained score\n const extraPlacements = placements > maxScore ? placements - maxScore : 0;\n const totalScore = (score - extraPlacements) / maxScore;\n\n return totalScore < 0 ? 0 : parseFloat(totalScore.toFixed(2));\n};\n\nconst getAlternates = correctResponse => correctResponse\n .map((c) => c.alternateResponses)\n .filter((alternate) => alternate);\n\nexport const getTotalScore = (question, session, env) => {\n if (!session) {\n return 0;\n }\n\n if (Object.keys(session).length === 0) {\n return 0;\n }\n const { categories, choices } = question || {};\n let { correctResponse } = question || {};\n let { answers } = session || {};\n answers = answers || [];\n correctResponse = correctResponse || [];\n\n // this function is used in pie-ui/categorize as well, in order to get the best scenario\n // so we get the best scenario and calculate the score\n const { categories: builtCategories, correct } = buildState(\n categories,\n choices,\n answers,\n correctResponse\n );\n\n const alternates = getAlternates(correctResponse);\n const enabled = partialScoring.enabled(question, env);\n\n // if there are any alternates, there will be no partial scoring!\n if (enabled && !alternates.length) {\n // we apply partial scoring\n return getPartialScore(correctResponse, builtCategories);\n }\n\n // else we apply dichotomous\n return correct ? 1 : 0;\n};\n\nexport const getCorrectness = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode === 'evaluate') {\n const score = getTotalScore(question, session, env);\n if (score === 1) {\n resolve('correct');\n } else if (score === 0) {\n resolve('incorrect');\n } else {\n resolve('partially-correct');\n }\n } else {\n resolve(undefined);\n }\n });\n};\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport const model = (question, session, env, updateSession) =>\n new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const answerCorrectness = await getCorrectness(normalizedQuestion, session, env);\n\n const { mode, role } = env || {};\n\n const {\n categories,\n categoriesPerRow,\n choicesLabel,\n choicesPosition,\n correctResponse,\n feedback,\n feedbackEnabled,\n promptEnabled,\n prompt,\n removeTilesAfterPlacing,\n rowLabels,\n rationaleEnabled,\n rationale,\n note,\n teacherInstructionsEnabled,\n teacherInstructions,\n } = normalizedQuestion;\n let { choices } = normalizedQuestion;\n let fb;\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (mode === 'evaluate' && feedbackEnabled) {\n fb = await getFeedbackForCorrectness(\n answerCorrectness,\n feedback\n );\n }\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const alternates = getAlternates(correctResponse);\n const out = {\n categories: categories || [],\n categoriesPerRow: categoriesPerRow || 2,\n correctness: answerCorrectness,\n choices: choices || [],\n choicesLabel: choicesLabel || '',\n choicesPosition,\n disabled: mode !== 'gather',\n feedback: fb,\n lockChoiceOrder,\n prompt: promptEnabled ? prompt : null,\n removeTilesAfterPlacing,\n rowLabels,\n note,\n env,\n showNote: alternates && alternates.length > 0,\n correctResponse: mode === 'evaluate' ? correctResponse : undefined,\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = rationaleEnabled ? rationale : null;\n out.teacherInstructions = teacherInstructionsEnabled\n ? teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n\nexport const outcome = (question, session, env) => {\n if (env.mode !== 'evaluate') {\n return Promise.reject(\n new Error('Can not call outcome when mode is not evaluate')\n );\n } else {\n return new Promise((resolve) => {\n resolve({\n score: getTotalScore(question, session, env),\n empty: !session || isEmpty(session),\n });\n });\n }\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n const { mode, role } = env || {};\n\n if (mode !== 'evaluate' && role === 'instructor') {\n const { correctResponse } = question;\n\n resolve({ answers: correctResponse, id: 1 });\n } else {\n return resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { categories, choices, correctResponse } = model;\n const { minChoices = 1, maxChoices, maxCategories } = config;\n const reversedChoices = [ ...choices || []].reverse();\n const errors = {};\n const choicesErrors = {};\n\n reversedChoices.forEach((choice, index) => {\n const { id, content } = choice;\n\n if (content === '' || content === '<div></div>') {\n choicesErrors[id] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some(c => c.content === content);\n\n if (identicalAnswer) {\n choicesErrors[id] = 'Content should be unique.';\n }\n }\n });\n\n const nbOfCategories = (categories || []).length;\n const nbOfChoices = (choices || []).length\n\n if (nbOfCategories > maxCategories) {\n errors.categoriesError = `No more than ${maxCategories} categories should be defined.`;\n } else if (nbOfCategories < 1) {\n errors.categoriesError = 'There should be at least 1 category defined.';\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} choices defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} choices should be defined.`;\n }\n\n if (nbOfChoices && nbOfCategories) {\n let hasAssociations = false;\n\n (correctResponse || []).forEach(response => {\n const { choices = [], alternateResponses = [] } = response;\n\n if (choices.length) {\n hasAssociations = true;\n } else {\n alternateResponses.forEach(alternate => {\n if ((alternate || []).length) {\n hasAssociations = true;\n }\n });\n }\n });\n\n if (!hasAssociations) {\n errors.associationError = 'At least one token should be assigned to at least one category.';\n }\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -7,7 +7,7 @@
7
7
  "@pie-lib/feedback": "^0.4.27",
8
8
  "lodash": "^4.17.15"
9
9
  },
10
- "version": "5.2.2",
10
+ "version": "5.2.7",
11
11
  "description": "",
12
12
  "scripts": {},
13
13
  "main": "lib/index.js",
@@ -35,6 +35,22 @@
35
35
  }
36
36
  }
37
37
  },
38
+ "spellCheck": {
39
+ "title": "ConfigureProp",
40
+ "type": "object",
41
+ "properties": {
42
+ "settings": {
43
+ "description": "Indicates if the item has to be displayed in the Settings Panel",
44
+ "type": "boolean",
45
+ "title": "settings"
46
+ },
47
+ "label": {
48
+ "description": "Indicates the label for the item that has to be displayed in the Settings Panel",
49
+ "type": "string",
50
+ "title": "label"
51
+ }
52
+ }
53
+ },
38
54
  "scoringType": {
39
55
  "title": "ConfigureProp",
40
56
  "type": "object",
@@ -83,6 +99,21 @@
83
99
  }
84
100
  }
85
101
  },
102
+ "minChoices": {
103
+ "description": "Minimum number of choices",
104
+ "type": "number",
105
+ "title": "minChoices"
106
+ },
107
+ "maxChoices": {
108
+ "description": "Maximum number of choices",
109
+ "type": "number",
110
+ "title": "maxChoices"
111
+ },
112
+ "maxCategories": {
113
+ "description": "Maximum number of categories",
114
+ "type": "number",
115
+ "title": "maxCategories"
116
+ },
86
117
  "showPrompt": {
87
118
  "description": "Determines whether prompt field will be displayed or not",
88
119
  "default": true,
@@ -26,6 +26,18 @@ Indicates if the item has to be displayed in the Settings Panel
26
26
 
27
27
  Indicates the label for the item that has to be displayed in the Settings Panel
28
28
 
29
+ # `spellCheck` (object)
30
+
31
+ Properties of the `spellCheck` object:
32
+
33
+ ## `settings` (boolean)
34
+
35
+ Indicates if the item has to be displayed in the Settings Panel
36
+
37
+ ## `label` (string)
38
+
39
+ Indicates the label for the item that has to be displayed in the Settings Panel
40
+
29
41
  # `scoringType` (object)
30
42
 
31
43
  Properties of the `scoringType` object:
@@ -62,6 +74,18 @@ Indicates if the item has to be displayed in the Settings Panel
62
74
 
63
75
  Indicates the label for the item that has to be displayed in the Settings Panel
64
76
 
77
+ # `minChoices` (number)
78
+
79
+ Minimum number of choices
80
+
81
+ # `maxChoices` (number)
82
+
83
+ Maximum number of choices
84
+
85
+ # `maxCategories` (number)
86
+
87
+ Maximum number of categories
88
+
65
89
  # `showPrompt` (boolean)
66
90
 
67
91
  Determines whether prompt field will be displayed or not
@@ -338,4 +338,5 @@ exports.model = (id, element) => ({
338
338
  rationaleEnabled: true,
339
339
  teacherInstructionsEnabled: true,
340
340
  studentInstructionsEnabled: true,
341
+ toolbarEditorPosition: 'bottom',
341
342
  });
@@ -373,6 +373,11 @@
373
373
  "type": "boolean",
374
374
  "title": "rationaleEnabled"
375
375
  },
376
+ "spellCheckEnabled": {
377
+ "description": "Indicates if spellcheck is enabled for the author. Default value is true",
378
+ "type": "boolean",
379
+ "title": "spellCheckEnabled"
380
+ },
376
381
  "studentInstructionsEnabled": {
377
382
  "description": "Indicates if Student Instructions are enabled",
378
383
  "type": "boolean",
@@ -388,6 +393,16 @@
388
393
  "type": "string",
389
394
  "title": "note"
390
395
  },
396
+ "toolbarEditorPosition": {
397
+ "description": "Indicates the editor's toolbar position which can be 'bottom' or 'top'",
398
+ "default": ": 'bottom'",
399
+ "enum": [
400
+ "bottom",
401
+ "top"
402
+ ],
403
+ "type": "string",
404
+ "title": "toolbarEditorPosition"
405
+ },
391
406
  "id": {
392
407
  "description": "Identifier to identify the Pie Element in html markup, Must be unique within a pie item config.",
393
408
  "type": "string",
@@ -407,6 +422,7 @@
407
422
  "id",
408
423
  "prompt",
409
424
  "rationaleEnabled",
425
+ "spellCheckEnabled",
410
426
  "studentInstructionsEnabled",
411
427
  "teacherInstructionsEnabled"
412
428
  ],
@@ -150,6 +150,10 @@ Indicates if Feedback is enabled
150
150
 
151
151
  Indicates if Rationale are enabled
152
152
 
153
+ # `spellCheckEnabled` (boolean, required)
154
+
155
+ Indicates if spellcheck is enabled for the author. Default value is true
156
+
153
157
  # `studentInstructionsEnabled` (boolean, required)
154
158
 
155
159
  Indicates if Student Instructions are enabled
@@ -162,6 +166,17 @@ Indicates if Teacher Instructions are enabled
162
166
 
163
167
  Indicates the note for the answer
164
168
 
169
+ # `toolbarEditorPosition` (string, enum)
170
+
171
+ Indicates the editor's toolbar position which can be 'bottom' or 'top'
172
+
173
+ This element must be one of the following enum values:
174
+
175
+ * `bottom`
176
+ * `top`
177
+
178
+ Default: `": 'bottom'"`
179
+
165
180
  # `id` (string, required)
166
181
 
167
182
  Identifier to identify the Pie Element in html markup, Must be unique within a pie item config.
@@ -1,19 +1,20 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
+ exports.Categories = void 0;
10
11
  Object.defineProperty(exports, "CategoryType", {
11
12
  enumerable: true,
12
13
  get: function get() {
13
14
  return _category.CategoryType;
14
15
  }
15
16
  });
16
- exports["default"] = exports.Categories = void 0;
17
+ exports["default"] = void 0;
17
18
 
18
19
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
19
20
 
@@ -45,9 +46,13 @@ var _gridContent = _interopRequireDefault(require("./grid-content"));
45
46
 
46
47
  var _category = _interopRequireWildcard(require("./category"));
47
48
 
49
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
50
+
51
+ 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; }
52
+
48
53
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
49
54
 
50
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
55
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
56
 
52
57
  var Categories = /*#__PURE__*/function (_React$Component) {
53
58
  (0, _inherits2["default"])(Categories, _React$Component);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/categorize/categories.jsx"],"names":["Categories","props","classes","categories","model","disabled","onDropChoice","onRemoveChoice","categoriesPerRow","chunkedCategories","Math","ceil","length","map","cat","rowIndex","items","forEach","c","columnIndex","push","label","__html","concat","Array","fill","h","id","category","React","Component","PropTypes","object","isRequired","arrayOf","shape","CategoryType","number","bool","func","styles","theme","flex","color","text","backgroundColor","background","fontSize","typography","textAlign","paddingTop","spacing","unit"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { color } from '@pie-lib/render-ui';\n\nimport chunk from 'lodash/chunk';\n\nimport GridContent from './grid-content';\nimport Category, { CategoryType } from './category';\n\nexport { CategoryType };\n\nexport class Categories extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n categories: PropTypes.arrayOf(PropTypes.shape(CategoryType)),\n model: PropTypes.shape({\n categoriesPerRow: PropTypes.number\n }),\n disabled: PropTypes.bool,\n onDropChoice: PropTypes.func.isRequired,\n onRemoveChoice: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n model: {\n categoriesPerRow: 1\n }\n };\n\n render() {\n const {\n classes,\n categories,\n model,\n disabled,\n onDropChoice,\n onRemoveChoice,\n } = this.props;\n const { categoriesPerRow } = model;\n\n // split categories into an array of arrays (inner array),\n // where each inner array represents how many categories should be displayed on one row\n const chunkedCategories = chunk(categories, categoriesPerRow);\n\n return (\n <GridContent\n columns={categoriesPerRow}\n className={classes.categories}\n rows={Math.ceil(categories.length / categoriesPerRow) * 2}\n >\n {\n chunkedCategories.map((cat, rowIndex) => {\n let items = [];\n\n // for each inner array of categories, create a row with category titles\n cat.forEach((c, columnIndex) => {\n items.push((\n <Typography className={classes.label} key={`category-label-${rowIndex}-${columnIndex}`}>\n <span dangerouslySetInnerHTML={{ __html: c.label }}/>\n </Typography>));\n });\n\n // if the last row has less categories than max on a row, fill the spaces with divs\n items = items.concat(Array(categoriesPerRow - cat.length).fill(<div/>));\n\n // for each inner array of categories, create a row with category containers\n cat.forEach((c, columnIndex) => {\n items.push(<Category\n onDropChoice={h => onDropChoice(c.id, h)}\n onRemoveChoice={onRemoveChoice}\n disabled={disabled}\n className={classes.category}\n key={`category-element-${rowIndex}-${columnIndex}`}\n {...c}\n />);\n });\n\n // if the last row has less categories than max on a row, fill the spaces with divs\n items = items.concat(Array(categoriesPerRow - cat.length).fill(<div/>));\n\n return items;\n })\n }\n </GridContent>\n );\n }\n}\n\nconst styles = theme => ({\n categories: {\n flex: 1\n },\n label: {\n color: color.text(),\n backgroundColor: color.background(),\n fontSize: theme.typography.fontSize,\n textAlign: 'center',\n paddingTop: theme.spacing.unit\n }\n});\nexport default withStyles(styles)(Categories);\n"],"file":"categories.js"}
1
+ {"version":3,"sources":["../../src/categorize/categories.jsx"],"names":["Categories","props","classes","categories","model","disabled","onDropChoice","onRemoveChoice","categoriesPerRow","chunkedCategories","Math","ceil","length","map","cat","rowIndex","items","forEach","c","columnIndex","push","label","__html","concat","Array","fill","h","id","category","React","Component","PropTypes","object","isRequired","arrayOf","shape","CategoryType","number","bool","func","styles","theme","flex","color","text","backgroundColor","background","fontSize","typography","textAlign","paddingTop","spacing","unit"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { color } from '@pie-lib/render-ui';\n\nimport chunk from 'lodash/chunk';\n\nimport GridContent from './grid-content';\nimport Category, { CategoryType } from './category';\n\nexport { CategoryType };\n\nexport class Categories extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n categories: PropTypes.arrayOf(PropTypes.shape(CategoryType)),\n model: PropTypes.shape({\n categoriesPerRow: PropTypes.number\n }),\n disabled: PropTypes.bool,\n onDropChoice: PropTypes.func.isRequired,\n onRemoveChoice: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n model: {\n categoriesPerRow: 1\n }\n };\n\n render() {\n const {\n classes,\n categories,\n model,\n disabled,\n onDropChoice,\n onRemoveChoice,\n } = this.props;\n const { categoriesPerRow } = model;\n\n // split categories into an array of arrays (inner array),\n // where each inner array represents how many categories should be displayed on one row\n const chunkedCategories = chunk(categories, categoriesPerRow);\n\n return (\n <GridContent\n columns={categoriesPerRow}\n className={classes.categories}\n rows={Math.ceil(categories.length / categoriesPerRow) * 2}\n >\n {\n chunkedCategories.map((cat, rowIndex) => {\n let items = [];\n\n // for each inner array of categories, create a row with category titles\n cat.forEach((c, columnIndex) => {\n items.push((\n <Typography className={classes.label} key={`category-label-${rowIndex}-${columnIndex}`}>\n <span dangerouslySetInnerHTML={{ __html: c.label }}/>\n </Typography>));\n });\n\n // if the last row has less categories than max on a row, fill the spaces with divs\n items = items.concat(Array(categoriesPerRow - cat.length).fill(<div/>));\n\n // for each inner array of categories, create a row with category containers\n cat.forEach((c, columnIndex) => {\n items.push(<Category\n onDropChoice={h => onDropChoice(c.id, h)}\n onRemoveChoice={onRemoveChoice}\n disabled={disabled}\n className={classes.category}\n key={`category-element-${rowIndex}-${columnIndex}`}\n {...c}\n />);\n });\n\n // if the last row has less categories than max on a row, fill the spaces with divs\n items = items.concat(Array(categoriesPerRow - cat.length).fill(<div/>));\n\n return items;\n })\n }\n </GridContent>\n );\n }\n}\n\nconst styles = theme => ({\n categories: {\n flex: 1\n },\n label: {\n color: color.text(),\n backgroundColor: color.background(),\n fontSize: theme.typography.fontSize,\n textAlign: 'center',\n paddingTop: theme.spacing.unit\n }\n});\nexport default withStyles(styles)(Categories);\n"],"file":"categories.js"}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = exports.Category = exports.CategoryType = void 0;
8
+ exports["default"] = exports.CategoryType = exports.Category = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
@@ -35,13 +35,13 @@ var _droppablePlaceholder = _interopRequireDefault(require("./droppable-placehol
35
35
 
36
36
  var _renderUi = require("@pie-lib/render-ui");
37
37
 
38
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
38
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
39
39
 
40
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
40
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
41
41
 
42
42
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
43
43
 
44
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
44
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
45
45
 
46
46
  var CategoryType = {
47
47
  id: _propTypes["default"].string.isRequired,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/categorize/category.jsx"],"names":["CategoryType","id","PropTypes","string","isRequired","categoryId","Category","props","classes","className","choices","disabled","onDropChoice","onRemoveChoice","correct","names","category","placeholderNames","placeholder","incorrect","map","c","index","React","Component","bool","object","func","styles","theme","border","color","minHeight","padding","spacing","unit","borderRadius","gridColumnGap","gridRowGap","display","flexWrap","justifyContent","alignItems","alignContent","flexDirection"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEO,IAAMA,YAAY,GAAG;AAC1BC,EAAAA,EAAE,EAAEC,sBAAUC,MAAV,CAAiBC,UADK;AAE1BC,EAAAA,UAAU,EAAEH,sBAAUC;AAFI,CAArB;;;IAKMG,Q;;;;;;;;;;;;WAYX,kBAAS;AAAA,wBAUH,KAAKC,KAVF;AAAA,UAELC,OAFK,eAELA,OAFK;AAAA,UAGLC,SAHK,eAGLA,SAHK;AAAA,4CAILC,OAJK;AAAA,UAILA,OAJK,oCAIK,EAJL;AAAA,UAKLC,QALK,eAKLA,QALK;AAAA,UAMLC,YANK,eAMLA,YANK;AAAA,UAOLC,cAPK,eAOLA,cAPK;AAAA,UAQLZ,EARK,eAQLA,EARK;AAAA,UASLa,OATK,eASLA,OATK;AAYP,UAAMC,KAAK,GAAG,4BAAWP,OAAO,CAACQ,QAAnB,EAA6BP,SAA7B,CAAd;AACA,UAAMQ,gBAAgB,GAAG,4BACvBT,OAAO,CAACU,WADe,EAEvBJ,OAAO,KAAK,KAAZ,IAAqBN,OAAO,CAACW,SAFN,CAAzB;AAKA,0BACE;AAAK,QAAA,SAAS,EAAEJ;AAAhB,sBACE,gCAAC,gCAAD;AACE,QAAA,YAAY,EAAEH,YADhB;AAEE,QAAA,QAAQ,EAAED,QAFZ;AAGE,QAAA,SAAS,EAAEM;AAHb,SAKGP,OAAO,CAACU,GAAR,CAAY,UAACC,CAAD,EAAIC,KAAJ;AAAA,4BACX,gCAAC,kBAAD;AACE,UAAA,cAAc,EAAET,cADlB;AAEE,UAAA,QAAQ,EAAEF,QAFZ;AAGE,UAAA,GAAG,EAAEW,KAHP;AAIE,UAAA,WAAW,EAAEA,KAJf;AAKE,UAAA,UAAU,EAAErB;AALd,WAMMoB,CANN,EADW;AAAA,OAAZ,CALH,CADF,CADF;AAoBD;;;EAlD2BE,kBAAMC,S;;;iCAAvBlB,Q,+CAENN,Y;AACHS,EAAAA,SAAS,EAAEP,sBAAUC,M;AACrBQ,EAAAA,QAAQ,EAAET,sBAAUuB,I;AACpBjB,EAAAA,OAAO,EAAEN,sBAAUwB,MAAV,CAAiBtB,U;AAC1BQ,EAAAA,YAAY,EAAEV,sBAAUyB,I;AACxBd,EAAAA,cAAc,EAAEX,sBAAUyB;;iCAPjBrB,Q,kBAUW,E;;AA2CxB,IAAMsB,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBV,IAAAA,SAAS,EAAE;AACTW,MAAAA,MAAM,sBAAeC,gBAAMZ,SAAN,EAAf;AADG,KADc;AAIzBD,IAAAA,WAAW,EAAE;AACXc,MAAAA,SAAS,EAAE,MADA;AAEXC,MAAAA,OAAO,EAAEJ,KAAK,CAACK,OAAN,CAAcC,IAAd,GAAqB,CAFnB;AAGXC,MAAAA,YAAY,EAAEP,KAAK,CAACK,OAAN,CAAcC,IAAd,GAAqB,CAHxB;AAIXE,MAAAA,aAAa,EAAE,CAJJ;AAKXC,MAAAA,UAAU,EAAE,CALD;AAMXC,MAAAA,OAAO,EAAE,MANE;AAOXC,MAAAA,QAAQ,EAAE,MAPC;AAQXC,MAAAA,cAAc,EAAE,QARL;AASXC,MAAAA,UAAU,EAAE,QATD;AAUXC,MAAAA,YAAY,EAAE;AAVH,KAJY;AAgBzB3B,IAAAA,QAAQ,EAAE;AACRuB,MAAAA,OAAO,EAAE,MADD;AAERK,MAAAA,aAAa,EAAE;AAFP;AAhBe,GAAZ;AAAA,CAAf;;eAsBe,wBAAWhB,MAAX,EAAmBtB,QAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Choice from './choice';\nimport PlaceHolder from './droppable-placeholder';\nimport { color } from '@pie-lib/render-ui';\n\nexport const CategoryType = {\n id: PropTypes.string.isRequired,\n categoryId: PropTypes.string,\n};\n\nexport class Category extends React.Component {\n static propTypes = {\n ...CategoryType,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n onDropChoice: PropTypes.func,\n onRemoveChoice: PropTypes.func,\n };\n\n static defaultProps = {};\n\n render() {\n const {\n classes,\n className,\n choices = [],\n disabled,\n onDropChoice,\n onRemoveChoice,\n id,\n correct,\n } = this.props;\n\n const names = classNames(classes.category, className);\n const placeholderNames = classNames(\n classes.placeholder,\n correct === false && classes.incorrect\n );\n\n return (\n <div className={names}>\n <PlaceHolder\n onDropChoice={onDropChoice}\n disabled={disabled}\n className={placeholderNames}\n >\n {choices.map((c, index) => (\n <Choice\n onRemoveChoice={onRemoveChoice}\n disabled={disabled}\n key={index}\n choiceIndex={index}\n categoryId={id}\n {...c}\n />\n ))}\n </PlaceHolder>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n incorrect: {\n border: `solid 2px ${color.incorrect()}`,\n },\n placeholder: {\n minHeight: '80px',\n padding: theme.spacing.unit / 2,\n borderRadius: theme.spacing.unit / 2,\n gridColumnGap: 0,\n gridRowGap: 0,\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n alignItems: 'center',\n alignContent: 'flex-start'\n },\n category: {\n display: 'flex',\n flexDirection: 'column',\n },\n});\n\nexport default withStyles(styles)(Category);\n"],"file":"category.js"}
1
+ {"version":3,"sources":["../../src/categorize/category.jsx"],"names":["CategoryType","id","PropTypes","string","isRequired","categoryId","Category","props","classes","className","choices","disabled","onDropChoice","onRemoveChoice","correct","names","category","placeholderNames","placeholder","incorrect","map","c","index","React","Component","bool","object","func","styles","theme","border","color","minHeight","padding","spacing","unit","borderRadius","gridColumnGap","gridRowGap","display","flexWrap","justifyContent","alignItems","alignContent","flexDirection"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEO,IAAMA,YAAY,GAAG;AAC1BC,EAAAA,EAAE,EAAEC,sBAAUC,MAAV,CAAiBC,UADK;AAE1BC,EAAAA,UAAU,EAAEH,sBAAUC;AAFI,CAArB;;;IAKMG,Q;;;;;;;;;;;;WAYX,kBAAS;AACP,wBASI,KAAKC,KATT;AAAA,UACEC,OADF,eACEA,OADF;AAAA,UAEEC,SAFF,eAEEA,SAFF;AAAA,4CAGEC,OAHF;AAAA,UAGEA,OAHF,oCAGY,EAHZ;AAAA,UAIEC,QAJF,eAIEA,QAJF;AAAA,UAKEC,YALF,eAKEA,YALF;AAAA,UAMEC,cANF,eAMEA,cANF;AAAA,UAOEZ,EAPF,eAOEA,EAPF;AAAA,UAQEa,OARF,eAQEA,OARF;AAWA,UAAMC,KAAK,GAAG,4BAAWP,OAAO,CAACQ,QAAnB,EAA6BP,SAA7B,CAAd;AACA,UAAMQ,gBAAgB,GAAG,4BACvBT,OAAO,CAACU,WADe,EAEvBJ,OAAO,KAAK,KAAZ,IAAqBN,OAAO,CAACW,SAFN,CAAzB;AAKA,0BACE;AAAK,QAAA,SAAS,EAAEJ;AAAhB,sBACE,gCAAC,gCAAD;AACE,QAAA,YAAY,EAAEH,YADhB;AAEE,QAAA,QAAQ,EAAED,QAFZ;AAGE,QAAA,SAAS,EAAEM;AAHb,SAKGP,OAAO,CAACU,GAAR,CAAY,UAACC,CAAD,EAAIC,KAAJ;AAAA,4BACX,gCAAC,kBAAD;AACE,UAAA,cAAc,EAAET,cADlB;AAEE,UAAA,QAAQ,EAAEF,QAFZ;AAGE,UAAA,GAAG,EAAEW,KAHP;AAIE,UAAA,WAAW,EAAEA,KAJf;AAKE,UAAA,UAAU,EAAErB;AALd,WAMMoB,CANN,EADW;AAAA,OAAZ,CALH,CADF,CADF;AAoBD;;;EAlD2BE,kBAAMC,S;;;iCAAvBlB,Q,+CAENN,Y;AACHS,EAAAA,SAAS,EAAEP,sBAAUC,M;AACrBQ,EAAAA,QAAQ,EAAET,sBAAUuB,I;AACpBjB,EAAAA,OAAO,EAAEN,sBAAUwB,MAAV,CAAiBtB,U;AAC1BQ,EAAAA,YAAY,EAAEV,sBAAUyB,I;AACxBd,EAAAA,cAAc,EAAEX,sBAAUyB;;iCAPjBrB,Q,kBAUW,E;;AA2CxB,IAAMsB,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBV,IAAAA,SAAS,EAAE;AACTW,MAAAA,MAAM,sBAAeC,gBAAMZ,SAAN,EAAf;AADG,KADc;AAIzBD,IAAAA,WAAW,EAAE;AACXc,MAAAA,SAAS,EAAE,MADA;AAEXC,MAAAA,OAAO,EAAEJ,KAAK,CAACK,OAAN,CAAcC,IAAd,GAAqB,CAFnB;AAGXC,MAAAA,YAAY,EAAEP,KAAK,CAACK,OAAN,CAAcC,IAAd,GAAqB,CAHxB;AAIXE,MAAAA,aAAa,EAAE,CAJJ;AAKXC,MAAAA,UAAU,EAAE,CALD;AAMXC,MAAAA,OAAO,EAAE,MANE;AAOXC,MAAAA,QAAQ,EAAE,MAPC;AAQXC,MAAAA,cAAc,EAAE,QARL;AASXC,MAAAA,UAAU,EAAE,QATD;AAUXC,MAAAA,YAAY,EAAE;AAVH,KAJY;AAgBzB3B,IAAAA,QAAQ,EAAE;AACRuB,MAAAA,OAAO,EAAE,MADD;AAERK,MAAAA,aAAa,EAAE;AAFP;AAhBe,GAAZ;AAAA,CAAf;;eAsBe,wBAAWhB,MAAX,EAAmBtB,QAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Choice from './choice';\nimport PlaceHolder from './droppable-placeholder';\nimport { color } from '@pie-lib/render-ui';\n\nexport const CategoryType = {\n id: PropTypes.string.isRequired,\n categoryId: PropTypes.string,\n};\n\nexport class Category extends React.Component {\n static propTypes = {\n ...CategoryType,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n onDropChoice: PropTypes.func,\n onRemoveChoice: PropTypes.func,\n };\n\n static defaultProps = {};\n\n render() {\n const {\n classes,\n className,\n choices = [],\n disabled,\n onDropChoice,\n onRemoveChoice,\n id,\n correct,\n } = this.props;\n\n const names = classNames(classes.category, className);\n const placeholderNames = classNames(\n classes.placeholder,\n correct === false && classes.incorrect\n );\n\n return (\n <div className={names}>\n <PlaceHolder\n onDropChoice={onDropChoice}\n disabled={disabled}\n className={placeholderNames}\n >\n {choices.map((c, index) => (\n <Choice\n onRemoveChoice={onRemoveChoice}\n disabled={disabled}\n key={index}\n choiceIndex={index}\n categoryId={id}\n {...c}\n />\n ))}\n </PlaceHolder>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n incorrect: {\n border: `solid 2px ${color.incorrect()}`,\n },\n placeholder: {\n minHeight: '80px',\n padding: theme.spacing.unit / 2,\n borderRadius: theme.spacing.unit / 2,\n gridColumnGap: 0,\n gridRowGap: 0,\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n alignItems: 'center',\n alignContent: 'flex-start'\n },\n category: {\n display: 'flex',\n flexDirection: 'column',\n },\n});\n\nexport default withStyles(styles)(Category);\n"],"file":"category.js"}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = exports.spec = exports.Choice = exports.Layout = exports.ChoiceType = void 0;
8
+ exports.spec = exports["default"] = exports.Layout = exports.ChoiceType = exports.Choice = void 0;
9
9
 
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
11
 
@@ -39,13 +39,13 @@ var _renderUi = require("@pie-lib/render-ui");
39
39
 
40
40
  var _debug = _interopRequireDefault(require("debug"));
41
41
 
42
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
42
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
43
 
44
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
44
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
45
45
 
46
46
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
47
47
 
48
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
48
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
49
49
 
50
50
  var log = (0, _debug["default"])('@pie-ui:categorize:choice');
51
51
  var ChoiceType = {
@@ -105,6 +105,7 @@ exports.Layout = Layout;
105
105
  var styles = function styles(theme) {
106
106
  return {
107
107
  choice: {
108
+ direction: 'initial',
108
109
  cursor: 'pointer',
109
110
  width: '100%',
110
111
  '&.correct': {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/categorize/choice.jsx"],"names":["log","ChoiceType","content","PropTypes","string","isRequired","id","Layout","props","classes","className","isDragging","disabled","correct","rootNames","choice","dragging","cardNames","card","root","cardRoot","__html","React","Component","object","bool","styles","theme","cursor","width","border","color","incorrect","borderRadius","text","backgroundColor","background","fontSize","typography","paddingBottom","spacing","unit","opacity","Styled","Choice","connectDragSource","extraStyle","margin","func","spec","canDrag","beginDrag","out","categoryId","choiceIndex","endDrag","monitor","didDrop","item","getItem","onRemoveChoice","DraggableChoice","uid","connect","dragSource","withUid"],"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 { DragSource } from 'react-dnd';\nimport { uid } from '@pie-lib/drag';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport { color } from '@pie-lib/render-ui';\nimport debug from 'debug';\n\nconst log = debug('@pie-ui:categorize:choice');\n\nexport const ChoiceType = {\n content: PropTypes.string.isRequired,\n id: PropTypes.string\n};\n\nexport class Layout extends React.Component {\n static propTypes = {\n ...ChoiceType,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n correct: PropTypes.bool\n };\n static defaultProps = {};\n render() {\n const {\n classes,\n className,\n content,\n isDragging,\n disabled,\n correct\n } = this.props;\n\n const rootNames = classNames(\n correct === true && 'correct',\n correct === false && 'incorrect',\n classes.choice,\n isDragging && classes.dragging,\n disabled && classes.disabled,\n className\n );\n const cardNames = classNames(classes.card);\n return (\n <div className={rootNames}>\n <Card className={cardNames}>\n <CardContent classes={{ root: classes.cardRoot }} dangerouslySetInnerHTML={{ __html: content }} />\n </Card>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n choice: {\n cursor: 'pointer',\n width: '100%',\n '&.correct': {\n border: `solid 2px ${color.correct()}`\n },\n '&.incorrect': {\n border: `solid 2px ${color.incorrect()}`\n },\n borderRadius: '6px'\n },\n cardRoot: {\n color: color.text(),\n backgroundColor: color.background(),\n fontSize: theme.typography.fontSize + 2,\n '&:last-child': {\n paddingBottom: theme.spacing.unit * 2\n },\n borderRadius: '4px',\n border: '1px solid'\n },\n disabled: {\n cursor: 'not-allowed',\n opacity: '0.6'\n },\n dragging: {\n cursor: 'move'\n },\n card: {\n color: color.text(),\n backgroundColor: color.background(),\n width: '100%'\n }\n});\n\nconst Styled = withStyles(styles)(Layout);\n\nexport class Choice extends React.Component {\n static propTypes = {\n ...ChoiceType,\n extraStyle: PropTypes.object,\n connectDragSource: PropTypes.func.isRequired\n };\n\n render() {\n const {\n connectDragSource,\n id,\n content,\n disabled,\n isDragging,\n correct,\n extraStyle\n } = this.props;\n\n return connectDragSource(\n <div style={{ margin: '4px', ...extraStyle }}>\n <Styled\n id={id}\n content={content}\n disabled={disabled}\n correct={correct}\n isDragging={isDragging}\n />\n </div>\n );\n }\n}\n\nexport const spec = {\n canDrag: props => !props.disabled,\n beginDrag: props => {\n const out = {\n id: props.id,\n categoryId: props.categoryId,\n choiceIndex: props.choiceIndex\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n }\n};\n\nconst DraggableChoice = DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging()\n })\n)(Choice);\n\nexport default uid.withUid(DraggableChoice);\n"],"file":"choice.js"}
1
+ {"version":3,"sources":["../../src/categorize/choice.jsx"],"names":["log","ChoiceType","content","PropTypes","string","isRequired","id","Layout","props","classes","className","isDragging","disabled","correct","rootNames","choice","dragging","cardNames","card","root","cardRoot","__html","React","Component","object","bool","styles","theme","direction","cursor","width","border","color","incorrect","borderRadius","text","backgroundColor","background","fontSize","typography","paddingBottom","spacing","unit","opacity","Styled","Choice","connectDragSource","extraStyle","margin","func","spec","canDrag","beginDrag","out","categoryId","choiceIndex","endDrag","monitor","didDrop","item","getItem","onRemoveChoice","DraggableChoice","uid","connect","dragSource","withUid"],"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 { DragSource } from 'react-dnd';\nimport { uid } from '@pie-lib/drag';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport { color } from '@pie-lib/render-ui';\nimport debug from 'debug';\n\nconst log = debug('@pie-ui:categorize:choice');\n\nexport const ChoiceType = {\n content: PropTypes.string.isRequired,\n id: PropTypes.string\n};\n\nexport class Layout extends React.Component {\n static propTypes = {\n ...ChoiceType,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n correct: PropTypes.bool\n };\n static defaultProps = {};\n render() {\n const {\n classes,\n className,\n content,\n isDragging,\n disabled,\n correct\n } = this.props;\n\n const rootNames = classNames(\n correct === true && 'correct',\n correct === false && 'incorrect',\n classes.choice,\n isDragging && classes.dragging,\n disabled && classes.disabled,\n className\n );\n const cardNames = classNames(classes.card);\n return (\n <div className={rootNames}>\n <Card className={cardNames}>\n <CardContent classes={{ root: classes.cardRoot }} dangerouslySetInnerHTML={{ __html: content }} />\n </Card>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n choice: {\n direction: 'initial',\n cursor: 'pointer',\n width: '100%',\n '&.correct': {\n border: `solid 2px ${color.correct()}`\n },\n '&.incorrect': {\n border: `solid 2px ${color.incorrect()}`\n },\n borderRadius: '6px'\n },\n cardRoot: {\n color: color.text(),\n backgroundColor: color.background(),\n fontSize: theme.typography.fontSize + 2,\n '&:last-child': {\n paddingBottom: theme.spacing.unit * 2\n },\n borderRadius: '4px',\n border: '1px solid'\n },\n disabled: {\n cursor: 'not-allowed',\n opacity: '0.6'\n },\n dragging: {\n cursor: 'move'\n },\n card: {\n color: color.text(),\n backgroundColor: color.background(),\n width: '100%'\n }\n});\n\nconst Styled = withStyles(styles)(Layout);\n\nexport class Choice extends React.Component {\n static propTypes = {\n ...ChoiceType,\n extraStyle: PropTypes.object,\n connectDragSource: PropTypes.func.isRequired\n };\n\n render() {\n const {\n connectDragSource,\n id,\n content,\n disabled,\n isDragging,\n correct,\n extraStyle\n } = this.props;\n\n return connectDragSource(\n <div style={{ margin: '4px', ...extraStyle }}>\n <Styled\n id={id}\n content={content}\n disabled={disabled}\n correct={correct}\n isDragging={isDragging}\n />\n </div>\n );\n }\n}\n\nexport const spec = {\n canDrag: props => !props.disabled,\n beginDrag: props => {\n const out = {\n id: props.id,\n categoryId: props.categoryId,\n choiceIndex: props.choiceIndex\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n }\n};\n\nconst DraggableChoice = DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging()\n })\n)(Choice);\n\nexport default uid.withUid(DraggableChoice);\n"],"file":"choice.js"}