@pie-element/categorize 9.15.2 → 9.15.4-next.86

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 (40) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/configure/CHANGELOG.md +11 -0
  3. package/configure/lib/design/categories/RowLabel.js +3 -3
  4. package/configure/lib/design/categories/RowLabel.js.map +1 -1
  5. package/configure/lib/design/categories/alternateResponses.js +1 -1
  6. package/configure/lib/design/categories/alternateResponses.js.map +1 -1
  7. package/configure/lib/design/categories/choice-preview.js +2 -2
  8. package/configure/lib/design/categories/choice-preview.js.map +1 -1
  9. package/configure/lib/design/categories/droppable-placeholder.js +1 -1
  10. package/configure/lib/design/categories/droppable-placeholder.js.map +1 -1
  11. package/configure/lib/design/categories/index.js +3 -3
  12. package/configure/lib/design/categories/index.js.map +1 -1
  13. package/configure/lib/design/choices/choice.js +2 -2
  14. package/configure/lib/design/choices/choice.js.map +1 -1
  15. package/configure/lib/design/choices/index.js +2 -2
  16. package/configure/lib/design/choices/index.js.map +1 -1
  17. package/configure/lib/design/index.js +8 -8
  18. package/configure/lib/design/index.js.map +1 -1
  19. package/configure/lib/design/input-header.js +2 -2
  20. package/configure/lib/design/input-header.js.map +1 -1
  21. package/configure/lib/index.js +1 -1
  22. package/configure/lib/index.js.map +1 -1
  23. package/configure/package.json +8 -2
  24. package/controller/CHANGELOG.md +11 -0
  25. package/controller/lib/index.js +4 -4
  26. package/controller/lib/index.js.map +1 -1
  27. package/controller/package.json +5 -2
  28. package/lib/categorize/categories.js +1 -1
  29. package/lib/categorize/categories.js.map +1 -1
  30. package/lib/categorize/category.js +1 -1
  31. package/lib/categorize/category.js.map +1 -1
  32. package/lib/categorize/choice.js +2 -2
  33. package/lib/categorize/choice.js.map +1 -1
  34. package/lib/categorize/droppable-placeholder.js +1 -1
  35. package/lib/categorize/droppable-placeholder.js.map +1 -1
  36. package/lib/categorize/index.js +7 -7
  37. package/lib/categorize/index.js.map +1 -1
  38. package/lib/index.js +2 -2
  39. package/lib/index.js.map +1 -1
  40. package/package.json +9 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["translator","Translator","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","updateSession","normalizedQuestion","answerCorrectness","role","categoriesPerRow","choicesLabel","choicesPosition","feedback","feedbackEnabled","promptEnabled","prompt","rowLabels","rationaleEnabled","rationale","teacherInstructionsEnabled","teacherInstructions","language","maxChoicesPerCategory","extraCSSRules","minRowHeight","fontSizeFactor","autoplayAudioEnabled","completeAudioEnabled","customAudioButton","note","lockChoiceOrder","filteredCorrectResponse","response","filteredChoices","choice","fb","t","lng","out","correctness","disabled","showNote","outcome","reject","Error","empty","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","maxAnswerChoices","minChoices","minCategories","maxCategories","maxLengthPerChoice","maxLengthPerCategory","reversedChoices","reverse","errors","choicesErrors","categoriesErrors","forEach","field","required","category","label","index","content","identicalAnswer","slice","some","nbOfCategories","nbOfChoices","categoriesError","choicesError","hasAssociations","duplicateAlternateIndex","duplicateCategory","duplicateAlternate","associationError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { buildState, score } from '@pie-lib/pie-toolbox/categorize';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport Translator from '@pie-lib/pie-toolbox/translator';\n\nconst { translator } = Translator;\nimport defaults from './defaults';\nimport { isAlternateDuplicated, isCorrectResponseDuplicated } from './utils';\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) =>\n correctResponse.map((c) => c.alternateResponses).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(categories, choices, answers, correctResponse);\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) => ({ ...defaults, ...question });\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 rowLabels,\n rationaleEnabled,\n rationale,\n teacherInstructionsEnabled,\n teacherInstructions,\n language,\n maxChoicesPerCategory,\n extraCSSRules,\n minRowHeight,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton\n } = normalizedQuestion;\n let { choices, note } = normalizedQuestion;\n let fb;\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n const filteredCorrectResponse = correctResponse.map((response) => {\n const filteredChoices = (response.choices || []).filter((choice) => choice !== 'null');\n return { ...response, choices: filteredChoices };\n });\n\n if (mode === 'evaluate' && feedbackEnabled) {\n fb = await getFeedbackForCorrectness(answerCorrectness, feedback);\n }\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n if (!note) {\n note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: language });\n }\n\n const alternates = getAlternates(filteredCorrectResponse);\n const out = {\n categories: categories || [],\n categoriesPerRow: categoriesPerRow || 2,\n maxChoicesPerCategory,\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 rowLabels,\n note,\n env,\n showNote: alternates && alternates.length > 0,\n correctResponse: mode === 'evaluate' ? filteredCorrectResponse : undefined,\n language,\n extraCSSRules,\n fontSizeFactor,\n minRowHeight: minRowHeight,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = rationaleEnabled ? rationale : null;\n out.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : 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(new Error('Can not call outcome when mode is not evaluate'));\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\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { categories, choices, correctResponse, maxAnswerChoices } = model;\n const {\n minChoices = 1,\n minCategories = 1,\n maxCategories = 12,\n maxLengthPerChoice = 300,\n maxLengthPerCategory = 150,\n } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const errors = {};\n const choicesErrors = {};\n const categoriesErrors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n (categories || []).forEach((category) => {\n const { id, label } = category;\n\n if (getInnerText(label).length > maxLengthPerCategory) {\n categoriesErrors[id] = `Category labels should be no more than ${maxLengthPerCategory} characters long.`;\n }\n });\n\n (reversedChoices || []).forEach((choice, index) => {\n const { id, content } = choice;\n\n if (getInnerText(content).length > maxLengthPerChoice) {\n choicesErrors[id] = `Tokens should be no more than ${maxLengthPerChoice} characters long.`;\n }\n\n if (!getContent(content)) {\n choicesErrors[id] = 'Tokens 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] = 'Tokens 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 < minCategories) {\n errors.categoriesError = `There should be at least ${minCategories} category defined.`;\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} choices defined.`;\n } else if (nbOfChoices > maxAnswerChoices) {\n errors.choicesError = `No more than ${maxAnswerChoices} 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 let duplicateAlternateIndex = -1;\n let duplicateCategory = '';\n (correctResponse || []).forEach((response) => {\n const { choices = [], alternateResponses = [], category } = response;\n\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isCorrectResponseDuplicated(choices, alternateResponses);\n\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isAlternateDuplicated(alternateResponses);\n }\n\n duplicateCategory = category;\n }\n });\n\n if (duplicateAlternateIndex > -1) {\n errors.duplicateAlternate = { index: duplicateAlternateIndex, category: duplicateCategory };\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 if (!isEmpty(categoriesErrors)) {\n errors.categoriesErrors = categoriesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["translator","Translator","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","updateSession","normalizedQuestion","answerCorrectness","role","categoriesPerRow","choicesLabel","choicesPosition","feedback","feedbackEnabled","promptEnabled","prompt","rowLabels","rationaleEnabled","rationale","teacherInstructionsEnabled","teacherInstructions","language","maxChoicesPerCategory","extraCSSRules","minRowHeight","fontSizeFactor","autoplayAudioEnabled","completeAudioEnabled","customAudioButton","note","lockChoiceOrder","filteredCorrectResponse","response","filteredChoices","choice","fb","t","lng","out","correctness","disabled","showNote","outcome","reject","Error","empty","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","maxAnswerChoices","minChoices","minCategories","maxCategories","maxLengthPerChoice","maxLengthPerCategory","reversedChoices","reverse","errors","choicesErrors","categoriesErrors","forEach","field","required","category","label","index","content","identicalAnswer","slice","some","nbOfCategories","nbOfChoices","categoriesError","choicesError","hasAssociations","duplicateAlternateIndex","duplicateCategory","duplicateAlternate","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 { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\nimport defaults from './defaults';\nimport { isAlternateDuplicated, isCorrectResponseDuplicated } from './utils';\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) =>\n correctResponse.map((c) => c.alternateResponses).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(categories, choices, answers, correctResponse);\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) => ({ ...defaults, ...question });\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 rowLabels,\n rationaleEnabled,\n rationale,\n teacherInstructionsEnabled,\n teacherInstructions,\n language,\n maxChoicesPerCategory,\n extraCSSRules,\n minRowHeight,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n } = normalizedQuestion;\n let { choices, note } = normalizedQuestion;\n let fb;\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n const filteredCorrectResponse = correctResponse.map((response) => {\n const filteredChoices = (response.choices || []).filter((choice) => choice !== 'null');\n return { ...response, choices: filteredChoices };\n });\n\n if (mode === 'evaluate' && feedbackEnabled) {\n fb = await getFeedbackForCorrectness(answerCorrectness, feedback);\n }\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n if (!note) {\n note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: language });\n }\n\n const alternates = getAlternates(filteredCorrectResponse);\n const out = {\n categories: categories || [],\n categoriesPerRow: categoriesPerRow || 2,\n maxChoicesPerCategory,\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 rowLabels,\n note,\n env,\n showNote: alternates && alternates.length > 0,\n correctResponse: mode === 'evaluate' ? filteredCorrectResponse : undefined,\n language,\n extraCSSRules,\n fontSizeFactor,\n minRowHeight: minRowHeight,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = rationaleEnabled ? rationale : null;\n out.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : 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(new Error('Can not call outcome when mode is not evaluate'));\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\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { categories, choices, correctResponse, maxAnswerChoices } = model;\n const {\n minChoices = 1,\n minCategories = 1,\n maxCategories = 12,\n maxLengthPerChoice = 300,\n maxLengthPerCategory = 150,\n } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const errors = {};\n const choicesErrors = {};\n const categoriesErrors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n (categories || []).forEach((category) => {\n const { id, label } = category;\n\n if (getInnerText(label).length > maxLengthPerCategory) {\n categoriesErrors[id] = `Category labels should be no more than ${maxLengthPerCategory} characters long.`;\n }\n });\n\n (reversedChoices || []).forEach((choice, index) => {\n const { id, content } = choice;\n\n if (getInnerText(content).length > maxLengthPerChoice) {\n choicesErrors[id] = `Tokens should be no more than ${maxLengthPerChoice} characters long.`;\n }\n\n if (!getContent(content)) {\n choicesErrors[id] = 'Tokens 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] = 'Tokens 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 < minCategories) {\n errors.categoriesError = `There should be at least ${minCategories} category defined.`;\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} choices defined.`;\n } else if (nbOfChoices > maxAnswerChoices) {\n errors.choicesError = `No more than ${maxAnswerChoices} 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 let duplicateAlternateIndex = -1;\n let duplicateCategory = '';\n (correctResponse || []).forEach((response) => {\n const { choices = [], alternateResponses = [], category } = response;\n\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isCorrectResponseDuplicated(choices, alternateResponses);\n\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isAlternateDuplicated(alternateResponses);\n }\n\n duplicateCategory = category;\n }\n });\n\n if (duplicateAlternateIndex > -1) {\n errors.duplicateAlternate = { index: duplicateAlternateIndex, category: duplicateCategory };\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 if (!isEmpty(categoriesErrors)) {\n errors.categoriesErrors = categoriesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -2,10 +2,13 @@
2
2
  "name": "@pie-element/categorize-controller",
3
3
  "private": true,
4
4
  "dependencies": {
5
- "@pie-lib/pie-toolbox": "2.25.1",
5
+ "@pie-lib/categorize": "^0.23.0",
6
+ "@pie-lib/controller-utils": "^0.17.0",
7
+ "@pie-lib/translator": "^2.18.0",
8
+ "@pie-lib/feedback": "^0.19.0",
6
9
  "lodash": "^4.17.15"
7
10
  },
8
- "version": "7.9.8",
11
+ "version": "7.9.9",
9
12
  "description": "",
10
13
  "scripts": {},
11
14
  "main": "lib/index.js",
@@ -36,7 +36,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
36
36
 
37
37
  var _styles = require("@material-ui/core/styles");
38
38
 
39
- var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
39
+ var _renderUi = require("@pie-lib/render-ui");
40
40
 
41
41
  var _gridContent = _interopRequireDefault(require("./grid-content"));
42
42
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/categorize/categories.jsx"],"names":["Categories","props","classes","categories","model","disabled","onDropChoice","onRemoveChoice","rowLabels","categoriesPerRow","minRowHeight","chunkedCategories","cats","i","length","push","slice","hasNonEmptyString","array","found","forEach","element","trim","Math","ceil","map","cat","rowIndex","items","c","columnIndex","display","rowLabel","__html","categoryWrapper","label","h","id","category","concat","Array","fill","value","index","React","Component","PropTypes","object","isRequired","arrayOf","shape","CategoryType","number","bool","func","styles","theme","flex","color","text","backgroundColor","background","textAlign","paddingTop","spacing","unit","alignItems","justifyContent","marginRight","flexDirection"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;;;IAIaA,U;;;;;;;;;;;;WAmBX,kBAAS;AACP,wBAA0F,KAAKC,KAA/F;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,UAAjB,eAAiBA,UAAjB;AAAA,UAA6BC,KAA7B,eAA6BA,KAA7B;AAAA,UAAoCC,QAApC,eAAoCA,QAApC;AAAA,UAA8CC,aAA9C,eAA8CA,YAA9C;AAAA,UAA4DC,cAA5D,eAA4DA,cAA5D;AAAA,UAA4EC,SAA5E,eAA4EA,SAA5E;AACA,UAAQC,gBAAR,GAA2CL,KAA3C,CAAQK,gBAAR;AAAA,UAA0BC,YAA1B,GAA2CN,KAA3C,CAA0BM,YAA1B,CAFO,CAIP;AACA;;AACA,UAAMC,iBAAiB,GAAG,EAA1B;AACA,UAAMC,IAAI,GAAGT,UAAU,IAAI,EAA3B;;AACA,WAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,IAAI,CAACE,MAAzB,EAAiCD,CAAC,IAAIJ,gBAAtC,EAAwD;AACtDE,QAAAA,iBAAiB,CAACI,IAAlB,CAAuBH,IAAI,CAACI,KAAL,CAAWH,CAAX,EAAcA,CAAC,GAAGJ,gBAAlB,CAAvB;AACD;;AAED,UAAMQ,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,KAAD,EAAW;AACnC,YAAIC,KAAK,GAAG,KAAZ;AAEA,SAACD,KAAK,IAAI,EAAV,EAAcE,OAAd,CAAsB,UAAAC,OAAO,EAAI;AAC/B,cAAI,OAAOA,OAAP,KAAmB,QAAnB,IAA+BA,OAAO,CAACC,IAAR,OAAmB,EAAlD,IAAwDD,OAAO,CAACC,IAAR,OAAmB,aAA/E,EAA8F;AAC5FH,YAAAA,KAAK,GAAG,IAAR;AACD;AACF,SAJD;AAMA,eAAOA,KAAP;AACD,OAVD;;AAYA,0BACE,gCAAC,uBAAD;AACE,QAAA,OAAO,EAAEV,gBADX;AAEE,QAAA,SAAS,EAAEP,OAAO,CAACC,UAFrB;AAGE,QAAA,IAAI,EAAEoB,IAAI,CAACC,IAAL,CAAUrB,UAAU,CAACW,MAAX,GAAoBL,gBAA9B,IAAkD;AAH1D,SAKGE,iBAAiB,CAACc,GAAlB,CAAsB,UAACC,GAAD,EAAMC,QAAN,EAAmB;AACxC,YAAIC,KAAK,GAAG,EAAZ,CADwC,CAGxC;AACA;;AACAF,QAAAA,GAAG,CAACN,OAAJ,CAAY,UAACS,CAAD,EAAIC,WAAJ,EAAoB;AAC9BF,UAAAA,KAAK,CAACb,IAAN,eACE;AAAK,YAAA,KAAK,EAAE;AAAEgB,cAAAA,OAAO,EAAE;AAAX;AAAZ,aACGD,WAAW,KAAK,CAAhB,IAAqBb,iBAAiB,CAACT,SAAD,CAAtC,gBACC;AACE,YAAA,GAAG,EAAEmB,QADP;AAEE,YAAA,SAAS,EAAEzB,OAAO,CAAC8B,QAFrB;AAGE,YAAA,uBAAuB,EAAE;AACvBC,cAAAA,MAAM,EAAEzB,SAAS,CAACmB,QAAD,CAAT,IAAuB;AADR;AAH3B,YADD,GAQG,IATN,eAUE;AAAK,YAAA,SAAS,EAAEzB,OAAO,CAACgC;AAAxB,0BACE;AACE,YAAA,SAAS,EAAEhC,OAAO,CAACiC,KADrB;AAEE,YAAA,GAAG,2BAAoBR,QAApB,cAAgCG,WAAhC,CAFL;AAGE,YAAA,uBAAuB,EAAE;AAAEG,cAAAA,MAAM,EAAEJ,CAAC,CAACM;AAAZ;AAH3B,YADF,eAOE,gCAAC,oBAAD;AACE,YAAA,YAAY,EAAEzB,YADhB;AAEE,YAAA,YAAY,EAAE,sBAAC0B,CAAD;AAAA,qBAAO9B,aAAY,CAACuB,CAAC,CAACQ,EAAH,EAAOD,CAAP,CAAnB;AAAA,aAFhB;AAGE,YAAA,cAAc,EAAE7B,cAHlB;AAIE,YAAA,QAAQ,EAAEF,QAJZ;AAKE,YAAA,SAAS,EAAEH,OAAO,CAACoC,QALrB;AAME,YAAA,GAAG,6BAAsBX,QAAtB,cAAkCG,WAAlC;AANL,aAOMD,CAPN,EAPF,CAVF,CADF;AA8BD,SA/BD,EALwC,CAsCxC;;AACAD,QAAAA,KAAK,GAAGA,KAAK,CAACW,MAAN,CACNC,KAAK,CAAC/B,gBAAgB,GAAGiB,GAAG,CAACZ,MAAxB,CAAL,CACG2B,IADH,eACQ,4CADR,EAEGhB,GAFH,CAEO,UAACiB,KAAD,EAAQC,KAAR;AAAA,8BAAkB;AAAK,YAAA,GAAG,6BAAsBA,KAAtB;AAAR,YAAlB;AAAA,SAFP,CADM,CAAR;AAMA,eAAOf,KAAP;AACD,OA9CA,CALH,CADF;AAuDD;;;EAlG6BgB,kBAAMC,S;;;iCAAzB7C,U,eACQ;AACjBE,EAAAA,OAAO,EAAE4C,sBAAUC,MAAV,CAAiBC,UADT;AAEjB7C,EAAAA,UAAU,EAAE2C,sBAAUG,OAAV,CAAkBH,sBAAUI,KAAV,CAAgBC,sBAAhB,CAAlB,CAFK;AAGjB/C,EAAAA,KAAK,EAAE0C,sBAAUI,KAAV,CAAgB;AACrBzC,IAAAA,gBAAgB,EAAEqC,sBAAUM;AADP,GAAhB,CAHU;AAMjB/C,EAAAA,QAAQ,EAAEyC,sBAAUO,IANH;AAOjB/C,EAAAA,YAAY,EAAEwC,sBAAUQ,IAAV,CAAeN,UAPZ;AAQjBzC,EAAAA,cAAc,EAAEuC,sBAAUQ,IAAV,CAAeN,UARd;AASjBxC,EAAAA,SAAS,EAAEsC,sBAAU5B;AATJ,C;iCADRlB,U,kBAaW;AACpBI,EAAAA,KAAK,EAAE;AACLK,IAAAA,gBAAgB,EAAE;AADb;AADa,C;;AAwFxB,IAAM8C,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBrD,IAAAA,UAAU,EAAE;AACVsD,MAAAA,IAAI,EAAE;AADI,KADa;AAIzBtB,IAAAA,KAAK,EAAE;AACLuB,MAAAA,KAAK,EAAEA,gBAAMC,IAAN,EADF;AAELC,MAAAA,eAAe,EAAEF,gBAAMG,UAAN,EAFZ;AAGLC,MAAAA,SAAS,EAAE,QAHN;AAILC,MAAAA,UAAU,EAAEP,KAAK,CAACQ,OAAN,CAAcC;AAJrB,KAJkB;AAUzBjC,IAAAA,QAAQ,EAAE;AACRkC,MAAAA,UAAU,EAAE,QADJ;AAERnC,MAAAA,OAAO,EAAE,MAFD;AAGRoC,MAAAA,cAAc,EAAE,QAHR;AAIRV,MAAAA,IAAI,EAAE,GAJE;AAKRW,MAAAA,WAAW,EAAE;AALL,KAVe;AAiBzBlC,IAAAA,eAAe,EAAE;AACfH,MAAAA,OAAO,EAAE,MADM;AAEf0B,MAAAA,IAAI,EAAE,GAFS;AAGfY,MAAAA,aAAa,EAAE;AAHA;AAjBQ,GAAZ;AAAA,CAAf;;eAuBe,wBAAWd,MAAX,EAAmBvD,UAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color } from '@pie-lib/pie-toolbox/render-ui';\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 rowLabels: PropTypes.array\n };\n\n static defaultProps = {\n model: {\n categoriesPerRow: 1,\n },\n };\n\n render() {\n const { classes, categories, model, disabled, onDropChoice, onRemoveChoice, rowLabels } = this.props;\n const { categoriesPerRow, minRowHeight } = 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 = [];\n const cats = categories || [];\n for (let i = 0; i < cats.length; i += categoriesPerRow) {\n chunkedCategories.push(cats.slice(i, i + categoriesPerRow));\n }\n\n const hasNonEmptyString = (array) => {\n let found = false;\n\n (array || []).forEach(element => {\n if (typeof element === 'string' && element.trim() !== '' && element.trim() !== '<div></div>') {\n found = true;\n }\n });\n\n return found;\n };\n\n return (\n <GridContent\n columns={categoriesPerRow}\n className={classes.categories}\n rows={Math.ceil(categories.length / categoriesPerRow) * 2}\n >\n {chunkedCategories.map((cat, rowIndex) => {\n let items = [];\n\n // for each inner array of categories, create a row with category titles\n // first cell of row has to be the row label\n cat.forEach((c, columnIndex) => {\n items.push(\n <div style={{ display: 'flex' }}>\n {columnIndex === 0 && hasNonEmptyString(rowLabels) ? (\n <div\n key={rowIndex}\n className={classes.rowLabel}\n dangerouslySetInnerHTML={{\n __html: rowLabels[rowIndex] || '',\n }}\n />\n ) : null}\n <div className={classes.categoryWrapper}>\n <div\n className={classes.label}\n key={`category-label-${rowIndex}-${columnIndex}`}\n dangerouslySetInnerHTML={{ __html: c.label }}\n />\n\n <Category\n minRowHeight={minRowHeight}\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 </div>\n </div>,\n );\n });\n\n // if the last row has fewer categories than max on a row, fill the spaces with divs\n items = items.concat(\n Array(categoriesPerRow - cat.length)\n .fill(<div />)\n .map((value, index) => <div key={`fill-space-final-${index}`} />),\n );\n\n return items;\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 textAlign: 'center',\n paddingTop: theme.spacing.unit,\n },\n rowLabel: {\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n flex: 0.5,\n marginRight: '12px'\n },\n categoryWrapper: {\n display: 'flex',\n flex: '2',\n flexDirection: 'column'\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","rowLabels","categoriesPerRow","minRowHeight","chunkedCategories","cats","i","length","push","slice","hasNonEmptyString","array","found","forEach","element","trim","Math","ceil","map","cat","rowIndex","items","c","columnIndex","display","rowLabel","__html","categoryWrapper","label","h","id","category","concat","Array","fill","value","index","React","Component","PropTypes","object","isRequired","arrayOf","shape","CategoryType","number","bool","func","styles","theme","flex","color","text","backgroundColor","background","textAlign","paddingTop","spacing","unit","alignItems","justifyContent","marginRight","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color } from '@pie-lib/render-ui';\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 rowLabels: PropTypes.array,\n };\n\n static defaultProps = {\n model: {\n categoriesPerRow: 1,\n },\n };\n\n render() {\n const { classes, categories, model, disabled, onDropChoice, onRemoveChoice, rowLabels } = this.props;\n const { categoriesPerRow, minRowHeight } = 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 = [];\n const cats = categories || [];\n for (let i = 0; i < cats.length; i += categoriesPerRow) {\n chunkedCategories.push(cats.slice(i, i + categoriesPerRow));\n }\n\n const hasNonEmptyString = (array) => {\n let found = false;\n\n (array || []).forEach((element) => {\n if (typeof element === 'string' && element.trim() !== '' && element.trim() !== '<div></div>') {\n found = true;\n }\n });\n\n return found;\n };\n\n return (\n <GridContent\n columns={categoriesPerRow}\n className={classes.categories}\n rows={Math.ceil(categories.length / categoriesPerRow) * 2}\n >\n {chunkedCategories.map((cat, rowIndex) => {\n let items = [];\n\n // for each inner array of categories, create a row with category titles\n // first cell of row has to be the row label\n cat.forEach((c, columnIndex) => {\n items.push(\n <div style={{ display: 'flex' }}>\n {columnIndex === 0 && hasNonEmptyString(rowLabels) ? (\n <div\n key={rowIndex}\n className={classes.rowLabel}\n dangerouslySetInnerHTML={{\n __html: rowLabels[rowIndex] || '',\n }}\n />\n ) : null}\n <div className={classes.categoryWrapper}>\n <div\n className={classes.label}\n key={`category-label-${rowIndex}-${columnIndex}`}\n dangerouslySetInnerHTML={{ __html: c.label }}\n />\n\n <Category\n minRowHeight={minRowHeight}\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 </div>\n </div>,\n );\n });\n\n // if the last row has fewer categories than max on a row, fill the spaces with divs\n items = items.concat(\n Array(categoriesPerRow - cat.length)\n .fill(<div />)\n .map((value, index) => <div key={`fill-space-final-${index}`} />),\n );\n\n return items;\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 textAlign: 'center',\n paddingTop: theme.spacing.unit,\n },\n rowLabel: {\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n flex: 0.5,\n marginRight: '12px',\n },\n categoryWrapper: {\n display: 'flex',\n flex: '2',\n flexDirection: 'column',\n },\n});\nexport default withStyles(styles)(Categories);\n"],"file":"categories.js"}
@@ -33,7 +33,7 @@ var _choice = _interopRequireDefault(require("./choice"));
33
33
 
34
34
  var _droppablePlaceholder = _interopRequireDefault(require("./droppable-placeholder"));
35
35
 
36
- var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
36
+ var _renderUi = require("@pie-lib/render-ui");
37
37
 
38
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
 
@@ -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","minRowHeight","names","category","placeholderNames","placeholder","incorrect","map","c","index","React","Component","bool","object","func","styles","theme","border","color","padding","spacing","unit","borderRadius","gridColumnGap","gridRowGap","display","flexWrap","justifyContent","alignItems","alignContent","flexDirection","flex"],"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 Choice from './choice';\nimport PlaceHolder from './droppable-placeholder';\nimport { color } from '@pie-lib/pie-toolbox/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 minRowHeight: PropTypes.string,\n };\n\n static defaultProps = {};\n\n render() {\n const { classes, className, choices = [], disabled, onDropChoice, onRemoveChoice, id, correct, minRowHeight } = this.props;\n\n const names = classNames(classes.category, className);\n const placeholderNames = classNames(classes.placeholder, correct === false && classes.incorrect,\n correct === true && classes.correct);\n\n return (\n <div className={names}>\n <PlaceHolder onDropChoice={onDropChoice} disabled={disabled} className={placeholderNames} minRowHeight={minRowHeight}>\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 correct: {\n border: `solid 2px ${color.correct()}`\n },\n placeholder: {\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 flex: 2\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","minRowHeight","names","category","placeholderNames","placeholder","incorrect","map","c","index","React","Component","bool","object","func","styles","theme","border","color","padding","spacing","unit","borderRadius","gridColumnGap","gridRowGap","display","flexWrap","justifyContent","alignItems","alignContent","flexDirection","flex"],"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 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 minRowHeight: PropTypes.string,\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 minRowHeight,\n } = this.props;\n\n const names = classNames(classes.category, className);\n const placeholderNames = classNames(\n classes.placeholder,\n correct === false && classes.incorrect,\n correct === true && classes.correct,\n );\n\n return (\n <div className={names}>\n <PlaceHolder\n onDropChoice={onDropChoice}\n disabled={disabled}\n className={placeholderNames}\n minRowHeight={minRowHeight}\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 correct: {\n border: `solid 2px ${color.correct()}`,\n },\n placeholder: {\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 flex: 2,\n },\n});\n\nexport default withStyles(styles)(Category);\n"],"file":"category.js"}
@@ -31,13 +31,13 @@ var _classnames = _interopRequireDefault(require("classnames"));
31
31
 
32
32
  var _reactDnd = require("react-dnd");
33
33
 
34
- var _drag = require("@pie-lib/pie-toolbox/drag");
34
+ var _drag = require("@pie-lib/drag");
35
35
 
36
36
  var _Card = _interopRequireDefault(require("@material-ui/core/Card"));
37
37
 
38
38
  var _CardContent = _interopRequireDefault(require("@material-ui/core/CardContent"));
39
39
 
40
- var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
40
+ var _renderUi = require("@pie-lib/render-ui");
41
41
 
42
42
  var _debug = _interopRequireDefault(require("debug"));
43
43
 
@@ -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","direction","cursor","width","border","color","incorrect","borderRadius","text","backgroundColor","white","paddingBottom","spacing","unit","opacity","background","pointerEvents","Styled","Choice","e","preventDefault","ref","addEventListener","handleTouchStart","passive","removeEventListener","connectDragSource","extraStyle","margin","func","spec","canDrag","beginDrag","out","categoryId","choiceIndex","value","itemType","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/pie-toolbox/drag';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport { color } from '@pie-lib/pie-toolbox/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 { classes, className, content, isDragging, disabled, correct } = 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.white(),\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 // Added for touch devices, for image content.\n // This will prevent the context menu from appearing and not allowing other interactions with the image.\n pointerEvents: 'none',\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 componentDidMount() {\n if (this.ref) {\n this.ref.addEventListener('touchstart', this.handleTouchStart, { passive: false });\n }\n }\n\n componentWillUnmount() {\n if (this.ref) {\n this.ref.removeEventListener('touchstart', this.handleTouchStart);\n }\n }\n\n handleTouchStart = (e) => {\n e.preventDefault();\n };\n\n render() {\n const { connectDragSource, id, content, disabled, isDragging, correct, extraStyle } = this.props;\n\n return connectDragSource(\n <div\n style={{ margin: '4px', ...extraStyle }}\n ref={(ref) => (this.ref = ref)}\n draggable={!disabled}\n >\n <Styled id={id} content={content} disabled={disabled} correct={correct} isDragging={isDragging} />\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 value: props.content,\n itemType: 'categorize'\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","white","paddingBottom","spacing","unit","opacity","background","pointerEvents","Styled","Choice","e","preventDefault","ref","addEventListener","handleTouchStart","passive","removeEventListener","connectDragSource","extraStyle","margin","func","spec","canDrag","beginDrag","out","categoryId","choiceIndex","value","itemType","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 { classes, className, content, isDragging, disabled, correct } = 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.white(),\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 // Added for touch devices, for image content.\n // This will prevent the context menu from appearing and not allowing other interactions with the image.\n pointerEvents: 'none',\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 componentDidMount() {\n if (this.ref) {\n this.ref.addEventListener('touchstart', this.handleTouchStart, { passive: false });\n }\n }\n\n componentWillUnmount() {\n if (this.ref) {\n this.ref.removeEventListener('touchstart', this.handleTouchStart);\n }\n }\n\n handleTouchStart = (e) => {\n e.preventDefault();\n };\n\n render() {\n const { connectDragSource, id, content, disabled, isDragging, correct, extraStyle } = this.props;\n\n return connectDragSource(\n <div style={{ margin: '4px', ...extraStyle }} ref={(ref) => (this.ref = ref)} draggable={!disabled}>\n <Styled id={id} content={content} disabled={disabled} correct={correct} isDragging={isDragging} />\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 value: props.content,\n itemType: 'categorize',\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"}
@@ -21,7 +21,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
21
21
 
22
22
  var _react = _interopRequireDefault(require("react"));
23
23
 
24
- var _drag = require("@pie-lib/pie-toolbox/drag");
24
+ var _drag = require("@pie-lib/drag");
25
25
 
26
26
  var _propTypes = _interopRequireDefault(require("prop-types"));
27
27
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/categorize/droppable-placeholder.jsx"],"names":["log","DroppablePlaceholder","props","children","connectDropTarget","isOver","className","grid","disabled","choiceBoard","minRowHeight","flex","minHeight","React","Component","PropTypes","bool","func","isRequired","oneOfType","arrayOf","node","string","object","spec","drop","monitor","item","getItem","onDropChoice","canDrop","WithTarget","uid","connect","dropTarget","withUid"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,0CAAN,CAAZ;;IAEaC,oB;;;;;;;;;;;;WAWX,kBAAS;AACP,wBASI,KAAKC,KATT;AAAA,UACEC,QADF,eACEA,QADF;AAAA,UAEEC,iBAFF,eAEEA,iBAFF;AAAA,UAGEC,MAHF,eAGEA,MAHF;AAAA,UAIEC,SAJF,eAIEA,SAJF;AAAA,UAKEC,IALF,eAKEA,IALF;AAAA,UAMEC,QANF,eAMEA,QANF;AAAA,UAOEC,WAPF,eAOEA,WAPF;AAAA,UAQEC,YARF,eAQEA,YARF;AAWA,aAAON,iBAAiB,eACtB;AAAK,QAAA,KAAK,EAAE;AAAEO,UAAAA,IAAI,EAAE,CAAR;AAAWC,UAAAA,SAAS,EAAEF,YAAY,IAAI;AAAtC;AAAZ,sBACE,gCAAC,iBAAD;AACE,QAAA,SAAS,EAAEJ,SADb;AAEE,QAAA,MAAM,EAAED,MAFV;AAGE,QAAA,IAAI,EAAEE,IAHR;AAIE,QAAA,QAAQ,EAAEC,QAJZ;AAKE,QAAA,WAAW,EAAEC,WALf;AAME,QAAA,YAAY;AANd,SAQGN,QARH,CADF,CADsB,CAAxB;AAcD;;;EArCuCU,kBAAMC,S;;;iCAAnCb,oB,eACQ;AACjBQ,EAAAA,WAAW,EAAEM,sBAAUC,IADN;AAEjBZ,EAAAA,iBAAiB,EAAEW,sBAAUE,IAAV,CAAeC,UAFjB;AAGjBb,EAAAA,MAAM,EAAEU,sBAAUC,IAHD;AAIjBb,EAAAA,QAAQ,EAAEY,sBAAUI,SAAV,CAAoB,CAACJ,sBAAUK,OAAV,CAAkBL,sBAAUM,IAA5B,CAAD,EAAoCN,sBAAUM,IAA9C,CAApB,EAAyEH,UAJlE;AAKjBZ,EAAAA,SAAS,EAAES,sBAAUO,MALJ;AAMjBf,EAAAA,IAAI,EAAEQ,sBAAUQ,MANC;AAOjBf,EAAAA,QAAQ,EAAEO,sBAAUC,IAPH;AAQjBN,EAAAA,YAAY,EAAEK,sBAAUO;AARP,C;AAuCd,IAAME,IAAI,GAAG;AAClBC,EAAAA,IAAI,EAAE,cAACvB,KAAD,EAAQwB,OAAR,EAAoB;AACxB1B,IAAAA,GAAG,CAAC,gBAAD,EAAmBE,KAAnB,CAAH;AACA,QAAMyB,IAAI,GAAGD,OAAO,CAACE,OAAR,EAAb;AACA1B,IAAAA,KAAK,CAAC2B,YAAN,CAAmBF,IAAnB;AACD,GALiB;AAMlBG,EAAAA,OAAO,EAAE,iBAAC5B;AAAM;AAAP,IAAyB;AAChC,WAAO,CAACA,KAAK,CAACM,QAAd;AACD;AARiB,CAAb;;AAWP,IAAMuB,UAAU,GAAG,0BACjB;AAAA,MAAGC,GAAH,QAAGA,GAAH;AAAA,SAAaA,GAAb;AAAA,CADiB,EAEjBR,IAFiB,EAGjB,UAACS,OAAD,EAAUP,OAAV;AAAA,SAAuB;AACrBtB,IAAAA,iBAAiB,EAAE6B,OAAO,CAACC,UAAR,EADE;AAErB7B,IAAAA,MAAM,EAAEqB,OAAO,CAACrB,MAAR;AAFa,GAAvB;AAAA,CAHiB,EAOjBJ,oBAPiB,CAAnB;;eASe+B,UAAIG,OAAJ,CAAYJ,UAAZ,C","sourcesContent":["import React from 'react';\nimport { PlaceHolder } from '@pie-lib/pie-toolbox/drag';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { uid } from '@pie-lib/pie-toolbox/drag';\nimport debug from 'debug';\n\nconst log = debug('@pie-ui:categorize:droppable-placeholder');\n\nexport class DroppablePlaceholder extends React.Component {\n static propTypes = {\n choiceBoard: PropTypes.bool,\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n className: PropTypes.string,\n grid: PropTypes.object,\n disabled: PropTypes.bool,\n minRowHeight: PropTypes.string,\n };\n render() {\n const {\n children,\n connectDropTarget,\n isOver,\n className,\n grid,\n disabled,\n choiceBoard,\n minRowHeight\n } = this.props;\n\n return connectDropTarget(\n <div style={{ flex: 1, minHeight: minRowHeight || '80px' }}>\n <PlaceHolder\n className={className}\n isOver={isOver}\n grid={grid}\n disabled={disabled}\n choiceBoard={choiceBoard}\n isCategorize\n >\n {children}\n </PlaceHolder>\n </div>,\n );\n }\n}\n\nexport const spec = {\n drop: (props, monitor) => {\n log('[drop] props: ', props);\n const item = monitor.getItem();\n props.onDropChoice(item);\n },\n canDrop: (props /*, monitor*/) => {\n return !props.disabled;\n },\n};\n\nconst WithTarget = DropTarget(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n }),\n)(DroppablePlaceholder);\n\nexport default uid.withUid(WithTarget);\n"],"file":"droppable-placeholder.js"}
1
+ {"version":3,"sources":["../../src/categorize/droppable-placeholder.jsx"],"names":["log","DroppablePlaceholder","props","children","connectDropTarget","isOver","className","grid","disabled","choiceBoard","minRowHeight","flex","minHeight","React","Component","PropTypes","bool","func","isRequired","oneOfType","arrayOf","node","string","object","spec","drop","monitor","item","getItem","onDropChoice","canDrop","WithTarget","uid","connect","dropTarget","withUid"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,0CAAN,CAAZ;;IAEaC,oB;;;;;;;;;;;;WAWX,kBAAS;AACP,wBAAsG,KAAKC,KAA3G;AAAA,UAAQC,QAAR,eAAQA,QAAR;AAAA,UAAkBC,iBAAlB,eAAkBA,iBAAlB;AAAA,UAAqCC,MAArC,eAAqCA,MAArC;AAAA,UAA6CC,SAA7C,eAA6CA,SAA7C;AAAA,UAAwDC,IAAxD,eAAwDA,IAAxD;AAAA,UAA8DC,QAA9D,eAA8DA,QAA9D;AAAA,UAAwEC,WAAxE,eAAwEA,WAAxE;AAAA,UAAqFC,YAArF,eAAqFA,YAArF;AAEA,aAAON,iBAAiB,eACtB;AAAK,QAAA,KAAK,EAAE;AAAEO,UAAAA,IAAI,EAAE,CAAR;AAAWC,UAAAA,SAAS,EAAEF,YAAY,IAAI;AAAtC;AAAZ,sBACE,gCAAC,iBAAD;AACE,QAAA,SAAS,EAAEJ,SADb;AAEE,QAAA,MAAM,EAAED,MAFV;AAGE,QAAA,IAAI,EAAEE,IAHR;AAIE,QAAA,QAAQ,EAAEC,QAJZ;AAKE,QAAA,WAAW,EAAEC,WALf;AAME,QAAA,YAAY;AANd,SAQGN,QARH,CADF,CADsB,CAAxB;AAcD;;;EA5BuCU,kBAAMC,S;;;iCAAnCb,oB,eACQ;AACjBQ,EAAAA,WAAW,EAAEM,sBAAUC,IADN;AAEjBZ,EAAAA,iBAAiB,EAAEW,sBAAUE,IAAV,CAAeC,UAFjB;AAGjBb,EAAAA,MAAM,EAAEU,sBAAUC,IAHD;AAIjBb,EAAAA,QAAQ,EAAEY,sBAAUI,SAAV,CAAoB,CAACJ,sBAAUK,OAAV,CAAkBL,sBAAUM,IAA5B,CAAD,EAAoCN,sBAAUM,IAA9C,CAApB,EAAyEH,UAJlE;AAKjBZ,EAAAA,SAAS,EAAES,sBAAUO,MALJ;AAMjBf,EAAAA,IAAI,EAAEQ,sBAAUQ,MANC;AAOjBf,EAAAA,QAAQ,EAAEO,sBAAUC,IAPH;AAQjBN,EAAAA,YAAY,EAAEK,sBAAUO;AARP,C;AA8Bd,IAAME,IAAI,GAAG;AAClBC,EAAAA,IAAI,EAAE,cAACvB,KAAD,EAAQwB,OAAR,EAAoB;AACxB1B,IAAAA,GAAG,CAAC,gBAAD,EAAmBE,KAAnB,CAAH;AACA,QAAMyB,IAAI,GAAGD,OAAO,CAACE,OAAR,EAAb;AACA1B,IAAAA,KAAK,CAAC2B,YAAN,CAAmBF,IAAnB;AACD,GALiB;AAMlBG,EAAAA,OAAO,EAAE,iBAAC5B;AAAM;AAAP,IAAyB;AAChC,WAAO,CAACA,KAAK,CAACM,QAAd;AACD;AARiB,CAAb;;AAWP,IAAMuB,UAAU,GAAG,0BACjB;AAAA,MAAGC,GAAH,QAAGA,GAAH;AAAA,SAAaA,GAAb;AAAA,CADiB,EAEjBR,IAFiB,EAGjB,UAACS,OAAD,EAAUP,OAAV;AAAA,SAAuB;AACrBtB,IAAAA,iBAAiB,EAAE6B,OAAO,CAACC,UAAR,EADE;AAErB7B,IAAAA,MAAM,EAAEqB,OAAO,CAACrB,MAAR;AAFa,GAAvB;AAAA,CAHiB,EAOjBJ,oBAPiB,CAAnB;;eASe+B,UAAIG,OAAJ,CAAYJ,UAAZ,C","sourcesContent":["import React from 'react';\nimport { PlaceHolder } from '@pie-lib/drag';\nimport PropTypes from 'prop-types';\nimport { DropTarget } from 'react-dnd';\nimport { uid } from '@pie-lib/drag';\nimport debug from 'debug';\n\nconst log = debug('@pie-ui:categorize:droppable-placeholder');\n\nexport class DroppablePlaceholder extends React.Component {\n static propTypes = {\n choiceBoard: PropTypes.bool,\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n className: PropTypes.string,\n grid: PropTypes.object,\n disabled: PropTypes.bool,\n minRowHeight: PropTypes.string,\n };\n render() {\n const { children, connectDropTarget, isOver, className, grid, disabled, choiceBoard, minRowHeight } = this.props;\n\n return connectDropTarget(\n <div style={{ flex: 1, minHeight: minRowHeight || '80px' }}>\n <PlaceHolder\n className={className}\n isOver={isOver}\n grid={grid}\n disabled={disabled}\n choiceBoard={choiceBoard}\n isCategorize\n >\n {children}\n </PlaceHolder>\n </div>,\n );\n }\n}\n\nexport const spec = {\n drop: (props, monitor) => {\n log('[drop] props: ', props);\n const item = monitor.getItem();\n props.onDropChoice(item);\n },\n canDrop: (props /*, monitor*/) => {\n return !props.disabled;\n },\n};\n\nconst WithTarget = DropTarget(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n }),\n)(DroppablePlaceholder);\n\nexport default uid.withUid(WithTarget);\n"],"file":"droppable-placeholder.js"}
@@ -29,21 +29,21 @@ var _choices = _interopRequireDefault(require("./choices"));
29
29
 
30
30
  var _categories = _interopRequireDefault(require("./categories"));
31
31
 
32
- var _correctAnswerToggle = require("@pie-lib/pie-toolbox/correct-answer-toggle");
32
+ var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
33
33
 
34
34
  var _styles = require("@material-ui/core/styles");
35
35
 
36
- var _categorize = require("@pie-lib/pie-toolbox/categorize");
36
+ var _categorize = require("@pie-lib/categorize");
37
37
 
38
- var _drag = require("@pie-lib/pie-toolbox/drag");
38
+ var _drag = require("@pie-lib/drag");
39
39
 
40
- var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
40
+ var _renderUi = require("@pie-lib/render-ui");
41
41
 
42
42
  var _debug = _interopRequireDefault(require("debug"));
43
43
 
44
- var _translator = _interopRequireDefault(require("@pie-lib/pie-toolbox/translator"));
44
+ var _translator = _interopRequireDefault(require("@pie-lib/translator"));
45
45
 
46
- var _configUi = require("@pie-lib/pie-toolbox/config-ui");
46
+ var _configUi = require("@pie-lib/config-ui");
47
47
 
48
48
  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
49
 
@@ -260,7 +260,7 @@ var Categorize = /*#__PURE__*/function (_React$Component) {
260
260
  prompt: model.prompt,
261
261
  autoplayAudioEnabled: autoplayAudioEnabled,
262
262
  customAudioButton: customAudioButton
263
- }), /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle.CorrectAnswerToggle, {
263
+ }), /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle["default"], {
264
264
  show: showCorrect || correct === false,
265
265
  toggled: showCorrect,
266
266
  onToggle: this.toggleShowCorrect,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/categorize/index.jsx"],"names":["translator","Translator","log","Categorize","props","c","onAnswersChange","session","answers","id","categoryId","choiceIndex","draggedChoice","model","maxChoicesPerCategory","newAnswers","undefined","answer","find","category","choices","length","setState","showMaxChoiceAlert","removeChoice","showCorrect","state","onShowCorrectToggle","choicePosition","flexDirection","correctResponse","some","correctRes","alternateResponses","nextProps","nextModel","note","language","t","lng","classes","choicesPosition","extraCSSRules","showNote","env","autoplayAudioEnabled","customAudioButton","mode","role","style","getPositionDirection","gap","categories","correct","disabled","rowLabels","categoriesPerRow","fontSizeFactor","nbOfRows","Math","ceil","existAlternate","existAlternateResponse","displayNote","alertMessage","alertTitle","onCloseText","showRationale","rationale","showTeacherInstructions","teacherInstructions","mainContainer","hidden","visible","collapsible","prompt","toggleShowCorrect","categorize","display","flex","dropChoice","slice","__html","correctness","feedback","React","Component","PropTypes","object","isRequired","shape","arrayOf","choice","string","func","CategorizeProvider","uid","generateId","styles","theme","color","text","backgroundColor","background","position","marginBottom","spacing","unit","paddingBottom"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Choices from './choices';\nimport Categories from './categories';\nimport { CorrectAnswerToggle } from '@pie-lib/pie-toolbox/correct-answer-toggle';\nimport { withStyles } from '@material-ui/core/styles';\nimport { buildState, removeChoiceFromCategory, moveChoiceToCategory } from '@pie-lib/pie-toolbox/categorize';\nimport { withDragContext, uid } from '@pie-lib/pie-toolbox/drag';\nimport { color, Feedback, Collapsible, hasText, hasMedia, PreviewPrompt, UiLayout } from '@pie-lib/pie-toolbox/render-ui';\nimport debug from 'debug';\nimport Translator from '@pie-lib/pie-toolbox/translator';\nimport { AlertDialog } from '@pie-lib/pie-toolbox/config-ui';\nconst { translator } = Translator;\n\nconst log = debug('@pie-ui:categorize');\n\nexport class Categorize extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object,\n session: PropTypes.shape({\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n choice: PropTypes.string,\n category: PropTypes.string,\n }),\n ),\n }),\n onAnswersChange: PropTypes.func.isRequired,\n onShowCorrectToggle: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrect: false,\n showMaxChoiceAlert: false,\n };\n }\n\n removeChoice = (c) => {\n log('[removeChoice]: ', c);\n const { onAnswersChange, session } = this.props;\n const answers = removeChoiceFromCategory(c.id, c.categoryId, c.choiceIndex, session.answers);\n onAnswersChange(answers);\n };\n\n dropChoice = (categoryId, draggedChoice) => {\n const { session, onAnswersChange, model } = this.props;\n const { maxChoicesPerCategory = 0 } = model || {};\n const { answers = [] } = session || {};\n let newAnswers;\n if (draggedChoice) {\n log('[dropChoice] category: ', draggedChoice.categoryId, 'choice: ', draggedChoice);\n } else {\n log('[dropChoice] category: ', undefined, 'choice: ', undefined);\n }\n\n const answer = answers.find((answer) => answer.category === categoryId);\n\n // treat special case to replace the existing choice with the new one when maxChoicesPerCategory = 1\n if (draggedChoice && maxChoicesPerCategory === 1 && answer && answer.choices && answer.choices.length === 1) {\n newAnswers = moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n );\n newAnswers = removeChoiceFromCategory(answer.choices[0], categoryId, 0, answers);\n }\n\n // treat special case when there are as many choices as maxChoicesPerCategory is\n else if (\n draggedChoice &&\n maxChoicesPerCategory > 1 &&\n answer &&\n answer.choices &&\n answer.choices.length === maxChoicesPerCategory\n ) {\n newAnswers = draggedChoice.categoryId\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n draggedChoice.categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : removeChoiceFromCategory(draggedChoice.id, draggedChoice.categoryId, draggedChoice.choiceIndex, answers);\n this.setState({ showMaxChoiceAlert: true });\n }\n\n // treat special case when there are more choices that maxChoicesPerCategory is (testing purpose in pits)\n else if (maxChoicesPerCategory !== 0 && answer && answer.choices && answer.choices.length > maxChoicesPerCategory) {\n newAnswers = answers;\n this.setState({ showMaxChoiceAlert: true });\n } else {\n newAnswers = draggedChoice\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : this.removeChoice(categoryId);\n }\n\n if (draggedChoice) {\n onAnswersChange(newAnswers);\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model } = this.props;\n const { model: nextModel } = nextProps;\n\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (\n model.note &&\n model.language &&\n model.language !== nextModel.language &&\n model.note === translator.t('common:commonCorrectAnswerWithAlternates', { lng: model.language })\n ) {\n model.note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: nextModel.language });\n }\n\n this.setState({ showCorrect: false });\n }\n\n toggleShowCorrect = () =>\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n this.props.onShowCorrectToggle();\n });\n\n getPositionDirection = (choicePosition) => {\n let flexDirection;\n\n switch (choicePosition) {\n case 'left':\n flexDirection = 'row-reverse';\n break;\n case 'right':\n flexDirection = 'row';\n break;\n case 'below':\n flexDirection = 'column';\n break;\n default:\n // above\n flexDirection = 'column-reverse';\n break;\n }\n\n return flexDirection;\n };\n\n existAlternateResponse = (correctResponse) =>\n correctResponse?.some((correctRes) => correctRes.alternateResponses?.length > 0);\n\n render() {\n const { classes, model, session } = this.props;\n const { showCorrect, showMaxChoiceAlert } = this.state;\n const {\n choicesPosition,\n extraCSSRules,\n note,\n showNote,\n env,\n language,\n maxChoicesPerCategory,\n autoplayAudioEnabled,\n customAudioButton\n } = model;\n const { mode, role } = env || {};\n const choicePosition = choicesPosition || 'above';\n\n const style = {\n flexDirection: this.getPositionDirection(choicePosition),\n gap: '8px',\n };\n\n const { categories, choices, correct } = buildState(\n model.categories,\n model.choices,\n showCorrect ? model.correctResponse : session.answers,\n model.correctResponse,\n );\n\n log('[render] disabled: ', model.disabled);\n\n const { rowLabels, categoriesPerRow, correctResponse, fontSizeFactor } = model;\n const nbOfRows = (categories && Math.ceil(categories.length / categoriesPerRow)) || 0;\n const existAlternate = this.existAlternateResponse(correctResponse) || false;\n const displayNote =\n (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note && existAlternate;\n const alertMessage = translator.t('translation:categorize:limitMaxChoicesPerCategory', {\n lng: model.language,\n maxChoicesPerCategory,\n });\n\n const alertTitle = translator.t('common:warning', {\n lng: model.language,\n });\n\n const onCloseText = translator.t('common:cancel', {\n lng: model.language,\n });\n\n const showRationale = model.rationale && (hasText(model.rationale) || hasMedia(model.rationale));\n const showTeacherInstructions = model.teacherInstructions && (hasText(model.teacherInstructions) || hasMedia(model.teacherInstructions));\n\n return (\n <UiLayout extraCSSRules={extraCSSRules} id={'main-container'} className={classes.mainContainer} fontSizeFactor={fontSizeFactor}>\n {showTeacherInstructions && (\n <React.Fragment>\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.teacherInstructions} />\n </Collapsible>\n </React.Fragment>\n )}\n\n {model.prompt && (\n <PreviewPrompt\n prompt={model.prompt}\n autoplayAudioEnabled={autoplayAudioEnabled}\n customAudioButton={customAudioButton}\n />\n )}\n\n <CorrectAnswerToggle\n show={showCorrect || correct === false}\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n language={language}\n />\n\n <div className={classes.categorize} style={style}>\n <div style={{ display: 'flex', flex: 1 }}>\n <Categories\n model={model}\n disabled={model.disabled}\n categories={categories}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n rowLabels={(rowLabels || []).slice(0, nbOfRows)}\n />\n </div>\n <Choices\n disabled={model.disabled}\n model={model}\n choices={choices}\n choicePosition={choicePosition}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n />\n </div>\n {displayNote && (\n <div\n className={classes.note}\n dangerouslySetInnerHTML={{\n __html: note,\n }}\n />\n )}\n\n {showRationale && (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }} className={classes.collapsible}>\n <PreviewPrompt prompt={model.rationale} />\n </Collapsible>\n )}\n\n {model.correctness && model.feedback && !showCorrect && (\n <Feedback correctness={model.correctness} feedback={model.feedback} />\n )}\n <AlertDialog\n title={alertTitle}\n text={alertMessage}\n open={showMaxChoiceAlert}\n onCloseText={onCloseText}\n onClose={() => this.setState({ showMaxChoiceAlert: false })}\n ></AlertDialog>\n </UiLayout>\n );\n }\n}\n\nclass CategorizeProvider extends React.Component {\n constructor(props) {\n super(props);\n this.uid = uid.generateId();\n }\n\n render() {\n return (\n <uid.Provider value={this.uid}>\n <Categorize {...this.props} />\n </uid.Provider>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n position: 'relative'\n },\n note: {\n marginBottom: theme.spacing.unit * 2,\n },\n categorize: {\n marginBottom: theme.spacing.unit,\n display: 'flex',\n flexDirection: 'column',\n },\n collapsible: {\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withDragContext(withStyles(styles)(CategorizeProvider));\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/categorize/index.jsx"],"names":["translator","Translator","log","Categorize","props","c","onAnswersChange","session","answers","id","categoryId","choiceIndex","draggedChoice","model","maxChoicesPerCategory","newAnswers","undefined","answer","find","category","choices","length","setState","showMaxChoiceAlert","removeChoice","showCorrect","state","onShowCorrectToggle","choicePosition","flexDirection","correctResponse","some","correctRes","alternateResponses","nextProps","nextModel","note","language","t","lng","classes","choicesPosition","extraCSSRules","showNote","env","autoplayAudioEnabled","customAudioButton","mode","role","style","getPositionDirection","gap","categories","correct","disabled","rowLabels","categoriesPerRow","fontSizeFactor","nbOfRows","Math","ceil","existAlternate","existAlternateResponse","displayNote","alertMessage","alertTitle","onCloseText","showRationale","rationale","showTeacherInstructions","teacherInstructions","mainContainer","hidden","visible","collapsible","prompt","toggleShowCorrect","categorize","display","flex","dropChoice","slice","__html","correctness","feedback","React","Component","PropTypes","object","isRequired","shape","arrayOf","choice","string","func","CategorizeProvider","uid","generateId","styles","theme","color","text","backgroundColor","background","position","marginBottom","spacing","unit","paddingBottom"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Choices from './choices';\nimport Categories from './categories';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { withStyles } from '@material-ui/core/styles';\nimport { buildState, removeChoiceFromCategory, moveChoiceToCategory } from '@pie-lib/categorize';\nimport { withDragContext, uid } from '@pie-lib/drag';\nimport { color, Feedback, Collapsible, hasText, hasMedia, PreviewPrompt, UiLayout } from '@pie-lib/render-ui';\nimport debug from 'debug';\nimport Translator from '@pie-lib/translator';\nimport { AlertDialog } from '@pie-lib/config-ui';\nconst { translator } = Translator;\n\nconst log = debug('@pie-ui:categorize');\n\nexport class Categorize extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object,\n session: PropTypes.shape({\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n choice: PropTypes.string,\n category: PropTypes.string,\n }),\n ),\n }),\n onAnswersChange: PropTypes.func.isRequired,\n onShowCorrectToggle: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrect: false,\n showMaxChoiceAlert: false,\n };\n }\n\n removeChoice = (c) => {\n log('[removeChoice]: ', c);\n const { onAnswersChange, session } = this.props;\n const answers = removeChoiceFromCategory(c.id, c.categoryId, c.choiceIndex, session.answers);\n onAnswersChange(answers);\n };\n\n dropChoice = (categoryId, draggedChoice) => {\n const { session, onAnswersChange, model } = this.props;\n const { maxChoicesPerCategory = 0 } = model || {};\n const { answers = [] } = session || {};\n let newAnswers;\n if (draggedChoice) {\n log('[dropChoice] category: ', draggedChoice.categoryId, 'choice: ', draggedChoice);\n } else {\n log('[dropChoice] category: ', undefined, 'choice: ', undefined);\n }\n\n const answer = answers.find((answer) => answer.category === categoryId);\n\n // treat special case to replace the existing choice with the new one when maxChoicesPerCategory = 1\n if (draggedChoice && maxChoicesPerCategory === 1 && answer && answer.choices && answer.choices.length === 1) {\n newAnswers = moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n );\n newAnswers = removeChoiceFromCategory(answer.choices[0], categoryId, 0, answers);\n }\n\n // treat special case when there are as many choices as maxChoicesPerCategory is\n else if (\n draggedChoice &&\n maxChoicesPerCategory > 1 &&\n answer &&\n answer.choices &&\n answer.choices.length === maxChoicesPerCategory\n ) {\n newAnswers = draggedChoice.categoryId\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n draggedChoice.categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : removeChoiceFromCategory(draggedChoice.id, draggedChoice.categoryId, draggedChoice.choiceIndex, answers);\n this.setState({ showMaxChoiceAlert: true });\n }\n\n // treat special case when there are more choices that maxChoicesPerCategory is (testing purpose in pits)\n else if (maxChoicesPerCategory !== 0 && answer && answer.choices && answer.choices.length > maxChoicesPerCategory) {\n newAnswers = answers;\n this.setState({ showMaxChoiceAlert: true });\n } else {\n newAnswers = draggedChoice\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : this.removeChoice(categoryId);\n }\n\n if (draggedChoice) {\n onAnswersChange(newAnswers);\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model } = this.props;\n const { model: nextModel } = nextProps;\n\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (\n model.note &&\n model.language &&\n model.language !== nextModel.language &&\n model.note === translator.t('common:commonCorrectAnswerWithAlternates', { lng: model.language })\n ) {\n model.note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: nextModel.language });\n }\n\n this.setState({ showCorrect: false });\n }\n\n toggleShowCorrect = () =>\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n this.props.onShowCorrectToggle();\n });\n\n getPositionDirection = (choicePosition) => {\n let flexDirection;\n\n switch (choicePosition) {\n case 'left':\n flexDirection = 'row-reverse';\n break;\n case 'right':\n flexDirection = 'row';\n break;\n case 'below':\n flexDirection = 'column';\n break;\n default:\n // above\n flexDirection = 'column-reverse';\n break;\n }\n\n return flexDirection;\n };\n\n existAlternateResponse = (correctResponse) =>\n correctResponse?.some((correctRes) => correctRes.alternateResponses?.length > 0);\n\n render() {\n const { classes, model, session } = this.props;\n const { showCorrect, showMaxChoiceAlert } = this.state;\n const {\n choicesPosition,\n extraCSSRules,\n note,\n showNote,\n env,\n language,\n maxChoicesPerCategory,\n autoplayAudioEnabled,\n customAudioButton,\n } = model;\n const { mode, role } = env || {};\n const choicePosition = choicesPosition || 'above';\n\n const style = {\n flexDirection: this.getPositionDirection(choicePosition),\n gap: '8px',\n };\n\n const { categories, choices, correct } = buildState(\n model.categories,\n model.choices,\n showCorrect ? model.correctResponse : session.answers,\n model.correctResponse,\n );\n\n log('[render] disabled: ', model.disabled);\n\n const { rowLabels, categoriesPerRow, correctResponse, fontSizeFactor } = model;\n const nbOfRows = (categories && Math.ceil(categories.length / categoriesPerRow)) || 0;\n const existAlternate = this.existAlternateResponse(correctResponse) || false;\n const displayNote =\n (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note && existAlternate;\n const alertMessage = translator.t('translation:categorize:limitMaxChoicesPerCategory', {\n lng: model.language,\n maxChoicesPerCategory,\n });\n\n const alertTitle = translator.t('common:warning', {\n lng: model.language,\n });\n\n const onCloseText = translator.t('common:cancel', {\n lng: model.language,\n });\n\n const showRationale = model.rationale && (hasText(model.rationale) || hasMedia(model.rationale));\n const showTeacherInstructions =\n model.teacherInstructions && (hasText(model.teacherInstructions) || hasMedia(model.teacherInstructions));\n\n return (\n <UiLayout\n extraCSSRules={extraCSSRules}\n id={'main-container'}\n className={classes.mainContainer}\n fontSizeFactor={fontSizeFactor}\n >\n {showTeacherInstructions && (\n <React.Fragment>\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.teacherInstructions} />\n </Collapsible>\n </React.Fragment>\n )}\n\n {model.prompt && (\n <PreviewPrompt\n prompt={model.prompt}\n autoplayAudioEnabled={autoplayAudioEnabled}\n customAudioButton={customAudioButton}\n />\n )}\n\n <CorrectAnswerToggle\n show={showCorrect || correct === false}\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n language={language}\n />\n\n <div className={classes.categorize} style={style}>\n <div style={{ display: 'flex', flex: 1 }}>\n <Categories\n model={model}\n disabled={model.disabled}\n categories={categories}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n rowLabels={(rowLabels || []).slice(0, nbOfRows)}\n />\n </div>\n <Choices\n disabled={model.disabled}\n model={model}\n choices={choices}\n choicePosition={choicePosition}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n />\n </div>\n {displayNote && (\n <div\n className={classes.note}\n dangerouslySetInnerHTML={{\n __html: note,\n }}\n />\n )}\n\n {showRationale && (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }} className={classes.collapsible}>\n <PreviewPrompt prompt={model.rationale} />\n </Collapsible>\n )}\n\n {model.correctness && model.feedback && !showCorrect && (\n <Feedback correctness={model.correctness} feedback={model.feedback} />\n )}\n <AlertDialog\n title={alertTitle}\n text={alertMessage}\n open={showMaxChoiceAlert}\n onCloseText={onCloseText}\n onClose={() => this.setState({ showMaxChoiceAlert: false })}\n ></AlertDialog>\n </UiLayout>\n );\n }\n}\n\nclass CategorizeProvider extends React.Component {\n constructor(props) {\n super(props);\n this.uid = uid.generateId();\n }\n\n render() {\n return (\n <uid.Provider value={this.uid}>\n <Categorize {...this.props} />\n </uid.Provider>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n position: 'relative',\n },\n note: {\n marginBottom: theme.spacing.unit * 2,\n },\n categorize: {\n marginBottom: theme.spacing.unit,\n display: 'flex',\n flexDirection: 'column',\n },\n collapsible: {\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withDragContext(withStyles(styles)(CategorizeProvider));\n"],"file":"index.js"}
package/lib/index.js CHANGED
@@ -23,9 +23,9 @@ var _react = _interopRequireDefault(require("react"));
23
23
 
24
24
  var _reactDom = _interopRequireDefault(require("react-dom"));
25
25
 
26
- var _mathRendering = require("@pie-lib/pie-toolbox/math-rendering");
26
+ var _mathRendering = require("@pie-lib/math-rendering");
27
27
 
28
- var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
28
+ var _renderUi = require("@pie-lib/render-ui");
29
29
 
30
30
  var _piePlayerEvents = require("@pie-framework/pie-player-events");
31
31