@pie-element/inline-dropdown 11.0.5-esm.0 → 11.0.5-next.20261012010413

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 (281) hide show
  1. package/author.js +2 -0
  2. package/configure.js +2 -0
  3. package/controller.js +1 -0
  4. package/dist/author/defaults.d.ts +187 -0
  5. package/dist/author/defaults.js +130 -0
  6. package/dist/author/index.d.ts +25 -0
  7. package/dist/author/index.js +91 -0
  8. package/dist/author/inline-dropdown-toolbar.d.ts +44 -0
  9. package/dist/author/inline-dropdown-toolbar.js +269 -0
  10. package/dist/author/main.d.ts +65 -0
  11. package/dist/author/main.js +363 -0
  12. package/dist/author/markupUtils.d.ts +4 -0
  13. package/dist/author/markupUtils.js +23 -0
  14. package/dist/author/response-area.d.ts +12 -0
  15. package/dist/author/response-area.js +32 -0
  16. package/dist/author/utils.d.ts +2 -0
  17. package/dist/author/utils.js +10 -0
  18. package/dist/browser/Close-V6zXg6OM.js +12945 -0
  19. package/dist/browser/Close-V6zXg6OM.js.map +1 -0
  20. package/dist/browser/PUA-tLuTiQ7---_oZ5q_A.js +4370 -0
  21. package/dist/browser/PUA-tLuTiQ7---_oZ5q_A.js.map +1 -0
  22. package/dist/browser/accents-BTUYmhn9-BvG-5D5U.js +1508 -0
  23. package/dist/browser/accents-BTUYmhn9-BvG-5D5U.js.map +1 -0
  24. package/dist/browser/accents-b-i-CngHZsLL-D9VyhQb6.js +2847 -0
  25. package/dist/browser/accents-b-i-CngHZsLL-D9VyhQb6.js.map +1 -0
  26. package/dist/browser/arabic-BzEHMVZD-Dynlj189.js +785 -0
  27. package/dist/browser/arabic-BzEHMVZD-Dynlj189.js.map +1 -0
  28. package/dist/browser/arrows-VjxlU-jv-DSm4SIYN.js +2655 -0
  29. package/dist/browser/arrows-VjxlU-jv-DSm4SIYN.js.map +1 -0
  30. package/dist/browser/assets/Symbola-4c507403.woff2 +0 -0
  31. package/dist/browser/author/index.js +36618 -0
  32. package/dist/browser/author/index.js.map +1 -0
  33. package/dist/browser/braille-BeWC_Ruq-T-5kTNil.js +1287 -0
  34. package/dist/browser/braille-BeWC_Ruq-T-5kTNil.js.map +1 -0
  35. package/dist/browser/braille-d-Dk6J96GO--ZdfI9kr.js +1287 -0
  36. package/dist/browser/braille-d-Dk6J96GO--ZdfI9kr.js.map +1 -0
  37. package/dist/browser/calligraphic-Cew9cU3x-qfCrrm3u.js +323 -0
  38. package/dist/browser/calligraphic-Cew9cU3x-qfCrrm3u.js.map +1 -0
  39. package/dist/browser/cherokee-Cny3FYho-CbTYre7_.js +2029 -0
  40. package/dist/browser/cherokee-Cny3FYho-CbTYre7_.js.map +1 -0
  41. package/dist/browser/chtml-CbqemTOM-x0_YISTK.js +20329 -0
  42. package/dist/browser/chtml-CbqemTOM-x0_YISTK.js.map +1 -0
  43. package/dist/browser/controller/index.js +198 -0
  44. package/dist/browser/controller/index.js.map +1 -0
  45. package/dist/browser/cyrillic-CfCDulXU-EvNL2rHi.js +5617 -0
  46. package/dist/browser/cyrillic-CfCDulXU-EvNL2rHi.js.map +1 -0
  47. package/dist/browser/cyrillic-ss-lU7bNGG9-jdxJx-EF.js +5606 -0
  48. package/dist/browser/cyrillic-ss-lU7bNGG9-jdxJx-EF.js.map +1 -0
  49. package/dist/browser/delivery/index.js +1307 -0
  50. package/dist/browser/delivery/index.js.map +1 -0
  51. package/dist/browser/devanagari-CDIz2h-r-FGcUsKu2.js +692 -0
  52. package/dist/browser/devanagari-CDIz2h-r-FGcUsKu2.js.map +1 -0
  53. package/dist/browser/dist-FMIRkZir.js +753 -0
  54. package/dist/browser/dist-FMIRkZir.js.map +1 -0
  55. package/dist/browser/double-struck-BpJEQk8y-CLqFtvAN.js +438 -0
  56. package/dist/browser/double-struck-BpJEQk8y-CLqFtvAN.js.map +1 -0
  57. package/dist/browser/editor-runtime/Close-C0bNS2Kx.js +12945 -0
  58. package/dist/browser/editor-runtime/Close-C0bNS2Kx.js.map +1 -0
  59. package/dist/browser/editor-runtime/PUA-tLuTiQ7---_oZ5q_A.js +4370 -0
  60. package/dist/browser/editor-runtime/PUA-tLuTiQ7---_oZ5q_A.js.map +1 -0
  61. package/dist/browser/editor-runtime/accents-BTUYmhn9-BvG-5D5U.js +1508 -0
  62. package/dist/browser/editor-runtime/accents-BTUYmhn9-BvG-5D5U.js.map +1 -0
  63. package/dist/browser/editor-runtime/accents-b-i-CngHZsLL-D9VyhQb6.js +2847 -0
  64. package/dist/browser/editor-runtime/accents-b-i-CngHZsLL-D9VyhQb6.js.map +1 -0
  65. package/dist/browser/editor-runtime/arabic-BzEHMVZD-Dynlj189.js +785 -0
  66. package/dist/browser/editor-runtime/arabic-BzEHMVZD-Dynlj189.js.map +1 -0
  67. package/dist/browser/editor-runtime/arrows-VjxlU-jv-DSm4SIYN.js +2655 -0
  68. package/dist/browser/editor-runtime/arrows-VjxlU-jv-DSm4SIYN.js.map +1 -0
  69. package/dist/browser/editor-runtime/assets/Symbola-4c507403.woff2 +0 -0
  70. package/dist/browser/editor-runtime/author/index.js +20030 -0
  71. package/dist/browser/editor-runtime/author/index.js.map +1 -0
  72. package/dist/browser/editor-runtime/braille-BeWC_Ruq-T-5kTNil.js +1287 -0
  73. package/dist/browser/editor-runtime/braille-BeWC_Ruq-T-5kTNil.js.map +1 -0
  74. package/dist/browser/editor-runtime/braille-d-Dk6J96GO--ZdfI9kr.js +1287 -0
  75. package/dist/browser/editor-runtime/braille-d-Dk6J96GO--ZdfI9kr.js.map +1 -0
  76. package/dist/browser/editor-runtime/calligraphic-Cew9cU3x-qfCrrm3u.js +323 -0
  77. package/dist/browser/editor-runtime/calligraphic-Cew9cU3x-qfCrrm3u.js.map +1 -0
  78. package/dist/browser/editor-runtime/cherokee-Cny3FYho-CbTYre7_.js +2029 -0
  79. package/dist/browser/editor-runtime/cherokee-Cny3FYho-CbTYre7_.js.map +1 -0
  80. package/dist/browser/editor-runtime/chtml-CbqemTOM-x0_YISTK.js +20329 -0
  81. package/dist/browser/editor-runtime/chtml-CbqemTOM-x0_YISTK.js.map +1 -0
  82. package/dist/browser/editor-runtime/controller/index.js +198 -0
  83. package/dist/browser/editor-runtime/controller/index.js.map +1 -0
  84. package/dist/browser/editor-runtime/cyrillic-CfCDulXU-EvNL2rHi.js +5617 -0
  85. package/dist/browser/editor-runtime/cyrillic-CfCDulXU-EvNL2rHi.js.map +1 -0
  86. package/dist/browser/editor-runtime/cyrillic-ss-lU7bNGG9-jdxJx-EF.js +5606 -0
  87. package/dist/browser/editor-runtime/cyrillic-ss-lU7bNGG9-jdxJx-EF.js.map +1 -0
  88. package/dist/browser/editor-runtime/delivery/index.js +1307 -0
  89. package/dist/browser/editor-runtime/delivery/index.js.map +1 -0
  90. package/dist/browser/editor-runtime/devanagari-CDIz2h-r-FGcUsKu2.js +692 -0
  91. package/dist/browser/editor-runtime/devanagari-CDIz2h-r-FGcUsKu2.js.map +1 -0
  92. package/dist/browser/editor-runtime/dist-FMIRkZir.js +753 -0
  93. package/dist/browser/editor-runtime/dist-FMIRkZir.js.map +1 -0
  94. package/dist/browser/editor-runtime/double-struck-BpJEQk8y-CLqFtvAN.js +438 -0
  95. package/dist/browser/editor-runtime/double-struck-BpJEQk8y-CLqFtvAN.js.map +1 -0
  96. package/dist/browser/editor-runtime/fraktur-rLEq9DEH-BU0iR4xw.js +694 -0
  97. package/dist/browser/editor-runtime/fraktur-rLEq9DEH-BU0iR4xw.js.map +1 -0
  98. package/dist/browser/editor-runtime/greek-BlraJTyL-DAfjxxNh.js +9335 -0
  99. package/dist/browser/editor-runtime/greek-BlraJTyL-DAfjxxNh.js.map +1 -0
  100. package/dist/browser/editor-runtime/greek-ss-D-EN2PK0-CcyaecGS.js +6767 -0
  101. package/dist/browser/editor-runtime/greek-ss-D-EN2PK0-CcyaecGS.js.map +1 -0
  102. package/dist/browser/editor-runtime/hebrew-GiQZeybp-DqJrAkkB.js +3218 -0
  103. package/dist/browser/editor-runtime/hebrew-GiQZeybp-DqJrAkkB.js.map +1 -0
  104. package/dist/browser/editor-runtime/latin-b-BhEnC7R2-CQAVv0CI.js +3134 -0
  105. package/dist/browser/editor-runtime/latin-b-BhEnC7R2-CQAVv0CI.js.map +1 -0
  106. package/dist/browser/editor-runtime/latin-bi-DqiIKv3U-DM22wSUP.js +3637 -0
  107. package/dist/browser/editor-runtime/latin-bi-DqiIKv3U-DM22wSUP.js.map +1 -0
  108. package/dist/browser/editor-runtime/latin-i-B1xtwaE1-uBpJAGjo.js +3634 -0
  109. package/dist/browser/editor-runtime/latin-i-B1xtwaE1-uBpJAGjo.js.map +1 -0
  110. package/dist/browser/editor-runtime/latin-xfWFlLkD-CKElfDKc.js +3266 -0
  111. package/dist/browser/editor-runtime/latin-xfWFlLkD-CKElfDKc.js.map +1 -0
  112. package/dist/browser/editor-runtime/marrows-DD1NgMQi-BIBP-NrK.js +761 -0
  113. package/dist/browser/editor-runtime/marrows-DD1NgMQi-BIBP-NrK.js.map +1 -0
  114. package/dist/browser/editor-runtime/math-DpWn1mbG-B7Krt7Jk.js +2034 -0
  115. package/dist/browser/editor-runtime/math-DpWn1mbG-B7Krt7Jk.js.map +1 -0
  116. package/dist/browser/editor-runtime/mathjax-CptWnMbQ-BymmkoDr.js +36692 -0
  117. package/dist/browser/editor-runtime/mathjax-CptWnMbQ-BymmkoDr.js.map +1 -0
  118. package/dist/browser/editor-runtime/monospace-D116QD2a-C40p3Rv8.js +1112 -0
  119. package/dist/browser/editor-runtime/monospace-D116QD2a-C40p3Rv8.js.map +1 -0
  120. package/dist/browser/editor-runtime/monospace-ex-DcXpouKS-DkaktwPJ.js +6014 -0
  121. package/dist/browser/editor-runtime/monospace-ex-DcXpouKS-DkaktwPJ.js.map +1 -0
  122. package/dist/browser/editor-runtime/monospace-l-Ct5wkMDs-CuE7t5pv.js +3114 -0
  123. package/dist/browser/editor-runtime/monospace-l-Ct5wkMDs-CuE7t5pv.js.map +1 -0
  124. package/dist/browser/editor-runtime/mshapes-DCp86WSX-DX0WfJid.js +524 -0
  125. package/dist/browser/editor-runtime/mshapes-DCp86WSX-DX0WfJid.js.map +1 -0
  126. package/dist/browser/editor-runtime/phonetics-BwOCw2Y9-lJWnARqt.js +2496 -0
  127. package/dist/browser/editor-runtime/phonetics-BwOCw2Y9-lJWnARqt.js.map +1 -0
  128. package/dist/browser/editor-runtime/phonetics-ss-CRtMn02f-Cr32SJLL.js +2984 -0
  129. package/dist/browser/editor-runtime/phonetics-ss-CRtMn02f-Cr32SJLL.js.map +1 -0
  130. package/dist/browser/editor-runtime/sans-serif-BYPZKlE9-DftjSdim.js +5246 -0
  131. package/dist/browser/editor-runtime/sans-serif-BYPZKlE9-DftjSdim.js.map +1 -0
  132. package/dist/browser/editor-runtime/sans-serif-b-B0kRKiC--BsRQiyQP.js +3176 -0
  133. package/dist/browser/editor-runtime/sans-serif-b-B0kRKiC--BsRQiyQP.js.map +1 -0
  134. package/dist/browser/editor-runtime/sans-serif-bi-DXWul6mu-D4NuD72A.js +3688 -0
  135. package/dist/browser/editor-runtime/sans-serif-bi-DXWul6mu-D4NuD72A.js.map +1 -0
  136. package/dist/browser/editor-runtime/sans-serif-ex-Boux1kMP-BrL4RNcD.js +10033 -0
  137. package/dist/browser/editor-runtime/sans-serif-ex-Boux1kMP-BrL4RNcD.js.map +1 -0
  138. package/dist/browser/editor-runtime/sans-serif-i-676RFaSO-BCRikTTw.js +3635 -0
  139. package/dist/browser/editor-runtime/sans-serif-i-676RFaSO-BCRikTTw.js.map +1 -0
  140. package/dist/browser/editor-runtime/sans-serif-r-DrN9xdZt-CN8omxfu.js +3159 -0
  141. package/dist/browser/editor-runtime/sans-serif-r-DrN9xdZt-CN8omxfu.js.map +1 -0
  142. package/dist/browser/editor-runtime/script-0ohehnXc-4G2PiBkk.js +649 -0
  143. package/dist/browser/editor-runtime/script-0ohehnXc-4G2PiBkk.js.map +1 -0
  144. package/dist/browser/editor-runtime/shapes-BG47NodJ-D3eH0HjT.js +1932 -0
  145. package/dist/browser/editor-runtime/shapes-BG47NodJ-D3eH0HjT.js.map +1 -0
  146. package/dist/browser/editor-runtime/speech-worker-CTpOB9m5-pwCKeQ9c.js +160 -0
  147. package/dist/browser/editor-runtime/speech-worker-CTpOB9m5-pwCKeQ9c.js.map +1 -0
  148. package/dist/browser/editor-runtime/symbols-BqnUxf_t-DJHA_nO7.js +1833 -0
  149. package/dist/browser/editor-runtime/symbols-BqnUxf_t-DJHA_nO7.js.map +1 -0
  150. package/dist/browser/editor-runtime/symbols-b-i-eg9k5hmF-Bn-dxZT_.js +1153 -0
  151. package/dist/browser/editor-runtime/symbols-b-i-eg9k5hmF-Bn-dxZT_.js.map +1 -0
  152. package/dist/browser/editor-runtime/variants-2LRNhOUP-BlL4NIVJ.js +231 -0
  153. package/dist/browser/editor-runtime/variants-2LRNhOUP-BlL4NIVJ.js.map +1 -0
  154. package/dist/browser/fraktur-rLEq9DEH-BU0iR4xw.js +694 -0
  155. package/dist/browser/fraktur-rLEq9DEH-BU0iR4xw.js.map +1 -0
  156. package/dist/browser/greek-BlraJTyL-DAfjxxNh.js +9335 -0
  157. package/dist/browser/greek-BlraJTyL-DAfjxxNh.js.map +1 -0
  158. package/dist/browser/greek-ss-D-EN2PK0-CcyaecGS.js +6767 -0
  159. package/dist/browser/greek-ss-D-EN2PK0-CcyaecGS.js.map +1 -0
  160. package/dist/browser/hebrew-GiQZeybp-DqJrAkkB.js +3218 -0
  161. package/dist/browser/hebrew-GiQZeybp-DqJrAkkB.js.map +1 -0
  162. package/dist/browser/latin-b-BhEnC7R2-CQAVv0CI.js +3134 -0
  163. package/dist/browser/latin-b-BhEnC7R2-CQAVv0CI.js.map +1 -0
  164. package/dist/browser/latin-bi-DqiIKv3U-DM22wSUP.js +3637 -0
  165. package/dist/browser/latin-bi-DqiIKv3U-DM22wSUP.js.map +1 -0
  166. package/dist/browser/latin-i-B1xtwaE1-uBpJAGjo.js +3634 -0
  167. package/dist/browser/latin-i-B1xtwaE1-uBpJAGjo.js.map +1 -0
  168. package/dist/browser/latin-xfWFlLkD-CKElfDKc.js +3266 -0
  169. package/dist/browser/latin-xfWFlLkD-CKElfDKc.js.map +1 -0
  170. package/dist/browser/marrows-DD1NgMQi-BIBP-NrK.js +761 -0
  171. package/dist/browser/marrows-DD1NgMQi-BIBP-NrK.js.map +1 -0
  172. package/dist/browser/math-DpWn1mbG-B7Krt7Jk.js +2034 -0
  173. package/dist/browser/math-DpWn1mbG-B7Krt7Jk.js.map +1 -0
  174. package/dist/browser/mathjax-CptWnMbQ-ncPHVakS.js +36692 -0
  175. package/dist/browser/mathjax-CptWnMbQ-ncPHVakS.js.map +1 -0
  176. package/dist/browser/monospace-D116QD2a-C40p3Rv8.js +1112 -0
  177. package/dist/browser/monospace-D116QD2a-C40p3Rv8.js.map +1 -0
  178. package/dist/browser/monospace-ex-DcXpouKS-DkaktwPJ.js +6014 -0
  179. package/dist/browser/monospace-ex-DcXpouKS-DkaktwPJ.js.map +1 -0
  180. package/dist/browser/monospace-l-Ct5wkMDs-CuE7t5pv.js +3114 -0
  181. package/dist/browser/monospace-l-Ct5wkMDs-CuE7t5pv.js.map +1 -0
  182. package/dist/browser/mshapes-DCp86WSX-DX0WfJid.js +524 -0
  183. package/dist/browser/mshapes-DCp86WSX-DX0WfJid.js.map +1 -0
  184. package/dist/browser/phonetics-BwOCw2Y9-lJWnARqt.js +2496 -0
  185. package/dist/browser/phonetics-BwOCw2Y9-lJWnARqt.js.map +1 -0
  186. package/dist/browser/phonetics-ss-CRtMn02f-Cr32SJLL.js +2984 -0
  187. package/dist/browser/phonetics-ss-CRtMn02f-Cr32SJLL.js.map +1 -0
  188. package/dist/browser/sans-serif-BYPZKlE9-DftjSdim.js +5246 -0
  189. package/dist/browser/sans-serif-BYPZKlE9-DftjSdim.js.map +1 -0
  190. package/dist/browser/sans-serif-b-B0kRKiC--BsRQiyQP.js +3176 -0
  191. package/dist/browser/sans-serif-b-B0kRKiC--BsRQiyQP.js.map +1 -0
  192. package/dist/browser/sans-serif-bi-DXWul6mu-D4NuD72A.js +3688 -0
  193. package/dist/browser/sans-serif-bi-DXWul6mu-D4NuD72A.js.map +1 -0
  194. package/dist/browser/sans-serif-ex-Boux1kMP-BrL4RNcD.js +10033 -0
  195. package/dist/browser/sans-serif-ex-Boux1kMP-BrL4RNcD.js.map +1 -0
  196. package/dist/browser/sans-serif-i-676RFaSO-BCRikTTw.js +3635 -0
  197. package/dist/browser/sans-serif-i-676RFaSO-BCRikTTw.js.map +1 -0
  198. package/dist/browser/sans-serif-r-DrN9xdZt-CN8omxfu.js +3159 -0
  199. package/dist/browser/sans-serif-r-DrN9xdZt-CN8omxfu.js.map +1 -0
  200. package/dist/browser/script-0ohehnXc-4G2PiBkk.js +649 -0
  201. package/dist/browser/script-0ohehnXc-4G2PiBkk.js.map +1 -0
  202. package/dist/browser/shapes-BG47NodJ-D3eH0HjT.js +1932 -0
  203. package/dist/browser/shapes-BG47NodJ-D3eH0HjT.js.map +1 -0
  204. package/dist/browser/speech-worker-CTpOB9m5-BIgcSm3A.js +160 -0
  205. package/dist/browser/speech-worker-CTpOB9m5-BIgcSm3A.js.map +1 -0
  206. package/dist/browser/symbols-BqnUxf_t-DJHA_nO7.js +1833 -0
  207. package/dist/browser/symbols-BqnUxf_t-DJHA_nO7.js.map +1 -0
  208. package/dist/browser/symbols-b-i-eg9k5hmF-Bn-dxZT_.js +1153 -0
  209. package/dist/browser/symbols-b-i-eg9k5hmF-Bn-dxZT_.js.map +1 -0
  210. package/dist/browser/variants-2LRNhOUP-BlL4NIVJ.js +231 -0
  211. package/dist/browser/variants-2LRNhOUP-BlL4NIVJ.js.map +1 -0
  212. package/dist/controller/defaults.d.ts +19 -0
  213. package/dist/controller/defaults.js +21 -0
  214. package/dist/controller/index.d.ts +95 -0
  215. package/dist/controller/index.js +126 -0
  216. package/dist/controller/utils.d.ts +2 -0
  217. package/dist/controller/utils.js +13 -0
  218. package/dist/delivery/__tests__/inline-dropdown-language.test.d.ts +1 -0
  219. package/dist/delivery/index.d.ts +14 -0
  220. package/dist/delivery/index.js +64 -0
  221. package/dist/delivery/inline-dropdown.d.ts +30 -0
  222. package/dist/delivery/inline-dropdown.js +111 -0
  223. package/dist/index.d.ts +2 -0
  224. package/dist/index.iife.d.ts +6 -0
  225. package/dist/index.iife.js +185 -0
  226. package/dist/index.js +2 -0
  227. package/dist/runtime-support.d.ts +12 -0
  228. package/dist/runtime-support.js +12 -0
  229. package/dist/schemas/configuration.schema.json +414 -0
  230. package/dist/schemas/model.schema.json +453 -0
  231. package/dist/schemas/session.schema.json +43 -0
  232. package/dist/types.d.ts +164 -0
  233. package/package.json +96 -32
  234. package/CHANGELOG.json +0 -1082
  235. package/CHANGELOG.md +0 -3440
  236. package/LICENSE.md +0 -5
  237. package/README.md +0 -1
  238. package/configure/CHANGELOG.json +0 -647
  239. package/configure/CHANGELOG.md +0 -3066
  240. package/configure/lib/defaults.js +0 -190
  241. package/configure/lib/defaults.js.map +0 -1
  242. package/configure/lib/index.js +0 -209
  243. package/configure/lib/index.js.map +0 -1
  244. package/configure/lib/inline-dropdown-toolbar.js +0 -573
  245. package/configure/lib/inline-dropdown-toolbar.js.map +0 -1
  246. package/configure/lib/main.js +0 -753
  247. package/configure/lib/main.js.map +0 -1
  248. package/configure/lib/markupUtils.js +0 -70
  249. package/configure/lib/markupUtils.js.map +0 -1
  250. package/configure/lib/response-area.js +0 -99
  251. package/configure/lib/response-area.js.map +0 -1
  252. package/configure/lib/utils.js +0 -33
  253. package/configure/lib/utils.js.map +0 -1
  254. package/configure/package.json +0 -22
  255. package/controller/CHANGELOG.json +0 -467
  256. package/controller/CHANGELOG.md +0 -2114
  257. package/controller/lib/defaults.js +0 -26
  258. package/controller/lib/defaults.js.map +0 -1
  259. package/controller/lib/index.js +0 -360
  260. package/controller/lib/index.js.map +0 -1
  261. package/controller/lib/utils.js +0 -40
  262. package/controller/lib/utils.js.map +0 -1
  263. package/controller/package.json +0 -16
  264. package/docs/config-schema.json +0 -2854
  265. package/docs/config-schema.json.md +0 -2106
  266. package/docs/demo/config.js +0 -8
  267. package/docs/demo/generate.js +0 -76
  268. package/docs/demo/index.html +0 -1
  269. package/docs/demo/session.js +0 -11
  270. package/docs/pie-schema.json +0 -1152
  271. package/docs/pie-schema.json.md +0 -814
  272. package/esm/configure.js +0 -1973
  273. package/esm/configure.js.map +0 -1
  274. package/esm/controller.js +0 -304
  275. package/esm/controller.js.map +0 -1
  276. package/esm/element.js +0 -278
  277. package/esm/element.js.map +0 -1
  278. package/lib/index.js +0 -130
  279. package/lib/index.js.map +0 -1
  280. package/lib/inline-dropdown.js +0 -248
  281. package/lib/inline-dropdown.js.map +0 -1
@@ -0,0 +1,198 @@
1
+ import { i as e, l as t, n, t as r } from "../dist-FMIRkZir.js";
2
+ //#region ../../shared/controller-utils/dist/index.js
3
+ var i = Object.defineProperty, a = (e, t) => {
4
+ let n = {};
5
+ for (var r in e) i(n, r, {
6
+ get: e[r],
7
+ enumerable: !0
8
+ });
9
+ return t || i(n, Symbol.toStringTag, { value: "Module" }), n;
10
+ };
11
+ function o(e) {
12
+ return Array.isArray(e) ? e.filter((e) => e != null) : [];
13
+ }
14
+ function s(e) {
15
+ let t = [...e];
16
+ for (let e = t.length - 1; e > 0; e--) {
17
+ let n = Math.floor(Math.random() * (e + 1));
18
+ [t[e], t[n]] = [t[n], t[e]];
19
+ }
20
+ return t;
21
+ }
22
+ function c(e) {
23
+ return e == null ? !0 : Array.isArray(e) ? e.length === 0 : typeof e == "object" && Object.keys(e).length === 0;
24
+ }
25
+ async function l(e, t, n, r = "value") {
26
+ let i = o(t?.data?.shuffledValues ?? t?.shuffledValues ?? []);
27
+ if (!t) {
28
+ console.warn("Unable to save shuffled choices because there's no session.");
29
+ return;
30
+ }
31
+ if (!c(i)) return o(i.map((t) => e.find((e) => e[r] === t)));
32
+ let a = s(e);
33
+ if (n && typeof n == "function") try {
34
+ let e = o(a.map((e) => e[r]));
35
+ c(e) ? console.error(`shuffledValues is an empty array - refusing to call updateSession. shuffledChoices: ${JSON.stringify(a)}, key: ${r}`) : await n(t.id, t.element, { shuffledValues: e });
36
+ } catch (e) {
37
+ console.warn("Unable to save shuffled order for choices"), console.error(e);
38
+ }
39
+ else console.warn("Unable to save shuffled choices, shuffle will happen every time.");
40
+ return a;
41
+ }
42
+ function u(e, t, n) {
43
+ return !!(e.lockChoiceOrder || n?.["@pie-element"]?.lockChoiceOrder);
44
+ }
45
+ var d = /* @__PURE__ */ a({ enabled: () => f });
46
+ function f(e, t, n) {
47
+ return e?.partialScoring === !1 || t?.partialScoring === !1 ? !1 : typeof n != "boolean" || n;
48
+ }
49
+ //#endregion
50
+ //#region src/controller/defaults.ts
51
+ var p = {
52
+ alternateResponse: {},
53
+ choiceRationaleEnabled: !0,
54
+ choices: {},
55
+ disabled: !1,
56
+ displayType: "block",
57
+ markup: "",
58
+ mode: "gather",
59
+ prompt: "",
60
+ promptEnabled: !0,
61
+ rationale: "",
62
+ rationaleEnabled: !0,
63
+ shuffle: !0,
64
+ studentInstructionsEnabled: !0,
65
+ teacherInstructions: "",
66
+ teacherInstructionsEnabled: !0,
67
+ toolbarEditorPosition: "bottom"
68
+ }, m = ({ choices: e, alternateResponse: n }) => {
69
+ n ||= {};
70
+ let r = {};
71
+ return t(e, (e, t) => {
72
+ r[t] || (r[t] = []), e && e.forEach((e) => {
73
+ e.correct && (r[t].push(e.value), n[t] && (r[t] = [...r[t], ...n[t]]));
74
+ });
75
+ }), r;
76
+ }, h = (e) => e ? "correct" : "incorrect", g = (e) => ({
77
+ ...p,
78
+ ...e
79
+ });
80
+ async function _(t, i, a, o) {
81
+ let s = g(t), { value: c = {} } = i || {}, d = e(s.choices, (e, t, n) => (e[n] = r(t, (e) => e), e), {}), f = {};
82
+ if (a.mode === "evaluate") {
83
+ let t = m(s), n = Object.keys(t).length, r = 0;
84
+ for (let i = 0; i < n; i++) {
85
+ let a = e(t, (e, t, n) => {
86
+ let r = c && c[n] || "", a = t[i] || "", o = r && a && a === r;
87
+ return e.feedback[n] = h(o), o && (e.correctResponses += 1), e;
88
+ }, {
89
+ correctResponses: 0,
90
+ feedback: {}
91
+ });
92
+ if (a.correctResponses >= r && (r = a.correctResponses, f = a.feedback), a.correctResponses === n) break;
93
+ }
94
+ }
95
+ if (!u(s, i, a)) {
96
+ let e = {}, t = Object.keys(d), r = (t) => (n, r, i) => new Promise((n) => {
97
+ e[t] = i.shuffledValues, n();
98
+ }), a;
99
+ for (a = 0; a < t.length; a++) {
100
+ let e = t[a], n = i?.shuffledValues?.[e];
101
+ d[e] = await l(d[e], { shuffledValues: Array.isArray(n) ? n : [] }, r(e), "value");
102
+ }
103
+ n(e) || i && o && typeof o == "function" && o(i.id, i.element, { shuffledValues: e }).catch((e) => {
104
+ console.error("update session failed", e);
105
+ });
106
+ }
107
+ let p = null, _ = null, y = (Object.keys(d) || []).reduce((e, t) => (e[t] = (d[t] || []).map((e) => ({
108
+ ...e,
109
+ rationale: null
110
+ })), e), {});
111
+ return a.role === "instructor" && (a.mode === "view" || a.mode === "evaluate") ? (_ = s.rationaleEnabled ? s.rationale : null, p = s.teacherInstructionsEnabled ? s.teacherInstructions : null, d = s.choiceRationaleEnabled ? s.choices : y) : (_ = null, p = null, d = y), {
112
+ disabled: a.mode !== "gather",
113
+ mode: a.mode,
114
+ prompt: s.promptEnabled ? s.prompt : null,
115
+ displayType: s.displayType,
116
+ markup: s.markup,
117
+ choices: d,
118
+ feedback: f,
119
+ responseCorrect: a.mode === "evaluate" ? v(s, i) === 1 : void 0,
120
+ rationale: _,
121
+ teacherInstructions: p,
122
+ language: s.language,
123
+ extraCSSRules: s.extraCSSRules
124
+ };
125
+ }
126
+ var v = (t, n) => {
127
+ let { value: r = {} } = n || {}, i = t && t.choices ? Object.keys(t.choices).length : 0, a = m(t), o = 0;
128
+ for (let t = 0; t < i; t++) {
129
+ let n = e(a, (e, n, i) => {
130
+ let a = r && r[i] || "", o = n[t] || "";
131
+ return o && a && o === a ? e : e - 1;
132
+ }, i);
133
+ if (n > o && (o = n), n === i) break;
134
+ }
135
+ let s = (o / i).toFixed(2);
136
+ return parseFloat(s);
137
+ }, y = (e, t, n) => {
138
+ let r = [], { value: i = {} } = t || {}, a = m(e), o = Object.keys(a), s = o.length;
139
+ if (r.push(`${s} dropdown response area(s) defined in this question.`), i && Object.keys(i).length > 0) {
140
+ let e = Object.entries(i).filter(([, e]) => e && e.trim()).length;
141
+ r.push(`Student selected options in ${e} out of ${s} dropdown(s).`), o.forEach((e) => {
142
+ let t = i && i[e] || "", n = a[e] || [];
143
+ t.trim() ? r.push(`Dropdown ${parseInt(e) + 1}: student selected '${t}' (correct options: [${n.map((e) => `'${e}'`).join(", ")}]).`) : r.push(`Dropdown ${parseInt(e) + 1}: no selection made (correct options: [${n.map((e) => `'${e}'`).join(", ")}]).`);
144
+ });
145
+ } else r.push("Student did not make any selections in the dropdowns.");
146
+ let c = d.enabled(e, n);
147
+ r.push(`Scoring method: ${c ? "partial scoring" : "all-or-nothing scoring"}.`);
148
+ let l = v(e, t);
149
+ return r.push(`Final score: ${l}.`), r;
150
+ };
151
+ function b(e, t, r = {}) {
152
+ return new Promise((i) => {
153
+ if (!t || n(t)) i({
154
+ score: 0,
155
+ empty: !0,
156
+ traceLog: ["Student did not make any selections in the dropdowns. Score is 0."]
157
+ });
158
+ else {
159
+ let n = y(e, t, r), a = v(e, t);
160
+ i({
161
+ score: d.enabled(e, r) ? a : Math.floor(a),
162
+ empty: !1,
163
+ traceLog: n
164
+ });
165
+ }
166
+ });
167
+ }
168
+ var x = (e, t) => new Promise((n) => {
169
+ if (t.mode !== "evaluate" && t.role === "instructor") {
170
+ let { choices: t } = e, r = {};
171
+ t && Object.keys(t).forEach((e, n) => {
172
+ let i = t[e] && t[e].filter((e) => e.correct);
173
+ r[n] = i && i[0].value;
174
+ }), n({
175
+ id: "1",
176
+ value: r
177
+ });
178
+ } else n(null);
179
+ }), S = (e) => (e || "").replace(/(<(?!img|iframe|source)([^>]+)>)/gi, ""), C = (e = {}, t = {}) => {
180
+ let { markup: n, choices: r } = e, { maxResponseAreas: i, maxResponseAreaChoices: a } = t, o = {};
181
+ [
182
+ "teacherInstructions",
183
+ "prompt",
184
+ "rationale"
185
+ ].forEach((n) => {
186
+ t[n]?.required && !S(e[n]) && (o[n] = "This field is required.");
187
+ });
188
+ let s = ((n || "").match(/\{\{(\d+)\}\}/g) || []).length;
189
+ i !== void 0 && s > i ? o.responseAreasError = `No more than ${i} response areas should be defined.` : s < 1 && (o.responseAreasError = "There should be defined at least 1 response area.");
190
+ let c = r;
191
+ return (Object.keys(c) || []).forEach((e) => {
192
+ c[e] && a !== void 0 && c[e].length > a && (o.responseAreaChoicesError = `No more than ${a} choices per response area should be defined.`);
193
+ }), o;
194
+ };
195
+ //#endregion
196
+ export { x as createCorrectResponseSession, y as getLogTrace, v as getScore, _ as model, g as normalize, b as outcome, C as validate };
197
+
198
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../shared/controller-utils/dist/index.js","../../../../src/controller/defaults.ts","../../../../src/controller/utils.ts","../../../../src/controller/index.ts"],"sourcesContent":["//#region \\0rolldown/runtime.js\nvar e = Object.defineProperty, t = (t, n) => {\n\tlet r = {};\n\tfor (var i in t) e(r, i, {\n\t\tget: t[i],\n\t\tenumerable: !0\n\t});\n\treturn n || e(r, Symbol.toStringTag, { value: \"Module\" }), r;\n};\n//#endregion\n//#region src/persistence.ts\nfunction n(e) {\n\treturn Array.isArray(e) ? e.filter((e) => e != null) : [];\n}\nfunction r(e) {\n\tlet t = [...e];\n\tfor (let e = t.length - 1; e > 0; e--) {\n\t\tlet n = Math.floor(Math.random() * (e + 1));\n\t\t[t[e], t[n]] = [t[n], t[e]];\n\t}\n\treturn t;\n}\nfunction i(e) {\n\treturn e == null ? !0 : Array.isArray(e) ? e.length === 0 : typeof e == \"object\" && Object.keys(e).length === 0;\n}\nasync function a(e, t, a, o = \"value\") {\n\tlet s = n(t?.data?.shuffledValues ?? t?.shuffledValues ?? []);\n\tif (!t) {\n\t\tconsole.warn(\"Unable to save shuffled choices because there's no session.\");\n\t\treturn;\n\t}\n\tif (!i(s)) return n(s.map((t) => e.find((e) => e[o] === t)));\n\tlet c = r(e);\n\tif (a && typeof a == \"function\") try {\n\t\tlet e = n(c.map((e) => e[o]));\n\t\ti(e) ? console.error(`shuffledValues is an empty array - refusing to call updateSession. shuffledChoices: ${JSON.stringify(c)}, key: ${o}`) : await a(t.id, t.element, { shuffledValues: e });\n\t} catch (e) {\n\t\tconsole.warn(\"Unable to save shuffled order for choices\"), console.error(e);\n\t}\n\telse console.warn(\"Unable to save shuffled choices, shuffle will happen every time.\");\n\treturn c;\n}\nfunction o(e, t, n) {\n\treturn !!(e.lockChoiceOrder || n?.[\"@pie-element\"]?.lockChoiceOrder);\n}\n//#endregion\n//#region src/partial-scoring.ts\nvar s = /* @__PURE__ */ t({ enabled: () => c });\nfunction c(e, t, n) {\n\treturn e?.partialScoring === !1 || t?.partialScoring === !1 ? !1 : typeof n != \"boolean\" || n;\n}\n//#endregion\nexport { a as getShuffledChoices, o as lockChoices, s as partialScoring };\n","import type { InlineDropdownModel } from '../types.js';\n\nexport default {\n alternateResponse: {},\n choiceRationaleEnabled: true,\n choices: {},\n disabled: false,\n displayType: 'block',\n markup: '',\n mode: 'gather',\n prompt: '',\n promptEnabled: true,\n rationale: '',\n rationaleEnabled: true,\n shuffle: true,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n} satisfies Omit<InlineDropdownModel, 'id' | 'element'>;\n","import { forEach } from '@pie-element/shared-lodash';\nimport type { Choice, InlineDropdownModel } from '../types.js';\n\nexport const getAllCorrectResponses = ({\n choices,\n alternateResponse,\n}: Partial<Pick<InlineDropdownModel, 'choices' | 'alternateResponse'>>) => {\n alternateResponse = alternateResponse || {};\n const correctAnswers: Record<string, string[]> = {};\n\n forEach<Choice[]>(choices, (respArea, key) => {\n if (!correctAnswers[key]) {\n correctAnswers[key] = [];\n }\n\n if (respArea) {\n respArea.forEach((choice) => {\n if (choice.correct) {\n correctAnswers[key].push(choice.value);\n\n if (alternateResponse[key]) {\n correctAnswers[key] = [...correctAnswers[key], ...alternateResponse[key]];\n }\n }\n });\n }\n });\n\n return correctAnswers;\n};\n","import { isEmpty, map, reduce } from '@pie-element/shared-lodash';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-element/shared-controller-utils';\nimport type { PieEnvironment, PieUpdateSession } from '@pie-element/shared-types';\nimport defaults from './defaults.js';\n\nimport { getAllCorrectResponses } from './utils.js';\nimport type {\n Choice,\n Choices,\n InlineDropdownConfiguration,\n InlineDropdownModel,\n InlineDropdownSession,\n} from '../types.js';\n\n/** Errors `validate()` reports, keyed by field. */\nexport type InlineDropdownValidationErrors = {\n teacherInstructions?: string;\n prompt?: string;\n rationale?: string;\n responseAreasError?: string;\n responseAreaChoicesError?: string;\n};\n\n/** A choice as the controller hands it to the delivery: rationales are `null` unless the instructor sees them */\ntype DeliveryChoice = Omit<Choice, 'rationale'> & { rationale?: string | null };\n\nconst getFeedback = (correct: unknown) => {\n if (correct) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\nexport const normalize = (question: InlineDropdownModel) => ({ ...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 async function model(\n question: InlineDropdownModel,\n session: InlineDropdownSession | null | undefined,\n env: PieEnvironment,\n updateSession?: PieUpdateSession,\n) {\n const normalizedQuestion = normalize(question);\n const { value = {} } = session || {};\n let choices = reduce<Choice[], Record<string, DeliveryChoice[] | undefined>>(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, (choice) => choice);\n\n return obj;\n },\n {},\n );\n\n let feedback: Record<string, string> = {};\n\n if (env.mode === 'evaluate') {\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n const respAreaLength = Object.keys(allCorrectResponses).length;\n let correctResponses = 0;\n\n for (let i = 0; i < respAreaLength; i++) {\n const result = reduce<string[], { correctResponses: number; feedback: Record<string, string> }>(\n allCorrectResponses,\n (obj, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n const isCorrect = answer && correctChoice && correctChoice === answer;\n\n obj.feedback[key] = getFeedback(isCorrect);\n\n if (isCorrect) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} },\n );\n\n if (result.correctResponses >= correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n\n if (result.correctResponses === respAreaLength) {\n break;\n }\n }\n }\n\n // `lockChoices` ignores the session, so the per-area `shuffledValues` shape does not matter to it.\n const lockChoiceOrder = lockChoices(normalizedQuestion, session as Parameters<typeof lockChoices>[1], env);\n\n if (!lockChoiceOrder) {\n const shuffledValues: Record<string, string[]> = {};\n const keys = Object.keys(choices);\n\n const us =\n (part: string): PieUpdateSession =>\n (_id, _element, update) => {\n return new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues as string[];\n resolve();\n });\n };\n\n let i;\n\n for (i = 0; i < keys.length; i++) {\n const key = keys[i];\n const storedValues = (session?.shuffledValues as Record<string, string[]> | undefined)?.[key];\n\n choices[key] = await getShuffledChoices(\n choices[key] as DeliveryChoice[],\n // the shuffledValues structure was updated to an object like { choice_key: [] }\n // and we need to override shuffledValues if it's not an array\n { shuffledValues: Array.isArray(storedValues) ? storedValues : [] },\n us(key),\n 'value',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (session && updateSession && typeof updateSession === 'function') {\n updateSession(session.id as string, session.element as string, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n }\n\n let teacherInstructions: string | null | undefined = null;\n let rationale: string | null | undefined = null;\n\n const choicesWillNullRationales = (Object.keys(choices) || []).reduce<Record<string, DeliveryChoice[]>>((acc, currentValue) => {\n acc[currentValue] = (choices[currentValue] || []).map((choice) => ({\n ...choice,\n rationale: null,\n }));\n\n return acc;\n }, {});\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;\n\n choices = normalizedQuestion.choiceRationaleEnabled ? normalizedQuestion.choices : choicesWillNullRationales;\n } else {\n rationale = null;\n teacherInstructions = null;\n choices = choicesWillNullRationales;\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n displayType: normalizedQuestion.displayType,\n markup: normalizedQuestion.markup,\n choices,\n feedback,\n\n responseCorrect: env.mode === 'evaluate' ? getScore(normalizedQuestion, session) === 1 : undefined,\n rationale,\n teacherInstructions,\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n return out;\n}\n\nexport const getScore = (\n config: Partial<Pick<InlineDropdownModel, 'choices' | 'alternateResponse'>>,\n session: InlineDropdownSession | null | undefined,\n) => {\n const { value = {} } = session || {};\n const maxScore = config && config.choices ? Object.keys(config.choices).length : 0;\n const allCorrectResponses = getAllCorrectResponses(config);\n let correctCount = 0;\n\n for (let i = 0; i < maxScore; i++) {\n const result = reduce<string[], number>(\n allCorrectResponses,\n (total, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n\n if (correctChoice && answer && correctChoice === answer) {\n return total;\n }\n\n return total - 1;\n },\n maxScore,\n );\n\n if (result > correctCount) {\n correctCount = result;\n }\n\n if (result === maxScore) {\n break;\n }\n }\n\n const str = (correctCount / maxScore).toFixed(2);\n\n return parseFloat(str);\n};\n\n/**\n * Generates detailed trace log for scoring evaluation\n * @param {Object} model - the question model\n * @param {Object} session - the student session\n * @param {Object} env - the environment\n * @returns {Array} traceLog - array of trace messages\n */\nexport const getLogTrace = (\n model: InlineDropdownModel,\n session: InlineDropdownSession | null | undefined,\n env: Partial<PieEnvironment>,\n) => {\n const traceLog: string[] = [];\n const { value = {} } = session || {};\n const allCorrectResponses = getAllCorrectResponses(model);\n const responseAreaKeys = Object.keys(allCorrectResponses);\n const totalAreas = responseAreaKeys.length;\n \n traceLog.push(`${totalAreas} dropdown response area(s) defined in this question.`);\n \n if (value && Object.keys(value).length > 0) {\n const selectedAreas = Object.entries(value).filter(([, val]) => val && val.trim()).length;\n traceLog.push(`Student selected options in ${selectedAreas} out of ${totalAreas} dropdown(s).`);\n \n responseAreaKeys.forEach((areaKey) => {\n const studentSelection = (value && value[areaKey]) || '';\n const correctOptions = allCorrectResponses[areaKey] || [];\n \n if (studentSelection.trim()) {\n traceLog.push(`Dropdown ${parseInt(areaKey) + 1}: student selected '${studentSelection}' (correct options: [${correctOptions.map(opt => `'${opt}'`).join(', ')}]).`);\n } else {\n traceLog.push(`Dropdown ${parseInt(areaKey) + 1}: no selection made (correct options: [${correctOptions.map(opt => `'${opt}'`).join(', ')}]).`);\n }\n });\n } else {\n traceLog.push('Student did not make any selections in the dropdowns.');\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n traceLog.push(\n `Scoring method: ${\n partialScoringEnabled ? 'partial scoring' : 'all-or-nothing scoring'\n }.`\n );\n\n const score = getScore(model, session);\n traceLog.push(`Final score: ${score}.`);\n\n return traceLog;\n}\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =\n * false. the value in `env` will override the value in `model`.\n * @param {Object} model - the main model\n * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)\n * @param {*} session\n * @param {Object} env\n * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides\n * `model.partialScoring`.\n */\nexport function outcome(\n model: InlineDropdownModel,\n session: InlineDropdownSession | null | undefined,\n env: Partial<PieEnvironment> = {},\n) {\n return new Promise<{ score: number; empty: boolean; traceLog: string[] }>((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ \n score: 0, \n empty: true, \n traceLog: ['Student did not make any selections in the dropdowns. Score is 0.'] \n });\n } else {\n const traceLog = getLogTrace(model, session, env);\n const score = getScore(model, session);\n const partialScoringEnabled = partialScoring.enabled(model, env);\n\n resolve({\n score: partialScoringEnabled ? score : Math.floor(score),\n empty: false,\n traceLog\n });\n }\n });\n}\n\nexport const createCorrectResponseSession = (question: InlineDropdownModel, env: PieEnvironment) => {\n return new Promise<InlineDropdownSession | null>((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question;\n const value: Record<string, string> = {};\n\n if (choices) {\n Object.keys(choices).forEach((key, i) => {\n const correctChoices = choices[key] && choices[key].filter((c) => c.correct);\n\n value[i] = correctChoices && correctChoices[0].value;\n });\n }\n\n resolve({\n id: '1',\n value,\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html: string | undefined) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (\n model: Partial<InlineDropdownModel> = {},\n config: InlineDropdownConfiguration = {},\n) => {\n const { markup, choices } = model;\n const { maxResponseAreas, maxResponseAreaChoices } = config;\n const errors: InlineDropdownValidationErrors = {};\n\n (['teacherInstructions', 'prompt', 'rationale'] as const).forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const nbOfResponseAreas = ((markup || '').match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (maxResponseAreas !== undefined && nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be defined at least 1 response area.';\n }\n\n // `Object.keys` throws when the model has no `choices`.\n const allChoices = choices as Choices;\n\n (Object.keys(allChoices) || []).forEach((choiceKey) => {\n if (\n allChoices[choiceKey] &&\n maxResponseAreaChoices !== undefined &&\n allChoices[choiceKey].length > maxResponseAreaChoices\n ) {\n errors.responseAreaChoicesError = `No more than ${maxResponseAreaChoices} choices per response area should be defined.`;\n }\n });\n\n return errors;\n};\n"],"mappings":"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"}