@clickview/lite 0.70.1-dev.5 → 0.70.1-dev.6

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 (136) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{9583-lite-9eda71423d.chunk.css → 3878-lite-877e596a24.chunk.css} +3 -0
  3. package/dist/css/{5797-lite-1dfd2c337d.chunk.css → 5099-lite-7d7c063e62.chunk.css} +3 -0
  4. package/dist/css/{8191-lite-ee877f2ecd.chunk.css → 6984-lite-53c3fa4d18.chunk.css} +3 -0
  5. package/dist/css/{8723-lite-676baa8218.chunk.css → 7103-lite-ee0c975440.chunk.css} +3 -0
  6. package/dist/css/{7783-lite-1dfd2c337d.chunk.css → 7394-lite-7d7c063e62.chunk.css} +3 -0
  7. package/dist/css/7502-lite-9b2ed5bd56.chunk.css +4 -0
  8. package/dist/css/{5721-lite-9eda71423d.chunk.css → 7548-lite-877e596a24.chunk.css} +3 -0
  9. package/dist/css/{549-lite-b49bde8e4d.chunk.css → 7657-lite-ad909396f3.chunk.css} +3 -1
  10. package/dist/css/{6783-lite-e85973335b.chunk.css → 829-lite-27b58d07b3.chunk.css} +3 -0
  11. package/dist/css/{5635-lite-ee877f2ecd.chunk.css → 9673-lite-53c3fa4d18.chunk.css} +3 -0
  12. package/dist/scripts/1107-0fb4769540-lite.chunk.js +2 -0
  13. package/dist/scripts/1107-0fb4769540-lite.chunk.js.map +1 -0
  14. package/dist/scripts/1437-658ad1fe2b-lite.chunk.js +2 -0
  15. package/dist/scripts/1437-658ad1fe2b-lite.chunk.js.map +1 -0
  16. package/dist/scripts/1710-ef798f1e0d-lite.chunk.js +2 -0
  17. package/dist/scripts/1710-ef798f1e0d-lite.chunk.js.map +1 -0
  18. package/dist/scripts/2024-4fec8f175b-lite.chunk.js +2 -0
  19. package/dist/scripts/2024-4fec8f175b-lite.chunk.js.map +1 -0
  20. package/dist/scripts/2435-a846651e83-lite.chunk.js +2 -0
  21. package/dist/scripts/2435-a846651e83-lite.chunk.js.map +1 -0
  22. package/dist/scripts/2809-84ce060e14-lite.chunk.js +2 -0
  23. package/dist/scripts/2809-84ce060e14-lite.chunk.js.map +1 -0
  24. package/dist/scripts/3878-45fd0861cc-lite.chunk.js +2 -0
  25. package/dist/scripts/3878-45fd0861cc-lite.chunk.js.map +1 -0
  26. package/dist/scripts/4096-c834372efb-lite.chunk.js +2 -0
  27. package/dist/scripts/4096-c834372efb-lite.chunk.js.map +1 -0
  28. package/dist/scripts/4456-ada4977b41-lite.chunk.js +2 -0
  29. package/dist/scripts/4456-ada4977b41-lite.chunk.js.map +1 -0
  30. package/dist/scripts/4806-a05a2a3012-lite.chunk.js +2 -0
  31. package/dist/scripts/4806-a05a2a3012-lite.chunk.js.map +1 -0
  32. package/dist/scripts/5099-297f8cd028-lite.chunk.js +2 -0
  33. package/dist/scripts/5099-297f8cd028-lite.chunk.js.map +1 -0
  34. package/dist/scripts/5829-903613bbf0-lite.chunk.js +3 -0
  35. package/dist/scripts/5829-903613bbf0-lite.chunk.js.map +1 -0
  36. package/dist/scripts/5925-937fec8a93-lite.chunk.js +2 -0
  37. package/dist/scripts/5925-937fec8a93-lite.chunk.js.map +1 -0
  38. package/dist/scripts/6459-ac139cb154-lite.chunk.js +2 -0
  39. package/dist/scripts/6459-ac139cb154-lite.chunk.js.map +1 -0
  40. package/dist/scripts/6629-4edaed39c8-lite.chunk.js +3 -0
  41. package/dist/scripts/6629-4edaed39c8-lite.chunk.js.map +1 -0
  42. package/dist/scripts/6984-9d8b378bcc-lite.chunk.js +2 -0
  43. package/dist/scripts/6984-9d8b378bcc-lite.chunk.js.map +1 -0
  44. package/dist/scripts/7103-ef79582538-lite.chunk.js +2 -0
  45. package/dist/scripts/7103-ef79582538-lite.chunk.js.map +1 -0
  46. package/dist/scripts/7394-5448807e14-lite.chunk.js +2 -0
  47. package/dist/scripts/7394-5448807e14-lite.chunk.js.map +1 -0
  48. package/dist/scripts/7502-78b085caad-lite.chunk.js +2 -0
  49. package/dist/scripts/7502-78b085caad-lite.chunk.js.map +1 -0
  50. package/dist/scripts/7548-5eb0d3b7a0-lite.chunk.js +2 -0
  51. package/dist/scripts/7548-5eb0d3b7a0-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7593-cc4e09c847-lite.chunk.js +2 -0
  53. package/dist/scripts/7593-cc4e09c847-lite.chunk.js.map +1 -0
  54. package/dist/scripts/7657-e302fda4f2-lite.chunk.js +2 -0
  55. package/dist/scripts/7657-e302fda4f2-lite.chunk.js.map +1 -0
  56. package/dist/scripts/8057-431c6be34c-lite.chunk.js +2 -0
  57. package/dist/scripts/8057-431c6be34c-lite.chunk.js.map +1 -0
  58. package/dist/scripts/8224-b9b5d3b1a5-lite.chunk.js +2 -0
  59. package/dist/scripts/8224-b9b5d3b1a5-lite.chunk.js.map +1 -0
  60. package/dist/scripts/829-aff9937989-lite.chunk.js +3 -0
  61. package/dist/scripts/829-aff9937989-lite.chunk.js.map +1 -0
  62. package/dist/scripts/{9250-ec244ab17a-lite.chunk.js → 8723-708f2373d6-lite.chunk.js} +3 -3
  63. package/dist/scripts/{9250-ec244ab17a-lite.chunk.js.map → 8723-708f2373d6-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/8960-c159492ba3-lite.chunk.js +2 -0
  65. package/dist/scripts/8960-c159492ba3-lite.chunk.js.map +1 -0
  66. package/dist/scripts/9673-8a2740611a-lite.chunk.js +2 -0
  67. package/dist/scripts/9673-8a2740611a-lite.chunk.js.map +1 -0
  68. package/dist/scripts/9882-f1a9cc55ec-lite.chunk.js +2 -0
  69. package/dist/scripts/9882-f1a9cc55ec-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{bundle-d2cf17c78d.min.js → bundle-5a89651ec2.min.js} +3 -3
  71. package/dist/scripts/{bundle-d2cf17c78d.min.js.map → bundle-5a89651ec2.min.js.map} +1 -1
  72. package/package.json +1 -1
  73. package/dist/css/7428-lite-e2d7497beb.chunk.css +0 -8
  74. package/dist/scripts/1565-ba78a2a25c-lite.chunk.js +0 -2
  75. package/dist/scripts/1565-ba78a2a25c-lite.chunk.js.map +0 -1
  76. package/dist/scripts/2024-abf6cf1842-lite.chunk.js +0 -2
  77. package/dist/scripts/2024-abf6cf1842-lite.chunk.js.map +0 -1
  78. package/dist/scripts/2072-50b656cb3b-lite.chunk.js +0 -2
  79. package/dist/scripts/2072-50b656cb3b-lite.chunk.js.map +0 -1
  80. package/dist/scripts/2574-02faf4a2d2-lite.chunk.js +0 -2
  81. package/dist/scripts/2574-02faf4a2d2-lite.chunk.js.map +0 -1
  82. package/dist/scripts/396-2ffc09cc70-lite.chunk.js +0 -2
  83. package/dist/scripts/396-2ffc09cc70-lite.chunk.js.map +0 -1
  84. package/dist/scripts/4377-001a8ee263-lite.chunk.js +0 -2
  85. package/dist/scripts/4377-001a8ee263-lite.chunk.js.map +0 -1
  86. package/dist/scripts/4806-c2dce3650d-lite.chunk.js +0 -2
  87. package/dist/scripts/4806-c2dce3650d-lite.chunk.js.map +0 -1
  88. package/dist/scripts/4948-30af9a446d-lite.chunk.js +0 -2
  89. package/dist/scripts/4948-30af9a446d-lite.chunk.js.map +0 -1
  90. package/dist/scripts/549-2d591052e3-lite.chunk.js +0 -2
  91. package/dist/scripts/549-2d591052e3-lite.chunk.js.map +0 -1
  92. package/dist/scripts/5635-6e2559f04d-lite.chunk.js +0 -2
  93. package/dist/scripts/5635-6e2559f04d-lite.chunk.js.map +0 -1
  94. package/dist/scripts/5679-80c1d8434e-lite.chunk.js +0 -2
  95. package/dist/scripts/5679-80c1d8434e-lite.chunk.js.map +0 -1
  96. package/dist/scripts/5721-2141ed4fb6-lite.chunk.js +0 -2
  97. package/dist/scripts/5721-2141ed4fb6-lite.chunk.js.map +0 -1
  98. package/dist/scripts/5797-f84ce545b9-lite.chunk.js +0 -2
  99. package/dist/scripts/5797-f84ce545b9-lite.chunk.js.map +0 -1
  100. package/dist/scripts/581-fe733617bd-lite.chunk.js +0 -2
  101. package/dist/scripts/581-fe733617bd-lite.chunk.js.map +0 -1
  102. package/dist/scripts/5829-689f5be5d1-lite.chunk.js +0 -3
  103. package/dist/scripts/5829-689f5be5d1-lite.chunk.js.map +0 -1
  104. package/dist/scripts/6046-5652117548-lite.chunk.js +0 -2
  105. package/dist/scripts/6046-5652117548-lite.chunk.js.map +0 -1
  106. package/dist/scripts/6629-910e316a83-lite.chunk.js +0 -3
  107. package/dist/scripts/6629-910e316a83-lite.chunk.js.map +0 -1
  108. package/dist/scripts/6783-7efd15103a-lite.chunk.js +0 -3
  109. package/dist/scripts/6783-7efd15103a-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7064-f5e8bc71bc-lite.chunk.js +0 -2
  111. package/dist/scripts/7064-f5e8bc71bc-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7428-546d62999f-lite.chunk.js +0 -2
  113. package/dist/scripts/7428-546d62999f-lite.chunk.js.map +0 -1
  114. package/dist/scripts/7482-9016f79093-lite.chunk.js +0 -2
  115. package/dist/scripts/7482-9016f79093-lite.chunk.js.map +0 -1
  116. package/dist/scripts/7757-9b72774917-lite.chunk.js +0 -2
  117. package/dist/scripts/7757-9b72774917-lite.chunk.js.map +0 -1
  118. package/dist/scripts/7783-18da4064c0-lite.chunk.js +0 -2
  119. package/dist/scripts/7783-18da4064c0-lite.chunk.js.map +0 -1
  120. package/dist/scripts/8191-ff27deee6c-lite.chunk.js +0 -2
  121. package/dist/scripts/8191-ff27deee6c-lite.chunk.js.map +0 -1
  122. package/dist/scripts/8672-094d54cbbd-lite.chunk.js +0 -2
  123. package/dist/scripts/8672-094d54cbbd-lite.chunk.js.map +0 -1
  124. package/dist/scripts/8723-c3aaa1643a-lite.chunk.js +0 -2
  125. package/dist/scripts/8723-c3aaa1643a-lite.chunk.js.map +0 -1
  126. package/dist/scripts/9583-3b2623e754-lite.chunk.js +0 -2
  127. package/dist/scripts/9583-3b2623e754-lite.chunk.js.map +0 -1
  128. /package/dist/css/{4377-lite-856c02f000.chunk.css → 1107-lite-856c02f000.chunk.css} +0 -0
  129. /package/dist/css/{581-lite-a1cdc302ab.chunk.css → 1437-lite-a1cdc302ab.chunk.css} +0 -0
  130. /package/dist/css/{7757-lite-856c02f000.chunk.css → 4456-lite-856c02f000.chunk.css} +0 -0
  131. /package/dist/css/{9250-lite-37216d4207.chunk.css → 8723-lite-37216d4207.chunk.css} +0 -0
  132. /package/dist/scripts/{5829-689f5be5d1-lite.chunk.js.LICENSE.txt → 5829-903613bbf0-lite.chunk.js.LICENSE.txt} +0 -0
  133. /package/dist/scripts/{6629-910e316a83-lite.chunk.js.LICENSE.txt → 6629-4edaed39c8-lite.chunk.js.LICENSE.txt} +0 -0
  134. /package/dist/scripts/{6783-7efd15103a-lite.chunk.js.LICENSE.txt → 829-aff9937989-lite.chunk.js.LICENSE.txt} +0 -0
  135. /package/dist/scripts/{9250-ec244ab17a-lite.chunk.js.LICENSE.txt → 8723-708f2373d6-lite.chunk.js.LICENSE.txt} +0 -0
  136. /package/dist/scripts/{bundle-d2cf17c78d.min.js.LICENSE.txt → bundle-5a89651ec2.min.js.LICENSE.txt} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/lite",
3
- "version": "0.70.1-dev.5",
3
+ "version": "0.70.1-dev.6",
4
4
  "description": "ClickView Lite",
5
5
  "main": "dist/scripts/bundle.js",
6
6
  "types": "dist/projects/lite/src/index.d.ts",
@@ -1,8 +0,0 @@
1
- .gFhu0 svg{transform:rotate(90deg)}.sWUp9{overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none}.sWUp9::-webkit-scrollbar{display:none}.Vn2qM{position:fixed;height:.875rem;left:.125rem;right:.125rem;bottom:.125rem;border-radius:.5rem;z-index:5;background-color:rgba(0,0,0,.3)}
2
- .epapa,.uhH4p{opacity:.85}
3
- .p8Vgz{position:relative;height:2rem;width:2rem}.p8Vgz svg{height:2rem;width:2rem}.p8Vgz circle{position:absolute;fill:none;stroke-width:.2rem;transform:translate(50%, 50%) rotate(-90deg);stroke-linecap:round}.p8Vgz .asGGE{stroke:#b5b5b5}.p8Vgz .PXLNj{stroke:#5dc786}.p8Vgz .ZckRN{stroke:#ffcd52}.p8Vgz .slBRg{stroke:#ca352b}.N8KCI{height:5.8rem;width:5.8rem}.N8KCI svg{height:5.8rem;width:5.8rem}.N8KCI circle{stroke-width:.36rem}.RPqZ2{height:1.5rem;width:1.5rem}.RPqZ2 svg{height:1.5rem;width:1.5rem}.DKrcq circle{stroke-dasharray:2.5 5}.DKrcq .asGGE{stroke:#0073dd}.DKrcq.N8KCI circle{stroke-dasharray:6 10.7;stroke-dashoffset:1.125}.tpmLR{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);font-size:1.25rem;font-weight:700}
4
- .rwDjh{height:1rem}.kW4ZM{min-width:2rem;height:2rem}
5
- .OsWjL:hover{text-decoration:underline}
6
- .M4zat{height:1.5rem}.r0Ztg{opacity:0}.uD9dz:hover .r0Ztg{opacity:1}
7
- .D4JFs{height:80%}.bjUWl{height:33%}.kdLpt{height:30%}.d3CKN:hover .KM76U{display:flex}.d3CKN:hover .peLH7{display:none}.KM76U{display:none}.mVu0E{height:1.5rem}.zO3MS{width:1.25rem;border:3px solid #fff;height:25%}.zO3MS.K1jW5{animation:.2s ease-in-out 0s YITJl forwards}.zO3MS.tCpLF{animation:.2s ease-in-out .066s YITJl forwards}.zO3MS.lC0cq{animation:.2s ease-in-out .132s YITJl forwards}@keyframes YITJl{0%{height:25%}100%{height:100%}}
8
- .Hdi6o{border-radius:.6rem}.Hdi6o .RvNxr{border-radius:0}.Hdi6o .RvNxr:first-child{border-top-left-radius:.6rem;border-bottom-left-radius:.6rem}.Hdi6o .RvNxr:last-child{border-top-right-radius:.6rem;border-bottom-right-radius:.6rem}.Hdi6o .RvNxr:not(:first-child){border-left:none}.Hdi6o .RvNxr:not(:last-child){border-right:none}.Hdi6o .RvNxr.GHSz9{min-width:7rem}.Hdi6o.VhJJa{border-radius:.375rem}.Hdi6o.VhJJa li:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.Hdi6o.VhJJa li:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.Hdi6o .WFyvo{padding-top:.53125rem;padding-bottom:.53125rem}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1565],{34079:(e,t,n)=>{n.d(t,{O:()=>s});var r=n(32735),a=n(23481),i=n(40782),l=n(36532),o=a.T.encloseNamespace("interactives.pendingIndicator");function c(e){var t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=" ".concat(e.className)),t}function s(e){var t=function(){return r.createElement("div",{className:c(e)},!!e.showLabel&&r.createElement("em",null,o("pending")),r.createElement(i.O,null))};return e.title?r.createElement(l.u,{title:e.title,spanHack:!0,spanHackClassName:e.tooltipClassName||"h-100 w-100 d-flex align-items-center"},r.createElement(t,null)):r.createElement(t,null)}},97364:(e,t,n)=>{n.d(t,{C:()=>i,P:()=>a});var r=n(94892);function a(e,t){switch(e){case"score_desc":return[{id:t,desc:!0}];case"score_asc":return[{id:t,desc:!1}];default:return[]}}function i(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=r.T.HIGH||"not_completed"===e&&!t.unanswered}},1704:(e,t,n)=>{n.d(t,{l:()=>s});var r=n(32735),a=n(23481),i=n(9111),l=n(13876);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var c=a.T.encloseNamespace("shared.confirmationPopup");function s(e){var t,n,a=(t=r.useState(!1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return o}}(t,n)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=a[0],u=a[1];return r.createElement(i.G,{title:e.title,closePopup:e.closePopup},r.createElement(r.Fragment,null,e.children,r.createElement(l.u,null,r.createElement(l.u.Cancel,{onClick:e.closePopup,variant:e.cancelButtonVariant,text:e.cancelButtonText||c("cancel")}),r.createElement(l.u.Submit,{onClick:function(){u(!0),e.onClickConfirm()},text:e.confirmButtonText||c("confirm"),variant:e.confirmButtonVariant,showSpinner:s,disabled:e.disabledConfirmButton}))))}s.defaultProps={confirmButtonVariant:"primary",cancelButtonVariant:"link"}},38502:(e,t,n)=>{n.d(t,{r:()=>m});var r=n(32735),a=n(49985),i=n(15611),l=n(18559),o=n(11607),c=n(83914),s=n(22771);function u(e){return r.createElement(r.Fragment,null,!!e.tab.svgName&&r.createElement("div",{className:e.tab.name?"pe-1":""},r.createElement(c.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&r.createElement("div",{className:"ps-2"},r.createElement(l.C,{type:l.g.Count,data:e.tab.count})))}function m(e){var t;return r.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},r.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(s.Z.pillTabSelector,"\n ").concat(e.borderRadius?s.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return r.createElement("li",{className:"\n p-0 ".concat(s.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?s.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?r.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(s.Z.tabLink,"\n ")},r.createElement(u,{tab:e})):r.createElement(o.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(s.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&a.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},r.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},6748:(e,t,n)=>{n.d(t,{i:()=>w});var r=n(32735),a=n(42648),i=n(35509),l=n(91967),o=n(15611),c=n(17808),s=n(1287),u=n(83914),m=n(90281),d={opacity:"0.8",cursor:"grabbing"},p=n(35223);function f(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){if(e){if("string"==typeof e)return v(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(e,t):void 0}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function b(e){var t,n,r,a;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(n=e.current)||void 0===n?void 0:n.scrollLeft)+1<(null===(r=e.current)||void 0===r?void 0:r.scrollWidth)-(null===(a=e.current)||void 0===a?void 0:a.clientWidth)}}const y={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var E=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n};function S(e){var t,n;return e.column.canSort?r.createElement("span",{className:"".concat(y.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==n?n:"")},r.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?p.vn.ArrowRight:p.vn.ArrowLeft,size:u.S.Small})):r.createElement(r.Fragment,null)}function I(e){var t,n,a,u,m,p,g,v,b={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(b.initialState={selectedRowIds:(g=e.initialSelectedRowIds,v={},g.forEach((function(e){return v[e]=!0})),v)}),e.getRowId&&(b.getRowId=e.getRowId);var y,E=i.useTable.apply(void 0,[b].concat((y=function(e){var t=[i.useSortBy,i.useRowSelect,"flex"===e.layout?i.useFlexLayout:i.useBlockLayout];return e.allowFiltering&&(t=[].concat(f(t),[i.useFilters])),e.allowGlobalFiltering&&(t=[].concat(f(t),[i.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return h(e)}(y)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(y)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(y)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),I=E.getTableProps,w=E.getTableBodyProps,N=E.headerGroups,k=E.rows,A=E.prepareRow,O=E.toggleAllRowsSelected,T=E.setGlobalFilter,C=E.setHiddenColumns,R=E.state.sortBy;function x(){return k.map((function(t){A(t);var n=function(t){var n,r,a,i,o,c=l.q.isFunction(null===(n=e.theme)||void 0===n?void 0:n.row)?e.theme.row(t):null!==(a=null===(r=e.theme)||void 0===r?void 0:r.row)&&void 0!==a?a:"";return t.isSelected&&(null===(i=e.theme)||void 0===i?void 0:i.selectedRow)&&(c+=" ".concat(null===(o=e.theme)||void 0===o?void 0:o.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),a=!!e.getRowAppLink&&e.getRowAppLink(t);function i(){e.onSelectRow&&(e.allowSelectMultipleRows||O(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,l){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,l);return a?r.createElement("div",{role:"row",key:t.id},r.createElement(o.F,Object.assign({},e,c,{className:n,appLink:a}),j(t))):r.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:n,onClick:i}),j(t))}var u=t.getRowProps();return e.enableSortableRows?r.createElement(s.W,{id:t.original.id,key:t.id,childProps:u,childComponent:r.forwardRef((function(e,t){return c(e,t)}))}):c(u)}))}function j(t){return t.cells.map((function(n){var a=function(t,n){var r,a,i="";return"function"==typeof(null===(r=e.theme)||void 0===r?void 0:r.cell)&&(i=e.theme.cell(t,n)),"string"==typeof(null===(a=e.theme)||void 0===a?void 0:a.cell)&&(i=e.theme.cell),e.onSelectCell&&(i+=" cursor-pointer"),i}(t,n);return r.createElement("div",Object.assign({key:n.column.id},n.getCellProps(),{className:a,onClick:function(){e.onSelectCell&&e.onSelectCell(n)}}),n.render("Cell"))}))}return r.useEffect((function(){e.onSort&&e.onSort(R)}),[R]),r.useEffect((function(){e.globalFilter&&T(e.globalFilter)}),[e.globalFilter]),r.useEffect((function(){e.hiddenColumns&&C(e.hiddenColumns)}),[e.hiddenColumns&&e.hiddenColumns.length]),r.createElement("div",Object.assign({},I(),{className:null!==(n=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==n?n:""}),r.createElement("div",{className:null!==(u=null===(a=e.theme)||void 0===a?void 0:a.header)&&void 0!==u?u:""},N.map((function(t){var n,a;return r.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(a=null===(n=e.theme)||void 0===n?void 0:n.headerRow)&&void 0!==a?a:""}),t.headers.map((function(t){var n,a;return r.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(a=null===(n=e.theme)||void 0===n?void 0:n.headerCell)&&void 0!==a?a:""}),t.render("Header",{renderSortIndicator:function(){return r.createElement(S,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&r.createElement(S,{column:t,theme:e.theme}))})))}))),r.createElement("div",Object.assign({},w(),{className:null!==(p=null===(m=e.theme)||void 0===m?void 0:m.body)&&void 0!==p?p:""}),e.enableSortableRows?r.createElement(c.Q,{ids:k.map((function(e){return e.original.id})),getDragOverlay:function(t){var n,a,i=k.findIndex((function(e){return e.original.id===t})),l=k[i];return r.createElement("div",Object.assign({},e,{className:(n=e.theme,a="g-0 ",n&&(a+=n.row),a),style:d}),j(l))},onSortEnd:e.onSortingRowsEnd},x()):x()))}function w(e){var t=e.enableSlider,n=e.scrollIncrement,i=e.scrollable,o=E(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,n=r.useRef(null),a=(e=r.useState(b(n)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return o}}(e,t)||g(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=a[0],o=a[1],c=l.q.throttle((function(){o(b(n))}),200),s=r.useCallback((function(e){var t;n.current&&(null===(t=n.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(o(b(n)),e.addEventListener("scroll",c)),n.current=e}),[]);return r.useEffect((function(){(null==n?void 0:n.current)&&o(b(n))}),[n]),{ref:s,scrollState:i,scroll:function(e){var t;null===(t=n.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),s=c.ref,u=c.scrollState,d=c.scroll;if(i)return r.createElement(a.$B,{renderTrackHorizontal:function(){return r.createElement("div",{className:y.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},r.createElement(I,Object.assign({},o)));if(!t)return r.createElement(I,Object.assign({},o));function p(e){d(n*("right"===e?1:-1))}return r.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},r.createElement("div",{className:"px-4"},r.createElement("div",{className:"position-relative"},r.createElement(m.W,{direction:m.f.Left,onClick:function(){return p("left")},hide:!u.canScrollLeft}),r.createElement("div",{className:"".concat(y.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},r.createElement(I,Object.assign({},o))),r.createElement(m.W,{direction:m.f.Right,onClick:function(){return p("right")},hide:!u.canScrollRight}))))}w.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},99746:(e,t,n)=>{n.d(t,{p:()=>f});var r=n(32735),a=n(57900),i=n(97395),l=n(2948),o=n(91693),c=n(83345),s=n(4594),u=n(35223),m=n(86702);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var p="lite.insightsAdminAlert";function f(e){var t,n,f=(t=(0,l.D)(m.y.INSIGHTS_ADMIN_ALERT,!0,{storage:a.Z1.LocalStorage}),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return o}}(t,n)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=f[0],v=f[1];return e.hasAnalytics&&g?r.createElement("div",{role:"alert",className:"d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4"},r.createElement("div",null,r.createElement(c.x,{namespace:p,phrase:"adminAlert"}),r.createElement("a",{className:"text-info",href:function(){if(!e.video)return e.analyticsUrl;var t="";return e.video.typeId===s.E.Interactive&&(t="/interactives/".concat(e.video.id,"/views")),e.video.typeId===s.E.Video&&(t="/videos/".concat(e.video.id,"/views")),e.video.typeId===s.E.Clip&&(t="/clips/".concat(e.video.id,"/views")),i._.safeUrlConcat(e.analyticsUrl,t)}(),target:"_blank"},r.createElement(c.x,{namespace:p,phrase:"analytics"})),"."),r.createElement(o.h,{svgName:u.vn.Close,className:"text-blue",onClick:function(){v(!1)}})):r.createElement(r.Fragment,null)}},53936:(e,t,n)=>{n.d(t,{j:()=>E});var r=n(32735),a=n(23481),i=n(57900),l=n(2948),o=n(76306),c=n(49935),s=n(38502),u=n(83345),m=n(83523),d=n(38143),p=n(4594),f=n(14070),g=n(97291),v=n(99746);function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var y="insights.header",h=a.T.encloseNamespace(y);function E(e){var t,n,a,E,S,I,w,N=(I=(0,l.D)(d.g.ANONYMISE_USERS,!1,{storage:i.Z1.LocalStorage}),w=2,function(e){if(Array.isArray(e))return e}(I)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return o}}(I,w)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(I,w)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),k=N[0],A=N[1];return r.createElement("div",null,r.createElement(v.p,{analyticsUrl:e.analyticsWebUrl,hasAnalytics:e.hasAnalytics,video:e.video}),r.createElement("section",{className:"mb-4"},r.createElement("div",{className:"mb-3"},r.createElement("div",{className:"d-flex justify-content-between align-items-center mb-3"},e.video?r.createElement(c.Oo,{breadcrumbs:[{name:"Reports",appLink:{application:g.O.MY_SHARES,action:f.e.MyShares.HOME}},{name:e.video.name,active:!0}]}):r.createElement(c.b2,null),r.createElement(o.m,{dropdownToggleClassName:"btn btn-outline-dark",actions:(S=[{label:"Edit time range",appLink:{application:g.O.INSIGHTS,action:f.e.Insights.INTERACTIVE_GENERATE_REPORT,args:[null===(t=e.video)||void 0===t?void 0:t.id]}},{label:"Edit audience",appLink:{application:g.O.INSIGHTS,action:f.e.Insights.INTERACTIVE_GENERATE_REPORT,args:[null===(n=e.video)||void 0===n?void 0:n.id]}}],(null===(a=e.video)||void 0===a?void 0:a.typeId)===p.E.Interactive&&S.push({label:h("generateReport"),appLink:{application:g.O.INSIGHTS,action:f.e.Insights.INTERACTIVE_GENERATE_REPORT,args:[null===(E=e.video)||void 0===E?void 0:E.id]}}),S)}))),r.createElement("div",{className:"d-flex align-items-center mb-4"},r.createElement(s.r,{tabs:e.tabs}),r.createElement("div",{className:"flex-grow-1"}),r.createElement("div",{className:"d-flex gap-3"},r.createElement("label",{htmlFor:"anonymiseNames",className:"mb-0"},r.createElement(u.x,{namespace:y,phrase:"anonymiseNames"})),r.createElement(m.Z,{id:"anonymiseNames",on:k,onClick:function(){return A(!k)}})))))}},68536:(e,t,n)=>{n.d(t,{x:()=>he});var r=n(32735),a=n(23481),i=n(92869),l=n(75896),o=n(69087),c=n(97958),s=n(83345),u="shared.interactionResponseList";function m(e){return r.createElement(r.Fragment,null,r.createElement(c.u,{className:"m-4"},r.createElement(c.u.Image,{src:function(){switch(e.filter){case"correct":return e.correctImageUrl;case"incorrect":return e.incorrectImageUrl;case"marking_required":return e.markingRequiredImageUrl;case"skipped":return e.skippedImageUrl}}(),className:"w-25 h-auto"}),r.createElement(c.u.Info,null,r.createElement(s.x,{namespace:u,phrase:function(){switch(e.filter){case"correct":return"correctEmptyState";case"incorrect":return"incorrectEmptyState";case"marking_required":return"markingRequiredEmptyState";case"skipped":return"skippedEmptyState"}}()}))))}function d(e){function t(t){return"rounded-pill bg-light ".concat(function(t){return t===e.filter}(t)?"bg-dark text-white":"")}return r.createElement("div",{className:"d-flex gap-2 m-3"},r.createElement("button",{className:t("marking_required"),onClick:function(){return e.toggleFilter("marking_required")}},r.createElement(s.x,{namespace:u,phrase:"markingRequired"})),r.createElement("button",{className:t("correct"),onClick:function(){return e.toggleFilter("correct")}},r.createElement(s.x,{namespace:u,phrase:"correct"})),r.createElement("button",{className:t("incorrect"),onClick:function(){return e.toggleFilter("incorrect")}},r.createElement(s.x,{namespace:u,phrase:"incorrect"})),r.createElement("button",{className:t("skipped"),onClick:function(){return e.toggleFilter("skipped")}},r.createElement(s.x,{namespace:u,phrase:"skipped"})))}var p=n(86572),f=a.T.encloseNamespace("interactives.interactionResponseListHeader");function g(e){var t,n=null===(t=e.interaction.data)||void 0===t?void 0:t.suggestedResponse;return r.createElement("div",{className:"rounded bg-white"},r.createElement("div",{className:"p-2 position-relative"},r.createElement("div",{className:"d-flex"},r.createElement(p.y,{interaction:e.interaction,iconClassName:"flex-shrink-0"})),!!n&&r.createElement("div",{className:"mt-2"},r.createElement("strong",null,f("suggestedResponse")),r.createElement("p",{className:"m-0"},n))))}var v=a.T.encloseNamespace("shared.submitMarkedAnswers");function b(e){return r.createElement("div",{className:"d-flex justify-content-end"},r.createElement("button",{className:"btn btn-outline-dark",onClick:e.submit,disabled:e.disabled},v("submitAnswers")))}var y=n(26136),h=n(39157),E=n(69186),S=n(36532),I=n(28972),w=n(83140),N=n(80845);const k={awaitingMarking:"PPNkp"};function A(e){return A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},A(e)}function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var T="shared.interactionResponseList",C=a.T.encloseNamespace(T);function R(e){var t,n,a,i,l=(a=r.useState(),i=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return o}}(a,i)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?O(e,t):void 0}}(a,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=l[0],p=l[1],f=(n=e.interaction,e.results.students.filter((function(e){return w.A.isInteractionCorrect(n,(0,N.j_)(e))===I.w.AwaitingMarking})).reduce((function(e,t){var n;return Object.assign(Object.assign({},e),function(e,t,n){return(t=function(e){var t=function(e){if("object"!=A(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=A(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==A(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},(null===(n=t.user)||void 0===n?void 0:n.id)||t.sessionId,!0))}),{})),v=Object.keys(e.markedAnswers).length;if(!(null===(t=e.results.students)||void 0===t?void 0:t.length))return r.createElement("div",{className:"d-flex flex-column h-100"},r.createElement(c.u,{className:"bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center"},r.createElement(c.u.Image,{src:e.emptyStateImageUrl,size:"small"}),r.createElement(c.u.Heading,null,C("emptyStateHeading")),r.createElement(c.u.Info,{className:"w-100"},C("emptyStateDescription"))));var R=e.results.students.filter((function(t){var n=(0,N.j_)(t),r=w.A.isInteractionCorrect(e.interaction,n),a={correct:I.w.Correct,incorrect:I.w.Incorrect,marking_required:I.w.AwaitingMarking,skipped:I.w.UnAnswered};return!u||u in a&&r===a[u]}));return r.createElement(r.Fragment,null,e.reportsStyling&&r.createElement(g,{interaction:e.interaction}),r.createElement("div",{className:e.reportsStyling?"d-flex justify-content-end":"d-flex align-items-center justify-content-between border-bottom px-3 py-2"},!e.reportsStyling&&r.createElement("p",{className:"fw-semibold mb-0"},r.createElement(s.x,{namespace:T,phrase:"studentAnswers"})),!!Object.keys(f).length&&r.createElement(S.u,{id:"submitAnswers",title:C("demoOnly"),spanHack:e.isDemo},r.createElement("div",{className:"".concat(e.isDemo?"pointer-events-none":""," ").concat(e.reportsStyling?"mt-2":"")},r.createElement(b,{submit:e.submitMarkedAnswers,disabled:!v})))),r.createElement(r.Fragment,null,!e.reportsStyling&&r.createElement(d,{filter:u,toggleFilter:function(e){p(u===e?null:e)}}),!e.reportsStyling&&!R.length&&u&&r.createElement(m,{filter:u,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl}),R&&r.createElement("ul",{className:"list-unstyled mb-0"},R.map((function(t,n){var a,i=(0,y.B2)((0,y.DV)(t,e.anonSessions),e.anonymiseUsers),l=f[(null===(a=t.user)||void 0===a?void 0:a.id)||t.sessionId],c=e.reportsStyling?"bg-white p-2":"bg-white px-3 pt-3 pb-2";return l&&(c+=" ".concat(k.awaitingMarking," my-1")),r.createElement("li",{key:n,className:e.reportsStyling?"":"border-bottom"},e.reportsStyling?r.createElement(E.O,{interaction:e.interaction,studentResults:t,markedStatus:(0,h.HI)(e.interaction.id,t,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:i,className:c,showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):r.createElement(o.d,{interaction:e.interaction,studentResults:t,markedStatus:(0,h.HI)(e.interaction.id,t,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:i,className:c,showFeedback:!0}))}))),e.reportsStyling&&!!f.length&&r.createElement("div",{className:"mt-2"},r.createElement(b,{submit:e.submitMarkedAnswers,disabled:!v}))))}var x=n(34079);function j(e){var t;return r.createElement("div",null,r.createElement("p",{className:"mb-0"},(t=e.interaction.data.sentence)?t.split(/({\d+})/).map((function(t,n){var a=t.match(/{(\d+)}/);if(a){var i=a[1],l=e.interaction.actionableItems.find((function(e){return+e.order==+i}));if(l)return r.createElement("span",{className:"bg-white border border-gray-300 rounded p-1 lh-lg",key:n},l.name)}return t})):""))}var L=n(7730);const U={row:"fXno_",answerImage:"pDAuW",answerWidth:"YHK27"};function _(e){var t,n;return(null===(n=l.m.first(null===(t=e.interaction)||void 0===t?void 0:t.actionableItems).data)||void 0===n?void 0:n.imageUrl)?r.createElement("div",{className:U.answerWidth},r.createElement(L.n,{interaction:e.interaction,size:"sm",showFeedback:!1,showCorrectnessIcons:!0,isDisplayOnly:!0})):r.createElement("ul",{className:"".concat(U.answerWidth," list-unstyled row g-2")},e.interaction.actionableItems.map((function(t){return r.createElement("li",{key:t.id,className:"col-12"},r.createElement("div",{className:"".concat(t.isCorrect?"bg-light-green border-green":"bg-light-red border-red"," rounded border py-1 px-2 m-0")},r.createElement("span",{className:"fw-semibold"},e.indexToLetter(t.order),". "),r.createElement("span",null,t.name)))})))}var M="shared.questionTable";function H(e){var t,n=null===(t=e.interaction.data)||void 0===t?void 0:t.suggestedResponse;return n?r.createElement("div",{className:"".concat(U.answerWidth," bg-light-blue rounded p-2 mb-2")},r.createElement("div",{className:"d-flex justify-content-between"},r.createElement("p",{className:"fw-semibold mb-2"},r.createElement(s.x,{namespace:M,phrase:"suggestedResponse"}))),r.createElement("p",{className:"mb-0"},n)):r.createElement(r.Fragment,null)}function P(e){return r.createElement("ul",{className:"list-unstyled d-flex gap-2"},e.interaction.actionableItems.map((function(t){return r.createElement("li",{key:t.id,className:"".concat(t.isCorrect?"bg-light-green border-green":"bg-light-red border-red"," rounded border px-2 py-1 mb-2 w-50")},r.createElement("span",{className:"fw-semibold"},e.indexToLetter(t.order),". "),r.createElement("span",null,t.name))})))}var D=n(38129);function W(e){var t=function(){switch(e.interaction.typeId){case D.Z9.MultipleChoice:return r.createElement(_,{interaction:e.interaction,indexToLetter:$});case D.Z9.TrueOrFalse:return r.createElement(P,{interaction:e.interaction,indexToLetter:$});case D.Z9.ShortAnswer:return r.createElement(H,{interaction:e.interaction});case D.Z9.MissingWord:return r.createElement(j,{interaction:e.interaction});default:return null}}();return t?r.createElement("div",{className:"w-100 mt-3"},t):r.createElement(r.Fragment,null)}var F=n(40782);function V(e){return V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},V(e)}var q=a.T.encloseNamespace("shared.questionTable");function B(e,t,n){var r=e.cells.find((function(e){return e.column.id===n})).value,a=t.cells.find((function(e){return e.column.id===n})).value;return r.awaitingMarking?-1:a.awaitingMarking||r.percentCorrect>=a.percentCorrect?1:-1}function G(e){var t;return r.createElement("div",{className:"d-flex ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function Z(e){return r.createElement(G,{className:e.column.isSorted&&"fw-bold"},q(e.phraseKey))}function $(e){return String.fromCharCode(e+"A".charCodeAt(0))}var Y=n(8246),z=a.T.encloseNamespace("shared.questionTable");function Q(e,t){var n=e.actionableItems.map((function(t,n){return{id:t.id,label:e.typeId===D.Z9.MultipleChoice?$(n):t.name,isCorrect:t.isCorrect,count:0}}));return t.students.forEach((function(t){var r=l.m.last(t.results).attempts,a=l.m.findWhere(r,{id:e.id});a&&a.answers.forEach((function(e){var t=l.m.findWhere(n,{id:e.id});t&&t.count++}))})),n}function K(e,t){var n=e.actionableItems.map((function(e){return{id:e.id,label:e.name,isCorrect:e.isCorrect,count:0}}));return n.push({label:z("incorrect"),count:0,isCorrect:!1}),t.students.forEach((function(t){var r=l.m.last(t.results).attempts,a=l.m.findWhere(r,{id:e.id});a&&a.answers.forEach((function(e){var t=l.m.findWhere(n,{id:e.id});t&&e.status===Y.N.Correct?t.count++:l.m.findWhere(n,{label:z("incorrect")}).count++}))})),n}function J(e,t){var n=[{label:z("correct"),isCorrect:!0,count:0},{label:z("incorrect"),isCorrect:!1,count:0}];return t.students.forEach((function(t){var r=l.m.last(t.results).attempts,a=l.m.findWhere(r,{id:e.id});a&&a.answers.forEach((function(e){if(e.status===Y.N.Correct&&l.m.findWhere(n,{label:z("correct")}).count++,e.status===Y.N.Incorrect&&l.m.findWhere(n,{label:z("incorrect")}).count++,e.status===Y.N.PendingReview){var t=l.m.findWhere(n,{label:z("pending")});t||(n.push({label:z("pending"),count:0,isCorrect:!1}),t=l.m.findWhere(n,{label:z("pending")})),t.count++}}))})),n}var X=n(83914),ee=n(35223),te="shared.questionTable",ne=a.T.encloseNamespace(te);function re(e){var t=function(){if(e.interaction&&e.results){var t;switch(e.interaction.typeId){case D.Z9.ShortAnswer:case D.Z9.Illustration:t=J;break;case D.Z9.MissingWord:t=K;break;case D.Z9.MultipleChoice:case D.Z9.TrueOrFalse:t=Q}return t(e.interaction,e.results)}}(),n=null==t?void 0:t.reduce((function(e,t){return t.count>e?t.count:e}),0);function a(e){var t="border rounded me-2";return e.count?e.label===ne("pending")?"".concat(t," border-blue bg-light-blue"):e.isCorrect?"".concat(t," border-green bg-light-green"):"".concat(t," border-red bg-light-red"):"".concat(t," border bg-light px-1")}return r.createElement("div",{className:"border border rounded p-3 mb-3"},r.createElement("div",{className:"d-flex align-items-center gap-2 mb-3"},r.createElement("div",{className:"rounded-circle bg-light-teal text-teal"},r.createElement(X.x,{svgName:ee.vn.Lightbulb,size:X.S.Large})),r.createElement("h2",{className:"h6 mb-0"},r.createElement("span",null,r.createElement(s.x,{namespace:te,phrase:"questionSummary"})))),r.createElement("div",{className:"d-flex gap-2"},r.createElement("div",{className:"max-w-25"},null==t?void 0:t.map((function(e){return r.createElement("p",{key:e.label,className:"text-truncate mb-2"},e.label)}))),r.createElement("div",{className:"flex-grow-1"},null==t?void 0:t.map((function(t,i){return r.createElement("div",{key:"".concat(e.interaction.id).concat(i),className:"d-flex mb-2"},r.createElement("div",{className:a(t),style:{width:"".concat(t.count/n*100,"%"),height:20}}),r.createElement("span",null,t.count))})))))}var ae=a.T.encloseNamespace("shared.selectedInteractionEmptyState");function ie(e){return r.createElement(c.u,{className:"rounded h-100 bg-white justify-content-center py-4"},r.createElement(c.u.Image,{src:e.emptyStateUrl,size:"small"}),r.createElement(c.u.Info,{className:"w-100"},ae("emptyStateText")))}var le=n(97364),oe=n(6748),ce=n(57266);function se(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ue(e){var t,n,a,o,c=(a=r.useState((0,le.P)(e.sortBy,"correctlyAnswered")),o=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return o}}(a,o)||function(e,t){if(e){if("string"==typeof e)return se(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?se(e,t):void 0}}(a,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=c[0],u=c[1],m=function(e,t,n,a){return r.useMemo((function(){var n=(0,N.Q)(e),r=n.reduce((function(e,t,n){return Object.assign(Object.assign({},e),function(e,t,n){return(t=function(e){var t=function(e){if("object"!=V(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=V(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==V(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t.id,n))}),{}),i=n.map((function(e){return Object.assign(Object.assign({},e),{questionNumber:r[e.id],resultsSummary:(0,h.nq)(e,t)})}));if("correctlyAnswered"===(null==a?void 0:a.id)){var o=l.m.sortBy(i,(function(e){return e.resultsSummary.awaitingMarking?-1:e.resultsSummary.percentCorrect}));return a.desc?o.reverse():o}return i}),[n,a])}(e.interactive,e.results,e.refreshTable,l.m.first(s)),d=e.selectedInteractionId&&(0,h.Zs)(e.interactive,e.selectedInteractionId);return r.createElement("div",{className:"row"},r.createElement("div",{className:"col-6 flex-grow-1"},r.createElement(oe.i,{key:e.selectedInteractionId,columns:(n=e.showAnswersInTable,[{Header:function(e){var t=e.column;return r.createElement(Z,{column:t,phraseKey:"#"})},accessor:"questionNumber",id:"index",Cell:function(e){var t=e.row.original.questionNumber;return r.createElement(G,null,t+1,".")},width:15,disableSortBy:!0},{Header:function(e){var t=e.column;return r.createElement(Z,{column:t,phraseKey:"question"})},accessor:"data",Cell:function(e){var t=e.row.original,a=e.initialState.selectedRowIds,i=null==a?void 0:a[null==t?void 0:t.id];return r.createElement(G,{className:"flex-column"},r.createElement("div",{className:"".concat(i?"":"clamp-1"," pe-2")},r.createElement(p.y,{interaction:t,containerClassName:"d-flex"})),n&&i&&r.createElement(W,{interaction:t}))},disableSortBy:!0},{Header:function(e){var t=e.column;return r.createElement(Z,{column:t,phraseKey:"score"})},accessor:"resultsSummary",id:"correctlyAnswered",Cell:function(e){var t=e.value,n=t.percentCorrect;return t.awaitingMarking?r.createElement(x.O,{title:q("markingRequired"),className:"flex-grow-1",tooltipClassName:"d-block",showLabel:!0}):r.createElement(F.O,{percentage:n,layout:F.I.LabelBefore})},width:60,sortDescFirst:!0,sortType:B}]),data:m,theme:e.theme,onSelectRow:function(e){var t=e.original;i.t.preventScrollTop(),ce.e.updateParams({interactionId:t.id},{merge:!0})},initialSelectedRowIds:d?[d.id]:null,getRowId:function(e){return e.id},enableSort:!0,manualSort:!0,onSort:u,initialSortBy:s})),r.createElement("div",{className:"col-6 d-flex flex-column"},!e.reportsStyling&&e.selectedInteractionId&&!!(null===(t=e.results.students)||void 0===t?void 0:t.length)&&r.createElement(re,{interaction:d,results:e.results}),r.createElement("div",{className:"rounded flex-grow-1 ".concat(e.reportsStyling?"":"border")},!!d&&r.createElement(R,{interaction:d,results:e.results,markedAnswers:e.markedAnswers,addMarkedAnswers:e.addMarkedAnswers,submitMarkedAnswers:e.submitMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,emptyStateImageUrl:e.emptyStateImageUrl,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl,reportsStyling:e.reportsStyling,isDemo:e.isDemo,anonSessions:e.anonSessions}),!d&&r.createElement(ie,{emptyStateUrl:e.selectQuestionImageUrl}))))}var me=n(9193),de=n(1704),pe=n(99742);const fe={partialInsights:"mhxg4"};function ge(){return r.createElement("div",null,r.createElement("div",{className:"row g-3 mb-5"},r.createElement("div",{className:"col-6"},r.createElement("div",{className:"".concat(fe.partialInsights," rounded partial-loading-background")})),r.createElement("div",{className:"col-6"},r.createElement("div",{className:"".concat(fe.partialInsights," rounded partial-loading-background")}))))}function ve(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var be=a.T.encloseNamespace("shared.interactiveInsightsQuestions"),ye={table:"bg-white rounded border h-100 pb-2",header:"border-bottom px-3 py-2 mb-2",headerCell:"d-flex align-items-center",cell:"",row:"px-3 py-2 bg-light-blue-hover",selectedRow:"bg-gray-100",sortIndicator:"ms-2"};function he(e){var t,n,a,i,l,o=(i=r.useState(!1),l=2,function(e){if(Array.isArray(e))return e}(i)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return o}}(i,l)||function(e,t){if(e){if("string"==typeof e)return ve(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ve(e,t):void 0}}(i,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=o[0],s=o[1],u=(0,me.D)(null===(t=e.interactive)||void 0===t?void 0:t.id,null===(n=e.interactiveMetadata)||void 0===n?void 0:n.id,(function(){return s(!1)})),m=u.markedAnswers,d=u.addMarkedAnswers,p=u.submitMarkedAnswers;return r.createElement(r.Fragment,null,!e.hasDataLoaded&&r.createElement(ge,null),e.hasDataLoaded&&r.createElement(ue,{interactive:e.interactive,results:e.results,markedAnswers:m,addMarkedAnswers:d,submitMarkedAnswers:function(){return s(!0)},imageCdnUrl:e.config.imageCdnUrl,selectedInteractionId:e.interactionId,refreshTable:e.isFetching,emptyStateImageUrl:pe.W.Insights.NO_RESPONSES,selectQuestionImageUrl:pe.W.Insights.NO_DATA,anonymiseUsers:e.anonymiseUsers,sortBy:e.sortBy,showAnswersInTable:!0,theme:ye,correctImageUrl:pe.W.Insights.JIGSAW,incorrectImageUrl:pe.W.Insights.RED_JIGSAW,skippedImageUrl:pe.W.Insights.SKIPPED,markingRequiredImageUrl:pe.W.Insights.CLIPBOARD,isDemo:e.isDemo,anonSessions:e.anonSessions}),c&&r.createElement(de.l,{title:be("markPopupTitle",{smartCount:null!==(a=Object.keys(m).length)&&void 0!==a?a:0}),closePopup:function(){return s(!1)},confirmButtonText:be("submit"),confirmButtonVariant:"dark",onClickConfirm:p},r.createElement("p",null,be("markPopupBody"))))}},10447:(e,t,n)=>{n.d(t,{$6:()=>o,$o:()=>c,W_:()=>d,aq:()=>u,kj:()=>s,lo:()=>m});var r=n(23481),a=n(14070),i=n(97291),l=r.T.encloseNamespace("shared.insightsUtils");function o(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[{name:l("insights"),active:"insights"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.VIDEO_OVERVIEW,args:[e],params:n}},{name:l("heatmap"),active:"heatmap"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.VIDEO_HEATMAP,args:[e],params:n}}];return r?[{name:"Report",active:"shareOptions"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.VIDEO_SHARE_OPTIONS,args:[e],params:n}}].concat(o):o}function c(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[{name:l("insights"),active:"insights"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.CLIP_OVERVIEW,args:[e],params:n}},{name:l("heatmap"),active:"heatmap"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.CLIP_HEATMAP,args:[e],params:n}}];return r?[{name:"Report",active:"shareOptions"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.CLIP_SHARE_OPTIONS,args:[e],params:n}}].concat(o):o}function s(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[{name:l("insights"),active:"insights"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.INTERACTIVE_OVERVIEW,args:[e],params:n}},{name:l("results"),active:"results"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.INTERACTIVE_STUDENTS,args:[e],params:n}},{name:l("questions"),active:"questions"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.INTERACTIVE_QUESTIONS,args:[e],params:n}},{name:l("heatmap"),active:"heatmap"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.INTERACTIVE_HEATMAP,args:[e],params:n}}];return r?[{name:"Report",active:"shareOptions"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.INTERACTIVE_SHARE_OPTIONS,args:[e],params:n}}].concat(o):o}function u(e,t,n){return[{name:l("insights"),active:"insights"===t,appLink:{application:i.O.MY_SHARES,action:a.e.MyShares.INTERACTIVE_OVERVIEW_DEMO,args:[e],params:n}},{name:l("results"),active:"results"===t,appLink:{application:i.O.MY_SHARES,action:a.e.MyShares.INTERACTIVE_STUDENTS_DEMO,args:[e],params:n}},{name:l("questions"),active:"questions"===t,appLink:{application:i.O.MY_SHARES,action:a.e.MyShares.INTERACTIVE_QUESTIONS_DEMO,args:[e],params:n}},{name:l("heatmap"),active:"heatmap"===t,appLink:{application:i.O.MY_SHARES,action:a.e.MyShares.INTERACTIVE_HEATMAP_DEMO,args:[e],params:n}}]}function m(e,t,n){return[{name:"Report",active:"shareOptions"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.SERIES_SHARE_OPTIONS,args:[e],params:n}},{name:"Videos",active:"videos"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.SERIES_VIDEOS,args:[e],params:n}}]}function d(e,t,n){return[{name:"Report",active:"shareOptions"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.PLAYLIST_SHARE_OPTIONS,args:[e],params:n}},{name:"Videos",active:"videos"===t,appLink:{application:i.O.INSIGHTS,action:a.e.Insights.PLAYLIST_VIDEOS,args:[e],params:n}}]}},22771:(e,t,n)=>{n.d(t,{Z:()=>r});const r={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
2
- //# sourceMappingURL=1565-ba78a2a25c-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1565-ba78a2a25c-lite.chunk.js","mappings":"oLAQMA,EAAY,qBADA,iCAGlB,SAASC,EAAaC,GACpB,IAAIC,EAAY,kCAOhB,OALAA,GAAaD,EAAME,UAAY,2BAA6B,0BAExDF,EAAMC,YACRA,GAAa,IAAJ,OAAQD,EAAMC,YAElBA,CACT,CASM,SAAUE,EAAiBH,GAC/B,IAAMI,EAAY,WAAH,OACb,uBAAKH,UAAWF,EAAaC,MACxBA,EAAME,WACP,0BAAKJ,EAAU,YAEjB,gBAAC,IAAmB,MAChB,EAGR,OAAKE,EAAMK,MAIT,gBAAC,IAAO,CAACA,MAAOL,EAAMK,MAAOC,UAAQ,EAACC,kBAAmBP,EAAMQ,kBAAoB,yCACjF,gBAACJ,EAAS,OAJL,gBAACA,EAAS,KAOrB,C,0DCvCM,SAAUK,EAAgBC,EAAwBC,GACtD,OAAQD,GACN,IAAK,aAAc,MAAO,CAAC,CAAEC,GAAAA,EAAIC,MAAM,IACvC,IAAK,YAAa,MAAO,CAAC,CAAED,GAAAA,EAAIC,MAAM,IACtC,QAAS,MAAO,GAEpB,CAIM,SAAUC,EAAoBC,EAA0BC,GAC5D,MAAe,qBAAXD,IAAkCC,EAAQC,iBAG/B,iBAAXF,GAA6BC,EAAQE,gBAAkB,UAG5C,kBAAXH,IAA+BC,EAAQG,UAI7C,C,uLCnBA,IACMpB,EAAY,qBADA,4BAoBZ,SAAUqB,EAAkBnB,GAChC,I,IAAyE,G,EAArB,YAAe,G,EAAM,E,o4BAAjEoB,EAAiB,KAAEC,EAAoB,KAE/C,OACE,gBAAC,IAAK,CAAChB,MAAOL,EAAMK,MAAOiB,WAAYtB,EAAMsB,YAC3C,gCACGtB,EAAMuB,SACP,gBAAC,IAAY,KACX,gBAAC,WAAmB,CAClBC,QAASxB,EAAMsB,WACfG,QAASzB,EAAM0B,oBACfC,KAAM3B,EAAM4B,kBAAoB9B,EAAU,YAE5C,gBAAC,WAAmB,CAClB0B,QAAS,WAAQH,GAAqB,GAAOrB,EAAM6B,gBAAkB,EACrEF,KAAM3B,EAAM8B,mBAAqBhC,EAAU,WAC3C2B,QAASzB,EAAM+B,qBACfC,YAAaZ,EACba,SAAUjC,EAAMkC,0BAM5B,CA/BAf,EAAkBgB,aAAe,CAC/BJ,qBAAsB,UACtBL,oBAAqB,O,oHCJvB,SAASU,EAAYpC,GACnB,OACE,kCACKA,EAAMqC,IAAIC,SACX,uBAAKrC,UAAWD,EAAMqC,IAAIE,KAAO,OAAS,IACxC,gBAAC,IAAY,CAACD,QAAStC,EAAMqC,IAAIC,WAIpCtC,EAAMqC,IAAIE,KAEmB,iBAArBvC,EAAMqC,IAAIG,OACjB,uBAAKvC,UAAU,QACb,gBAAC,IAAK,CAACwC,KAAM,UAAiBC,KAAM1C,EAAMqC,IAAIG,SAKxD,CA8BM,SAAUG,EAAgB3C,G,MAW9B,OACE,uBAAKC,UAA0B,QAAf,EAAAD,EAAMC,iBAAS,QAAI,GAAI2C,IAAK5C,EAAM6C,cAChD,sBAAI5C,UAAS,qDACwB,oBAAsB,qBACvDD,EAAM8C,aAAe,gBAAqB,GAAE,qBAC5C9C,EAAM+C,cAAa,aAEpB/C,EAAMgD,KAAKC,KAAI,SAACZ,EAAKa,GACpB,OACE,sBACEjD,UAAS,gCACD,QAAU,YAAIoC,EAAIc,OAAS,eAAiB,uBAAsB,6BACtEd,EAAIE,KAAO,aAAkB,GAAE,YAAIF,EAAIpC,UAAS,oBAEpDmD,IAAKF,GAEJb,EAAIgB,QACH,gBAAC,IAAO,CACNA,QAAShB,EAAIgB,QACbC,cAAejB,EAAIiB,cACnBC,iBAAkBlB,EAAIkB,iBACtBtD,UAAS,sKAE4C,YAAc,yBAGnE,gBAACmC,EAAW,CAACC,IAAKA,KAGpB,gBAAC,IAAS,CACRpC,UAAS,sKAE4C,YAAc,wBAEnEuB,QAAS,WAAF,OA5CvB,SAAqBa,IACfA,EAAIc,QAAWd,EAAImB,WAGvBnB,EAAImB,WAEAnB,EAAIiB,eAAiBjB,EAAIkB,kBAC3B,kBAA8BlB,EAAIiB,cAAejB,EAAIkB,kBACzD,CAoC+BE,CAAYpB,EAAI,GAE/B,gBAACD,EAAW,CAACC,IAAKA,KAK5B,KAIR,CA5DAM,EAAgBR,aAAe,CAC7BW,aAAc,K,wICjEHY,EAAoB,CAAEC,QAAS,MAAOC,OAAQ,Y,4uBC+C3D,SAASC,EAAqBjB,G,YAI5B,MAAO,CAAEkB,eAHwB,QAAX,EAAAlB,EAAImB,eAAO,eAAEC,YAAa,EAGxBC,gBAFW,QAAX,EAAArB,EAAImB,eAAO,eAAEC,YAAa,GAAgB,QAAX,EAAApB,EAAImB,eAAO,eAAEG,cAAyB,QAAX,EAAAtB,EAAImB,eAAO,eAAEI,aAGjG,CCnDA,SAAgB,cAAgB,QAAQ,gBAAkB,QAAQ,eAAiB,S,sbCuDnF,SAASC,EAAoCpE,G,QAC3C,OAAKA,EAAMqE,OAAOC,QAIhB,wBACErE,UAAS,UACJ,gBAAoB,mBACtBD,EAAMqE,OAAOE,SAA8B,GAAnB,iBAAqB,mBACpB,QAA1B,EAAW,QAAX,EAAAvE,EAAMwE,aAAK,eAAEC,qBAAa,QAAI,KAGhC,gBAACC,EAAA,EAAY,CACXpC,QAAUtC,EAAMqE,OAAOM,eAAiB3E,EAAMqE,OAAOE,SACjD,gBACA,eAEJK,KAAMF,EAAAG,EAAA,SAfH,gCAmBX,CAuEA,SAASC,EAAgC9E,G,gBFlHP+E,EAC1BC,EEkHAC,EAAgC,CACpCC,QAASlF,EAAMkF,QACfxC,KAAM1C,EAAM0C,KACZyC,eAAgBnF,EAAMoF,WACtBC,aAAcrF,EAAMsF,WACpBC,uBAAwBvF,EAAMuF,uBAC9BC,gBAAiBxF,EAAMwF,gBACvBC,aAAc,CACZ/E,OAAQV,EAAM0F,eAAiB,KAI/B1F,EAAM2F,wBACRV,EAAaQ,aAAe,CAAEG,gBFhIAb,EEgIkC/E,EAAM2F,sBF/HlEX,EAAkC,CAAC,EAEzCD,EAAIc,SAAQ,SAAAlF,GAAE,OAAIqE,EAAOrE,IAAM,CAAI,IAE5BqE,KE6HHhF,EAAM8F,WACRb,EAAaa,SAAW9F,EAAM8F,UAEhC,I,EAAA,EAUI,EAAAC,SAAA,WAAQ,GAAId,GAAY,Q,EFrKxB,SAA2CjF,GAC/C,IAAIgG,EAA2B,CAC7B,EAAAC,UACA,EAAAC,aACiB,SAAjBlG,EAAMmG,OAAoB,EAAAC,cAAgB,EAAAC,gBAe5C,OAZIrG,EAAMsG,iBACRN,EAAU,GAAH,SACFA,GAAO,CACV,EAAAO,cAGAvG,EAAMwG,uBACRR,EAAU,GAAH,SACFA,GAAO,CACV,EAAAS,mBAGGT,CACT,CEiJmCU,CAAU,iBAAS1G,I,smBATlD2G,EAAa,EAAbA,cACAC,EAAiB,EAAjBA,kBACAC,EAAY,EAAZA,aACAC,EAAI,EAAJA,KACAC,EAAU,EAAVA,WACAC,EAAqB,EAArBA,sBACAC,EAAe,EAAfA,gBACAC,EAAgB,EAAhBA,iBACSxG,EAAM,EAAfyG,MAASzG,OAoBX,SAAS0G,IACP,OAAON,EAAK7D,KAAI,SAAAoE,GACdN,EAAWM,GAEX,IAAMpH,EArBV,SAA2BoH,G,cACrBpH,EAAYqH,EAAA,aAAqC,QAAX,EAAAtH,EAAMwE,aAAK,eAAE6C,KACnDrH,EAAMwE,MAAM6C,IAAIA,GACA,QAAhB,EAAW,QAAX,EAAArH,EAAMwE,aAAK,eAAE6C,WAAG,QAAI,GAWxB,OATIA,EAAIE,aAAyB,QAAX,EAAAvH,EAAMwE,aAAK,eAAEgD,eACjCvH,GAAa,IAAJ,OAAmB,QAAX,EAAAD,EAAMwE,aAAK,eAAEgD,cAE5BxH,EAAMyH,cACRxH,GAAa,mBAEXD,EAAM0H,qBACRzH,GAAa,gBAERA,CACT,CAMsB0H,CAAkBN,GAC9BO,IAAe5H,EAAM6H,eAAiB7H,EAAM6H,cAAcR,GAEhE,SAASS,IACF9H,EAAMyH,cAGNzH,EAAM+H,yBACTf,GAAsB,GAExBhH,EAAMyH,YAAYJ,GAClBA,EAAIW,mBAAkB,GACxB,CAeA,SAASC,EAAUjI,EAAkE4C,GACnF,IAAMsF,EAdR,SAA0BlI,EAAkE4C,GAC1F,MAAI,mBAAoB5C,GAAS,kBAAmBA,EAC3C,OAAP,sCACKA,EAAMmI,gBACNnI,EAAMoI,eAAa,CACtB,uBAAwB,eACxBxF,IAAAA,IAIG,CAAC,CACV,CAGwByF,CAAiBrI,EAAO4C,GAE9C,OAAIgF,EAEA,uBACEU,KAAK,MACLlF,IAAKiE,EAAI1G,IAET,gBAAC4H,EAAA,EAAO,iBACFvI,EACAkI,EAAa,CACjBjI,UAAWA,EACXoD,QAASuE,IAERY,EAAYnB,KAOnB,uCACMrH,EACAkI,EAAa,CACjB9E,IAAKiE,EAAI1G,GACT2H,KAAK,MACLrI,UAAWA,EACXuB,QAASsG,IAERU,EAAYnB,GAGnB,CAEA,IAAMoB,EAAWpB,EAAIqB,cAErB,OAAI1I,EAAM0H,mBAEN,gBAACiB,EAAA,EAAmB,CAClBhI,GAAI0G,EAAIuB,SAASjI,GACjByC,IAAKiE,EAAI1G,GACTkI,WAAYJ,EACZK,eAAgB,cACd,SAAC9I,EAAyB4C,GAAoC,OAAMqF,EAAUjI,EAAO4C,EAAI,MAM1FqF,EAAUQ,EACnB,GACF,CAyCA,SAASD,EAAYnB,GACnB,OAAOA,EAAI0B,MAAM9F,KAAI,SAAA+F,GACnB,IAAMC,EAjBV,SAA0B5B,EAAa2B,G,QACjCC,EAAgB,GAWpB,MATiC,mBAAX,QAAX,EAAAjJ,EAAMwE,aAAK,eAAEwE,QACtBC,EAAgBjJ,EAAMwE,MAAMwE,KAAK3B,EAAK2B,IAEP,iBAAX,QAAX,EAAAhJ,EAAMwE,aAAK,eAAEwE,QACtBC,EAAgBjJ,EAAMwE,MAAMwE,MAE1BhJ,EAAMkJ,eACRD,GAAiB,mBAEZA,CACT,CAI0BE,CAAiB9B,EAAK2B,GAM5C,OACE,qCAAK5F,IAAK4F,EAAK3E,OAAO1D,IAAQqI,EAAKI,eAAc,CAAEnJ,UAAWgJ,EAAezH,QAL/E,WACExB,EAAMkJ,cAAgBlJ,EAAMkJ,aAAaF,EAC3C,IAIKA,EAAKK,OAAO,QAGnB,GACF,CAuBA,OArBA,aAAgB,WACTrJ,EAAMsJ,QAGXtJ,EAAMsJ,OAAO5I,EACf,GAAG,CAACA,IAEJ,aAAgB,WACTV,EAAMuJ,cAGXtC,EAAgBjH,EAAMuJ,aACxB,GAAG,CAACvJ,EAAMuJ,eAEV,aAAgB,WACTvJ,EAAMwJ,eAGXtC,EAAiBlH,EAAMwJ,cACzB,GAAG,CAACxJ,EAAMwJ,eAAiBxJ,EAAMwJ,cAAcC,SAG7C,uCAAS9C,IAAe,CAAE1G,UAA6B,QAAlB,EAAW,QAAX,EAAAD,EAAMwE,aAAK,eAAEkF,aAAK,QAAI,KACzD,uBAAKzJ,UAA8B,QAAnB,EAAW,QAAX,EAAAD,EAAMwE,aAAK,eAAEmF,cAAM,QAAI,IACpC9C,EAAa5D,KAAI,SAAA2G,G,QAAe,OAC/B,uCAASA,EAAYC,sBAAqB,CAAE5J,UAAiC,QAAtB,EAAW,QAAX,EAAAD,EAAMwE,aAAK,eAAEsF,iBAAS,QAAI,KAC9EF,EAAYG,QAAQ9G,KAAI,SAAAoB,G,QAAU,OACjC,uCAASA,EAAO2F,eAAe3F,EAAO4F,wBAAuB,CAAEhK,UAAkC,QAAvB,EAAW,QAAX,EAAAD,EAAMwE,aAAK,eAAE0F,kBAAU,QAAI,KAClG7F,EAAOgF,OAAO,SAAU,CAAEc,oBAAqB,WAAF,OAAQ,gBAAC/F,EAAa,CAACC,OAAQA,EAAQG,MAAOxE,EAAMwE,OAAS,KACxGH,EAAqB+F,mBACtB,gBAAChG,EAAa,CAACC,OAAQA,EAAQG,MAAOxE,EAAMwE,Q,SAOxD,uCAASoC,IAAmB,CAAE3G,UAA4B,QAAjB,EAAW,QAAX,EAAAD,EAAMwE,aAAK,eAAE6F,YAAI,QAAI,KAC1DrK,EAAM0H,mBACN,gBAAC4C,EAAA,EAAwB,CACvBvF,IAAK+B,EAAK7D,KAAI,SAAAoE,GAAG,OAAIA,EAAIuB,SAASjI,EAAE,IACpC4J,eAvFV,SAAwB5J,GACtB,IAV+B6D,EAC3BvE,EASEuK,EAAW1D,EAAK2D,WAAU,SAAAC,GAAI,OAAIA,EAAK9B,SAASjI,KAAOA,CAAE,IACzD0G,EAAMP,EAAK0D,GAEjB,OACE,uCACMxK,EAAK,CACTC,WAhB2BuE,EAgBQxE,EAAMwE,MAfzCvE,EAAY,OAEZuE,IACFvE,GAAauE,EAAM6C,KAEdpH,GAWH0K,MAAOjH,IAEN8E,EAAYnB,GAGnB,EA2EUuD,UAAW5K,EAAM6K,kBAEhBzD,KAGHA,KAKV,CAgBM,SAAU0D,EAA4B9K,GAC1C,IAAQ+K,EAA6D/K,EAA7D+K,aAAcC,EAA+ChL,EAA/CgL,gBAAiBC,EAA8BjL,EAA9BiL,WAAeC,EAAU,EAAKlL,EAA/D,iDAEN,EF3VI,WACJ,I,IAAMmL,EAAQ,SAA6B,MAC0D,G,EAA7D,WAAiCtH,EAAqBsH,I,EAAO,E,unBAA7FC,EAAW,KAAEC,EAAc,KAU7BC,EAAoBhE,EAAA,YAR1B,WACE+D,EAAexH,EAAqBsH,GACtC,GAM4D,KAEtDvI,EAAM,eAAkB,SAAC2I,G,MACzBJ,EAAMpH,UACK,QAAb,EAAAoH,EAAMpH,eAAO,SAAEyH,oBAAoB,SAAUF,IAG3CC,IACFF,EAAexH,EAAqBsH,IACpCI,EAAGE,iBAAiB,SAAUH,IAGhCH,EAAMpH,QAAUwH,CAClB,GAAG,IAQH,OANA,aAAgB,YACVJ,aAAK,EAALA,EAAOpH,UACTsH,EAAexH,EAAqBsH,GAExC,GAAG,CAACA,IAEG,CAAEvI,IAAAA,EAAKwI,YAAAA,EAAaM,OAzB3B,SAAgBC,G,MACD,QAAb,EAAAR,EAAMpH,eAAO,SAAE4H,SAAS,CAAEC,KAAMD,EAAUE,IAAK,EAAGC,SAAU,UAC9D,EAwBF,CEyTuCC,GAA7BnJ,EAAG,EAAHA,IAAKwI,EAAW,EAAXA,YAAaM,EAAM,EAANA,OAE1B,GAAIT,EACF,OACE,gBAAC,KAAU,CACTe,sBAAuB,WAAF,OAAQ,uBAAK/L,UAAW,kBAAyB,EACtEgM,cAAe,IACfC,YAAU,GAEV,gBAACpH,EAAS,iBAAKoG,KAKrB,IAAKH,EACH,OAAO,gBAACjG,EAAS,iBAAKoG,IAExB,SAASiB,EAAcC,GACrBV,EAAOV,GAAiC,UAAdoB,EAAwB,GAAK,GACzD,CAEA,OACE,uBAAKnM,UAAU,6CACb,uBAAKA,UAAU,QACb,uBAAKA,UAAU,qBACb,gBAACoM,EAAAC,EAAY,CACXF,UAAWC,EAAA,OACX7K,QAAS,WAAF,OAAQ2K,EAAc,OAAO,EACpCI,MAAOnB,EAAYtH,gBAErB,uBAAK7D,UAAS,UAAK,kBAAsB,YAAID,EAAMwM,0BAA4B5J,IAAKA,GAClF,gBAACkC,EAAS,iBAAKoG,KAEjB,gBAACmB,EAAAC,EAAY,CACXF,UAAWC,EAAA,QACX7K,QAAS,WAAF,OAAQ2K,EAAc,QAAQ,EACrCI,MAAOnB,EAAYnH,mBAM/B,CAnDA6G,EAAM3I,aAAe,CACnB6I,gBAAiB,IACjBC,YAAY,EACZ9E,OAAQ,O,8OCnYV,IAAMsG,EAAY,0BASZ,SAAUC,EAAmB1M,GACjC,I,IAIC,G,GAJyB,OACxB,0BACA,EACA,CAAE2M,QAAS,oB,EACZ,E,o4BAJOC,EAAI,KAAEC,EAAO,KA2BrB,OAAK7M,EAAM8M,cAAiBF,EAI1B,uBAAKtE,KAAK,QAAQrI,UAAU,oFAC1B,2BACE,gBAAC,IAAI,CAACwM,UAAWA,EAAWM,OAAO,eACnC,qBAAG9M,UAAU,YAAY+M,KAxB/B,WACE,IAAKhN,EAAMiN,MAAO,OAAOjN,EAAMkN,aAE/B,IAAIC,EAAa,GAWjB,OATInN,EAAMiN,MAAMG,SAAW,kBACzBD,EAAa,iBAAH,OAAoBnN,EAAMiN,MAAMtM,GAAE,WAE1CX,EAAMiN,MAAMG,SAAW,YACzBD,EAAa,WAAH,OAAcnN,EAAMiN,MAAMtM,GAAE,WAEpCX,EAAMiN,MAAMG,SAAW,WACzBD,EAAa,UAAH,OAAanN,EAAMiN,MAAMtM,GAAE,WAEhC,kBAAwBX,EAAMkN,aAAcC,EACrD,CASqCE,GAAmBC,OAAO,UACvD,gBAAC,IAAI,CAACb,UAAWA,EAAWM,OAAO,eACjC,KAEN,gBAAC,IAAU,CAACzK,QAAS,WAAoBrC,UAAU,YAAYuB,QAhCnE,WACEqL,GAAQ,EACV,KAoBS,gCAaX,C,qSC5CA,IAAMJ,EAAY,kBACZ3M,EAAY,qBAAiC2M,GAc7C,SAAUc,EAAevN,GAC7B,I,QAuBQwN,E,IAnBP,G,GAJ6C,OAC5C,qBACA,EACA,CAAEb,QAAS,oB,EACZ,E,o4BAJOc,EAAc,KAAEC,EAAiB,KAsDzC,OACE,2BACE,gBAAC,IAAkB,CACjBR,aAAclN,EAAM2N,gBACpBb,aAAc9M,EAAM8M,aACpBG,MAAOjN,EAAMiN,QAEf,2BAAShN,UAAU,QACjB,uBAAKA,UAAU,QACb,uBAAKA,UAAU,0DACZD,EAAMiN,MACH,gBAAC,KAAW,CAACW,YA1DlB,CACL,CACErL,KAAM,UACNc,QAAS,CACPwK,YAAa,cACbC,OAAQ,oBAGZ,CACEvL,KAAMvC,EAAMiN,MAAM1K,KAClBY,QAAQ,MAiDA,gBAAC,KAAkB,MAEvB,gBAAC,IAAe,CACd4K,wBAAwB,uBACxBP,SA/CJA,EAAU,CAAC,CACfQ,MAAO,kBACP3K,QAAS,CACPwK,YAAa,aACbC,OAAQ,yCACRG,KAAM,CAAY,QAAX,EAAAjO,EAAMiN,aAAK,eAAEtM,MAGxB,CACEqN,MAAO,gBACP3K,QAAS,CACPwK,YAAa,aACbC,OAAQ,yCACRG,KAAM,CAAY,QAAX,EAAAjO,EAAMiN,aAAK,eAAEtM,QAIT,QAAX,EAAAX,EAAMiN,aAAK,eAAEG,UAAW,iBAC1BI,EAAQU,KAAK,CACXF,MAAOlO,EAAU,kBACjBuD,QAAS,CACPwK,YAAa,aACbC,OAAQ,yCACRG,KAAM,CAAY,QAAX,EAAAjO,EAAMiN,aAAK,eAAEtM,OAKnB6M,OAuBH,uBAAKvN,UAAU,kCACb,gBAAC,IAAe,CAAC+C,KAAMhD,EAAMgD,OAC7B,uBAAK/C,UAAU,gBACf,uBAAKA,UAAU,gBACb,yBAAOkO,QAAQ,iBAAiBlO,UAAU,QAAO,gBAAC,IAAI,CAACwM,UAAWA,EAAWM,OAAO,oBACpF,gBAAC,IAAY,CAACpM,GAAG,iBAAiByN,GAAIX,EAAgBjM,QAAS,WAAF,OAAQkM,GAAmBD,EAAe,OAMnH,C,qHCrHMhB,EAAY,iCAYZ,SAAU4B,EAA0CrO,GAmBxD,OACE,gCACE,gBAACsO,EAAA,EAAU,CAACrO,UAAU,OACpB,gBAACqO,EAAA,QAAgB,CAACC,IArBxB,WACE,OAAQvO,EAAMc,QACZ,IAAK,UAAW,OAAOd,EAAMwO,gBAC7B,IAAK,YAAa,OAAOxO,EAAMyO,kBAC/B,IAAK,mBAAoB,OAAOzO,EAAM0O,wBACtC,IAAK,UAAW,OAAO1O,EAAM2O,gBAEjC,CAc6BC,GAA+B3O,UAAU,gBAChE,gBAACqO,EAAA,OAAe,KACd,gBAACO,EAAA,EAAI,CAACpC,UAAWA,EAAWM,OAdpC,WACE,OAAQ/M,EAAMc,QACZ,IAAK,UAAW,MAAO,oBACvB,IAAK,YAAa,MAAO,sBACzB,IAAK,mBAAoB,MAAO,4BAChC,IAAK,UAAW,MAAO,oBAE3B,CAO4CgO,OAK9C,CAOM,SAAUC,EAA+B/O,GAK7C,SAASgP,EAAmBC,GAC1B,MAAO,yBAAP,OALF,SAA0BA,GACxB,OAAOA,IAAiBjP,EAAMc,MAChC,CAGkCoO,CAAiBD,GAAgB,qBAAuB,GAC1F,CAEA,OAEE,uBAAKhP,UAAU,oBACb,0BAAQA,UAAW+O,EAAmB,oBAAqBxN,QAAS,WAAF,OAAQxB,EAAMmP,aAAa,mBAAmB,GAC9G,gBAACN,EAAA,EAAI,CAACpC,UAAWA,EAAWM,OAAO,qBAErC,0BAAQ9M,UAAW+O,EAAmB,WAAYxN,QAAS,WAAF,OAAQxB,EAAMmP,aAAa,UAAU,GAC5F,gBAACN,EAAA,EAAI,CAACpC,UAAWA,EAAWM,OAAO,aAErC,0BAAQ9M,UAAW+O,EAAmB,aAAcxN,QAAS,WAAF,OAAQxB,EAAMmP,aAAa,YAAY,GAChG,gBAACN,EAAA,EAAI,CAACpC,UAAWA,EAAWM,OAAO,eAErC,0BAAQ9M,UAAW+O,EAAmB,WAAYxN,QAAS,WAAF,OAAQxB,EAAMmP,aAAa,UAAU,GAC5F,gBAACN,EAAA,EAAI,CAACpC,UAAWA,EAAWM,OAAO,aAI3C,C,eCvEMjN,EAAYsP,EAAA,mBADA,8CAOZ,SAAUC,EAA8BrP,G,MACtCsP,EAA0C,QAAtB,EAAAtP,EAAMuP,YAAY7M,YAAI,eAAE4M,kBAElD,OACE,uBAAKrP,UAAU,oBACb,uBAAKA,UAAU,yBACb,uBAAKA,UAAU,UACb,gBAACuP,EAAA,EAAgB,CACfD,YAAavP,EAAMuP,YACnBE,cAAc,qBAGfH,GACD,uBAAKrP,UAAU,QACb,8BAASH,EAAU,sBACnB,qBAAGG,UAAU,OAAOqP,KAMhC,CC/BA,IACM,EAAYF,EAAA,mBADA,8BAQZ,SAAUM,EAAoB1P,GAClC,OACE,uBAAKC,UAAU,8BACb,0BACEA,UAAU,uBACVuB,QAASxB,EAAM2P,OACf1N,SAAUjC,EAAMiC,UAEf,EAAU,kBAInB,C,iFCvBA,SAAgB,gBAAkB,S,4UCwBlC,IAAM,EAAY,iCACZ,EAAYmN,EAAA,mBAAiC,GAsC7C,SAAUQ,EAAwB5P,G,MAnCtCuP,E,IAoC6E,G,EAA/C,a,EAA+C,E,o4BAArEzO,EAAM,KAAE+O,EAAS,KAEnBC,GAtCNP,EAsC2CvP,EAAMuP,YAAavP,EAAM+P,QAAQC,SAnCrClP,QAAO,SAAAmP,GAK5C,OAJoBC,EAAA,uBAClBX,GACA,QAAiBU,MAEIE,EAAA,iBACzB,IAEuBC,QAAO,SAACC,EAAKJ,G,MAAM,sCACrCI,G,2YAAG,KACC,QAAN,EAAAJ,EAAEK,YAAI,eAAE3P,KAAMsP,EAAEM,WAAY,G,GAC3B,CAAC,IAyBCC,EAAmBC,OAAOC,KAAK1Q,EAAM2Q,eAAelH,OAE1D,KAA2B,QAAtB,EAAAzJ,EAAM+P,QAAQC,gBAAQ,eAAEvG,QAC3B,OACE,uBAAKxJ,UAAU,4BACb,gBAACqO,EAAA,EAAU,CAACrO,UAAU,iEACpB,gBAACqO,EAAA,QAAgB,CAACC,IAAKvO,EAAM4Q,mBAAoBhM,KAAK,UACtD,gBAAC0J,EAAA,UAAkB,KAChB,EAAU,sBAEb,gBAACA,EAAA,OAAe,CAACrO,UAAU,SACxB,EAAU,4BA4BrB,IAAM4Q,EAhBG7Q,EAAM+P,QAAQC,SAASlP,QAAO,SAAAmP,GACnC,IAAMa,GAAS,QAAiBb,GAE1Bc,EAAcb,EAAA,uBAAkDlQ,EAAMuP,YAAauB,GAEnFE,EAAY,CAChBC,QAASd,EAAA,UACTe,UAAWf,EAAA,YACXgB,iBAAkBhB,EAAA,kBAClBiB,QAASjB,EAAA,cAGX,OAAQrP,GAAWA,KAAUkQ,GAAaD,IAAgBC,EAAUlQ,EACtE,IAKF,OACE,gCACGd,EAAMqR,gBAAkB,gBAAChC,EAA6B,CAACE,YAAavP,EAAMuP,cAC3E,uBAAKtP,UAAWD,EAAMqR,eAClB,6BACA,8EAEArR,EAAMqR,gBAAkB,qBAAGpR,UAAU,oBAAmB,gBAAC4O,EAAA,EAAI,CAACpC,UAAW,EAAWM,OAAO,sBAC1F0D,OAAOC,KAAKZ,GAAiBrG,QAC9B,gBAAC6H,EAAA,EAAO,CAAC3Q,GAAG,gBAAgBN,MAAO,EAAU,YAAaC,SAAUN,EAAMuR,QACxE,uBAAKtR,UAAS,UAAKD,EAAMuR,OAAS,sBAAwB,GAAE,YAAIvR,EAAMqR,eAAiB,OAAS,KAC9F,gBAAC3B,EAAmB,CAACC,OAAQ3P,EAAMwR,oBAAqBvP,UAAWuO,OAK3E,iCACIxQ,EAAMqR,gBAAkB,gBAACtC,EAA8B,CAACjO,OAAQA,EAAQqO,aAxChF,SAAsBsC,GACpB5B,EAAU/O,IAAW2Q,EAAiB,KAAOA,EAC/C,KAwCQzR,EAAMqR,iBAAmBR,EAAuBpH,QAAU3I,GAC1D,gBAACuN,EAAyC,CACxCvN,OAAQA,EACR4N,wBAAyB1O,EAAM0O,wBAC/BF,gBAAiBxO,EAAMwO,gBACvBC,kBAAmBzO,EAAMyO,kBACzBE,gBAAiB3O,EAAM2O,kBAI1BkC,GACC,sBAAI5Q,UAAU,sBACX4Q,EAAuB5N,KAAI,SAACgN,EAAGyB,G,MACxBC,GAAqB,SACzB,QAAqB1B,EAAGjQ,EAAM4R,cAC9B5R,EAAMyN,gBAEFoE,EAAkB/B,GAAsB,QAAN,EAAAG,EAAEK,YAAI,eAAE3P,KAAMsP,EAAEM,WAEpDtQ,EAAYD,EAAMqR,eAAiB,eAAiB,0BAKxD,OAHIQ,IACF5R,GAAa,IAAJ,OAAQ,kBAAsB,UAGvC,sBAAImD,IAAKsO,EAAKzR,UAAWD,EAAMqR,eAAiB,GAAK,iBAClDrR,EAAMqR,eACL,gBAACS,EAAA,EAAmB,CAClBvC,YAAavP,EAAMuP,YACnBwC,eAAgB9B,EAChB+B,cAAc,QAAgBhS,EAAMuP,YAAY5O,GAAIsP,EAAGjQ,EAAM2Q,eAC7DsB,gBAAiBjS,EAAMkS,iBACvBC,YAAanS,EAAMmS,YACnBC,oBAAkB,EAClBT,mBAAoBA,EACpB1R,UAAWA,EACXoS,cAAY,EACZhB,gBAAc,EACdiB,uBAAuB,UAGzB,gBAACC,EAAA,EAAuB,CACtBhD,YAAavP,EAAMuP,YACnBwC,eAAgB9B,EAChB+B,cAAc,QAAgBhS,EAAMuP,YAAY5O,GAAIsP,EAAGjQ,EAAM2Q,eAC7DsB,gBAAiBjS,EAAMkS,iBACvBC,YAAanS,EAAMmS,YACnBC,oBAAkB,EAClBT,mBAAoBA,EACpB1R,UAAWA,EACXoS,cAAY,IAKtB,KAGHrS,EAAMqR,kBAAoBvB,EAAgBrG,QACzC,uBAAKxJ,UAAU,QACb,gBAACyP,EAAmB,CAACC,OAAQ3P,EAAMwR,oBAAqBvP,UAAWuO,MAM/E,C,eC9LM,SAAUgC,EAAyBxS,GACvC,IAA6ByS,EAqB7B,OACE,2BACE,qBAAGxS,UAAU,SAvBYwS,EAuBgBzS,EAAMuP,YAAY7M,KAAKgQ,UApB3DD,EAAIE,MAAM,WAAW1P,KAAI,SAAC2P,EAAM1P,GACrC,IAAM2P,EAAQD,EAAKC,MAAM,WAEzB,GAAIA,EAAO,CACT,IAAMzP,EAAMyP,EAAM,GAEZC,EAAc9S,EAAMuP,YAAYwD,gBAAgBC,MAAK,SAAAC,GAAM,OAAKA,EAAOC,QAAW9P,CAAG,IAG3F,GAAI0P,EACF,OAAO,wBAAM7S,UAAU,oDAAoDmD,IAAKF,GAAQ4P,EAAYvQ,KAEvG,CAED,OAAOqQ,CACT,IAjBiB,IAyBrB,C,cC9BA,SAAgB,IAAM,QAAQ,YAAc,QAAQ,YAAc,SCQ5D,SAAUO,EAA4BnT,G,QAG1C,OAF8E,QAA1D,EAAAoT,EAAA,QAAmC,QAAjB,EAAApT,EAAMuP,mBAAW,eAAEwD,iBAAiBrQ,YAAI,eAAE2Q,UAoB9E,uBAAKpT,UAAW,eACd,gBAACqT,EAAA,EAAgC,CAC/B/D,YAAavP,EAAMuP,YACnB3K,KAAK,KACLyN,cAAc,EACdkB,sBAAoB,EACpBC,eAAa,KAtBf,sBAAIvT,UAAS,UAAK,cAAkB,2BACjCD,EAAMuP,YAAYwD,gBAAgB9P,KAAI,SAAAwQ,GACrC,OACE,sBAAIrQ,IAAKqQ,EAAO9S,GAAIV,UAAU,UAC5B,uBAAKA,UAAS,UAAKwT,EAAOC,UAAY,8BAAgC,0BAAyB,kCAC7F,wBAAMzT,UAAU,eAAeD,EAAM2T,cAAcF,EAAOP,OAAM,MAChE,4BAAOO,EAAOlR,OAItB,IAgBR,CCjCA,IAAM,EAAY,uBAEZ,SAAUqR,EAAyB5T,G,MACjCsP,EAA0C,QAAtB,EAAAtP,EAAMuP,YAAY7M,YAAI,eAAE4M,kBAElD,OAAKA,EAGH,uBAAKrP,UAAS,UAAK,cAAkB,oCACnC,uBAAKA,UAAU,kCACb,qBAAGA,UAAU,oBACX,gBAAC4O,EAAA,EAAI,CAACpC,UAAW,EAAWM,OAAO,wBAIvC,qBAAG9M,UAAU,QAAQqP,IAVM,gCAajC,CCpBM,SAAUuE,EAAyB7T,GACvC,OACE,sBAAIC,UAAU,8BACXD,EAAMuP,YAAYwD,gBAAgB9P,KAAI,SAAAwQ,GACrC,OACE,sBACErQ,IAAKqQ,EAAO9S,GACZV,UAAS,UAAKwT,EAAOC,UAAY,8BAAgC,0BAAyB,wCAE1F,wBAAMzT,UAAU,eAAeD,EAAM2T,cAAcF,EAAOP,OAAM,MAChE,4BAAOO,EAAOlR,MAGpB,IAGN,C,eCPM,SAAUuR,EAAqB9T,GAenC,IAAM+T,EAdN,WACE,OAAQ/T,EAAMuP,YAAYnC,QACxB,KAAK,oBACH,OAAO,gBAAC+F,EAA2B,CAAC5D,YAAavP,EAAMuP,YAAaoE,cAAeA,IACrF,KAAK,iBACH,OAAO,gBAACE,EAAwB,CAACtE,YAAavP,EAAMuP,YAAaoE,cAAeA,IAClF,KAAK,iBACH,OAAO,gBAACC,EAAwB,CAACrE,YAAavP,EAAMuP,cACtD,KAAK,iBACH,OAAO,gBAACiD,EAAwB,CAACjD,YAAavP,EAAMuP,cACtD,QAAS,OAAO,KAEpB,CAEqCyE,GAErC,OAAKD,EAGH,uBAAK9T,UAAU,cACZ8T,GAJqC,gCAO5C,C,qPCtBA,IACM,EAAY3E,EAAA,mBADA,wBAGlB,SAAS6E,EACPC,EACAC,EACAC,GAEA,IAAMC,EAAQH,EAAKnL,MAAMiK,MAAK,SAAAhK,GAAI,OAAIA,EAAK3E,OAAO1D,KAAOyT,CAAQ,IAAEE,MAC7DC,EAAQJ,EAAKpL,MAAMiK,MAAK,SAAAhK,GAAI,OAAIA,EAAK3E,OAAO1D,KAAOyT,CAAQ,IAAEE,MAEnE,OAAID,EAAMrT,iBACA,EAENuT,EAAMvT,iBAGHqT,EAAMpT,gBAAkBsT,EAAMtT,eAF5B,GAIJ,CACP,CAKA,SAASuT,EAAYxU,G,MACnB,OACE,uBAAKC,UAAS,iBAA2B,QAAf,EAAAD,EAAMC,iBAAS,QAAI,KAC1CD,EAAMuB,SAGb,CAOA,SAASkT,EAAWzU,GAClB,OACE,gBAACwU,EAAW,CAACvU,UAAWD,EAAMqE,OAAOE,UAAY,WAC9C,EAAUvE,EAAM0U,WAGvB,CAsGM,SAAUf,EAAczQ,GAC5B,OAAOyR,OAAOC,aAAa1R,EAAQ,IAAI2R,WAAW,GACpD,C,cC5JM,EAAYzF,EAAA,mBADA,wBAUZ,SAAU0F,EACdvF,EACAwC,GAEA,IAAMgD,EAAsCxF,EAAYwD,gBAAgB9P,KAAI,SAACyH,EAAMsK,GACjF,MAAO,CACLrU,GAAI+J,EAAK/J,GACTqN,MAAOuB,EAAYnC,SAAW,oBAAmCuG,EAAcqB,GAAKtK,EAAKnI,KACzFmR,UAAWhJ,EAAKgJ,UAChBlR,MAAO,EAEX,IAgBA,OAdAuP,EAAe/B,SAASnK,SAAQ,SAAAoP,GAC9B,IAAMC,EAAiB9B,EAAA,OAAiB6B,EAAQlF,SAASoF,SACnDC,EAAWhC,EAAA,YAAsB8B,EAAgB,CAAEvU,GAAI4O,EAAY5O,KAEpEyU,GAELA,EAASC,QAAQxP,SAAQ,SAAAoN,GACvB,IAAMqC,EAAkBlC,EAAA,YAAsB2B,EAAkB,CAAEpU,GAAIsS,EAAOtS,KAEzE2U,GACFA,EAAgB9S,OACpB,GACF,IAEOuS,CACT,CAEM,SAAUQ,EAAmBhG,EAA0BwC,GAC3D,IAAMgD,EAAsCxF,EAAYwD,gBAAgB9P,KAAI,SAAAyH,GAC1E,MAAO,CACL/J,GAAI+J,EAAK/J,GACTqN,MAAOtD,EAAKnI,KACZmR,UAAWhJ,EAAKgJ,UAChBlR,MAAO,EAEX,IA2BA,OAzBAuS,EAAiB7G,KAAK,CACpBF,MAAO,EAAU,aACjBxL,MAAO,EACPkR,WAAW,IAGb3B,EAAe/B,SAASnK,SAAQ,SAAAoP,GAC9B,IAAMC,EAAiB9B,EAAA,OAAiB6B,EAAQlF,SAASoF,SACnDC,EAAWhC,EAAA,YAAsB8B,EAAgB,CAAEvU,GAAI4O,EAAY5O,KAEpEyU,GAELA,EAASC,QAAQxP,SAAQ,SAAAoN,GACvB,IAAMqC,EAAkBlC,EAAA,YAAsB2B,EAAkB,CAAEpU,GAAIsS,EAAOtS,KAEzE2U,GAAmBrC,EAAOuC,SAAWC,EAAA,UACvCH,EAAgB9S,QAES4Q,EAAA,YAAsB2B,EAAkB,CAAE/G,MAAO,EAAU,eAEnExL,OAErB,GACF,IAEOuS,CACT,CAEM,SAAUW,EAAcnG,EAA0BwC,GACtD,IAAMgD,EAAsC,CAC1C,CACE/G,MAAO,EAAU,WACjB0F,WAAW,EACXlR,MAAO,GAET,CACEwL,MAAO,EAAU,aACjB0F,WAAW,EACXlR,MAAO,IAoCX,OAhCAuP,EAAe/B,SAASnK,SAAQ,SAAAoP,GAC9B,IAAMC,EAAiB9B,EAAA,OAAiB6B,EAAQlF,SAASoF,SACnDC,EAAWhC,EAAA,YAAsB8B,EAAgB,CAAEvU,GAAI4O,EAAY5O,KAEpEyU,GAELA,EAASC,QAAQxP,SAAQ,SAAAoN,GASvB,GARIA,EAAOuC,SAAWC,EAAA,WACGrC,EAAA,YAAsB2B,EAAkB,CAAE/G,MAAO,EAAU,aACnExL,QAEbyQ,EAAOuC,SAAWC,EAAA,aACKrC,EAAA,YAAsB2B,EAAkB,CAAE/G,MAAO,EAAU,eACnExL,QAEfyQ,EAAOuC,SAAWC,EAAA,gBAAuC,CAC3D,IAAIE,EAAiBvC,EAAA,YAAsB2B,EAAkB,CAAE/G,MAAO,EAAU,aAE3E2H,IACHZ,EAAiB7G,KAAK,CACpBF,MAAO,EAAU,WACjBxL,MAAO,EACPkR,WAAW,IAEbiC,EAAiBvC,EAAA,YAAsB2B,EAAkB,CAAE/G,MAAO,EAAU,cAG9E2H,EAAenT,OAChB,CACH,GACF,IAEOuS,CACT,C,2BC1HM,GAAY,uBACZ,GAAY3F,EAAA,mBAAiC,IAO7C,SAAUwG,GAAuB5V,GACrC,IAAMsV,EAGN,WACE,GAAKtV,EAAMuP,aAAgBvP,EAAM+P,QAAjC,CAEA,IAAI8F,EAMJ,OAAQ7V,EAAMuP,YAAYnC,QACxB,KAAK,iBACL,KAAK,kBACHyI,EAAgBH,EAChB,MACF,KAAK,iBACHG,EAAgBN,EAChB,MACF,KAAK,oBACL,KAAK,iBACHM,EAAgBf,EAIpB,OAAOe,EAAc7V,EAAMuP,YAAavP,EAAM+P,QAtBE,CAuBlD,CA3BwB+F,GAClBC,EA6BGT,aAAe,EAAfA,EAAiBlF,QAAO,SAACC,EAAKtP,GAAO,OAAKA,EAAQyB,MAAQ6N,EAAMtP,EAAQyB,MAAQ6N,CAAG,GAAE,GAG9F,SAAS2F,EAAgBjV,GACvB,IAAMd,EAAY,sBAElB,OAAKc,EAAQyB,MAGTzB,EAAQiN,QAAU,GAAU,WACvB,GAAP,OAAU/N,EAAS,8BAEjBc,EAAQ2S,UACH,GAAP,OAAUzT,EAAS,gCAEd,GAAP,OAAUA,EAAS,4BARV,GAAP,OAAUA,EAAS,wBASvB,CAEA,OACE,uBAAKA,UAAU,kCACb,uBAAKA,UAAU,wCACb,uBAAKA,UAAU,0CACb,gBAACyE,EAAA,EAAY,CAACpC,QAAS,gBAAwBsC,KAAMF,EAAAG,EAAA,SAEvD,sBAAI5E,UAAU,WACZ,4BAAM,gBAAC4O,EAAA,EAAI,CAACpC,UAAW,GAAWM,OAAO,uBAG7C,uBAAK9M,UAAU,gBACb,uBAAKA,UAAU,YACZqV,aAAe,EAAfA,EAAiBrS,KAAI,SAAAlC,GACpB,OACE,qBAAGqC,IAAKrC,EAAQiN,MAAO/N,UAAU,sBAAsBc,EAAQiN,MAEnE,KAEF,uBAAK/N,UAAU,eACZqV,aAAe,EAAfA,EAAiBrS,KAAI,SAAClC,EAASiU,GAC9B,OACE,uBAAK5R,IAAG,UAAKpD,EAAMuP,YAAY5O,IAAE,OAAGqU,GAAK/U,UAAU,eACjD,uBACEA,UAAW+V,EAAgBjV,GAC3B4J,MAAO,CAAEsL,MAAO,GAAF,OAAMlV,EAAQyB,MAAQuT,EAAoB,IAAG,KAAKG,OAAQ,MAE1E,4BAAOnV,EAAQyB,OAGrB,MAKV,CC/FA,IACM,GAAY4M,EAAA,mBADA,wCAOZ,SAAU+G,GAA8BnW,GAC5C,OACE,gBAACsO,EAAA,EAAU,CAACrO,UAAU,sDACpB,gBAACqO,EAAA,QAAgB,CACfC,IAAKvO,EAAMoW,cACXxR,KAAK,UAEP,gBAAC0J,EAAA,OAAe,CAACrO,UAAU,SACxB,GAAU,mBAInB,C,8ICyBM,SAAUoW,GAAcrW,G,MJa5BsW,E,IIVC,G,EAF6B,YAC5B,QAAgBtW,EAAMU,OAAQ,sB,EAC/B,E,s4BAFOA,EAAM,KAAE6V,EAAS,KAGnB7T,EJ2EF,SACJ8T,EACAzG,EACA0G,EACA/V,GAEA,OAAO,WAAc,WACnB,IAAMgW,GAAwB,OAAgBF,GACxCG,EAA8BD,EAAsBtG,QAAO,SAACC,EAAKd,EAAarM,GAAK,OAAK,+BACzFmN,G,2YAAG,IAAGd,EAAY5O,GAAKuC,GAAK,GAC7B,CAAC,GAEC0T,EAAeF,EAAsBzT,KAAI,SAAA+R,GAAC,OAAI,+BAC/CA,GAAC,CACJ6B,eAAgBF,EAAgB3B,EAAErU,IAClCmW,gBAAgB,QAA6B9B,EAAGjF,IAAQ,IAG1D,GAAmB,uBAAfrP,aAAM,EAANA,EAAQC,IAA4B,CACtC,IAAMoW,EAAS3D,EAAA,SAAmBwD,GAAc,SAAArH,GAC9C,OAAIA,EAAYuH,eAAe9V,iBACrB,EAEHuO,EAAYuH,eAAe7V,cACpC,IAEA,OAAOP,EAAOE,KAAOmW,EAAOC,UAAYD,CACzC,CAED,OAAOH,CACT,GAAG,CAAEH,EAAa/V,GACpB,CI1GeuW,CAAgBjX,EAAMwW,YAAaxW,EAAM+P,QAAS/P,EAAMkX,aAAc9D,EAAA,QAAkB1S,IAE/FyW,EAAsBnX,EAAMoX,wBAChC,QAAmBpX,EAAMwW,YAAaxW,EAAMoX,uBAW9C,OACE,uBAAKnX,UAAU,OACb,uBAAKA,UAAU,qBACb,gBAAC6K,GAAA,EAAK,CACJ1H,IAAKpD,EAAMoX,sBACXlS,SJVRoR,EIU4BtW,EAAMsW,mBJR3B,CACL,CACEe,OAAQ,SAAF,OAAKhT,EAAM,EAANA,OAAM,OAAO,gBAACoQ,EAAU,CAACpQ,OAAQA,EAAQqQ,UAAU,KAAM,EACpE4C,SAAU,iBACV3W,GAAI,QACJ4W,KAAM,SAAF,GAAgD,IAAxBV,EAAc,EAAjCxP,IAAOuB,SAAYiO,eAC1B,OAAO,gBAACrC,EAAW,KAAEqC,EAAiB,EAAC,IACzC,EACAZ,MAAO,GACP9Q,eAAe,GAEjB,CACEkS,OAAQ,SAAF,OAAKhT,EAAM,EAANA,OAAM,OAAO,gBAACoQ,EAAU,CAACpQ,OAAQA,EAAQqQ,UAAU,YAAa,EAC3E4C,SAAU,OACVC,KAAM,SAAF,GAA2E,IAArDhI,EAAW,EAA5BlI,IAAOuB,SAAyChD,EAAc,EAA9BH,aAAgBG,eACjD4B,EAAc5B,aAAc,EAAdA,EAAiB2J,aAAW,EAAXA,EAAa5O,IAElD,OACE,gBAAC6T,EAAW,CAACvU,UAAU,eACrB,uBAAKA,UAAS,UAAMuH,EAA0B,GAAZ,UAAc,UAC9C,gBAACgI,EAAA,EAAgB,CAACD,YAAaA,EAAaiI,mBAAmB,YAGhElB,GAAsB9O,GACrB,gBAACsM,EAAoB,CAACvE,YAAaA,IAI3C,EACApK,eAAe,GAEjB,CACEkS,OAAQ,SAAF,OAAKhT,EAAM,EAANA,OAAM,OAAO,gBAACoQ,EAAU,CAACpQ,OAAQA,EAAQqQ,UAAU,SAAU,EACxE4C,SAAU,iBACV3W,GAAI,oBACJ4W,KAAM,SAAF,GAAqD,QAAhDjD,MAASrT,EAAc,EAAdA,eAChB,OAD+C,EAAfD,gBAG5B,gBAACb,EAAA,EAAgB,CACfE,MAAO,EAAU,mBACjBJ,UAAU,cACVO,iBAAiB,UACjBN,WAAS,IAMb,gBAACuX,EAAA,EAAmB,CAClBC,WAAYzW,EACZkF,OAAQsR,EAAA,eAGd,EACAxB,MAAO,GACP0B,eAAe,EACfC,SAAU3D,KI/CNvR,KAAMA,EACN8B,MAAOxE,EAAMwE,MACbiD,YAjBR,SAAqB,GAA6D,IAAjD8H,EAAW,EAArB3G,SACrBiP,EAAA,qBAEAC,GAAA,eACE,CAAEC,cAAexI,EAAY5O,IAC7B,CAAEqX,OAAO,GAEb,EAWQrS,sBAAuBwR,EAAsB,CAACA,EAAoBxW,IAAM,KACxEmF,SAAU,SAACuB,GAAkC,OAAKA,EAAI1G,EAAE,EACxDyE,YAAU,EACVE,YAAU,EACVgE,OAAQiN,EACR7Q,cAAehF,KAGnB,uBAAKT,UAAU,6BACXD,EAAMqR,gBAAkBrR,EAAMoX,0BAAiD,QAAtB,EAAApX,EAAM+P,QAAQC,gBAAQ,eAAEvG,SACjF,gBAACmM,GAAsB,CACrBrG,YAAa4H,EACbpH,QAAS/P,EAAM+P,UAInB,uBAAK9P,UAAS,8BAAyBD,EAAMqR,eAAiB,GAAK,aAC9D8F,GACD,gBAACvH,EAAuB,CACtBL,YAAa4H,EACbpH,QAAS/P,EAAM+P,QACfY,cAAe3Q,EAAM2Q,cACrBuB,iBAAkBlS,EAAMkS,iBACxBV,oBAAqBxR,EAAMwR,oBAC3BW,YAAanS,EAAMmS,YACnB1E,eAAgBzN,EAAMyN,eACtBmD,mBAAoB5Q,EAAM4Q,mBAC1BlC,wBAAyB1O,EAAM0O,wBAC/BF,gBAAiBxO,EAAMwO,gBACvBC,kBAAmBzO,EAAMyO,kBACzBE,gBAAiB3O,EAAM2O,gBACvB0C,eAAgBrR,EAAMqR,eACtBE,OAAQvR,EAAMuR,OACdK,aAAc5R,EAAM4R,gBAGtBuF,GAAuB,gBAAChB,GAA6B,CAACC,cAAepW,EAAMiY,2BAKvF,C,sCCrHA,UAAgB,gBAAkB,SCG5B,SAAUC,KACd,OACE,2BACE,uBAAKjY,UAAU,gBACb,uBAAKA,UAAU,SACb,uBAAKA,UAAS,UAAK,mBAAsB,0CAE3C,uBAAKA,UAAU,SACb,uBAAKA,UAAS,UAAK,mBAAsB,2CAKnD,C,uGCAA,IACM,GAAYmP,EAAA,mBADA,uCAGZ5K,GAAoB,CACxBkF,MAAO,qCACPC,OAAQ,+BACRO,WAAY,4BACZlB,KAAM,GACN3B,IAAK,gCACLG,YAAa,cACb/C,cAAe,QAiBX,SAAU0T,GAA6BnY,G,cAC8C,G,EAArB,YAAe,G,EAAM,E,s4BAAjFoY,EAAyB,KAAEC,EAA4B,KAE/D,GAAiE,QAC9C,QAAjB,EAAArY,EAAMwW,mBAAW,eAAE7V,GACM,QAAzB,EAAAX,EAAMsY,2BAAmB,eAAE3X,IAC3B,kBAAM0X,GAA6B,EAAM,IAHnC1H,EAAa,EAAbA,cAAeuB,EAAgB,EAAhBA,iBAAkBV,EAAmB,EAAnBA,oBAMzC,OACE,iCACIxR,EAAMuY,eAAiB,gBAACL,GAAmC,MAE5DlY,EAAMuY,eACL,gBAAClC,GAAa,CACZG,YAAaxW,EAAMwW,YACnBzG,QAAS/P,EAAM+P,QACfY,cAAeA,EACfuB,iBAAkBA,EAClBV,oBAAqB,WAAF,OAAQ6G,GAA6B,EAAK,EAC7DlG,YAAanS,EAAMwY,OAAOrG,YAC1BiF,sBAAuBpX,EAAM+X,cAC7Bb,aAAclX,EAAMyY,WACpB7H,mBAAoB8H,GAAA,wBACpBT,uBAAwBS,GAAA,mBACxBjL,eAAgBzN,EAAMyN,eACtB/M,OAAQV,EAAMU,OACd4V,oBAAkB,EAClB9R,MAAOA,GACPgK,gBAAiBkK,GAAA,kBACjBjK,kBAAmBiK,GAAA,sBACnB/J,gBAAiB+J,GAAA,mBACjBhK,wBAAyBgK,GAAA,qBACzBnH,OAAQvR,EAAMuR,OACdK,aAAc5R,EAAM4R,eAIvBwG,GACC,gBAACjX,GAAA,EAAiB,CAChBd,MAAO,GAAU,iBAAkB,CAAEsY,WAA6C,QAAjC,EAAAlI,OAAOC,KAAKC,GAAelH,cAAM,QAAI,IACtFnI,WAAY,WAAF,OAAQ+W,GAA6B,EAAM,EACrDvW,kBAAmB,GAAU,UAC7BC,qBAAqB,OACrBF,eAAgB2P,GAEhB,yBAAI,GAAU,mBAKxB,C,sHCxFM1R,EAAY,qBADA,wBAKZ,SAAU8Y,EACdjY,EACAwC,EACA0V,GAC8B,IAA9BC,IAAA,yDAEM9V,EAAO,CACX,CACET,KAAMzC,EAAU,YAChBqD,OAAmB,aAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,4BACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAMzC,EAAU,WAChBqD,OAAmB,YAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,2BACRG,KAAM,CAACtN,GACPkY,OAAAA,KAKN,OAAIC,EACK,CACL,CACEvW,KAAM,SACNY,OAAmB,iBAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,iCACRG,KAAM,CAACtN,GACPkY,OAAAA,KAEH,OACE7V,GAIAA,CACT,CAEM,SAAU+V,EACdpY,EACAwC,EACA0V,GAC8B,IAA9BC,IAAA,yDAEM9V,EAAO,CACX,CACET,KAAMzC,EAAU,YAChBqD,OAAmB,aAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,2BACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAMzC,EAAU,WAChBqD,OAAmB,YAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,0BACRG,KAAM,CAACtN,GACPkY,OAAAA,KAKN,OAAIC,EACK,CACL,CACEvW,KAAM,SACNY,OAAmB,iBAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,gCACRG,KAAM,CAACtN,GACPkY,OAAAA,KAEH,OACE7V,GAIAA,CACT,CAEM,SAAUgW,EACdrY,EACAwC,EACA0V,GAC8B,IAA9BC,IAAA,yDAEM9V,EAAO,CACX,CACET,KAAMzC,EAAU,YAChBqD,OAAmB,aAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,kCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAMzC,EAAU,WAChBqD,OAAmB,YAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,kCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAMzC,EAAU,aAChBqD,OAAmB,cAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,mCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAMzC,EAAU,WAChBqD,OAAmB,YAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,iCACRG,KAAM,CAACtN,GACPkY,OAAAA,KAKN,OAAIC,EACK,CACL,CACEvW,KAAM,SACNY,OAAmB,iBAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,uCACRG,KAAM,CAACtN,GACPkY,OAAAA,KAEH,OACE7V,GAIAA,CACT,CAEM,SAAUiW,EAA+BtY,EAAYwC,EAAsB0V,GAC/E,MAAO,CACL,CACEtW,KAAMzC,EAAU,YAChBqD,OAAmB,aAAXA,EACRE,QAAS,CACPwK,YAAa,cACbC,OAAQ,uCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAMzC,EAAU,WAChBqD,OAAmB,YAAXA,EACRE,QAAS,CACPwK,YAAa,cACbC,OAAQ,uCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAMzC,EAAU,aAChBqD,OAAmB,cAAXA,EACRE,QAAS,CACPwK,YAAa,cACbC,OAAQ,wCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAMzC,EAAU,WAChBqD,OAAmB,YAAXA,EACRE,QAAS,CACPwK,YAAa,cACbC,OAAQ,sCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAIR,CAEM,SAAUK,EACdvY,EACAwC,EACA0V,GAyBA,MAvBa,CACX,CACEtW,KAAM,SACNY,OAAmB,iBAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,kCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAM,SACNY,OAAmB,WAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,2BACRG,KAAM,CAACtN,GACPkY,OAAAA,IAMR,CAEM,SAAUM,EACdxY,EACAwC,EACA0V,GAyBA,MAvBa,CACX,CACEtW,KAAM,SACNY,OAAmB,iBAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,oCACRG,KAAM,CAACtN,GACPkY,OAAAA,IAGJ,CACEtW,KAAM,SACNY,OAAmB,WAAXA,EACRE,QAAS,CACPwK,YAAa,aACbC,OAAQ,6BACRG,KAAM,CAACtN,GACPkY,OAAAA,IAMR,C,mCCvRA,SAAgB,gBAAkB,QAAQ,IAAM,QAAQ,SAAW,QAAQ,YAAc,QAAQ,QAAU,Q","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","file:///app/packages/libs/shared/src/components/confirmation-popup/ConfirmationPopup.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-header/InsightsHeader.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/interaction-response-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/question-table-answers.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-questions/partial-loading/partial-interactive-insights-questions.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-questions/partial-loading/PartialInteractiveInsightsQuestions.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-questions/InteractiveInsightsQuestions.tsx","file:///app/packages/projects/lite/src/apps/my-shares/utils/InsightsAppLinkUtils.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!props.showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n <PercentageIndicator />\n </div>\n );\n\n if (!props.title)\n return <Indicator />;\n\n return (\n <Tooltip title={props.title} spanHack spanHackClassName={props.tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.confirmationPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ConfirmationPopupProps {\n title: string;\n onClickConfirm: () => void;\n confirmButtonText?: string;\n cancelButtonText?: string;\n confirmButtonVariant?: ButtonProps['variant'];\n cancelButtonVariant?: ButtonProps['variant'];\n disabledConfirmButton?: boolean;\n}\n\nConfirmationPopup.defaultProps = {\n confirmButtonVariant: 'primary',\n cancelButtonVariant: 'link'\n};\n\ntype PropTypes = React.PropsWithChildren<ConfirmationPopupProps & PopupViewProps>;\n\nexport function ConfirmationPopup(props: PropTypes): React.ReactElement {\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <>\n {props.children}\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.closePopup}\n variant={props.cancelButtonVariant}\n text={props.cancelButtonText || getPhrase('cancel')}\n />\n <PopupButtons.Submit\n onClick={() => { setShowButtonSpinner(true); props.onClickConfirm(); }}\n text={props.confirmButtonText || getPhrase('confirm')}\n variant={props.confirmButtonVariant}\n showSpinner={showButtonSpinner}\n disabled={props.disabledConfirmButton}\n />\n </PopupButtons>\n </>\n </Popup>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows(): JSX.Element[] {\n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { InsightsAdminAlert } from 'apps/my-shares/components/insights-admin-alert/InsightsAdminAlert';\n\nconst namespace = 'insights.header';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeaderProps {\n video: VideoTypes;\n hasClassrooms?: boolean;\n dateRangeAppLinkParams?: DateRangeQueryParams;\n tabs: PillTab[]\n isDemo?: boolean;\n analyticsWebUrl?: string;\n hasAnalytics?: boolean;\n hasShareFlowV2?: boolean;\n shareId?: string;\n}\n\nexport function InsightsHeader(props: InsightsHeaderProps) {\n const [ anonymiseUsers, setAnonymiseUsers ] = useViewModel<boolean>(\n SharedViewModelKeys.ANONYMISE_USERS,\n false,\n { storage: StorageType.LocalStorage }\n );\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [\n {\n name: 'Reports',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n }\n },\n {\n name: props.video.name,\n active: true\n }\n ];\n }\n\n function getActions() {\n const actions = [{\n label: 'Edit time range',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n },\n {\n label: 'Edit audience',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n }];\n\n if (props.video?.typeId === MasterType.Interactive) {\n actions.push({\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_GENERATE_REPORT,\n args: [props.video?.id]\n }\n });\n }\n\n return actions;\n }\n\n return (\n <div>\n <InsightsAdminAlert\n analyticsUrl={props.analyticsWebUrl}\n hasAnalytics={props.hasAnalytics}\n video={props.video}\n />\n <section className='mb-4'>\n <div className='mb-3'>\n <div className='d-flex justify-content-between align-items-center mb-3'>\n {props.video\n ? <Breadcrumbs breadcrumbs={getBreadcrumbs()} />\n : <PartialBreadcrumbs />\n }\n <ActionsDropdown\n dropdownToggleClassName='btn btn-outline-dark'\n actions={getActions()}\n />\n </div>\n </div>\n <div className='d-flex align-items-center mb-4'>\n <PillTabSelector tabs={props.tabs} />\n <div className='flex-grow-1' />\n <div className='d-flex gap-3'>\n <label htmlFor='anonymiseNames' className='mb-0'><Text namespace={namespace} phrase='anonymiseNames' /></label>\n <ToggleSwitch id='anonymiseNames' on={anonymiseUsers} onClick={() => setAnonymiseUsers(!anonymiseUsers)} />\n </div>\n </div>\n </section>\n </div>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.interactionResponseList';\n\nexport type InteractionResponseFilterType = 'marking_required' | 'correct' | 'incorrect' | 'skipped';\n\ninterface InteractionResponseListFiltersEmptyStatesProps {\n filter: InteractionResponseFilterType;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n}\n\nexport function InteractionResponseListFiltersEmptyStates(props: InteractionResponseListFiltersEmptyStatesProps) {\n function getFilterEmptyStateImageUrl() {\n switch (props.filter) {\n case 'correct': return props.correctImageUrl;\n case 'incorrect': return props.incorrectImageUrl;\n case 'marking_required': return props.markingRequiredImageUrl;\n case 'skipped': return props.skippedImageUrl;\n }\n }\n\n function getFilterEmptyStatePhrase() {\n switch (props.filter) {\n case 'correct': return 'correctEmptyState';\n case 'incorrect': return 'incorrectEmptyState';\n case 'marking_required': return 'markingRequiredEmptyState';\n case 'skipped': return 'skippedEmptyState';\n }\n }\n\n return (\n <>\n <EmptyState className='m-4'>\n <EmptyState.Image src={getFilterEmptyStateImageUrl()} className='w-25 h-auto' />\n <EmptyState.Info>\n <Text namespace={namespace} phrase={getFilterEmptyStatePhrase()} />\n </EmptyState.Info>\n </EmptyState>\n </>\n );\n}\n\ninterface InteractionResponseListFiltersProps {\n filter: InteractionResponseFilterType;\n toggleFilter: (filter: InteractionResponseFilterType) => void\n}\n\nexport function InteractionResponseListFilters(props: InteractionResponseListFiltersProps) {\n function isFilterSelected(filterButton: InteractionResponseFilterType) {\n return filterButton === props.filter;\n }\n\n function getFilterClassName(filterButton: InteractionResponseFilterType) {\n return `rounded-pill bg-light ${isFilterSelected(filterButton) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n\n <div className='d-flex gap-2 m-3'>\n <button className={getFilterClassName('marking_required')} onClick={() => props.toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequired' />\n </button>\n <button className={getFilterClassName('correct')} onClick={() => props.toggleFilter('correct')}>\n <Text namespace={namespace} phrase='correct' />\n </button>\n <button className={getFilterClassName('incorrect')} onClick={() => props.toggleFilter('incorrect')}>\n <Text namespace={namespace} phrase='incorrect' />\n </button>\n <button className={getFilterClassName('skipped')} onClick={() => props.toggleFilter('skipped')}>\n <Text namespace={namespace} phrase='skipped' />\n </button>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.interactionResponseListHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionResponseListHeaderProps {\n interaction: Interaction;\n}\n\nexport function InteractionResponseListHeader(props: InteractionResponseListHeaderProps): JSX.Element {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n return (\n <div className='rounded bg-white'>\n <div className='p-2 position-relative'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {!!suggestedResponse &&\n <div className='mt-2'>\n <strong>{getPhrase('suggestedResponse')}</strong>\n <p className='m-0'>{suggestedResponse}</p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.submitMarkedAnswers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubmitMarkedAnswersProps {\n submit: () => void;\n disabled: boolean\n}\n\nexport function SubmitMarkedAnswers(props: SubmitMarkedAnswersProps): JSX.Element {\n return (\n <div className='d-flex justify-content-end'>\n <button\n className='btn btn-outline-dark'\n onClick={props.submit}\n disabled={props.disabled}\n >\n {getPhrase('submitAnswers')}\n </button>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"PPNkp\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { InteractionResponseFilterType, InteractionResponseListFilters, InteractionResponseListFiltersEmptyStates } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters';\nimport { InteractionResponseListHeader } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader';\nimport { SubmitMarkedAnswers } from 'libs/shared/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName, getUserOrAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractiveResultSet, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport styles from './interaction-response-list.scss';\n\nconst namespace = 'shared.interactionResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getResponsesToMark(\n interaction: Interaction,\n studentResults: StudentResults[]\n): HashObject {\n const responsesToMark = studentResults.filter(s => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(s)\n );\n return correctness === InteractionCorrectness.AwaitingMarking;\n });\n\n return responsesToMark.reduce((acc, s) => ({\n ...acc,\n [s.user?.id || s.sessionId]: true\n }), {});\n}\n\ninterface InteractionResponseListProps {\n interaction: Interaction\n results: InteractiveResultSet;\n markedAnswers: MarkedAnswerHash;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n emptyStateImageUrl: string;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n isDemo?: boolean;\n anonSessions?: AnonSessions;\n}\n\nexport function InteractionResponseList(props: InteractionResponseListProps): JSX.Element {\n const [ filter, setFilter ] = React.useState<InteractionResponseFilterType>();\n\n const responsesToMark = getResponsesToMark(props.interaction, props.results.students);\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n if (!props.results.students?.length)\n return (\n <div className='d-flex flex-column h-100'>\n <EmptyState className='bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n </div>\n );\n\n\n function toggleFilter(selectedFilter: InteractionResponseFilterType) {\n setFilter(filter === selectedFilter ? null : selectedFilter);\n }\n\n function filterStudentResults() {\n return props.results.students.filter(s => {\n const result = getStudentResult(s);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n const filterMap = {\n correct: InteractionCorrectness.Correct,\n incorrect: InteractionCorrectness.Incorrect,\n marking_required: InteractionCorrectness.AwaitingMarking,\n skipped: InteractionCorrectness.UnAnswered\n };\n\n return !filter || (filter in filterMap && correctness === filterMap[filter]);\n });\n }\n\n const filteredStudentResults = filterStudentResults();\n\n return (\n <>\n {props.reportsStyling && <InteractionResponseListHeader interaction={props.interaction} />}\n <div className={props.reportsStyling\n ? 'd-flex justify-content-end'\n : 'd-flex align-items-center justify-content-between border-bottom px-3 py-2'\n }>\n {!props.reportsStyling && <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='studentAnswers' /></p>}\n {!!Object.keys(responsesToMark).length &&\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack={props.isDemo}>\n <div className={`${props.isDemo ? 'pointer-events-none' : ''} ${props.reportsStyling ? 'mt-2' : ''}`}>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n </Tooltip>\n }\n </div>\n <>\n {!props.reportsStyling && <InteractionResponseListFilters filter={filter} toggleFilter={toggleFilter} />}\n\n {!props.reportsStyling && !filteredStudentResults.length && filter && (\n <InteractionResponseListFiltersEmptyStates\n filter={filter}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n />\n )}\n \n {filteredStudentResults && (\n <ul className='list-unstyled mb-0'>\n {filteredStudentResults.map((s, idx) => {\n const anonymisedUserName = anonymiseUserName(\n getUserOrAnonSession(s, props.anonSessions),\n props.anonymiseUsers\n );\n const markingRequired = responsesToMark[s.user?.id || s.sessionId];\n\n let className = props.reportsStyling ? 'bg-white p-2' : 'bg-white px-3 pt-3 pb-2';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking} my-1`;\n\n return (\n <li key={idx} className={props.reportsStyling ? '' : 'border-bottom'}>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n {props.reportsStyling && !!responsesToMark.length &&\n <div className='mt-2'>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n }\n </>\n </>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\nexport function QuestionTableMissingWord(props: QuestionTableAnswersProps) {\n const replacePlaceholders = (str: string) => {\n if (!str) return '';\n\n return str.split(/({\\d+})/).map((part, index) => {\n const match = part.match(/{(\\d+)}/);\n\n if (match) {\n const key = match[1];\n\n const replacement = props.interaction.actionableItems.find(answer => +answer.order === +key);\n\n\n if (replacement) {\n return <span className='bg-white border border-gray-300 rounded p-1 lh-lg' key={index}>{replacement.name}</span>;\n }\n }\n\n return part;\n });\n };\n\n return (\n <div>\n <p className='mb-0'>{replacePlaceholders(props.interaction.data.sentence)}</p>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"fXno_\",\"answerImage\":\"pDAuW\",\"answerWidth\":\"YHK27\"};","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { MultipleChoiceInteractionAnswers } from 'libs/shared/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers';\n\nimport styles from './question-table-answers.scss';\n\nexport function QuestionTableMultipleChoice(props: QuestionTableAnswersProps) {\n const hasImages = !!ArrayHelper.first(props.interaction?.actionableItems).data?.imageUrl;\n\n if (!hasImages) {\n return (\n <ul className={`${styles.answerWidth} list-unstyled row g-2`}>\n {props.interaction.actionableItems.map(option => {\n return (\n <li key={option.id} className='col-12'>\n <div className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border py-1 px-2 m-0`}>\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </div>\n </li>\n );\n })}\n </ul>\n );\n }\n\n return (\n <div className={styles.answerWidth}>\n <MultipleChoiceInteractionAnswers\n interaction={props.interaction}\n size='sm'\n showFeedback={false}\n showCorrectnessIcons\n isDisplayOnly\n />\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './question-table-answers.scss';\n\nconst namespace = 'shared.questionTable';\n\nexport function QuestionTableShortAnswer(props: QuestionTableAnswersProps) {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n if (!suggestedResponse) return <></>;\n\n return (\n <div className={`${styles.answerWidth} bg-light-blue rounded p-2 mb-2`}>\n <div className='d-flex justify-content-between'>\n <p className='fw-semibold mb-2'>\n <Text namespace={namespace} phrase='suggestedResponse' />\n </p>\n </div>\n\n <p className='mb-0'>{suggestedResponse}</p>\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\n\nexport function QuestionTableTrueOrFalse(props: QuestionTableAnswersProps) {\n return (\n <ul className='list-unstyled d-flex gap-2'>\n {props.interaction.actionableItems.map(option => {\n return (\n <li\n key={option.id}\n className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border px-2 py-1 mb-2 w-50`}\n >\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </li>\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { QuestionTableMissingWord } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord';\nimport { QuestionTableMultipleChoice } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice';\nimport { QuestionTableShortAnswer } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer';\nimport { QuestionTableTrueOrFalse } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse';\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nexport interface QuestionTableAnswersProps {\n interaction: Interaction;\n indexToLetter?: (index: number) => string;\n}\n\nexport function QuestionTableAnswers(props: QuestionTableAnswersProps) {\n function getQuestionTableAnswerComponent(): JSX.Element {\n switch (props.interaction.typeId) {\n case InteractionTypeId.MultipleChoice:\n return <QuestionTableMultipleChoice interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.TrueOrFalse:\n return <QuestionTableTrueOrFalse interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.ShortAnswer:\n return <QuestionTableShortAnswer interaction={props.interaction} />;\n case InteractionTypeId.MissingWord:\n return <QuestionTableMissingWord interaction={props.interaction} />;\n default: return null;\n }\n }\n\n const QuestionTableAnswerComponent = getQuestionTableAnswerComponent();\n\n if (!QuestionTableAnswerComponent) return <></>;\n\n return (\n <div className='w-100 mt-3'>\n {QuestionTableAnswerComponent}\n </div>\n );\n}","import React from 'react';\nimport { Column, ColumnInstance, Row, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { QuestionTableAnswers } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction sortScore(\n rowA: Row<InteractionWithResultsSummary>,\n rowB: Row<InteractionWithResultsSummary>,\n columnId: string\n): 1 | -1 {\n const cellA = rowA.cells.find(cell => cell.column.id === columnId).value;\n const cellB = rowB.cells.find(cell => cell.column.id === columnId).value;\n\n if (cellA.awaitingMarking)\n return -1;\n\n if (cellB.awaitingMarking)\n return 1;\n\n return cellA.percentCorrect >= cellB.percentCorrect\n ? 1\n : -1;\n}\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<InteractionWithResultsSummary>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={props.column.isSorted && 'fw-bold'}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport function getColumns(\n showAnswersInTable: boolean\n): Column<InteractionWithResultsSummary>[] {\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='#' />,\n accessor: 'questionNumber',\n id: 'index',\n Cell: ({ row: { original: { questionNumber } } }) => {\n return <CellWrapper>{questionNumber + 1}.</CellWrapper>;\n },\n width: 15,\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='question' />,\n accessor: 'data', // This isn't used but it's needed for the typings on row,\n Cell: ({ row: { original: interaction }, initialState: { selectedRowIds } }) => {\n const selectedRow = selectedRowIds?.[interaction?.id];\n\n return (\n <CellWrapper className='flex-column'>\n <div className={`${!selectedRow ? 'clamp-1' : ''} pe-2`}>\n <InteractionLabel interaction={interaction} containerClassName='d-flex' />\n </div>\n\n {showAnswersInTable && selectedRow && (\n <QuestionTableAnswers interaction={interaction} />\n )}\n </CellWrapper>\n );\n },\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'resultsSummary',\n id: 'correctlyAnswered',\n Cell: ({ value: { percentCorrect, awaitingMarking } }) => {\n if (awaitingMarking) {\n return (\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n tooltipClassName='d-block'\n showLabel\n />\n );\n }\n\n return (\n <PercentageIndicator\n percentage={percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n );\n },\n width: 60,\n sortDescFirst: true,\n sortType: sortScore\n }\n ];\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n sortBy?: SortingRule<InteractionWithResultsSummary>\n): InteractionWithResultsSummary[] {\n return React.useMemo(() => {\n const flattenedInteractions = getInteractions(interactive);\n const questionNumbers: HashObject = flattenedInteractions.reduce((acc, interaction, index) => ({\n ...acc, [interaction.id]: index\n }), {});\n\n const interactions = flattenedInteractions.map(i => ({\n ...i,\n questionNumber: questionNumbers[i.id],\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n if (sortBy?.id === 'correctlyAnswered') {\n const sorted = ArrayHelper.sortBy(interactions, interaction => {\n if (interaction.resultsSummary.awaitingMarking)\n return -1;\n\n return interaction.resultsSummary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return interactions;\n }, [ refreshData, sortBy ]);\n}\n\nexport function indexToLetter(index: number) {\n return String.fromCharCode(index + 'A'.charCodeAt(0));\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface QuestionSummary {\n id?: string;\n count: number;\n isCorrect: boolean;\n label?: string | number;\n}\n\nexport function multipleChoiceSummary(\n interaction: Interaction,\n studentResults: InteractiveResultSet\n): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map((item, i) => {\n return {\n id: item.id,\n label: interaction.typeId === InteractionTypeId.MultipleChoice ? indexToLetter(i) : item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary)\n questionSummary.count++;\n });\n });\n\n return questionsSummary;\n}\n\nexport function missingWordSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map(item => {\n return {\n id: item.id,\n label: item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n questionsSummary.push({\n label: getPhrase('incorrect'),\n count: 0,\n isCorrect: false\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary && answer.status === InteractiveAnswerStatus.Correct) {\n questionSummary.count++;\n } else {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n\n incorrectSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}\n\nexport function markedSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = [\n {\n label: getPhrase('correct'),\n isCorrect: true,\n count: 0\n },\n {\n label: getPhrase('incorrect'),\n isCorrect: false,\n count: 0\n }\n ];\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n if (answer.status === InteractiveAnswerStatus.Correct) {\n const correctSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('correct') });\n correctSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.Incorrect) {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n incorrectSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.PendingReview) {\n let pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n\n if (!pendingSummary) {\n questionsSummary.push({\n label: getPhrase('pending'),\n count: 0,\n isCorrect: false\n });\n pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n }\n\n pendingSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { markedSummary, missingWordSummary, multipleChoiceSummary, QuestionSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface QuestionResultsSummaryProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n}\n\nexport function QuestionResultsSummary(props: QuestionResultsSummaryProps) {\n const questionSummary = getQuestionSummary();\n const maxResponseCount = getMaxResponseCount();\n\n function getQuestionSummary(): QuestionSummary[] {\n if (!props.interaction || !props.results) return;\n\n let summaryMethod: (\n interaction: Interaction,\n results: InteractiveResultSet,\n interactionTypeId?: InteractionTypeId\n ) => QuestionSummary[];\n\n switch (props.interaction.typeId) {\n case InteractionTypeId.ShortAnswer:\n case InteractionTypeId.Illustration:\n summaryMethod = markedSummary;\n break;\n case InteractionTypeId.MissingWord:\n summaryMethod = missingWordSummary;\n break;\n case InteractionTypeId.MultipleChoice:\n case InteractionTypeId.TrueOrFalse:\n summaryMethod = multipleChoiceSummary;\n break;\n }\n\n return summaryMethod(props.interaction, props.results);\n }\n\n function getMaxResponseCount() {\n return questionSummary?.reduce((acc, summary) => summary.count > acc ? summary.count : acc, 0);\n }\n\n function getBarClassName(summary: QuestionSummary) {\n const className = 'border rounded me-2';\n\n if (!summary.count)\n return `${className} border bg-light px-1`;\n\n if (summary.label === getPhrase('pending'))\n return `${className} border-blue bg-light-blue`;\n\n if (summary.isCorrect)\n return `${className} border-green bg-light-green`;\n\n return `${className} border-red bg-light-red`;\n }\n\n return (\n <div className='border border rounded p-3 mb-3'>\n <div className='d-flex align-items-center gap-2 mb-3'>\n <div className='rounded-circle bg-light-teal text-teal'>\n <SvgContainer svgName={cvSvgLibrary.Lightbulb} size={SvgContainerSize.Large} />\n </div>\n <h2 className='h6 mb-0'>\n <span><Text namespace={namespace} phrase='questionSummary' /></span>\n </h2>\n </div>\n <div className='d-flex gap-2'>\n <div className='max-w-25'>\n {questionSummary?.map(summary => {\n return (\n <p key={summary.label} className='text-truncate mb-2'>{summary.label}</p>\n );\n })}\n </div>\n <div className='flex-grow-1'>\n {questionSummary?.map((summary, i) => {\n return (\n <div key={`${props.interaction.id}${i}`} className='d-flex mb-2'>\n <div\n className={getBarClassName(summary)}\n style={{ width: `${(summary.count / maxResponseCount) * 100}%`, height: 20 }}>\n </div>\n <span>{summary.count}</span>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.selectedInteractionEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SelectedInteractionEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function SelectedInteractionEmptyState(props: SelectedInteractionEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\nimport { Row, SortingRule } from 'react-table';\n\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InteractionResponseList } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList';\nimport { QuestionResultsSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary';\nimport { SelectedInteractionEmptyState } from 'libs/shared/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionById } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interactive, InteractiveResultSet, StudentAnswer } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nimport { getColumns, useGetTableData } from './QuestionTableUtils';\n\ninterface QuestionTableProps {\n interactive: Interactive;\n results: InteractiveResultSet;\n markedAnswers: { [id: string]: StudentAnswer };\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n editSuggestedResponse?: () => void;\n imageCdnUrl: string;\n selectQuestionImageUrl: string;\n anonymiseUsers: boolean;\n sortBy?: SortStudentsBy;\n emptyStateImageUrl: string;\n markingRequiredImageUrl?: string;\n correctImageUrl?: string;\n incorrectImageUrl?: string;\n skippedImageUrl?: string;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n selectedInteractionId?: string;\n showAnswersInTable?: boolean;\n theme: TableTheme;\n reportsStyling?: boolean;\n isDemo?: boolean;\n anonSessions?: AnonSessions;\n}\n\nexport function QuestionTable(props: QuestionTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<InteractionWithResultsSummary>[]>(\n getSortStudents(props.sortBy, 'correctlyAnswered')\n );\n const data = useGetTableData(props.interactive, props.results, props.refreshTable, ArrayHelper.first(sortBy));\n\n const selectedInteraction = props.selectedInteractionId &&\n getInteractionById(props.interactive, props.selectedInteractionId);\n\n function onSelectRow({ original: interaction }: Row<InteractionWithResultsSummary>): void {\n ScrollHelper.preventScrollTop();\n\n AppRouteHelper.updateParams(\n { interactionId: interaction.id },\n { merge: true }\n );\n }\n\n return (\n <div className='row'>\n <div className='col-6 flex-grow-1'>\n <Table\n key={props.selectedInteractionId}\n columns={getColumns(props.showAnswersInTable)}\n data={data}\n theme={props.theme}\n onSelectRow={onSelectRow}\n initialSelectedRowIds={selectedInteraction ? [selectedInteraction.id] : null}\n getRowId={(row: InteractionWithResultsSummary) => row.id}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n />\n </div>\n <div className='col-6 d-flex flex-column'>\n {!props.reportsStyling && props.selectedInteractionId && !!props.results.students?.length && (\n <QuestionResultsSummary\n interaction={selectedInteraction}\n results={props.results}\n />\n )}\n\n <div className={`rounded flex-grow-1 ${props.reportsStyling ? '' : 'border'}`}>\n {!!selectedInteraction &&\n <InteractionResponseList\n interaction={selectedInteraction}\n results={props.results}\n markedAnswers={props.markedAnswers}\n addMarkedAnswers={props.addMarkedAnswers}\n submitMarkedAnswers={props.submitMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n emptyStateImageUrl={props.emptyStateImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n reportsStyling={props.reportsStyling}\n isDemo={props.isDemo}\n anonSessions={props.anonSessions}\n />\n }\n {!selectedInteraction && <SelectedInteractionEmptyState emptyStateUrl={props.selectQuestionImageUrl} />}\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"mhxg4\"};","import React from 'react';\n\nimport styles from './partial-interactive-insights-questions.scss';\n\nexport function PartialInteractiveInsightsQuestions() {\n return (\n <div>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { QuestionTable } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTable';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ConfirmationPopup } from 'libs/shared/components/confirmation-popup/ConfirmationPopup';\nimport { TableTheme } from 'libs/shared/components/table/Table';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { PartialInteractiveInsightsQuestions } from 'apps/my-shares/components/interactive-insights-questions/partial-loading/PartialInteractiveInsightsQuestions';\n\n\nconst namespace = 'shared.interactiveInsightsQuestions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst theme: TableTheme = {\n table: 'bg-white rounded border h-100 pb-2',\n header: 'border-bottom px-3 py-2 mb-2',\n headerCell: 'd-flex align-items-center',\n cell: '',\n row: `px-3 py-2 bg-light-blue-hover`,\n selectedRow: 'bg-gray-100',\n sortIndicator: 'ms-2'\n};\n\ninterface InteractiveInsightsQuestionsProps {\n interactionId: string;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n isFetching: boolean;\n config: Config;\n hasDataLoaded: boolean;\n anonymiseUsers: boolean;\n sortBy: SortStudentsBy;\n isDemo?: boolean;\n anonSessions?: AnonSessions;\n}\n\nexport function InteractiveInsightsQuestions(props: InteractiveInsightsQuestionsProps) {\n const [ showMarkConfirmationPopup, setShowMarkConfirmationPopup ] = React.useState(false);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n props.interactive?.id,\n props.interactiveMetadata?.id,\n () => setShowMarkConfirmationPopup(false)\n );\n\n return (\n <>\n {!props.hasDataLoaded && <PartialInteractiveInsightsQuestions />}\n\n {props.hasDataLoaded &&\n <QuestionTable\n interactive={props.interactive}\n results={props.results}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={() => setShowMarkConfirmationPopup(true)}\n imageCdnUrl={props.config.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n refreshTable={props.isFetching}\n emptyStateImageUrl={ImageUrls.Insights.NO_RESPONSES}\n selectQuestionImageUrl={ImageUrls.Insights.NO_DATA}\n anonymiseUsers={props.anonymiseUsers}\n sortBy={props.sortBy}\n showAnswersInTable\n theme={theme}\n correctImageUrl={ImageUrls.Insights.JIGSAW}\n incorrectImageUrl={ImageUrls.Insights.RED_JIGSAW}\n skippedImageUrl={ImageUrls.Insights.SKIPPED}\n markingRequiredImageUrl={ImageUrls.Insights.CLIPBOARD}\n isDemo={props.isDemo}\n anonSessions={props.anonSessions}\n />\n }\n\n {showMarkConfirmationPopup &&\n <ConfirmationPopup\n title={getPhrase('markPopupTitle', { smartCount: Object.keys(markedAnswers).length ?? 0 })}\n closePopup={() => setShowMarkConfirmationPopup(false)}\n confirmButtonText={getPhrase('submit')}\n confirmButtonVariant='dark'\n onClickConfirm={submitMarkedAnswers}\n >\n <p>{getPhrase('markPopupBody')}</p>\n </ConfirmationPopup>\n }\n </>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.insightsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype InsightsTabs = 'insights' | 'heatmap' | 'results' | 'questions' | 'shareOptions' | 'videos';\n\nexport function getInsightsVideoTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsClipTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.CLIP_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.CLIP_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.CLIP_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsInteractiveTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject,\n hasShareFlowV2: boolean = true\n) {\n const tabs = [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_OVERVIEW,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_STUDENTS,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_QUESTIONS,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_HEATMAP,\n args: [id],\n params\n }\n }\n ];\n\n if (hasShareFlowV2) {\n return [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n ...tabs\n ];\n }\n\n return tabs;\n}\n\nexport function getInsightsDemoInteractiveTabs(id: string, active: InsightsTabs, params: HashObject) {\n return [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_DEMO,\n args: [id],\n params\n }\n }\n ];\n}\n\nexport function getInsightsSeriesTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject\n) {\n const tabs = [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.SERIES_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n {\n name: 'Videos',\n active: active === 'videos',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.SERIES_VIDEOS,\n args: [id],\n params\n }\n }\n ];\n\n return tabs;\n}\n\nexport function getInsightsPlaylistTabs(\n id: string,\n active: InsightsTabs,\n params: HashObject\n) {\n const tabs = [\n {\n name: 'Report',\n active: active === 'shareOptions',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.PLAYLIST_SHARE_OPTIONS,\n args: [id],\n params\n }\n },\n {\n name: 'Videos',\n active: active === 'videos',\n appLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.PLAYLIST_VIDEOS,\n args: [id],\n params\n }\n }\n ];\n\n return tabs;\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["getPhrase","getClassName","props","className","showLabel","PendingIndicator","Indicator","title","spanHack","spanHackClassName","tooltipClassName","getSortStudents","sortBy","id","desc","shouldFilterStudent","filter","summary","awaitingMarking","percentCorrect","unanswered","ConfirmationPopup","showButtonSpinner","setShowButtonSpinner","closePopup","children","onClick","variant","cancelButtonVariant","text","cancelButtonText","onClickConfirm","confirmButtonText","confirmButtonVariant","showSpinner","disabled","disabledConfirmButton","defaultProps","TabContents","tab","svgName","name","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","map","index","active","key","appLink","analyticsData","analyticsOptions","onSelect","onSelectTab","DragOverlayStyles","opacity","cursor","calculateScrollState","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","SvgContainer","isSortedDesc","size","S","BaseTable","ids","idHash","tableOptions","columns","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","AppLink","renderCells","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","length","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","style","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","namespace","InsightsAdminAlert","storage","show","setShow","hasAnalytics","phrase","href","video","analyticsUrl","videoRoute","typeId","getAnalyticsUrl","target","InsightsHeader","actions","anonymiseUsers","setAnonymiseUsers","analyticsWebUrl","breadcrumbs","application","action","dropdownToggleClassName","label","args","push","htmlFor","on","InteractionResponseListFiltersEmptyStates","EmptyState","src","correctImageUrl","incorrectImageUrl","markingRequiredImageUrl","skippedImageUrl","getFilterEmptyStateImageUrl","Text","getFilterEmptyStatePhrase","InteractionResponseListFilters","getFilterClassName","filterButton","isFilterSelected","toggleFilter","LanguageService","InteractionResponseListHeader","suggestedResponse","interaction","InteractionLabel","iconClassName","SubmitMarkedAnswers","submit","InteractionResponseList","setFilter","responsesToMark","results","students","s","InteractiveCorrectnessHelper","InteractionCorrectness","reduce","acc","user","sessionId","numMarkedAnswers","Object","keys","markedAnswers","emptyStateImageUrl","filteredStudentResults","result","correctness","filterMap","correct","incorrect","marking_required","skipped","reportsStyling","Tooltip","isDemo","submitMarkedAnswers","selectedFilter","idx","anonymisedUserName","anonSessions","markingRequired","InteractionResponse","studentResults","markedStatus","markInteraction","addMarkedAnswers","imageCdnUrl","showStudentDetails","showFeedback","responseComponentClass","InteractionResponseItem","QuestionTableMissingWord","str","sentence","split","part","match","replacement","actionableItems","find","answer","order","QuestionTableMultipleChoice","ArrayHelper","imageUrl","MultipleChoiceInteractionAnswers","showCorrectnessIcons","isDisplayOnly","option","isCorrect","indexToLetter","QuestionTableShortAnswer","QuestionTableTrueOrFalse","QuestionTableAnswers","QuestionTableAnswerComponent","getQuestionTableAnswerComponent","sortScore","rowA","rowB","columnId","cellA","value","cellB","CellWrapper","HeaderCell","phraseKey","String","fromCharCode","charCodeAt","multipleChoiceSummary","questionsSummary","i","student","latestAttempts","attempts","response","answers","questionSummary","missingWordSummary","status","InteractiveAnswerStatus","markedSummary","pendingSummary","QuestionResultsSummary","summaryMethod","getQuestionSummary","maxResponseCount","getBarClassName","width","height","SelectedInteractionEmptyState","emptyStateUrl","QuestionTable","showAnswersInTable","setSortBy","interactive","refreshData","flattenedInteractions","questionNumbers","interactions","questionNumber","resultsSummary","sorted","reverse","useGetTableData","refreshTable","selectedInteraction","selectedInteractionId","Header","accessor","Cell","containerClassName","PercentageIndicator","percentage","sortDescFirst","sortType","ScrollHelper","AppRouteHelper","interactionId","merge","selectQuestionImageUrl","PartialInteractiveInsightsQuestions","InteractiveInsightsQuestions","showMarkConfirmationPopup","setShowMarkConfirmationPopup","interactiveMetadata","hasDataLoaded","config","isFetching","ImageUrls","smartCount","getInsightsVideoTabs","params","hasShareFlowV2","getInsightsClipTabs","getInsightsInteractiveTabs","getInsightsDemoInteractiveTabs","getInsightsSeriesTabs","getInsightsPlaylistTabs"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2024],{71553:(e,t,r)=>{r.d(t,{I:()=>c});var a=r(99940),n=r(62875);function i(e,t){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:{start:t.start,end:t.end},userIds:t.userId,classroomsAndGroups:t.groupId}}var c={interactiveResultSet:function(e,t,r,c,o,s,u,l){return{url:o?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:(0,n.H)("interactive:result:set:".concat(e,":").concat(t),c),data:i(r,c),type:a.k.POST,normalize:!1,success:s,error:u,always:l}},mark:function(e,t,r,n,i,c,o){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(n.resultId),type:a.k.PUT,data:n,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:i,error:c,always:o}},pendingReviews:function(e){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews",type:a.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"{gateway}/v2/analytics/interactives/report",key:"interactive:results:report",data:e,type:a.k.POST,normalize:!1}}}},41196:(e,t,r)=>{r.d(t,{W:()=>o});var a=r(20354),n=r(71553),i=r(20768),c=r(31949);function o(e,t,r){var o,s=a.a.useBasicFetch(c.N.currentUser()),u=a.a.useBasicFetch(!!e&&i.b.interactiveMetadata(e)),l=a.a.useBasicFetch(!!(null===(o=u.data)||void 0===o?void 0:o.interactiveId)&&i.b.interactive(u.data.interactiveId)),d=!!s.data&&!!l.data&&!!t;return a.a.useBasicFetch(d&&n.I.interactiveResultSet(u.data.interactiveId,u.data.id,s.data,t,r))}},1568:(e,t,r)=>{r.r(t),r.d(t,{GenerateInteractiveResultsReportView:()=>M});var a=r(32735),n=r(23481),i=r(2948),c=r(20354),o=r(110),s=r(84806),u=r(71553),l=r(41196),d=r(26025),v=r(74901),m=r(40003),p=r(2606),f=r(9111),y=r(13876),w=r(83345),h=r(38143),g=r(28972),b=r(20768),I=r(31949),k=r(69883),R=r(91286),S=r(83140),E=r(80845),A=r(64818);function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var a,n,i,c,o=[],s=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1}else for(;!(s=(a=i.call(r)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){u=!0,n=e}finally{try{if(!s&&null!=r.return&&(c=r.return(),Object(c)!==c))return}finally{if(u)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?C(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}var O="shared.generateReport",P=n.T.encloseNamespace(O);function j(e){var t=o.O.convertUTCToLocal(e).toString();return o.O.format(t,"Do MMMM YYYY")}function M(e){var t,r,n=F((0,i.D)(h.g.ANONYMISE_USERS),1)[0],o=(0,k.Z)(),C=c.a.useGetFetchAsync(),M=d.B.getAudienceAppLinkParams(),B=d.B.getDateRangeAppLinkParams(),N=(0,m.wO)((0,m.Hb)(),B),T=F(a.useState(!1),2),_=T[0],U=T[1],q=c.a.useBasicFetch(I.N.currentUser()),Q=c.a.useBasicFetch(b.b.interactiveMetadata(e.interactiveId)),x=c.a.useBasicFetch((null===(t=Q.data)||void 0===t?void 0:t.interactiveId)?b.b.interactive(Q.data.interactiveId):null),D=(0,l.W)(e.interactiveId,Object.assign(Object.assign({},N),(0,v.K)(M)));(0,R.v)([x,Q,D]);var L=(0,E.Q)(x.data),Y=(0,s.Fx)(x.data,D.data,!1,n);return a.createElement(w.D.Provider,{value:O},a.createElement(f.G,{title:P("title"),showLoadingSpinner:!q.hasCompleted,closePopup:e.closePopup},a.createElement(a.Fragment,null,a.createElement("p",null,a.createElement(w.x,{phrase:"description"})),a.createElement("p",null,a.createElement(w.x,{phrase:"dateRange",options:{dateFrom:j(N.start),dateTo:j(N.end)}})),a.createElement("p",null,a.createElement(w.x,{phrase:"emailDescription",options:{email:null===(r=q.data)||void 0===r?void 0:r.email}})),a.createElement(y.u,null,a.createElement(y.u.Cancel,{onClick:e.closePopup}),a.createElement(y.u.Submit,{variant:"dark",onClick:function(){U(!0);var t={interactiveName:Q.data.name,userId:q.data.id,customerId:q.data.customerId,questions:L.map((function(e){return e.name})),rows:Y.map((function(e){return{name:A.l.getFullName(e.user),unanswered:e.summary.unanswered,percentage:(0,p.DV)((0,p.Ki)(e.summary.percentCorrect)),correct:e.summary.correct,totalQuestions:e.summary.answered+e.summary.unanswered,results:L.map((function(t){switch(S.A.isInteractionCorrect(t,(0,E.j_)(e))){case g.w.Correct:return P("correct");case g.w.Incorrect:return P("incorrect");case g.w.NotApplicable:return"-";case g.w.AwaitingMarking:return P("awaitingMarking");case g.w.UnAnswered:case g.w.Answered:default:return""}}))}}))};C(u.I.interactiveResultsReport(t)).then((function(){o.success(P("success"))})).catch((function(){o.error(P("error"))})).finally(e.closePopup)},text:P("generateReport"),showSpinner:_})))))}},94644:(e,t,r)=>{r.d(t,{r:()=>l});var a=r(50242),n=r(81886),i=r(67058),c=r(14553),o=r(49267),s=r(49075),u={notFound:i.d,forbidden:{rating:c.q,yearLevel:c.q,region:o.a,privacy:c.q},badRequest:s._,internalServerError:s._};function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var c=Object.assign(Object.assign({},u),t);i&&n.Q.Ry.isStatusCodeError(i)&&(i!==a.o.InternalServer?i!==a.o.NotFound?i!==a.o.Forbidden?r.badRequest||n.Q.Ry.throw(new c.badRequest):r.forbidden||n.Q.Ry.throw(new c.forbidden.privacy):r.notFound||n.Q.Ry.throw(new c.notFound):r.internalServerError||n.Q.Ry.throw(new s._))}}},91286:(e,t,r)=>{r.d(t,{v:()=>c});var a=r(32735),n=r(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function c(e,t,r){var c=Array.isArray(e)?e:[e];(0,a.useEffect)((function(){c.forEach((function(e){(0,n.r)(e.statusCode,t,r)}))}),[i(c),t,r])}}}]);
2
- //# sourceMappingURL=2024-abf6cf1842-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/2024-abf6cf1842-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts","file:///app/packages/libs/shared/src/apps/analytics/views/generate-report/GenerateInteractiveResultsReportView.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: { start: filter.start, end: filter.end },\n userIds: filter.userId,\n classroomsAndGroups: filter.groupId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n includePublicResults: boolean,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: includePublicResults ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '{gateway}/v2/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter: AnalyticsRequestFilter,\n includePublicResults?: boolean\n): Flight.Response<InteractiveResultSet> {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!interactiveMetadataId &&\n InteractiveRequests.interactiveMetadata(interactiveMetadataId));\n\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const shouldFetchResults = !!currentUser.data && !!interactive.data && (!!requestFilter);\n\n return Flight.useBasicFetch<InteractiveResultSet>(shouldFetchResults &&\n InteractiveResultsRequests.interactiveResultSet(\n interactiveMetadata.data.interactiveId,\n interactiveMetadata.data.id,\n currentUser.data,\n requestFilter,\n includePublicResults\n ));\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { useGetResultsTableData } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTableUtils';\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { getFormattedPercentage, getPercentageToFixed } from 'libs/shared/components/percentage-indicator/PercentageIndicatorUtils';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { CurrentUser, Interactive, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.generateReport';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getReportFriendlyDate(date: string): string {\n const localDate = DateHelper.convertUTCToLocal(date).toString();\n return DateHelper.format(localDate, 'Do MMMM YYYY');\n}\n\ninterface GenerateInteractiveResultsReportViewProps extends PopupViewProps {\n interactiveId: string;\n}\n\nexport function GenerateInteractiveResultsReportView(props: GenerateInteractiveResultsReportViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const startEndParams = getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams);\n\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const results = useFetchInteractiveResults(props.interactiveId, {\n ...startEndParams,\n ...getAudienceParams(audienceAppLinkParams)\n });\n\n useHandleObjectError([ interactive, interactiveMetadata, results ]);\n\n const interactions = getInteractions(interactive.data);\n\n const answerData = useGetResultsTableData(interactive.data, results.data, false, anonymiseUsers);\n\n function onClickGenerate(): void {\n setShowSpinner(true);\n\n const body: InteractiveResultsReport = {\n interactiveName: interactiveMetadata.data.name,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n questions: interactions.map(i => i.name),\n rows: answerData.map(answer => {\n return {\n name: UserHelper.getFullName(answer.user),\n unanswered: answer.summary.unanswered,\n percentage: getFormattedPercentage(getPercentageToFixed(answer.summary.percentCorrect)),\n correct: answer.summary.correct,\n totalQuestions: answer.summary.answered + answer.summary.unanswered,\n results: interactions.map(interaction => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(answer)\n );\n\n switch (correctness) {\n case InteractionCorrectness.Correct:\n return getPhrase('correct');\n\n case InteractionCorrectness.Incorrect:\n return getPhrase('incorrect');\n\n case InteractionCorrectness.NotApplicable:\n return '-';\n\n case InteractionCorrectness.AwaitingMarking:\n return getPhrase('awaitingMarking');\n\n case InteractionCorrectness.UnAnswered:\n case InteractionCorrectness.Answered:\n default:\n return '';\n }\n })\n };\n })\n };\n\n fetchAsync(InteractiveResultsRequests.interactiveResultsReport(body))\n .then(() => {\n alerts.success(getPhrase('success'));\n })\n .catch(() => {\n alerts.error(getPhrase('error'));\n })\n .finally(props.closePopup);\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Popup\n title={getPhrase('title')}\n showLoadingSpinner={!currentUser.hasCompleted}\n closePopup={props.closePopup}\n >\n <>\n <p>\n <Text phrase='description' />\n </p>\n <p>\n <Text phrase='dateRange' options={({\n dateFrom: getReportFriendlyDate(startEndParams.start),\n dateTo: getReportFriendlyDate(startEndParams.end)\n })} />\n </p>\n <p>\n <Text phrase='emailDescription' options={({ email: currentUser.data?.email })} />\n </p>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='dark'\n onClick={onClickGenerate}\n text={getPhrase('generateReport')}\n showSpinner={showSpinner}\n />\n </PopupButtons>\n </>\n </Popup>\n </LanguageNamespaceContext.Provider>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}"],"names":["getInteractiveResultFilters","currentUser","filter","currentUserId","id","currentCustomerId","customerId","dateRange","start","end","userIds","userId","classroomsAndGroups","groupId","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","includePublicResults","success","error","always","url","key","data","type","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","useFetchInteractiveResults","requestFilter","interactiveMetadata","interactive","shouldFetchResults","I","namespace","getPhrase","getReportFriendlyDate","date","localDate","toString","GenerateInteractiveResultsReportView","props","anonymiseUsers","alerts","fetchAsync","audienceAppLinkParams","dateRangeAppLinkParams","startEndParams","showSpinner","setShowSpinner","results","interactions","answerData","value","title","showLoadingSpinner","hasCompleted","closePopup","phrase","options","dateFrom","dateTo","email","onClick","variant","body","interactiveName","name","questions","map","i","rows","answer","user","unanswered","summary","percentage","percentCorrect","correct","totalQuestions","answered","interaction","then","text","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2072],{38307:(e,t,a)=>{a.d(t,{c:()=>f,l:()=>I});var n=a(32735),i=a(232),r=a.n(i),c=a(8604),o=a(83345);const s={heatMap:"epapa",legend:"uhH4p"};function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var p="shared.engagementHeatMap",m="#f1f1f1",u=r().scale(["#daf07d","#08bd1a"]),d=[0,.01,.25,.5,.75,1];function E(e,t){return e?u(e/t).hex():m}function v(e,t){for(var a=[],n=0;n<e.length;n++){var i=n>0&&e[n-1],r=e[n],c=n<e.length-1&&e[n+1];r===i&&r===c||a.push("".concat(E(r,t)," ").concat(100/e.length*n,"%"))}return"linear-gradient(to right, ".concat(a.join(","),")")}function I(){var e=Math.max.apply(Math,d),t=100/d.length;return n.createElement("div",{className:"d-flex justify-content-between w-100"},n.createElement(o.x,{namespace:p,phrase:"less"}),n.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(s.legend)},d.map((function(a,i){return n.createElement("div",{key:i,style:{width:"".concat(t,"%"),backgroundColor:E(a,e)}})}))),n.createElement(o.x,{namespace:p,phrase:"more"}))}function f(e){var t,a,i,r=(0,c.O)(e.engagement),o=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return l(e)}(i=r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(i)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}(i)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return n.createElement("div",{className:"border rounded ".concat(s.heatMap," ").concat(null!==(a=e.className)&&void 0!==a?a:""),style:{background:v(r,o)}})}},8604:(e,t,a)=>{function n(e){return new Array(Math.ceil(e.videoDuration)).fill(null).map((function(t,a){return e.heatMap[a]||0}))}a.d(t,{O:()=>n})},38502:(e,t,a)=>{a.d(t,{r:()=>m});var n=a(32735),i=a(49985),r=a(15611),c=a(18559),o=a(11607),s=a(83914),l=a(22771);function p(e){return n.createElement(n.Fragment,null,!!e.tab.svgName&&n.createElement("div",{className:e.tab.name?"pe-1":""},n.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&n.createElement("div",{className:"ps-2"},n.createElement(c.C,{type:c.g.Count,data:e.tab.count})))}function m(e){var t;return n.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},n.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return n.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?n.createElement(r.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},n.createElement(p,{tab:e})):n.createElement(o.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&i.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},n.createElement(p,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},93322:(e,t,a)=>{a.d(t,{F:()=>r});var n=a(32735),i=a(13126);function r(){n.useEffect((function(){return i.e.lockContentWidth(),function(){return i.e.unlockContentWidth()}}),[])}},99746:(e,t,a)=>{a.d(t,{p:()=>E});var n=a(32735),i=a(57900),r=a(97395),c=a(2948),o=a(91693),s=a(83345),l=a(4594),p=a(35223),m=a(86702);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var d="lite.insightsAdminAlert";function E(e){var t,a,E=(t=(0,c.D)(m.y.INSIGHTS_ADMIN_ALERT,!0,{storage:i.Z1.LocalStorage}),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,c,o=[],s=!0,l=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;s=!1}else for(;!(s=(n=r.call(a)).done)&&(o.push(n.value),o.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=a.return&&(c=a.return(),Object(c)!==c))return}finally{if(l)throw i}}return o}}(t,a)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?u(e,t):void 0}}(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),v=E[0],I=E[1];return e.hasAnalytics&&v?n.createElement("div",{role:"alert",className:"d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4"},n.createElement("div",null,n.createElement(s.x,{namespace:d,phrase:"adminAlert"}),n.createElement("a",{className:"text-info",href:function(){if(!e.video)return e.analyticsUrl;var t="";return e.video.typeId===l.E.Interactive&&(t="/interactives/".concat(e.video.id,"/views")),e.video.typeId===l.E.Video&&(t="/videos/".concat(e.video.id,"/views")),e.video.typeId===l.E.Clip&&(t="/clips/".concat(e.video.id,"/views")),r._.safeUrlConcat(e.analyticsUrl,t)}(),target:"_blank"},n.createElement(s.x,{namespace:d,phrase:"analytics"})),"."),n.createElement(o.h,{svgName:p.vn.Close,className:"text-blue",onClick:function(){I(!1)}})):n.createElement(n.Fragment,null)}},53936:(e,t,a)=>{a.d(t,{j:()=>S});var n=a(32735),i=a(23481),r=a(57900),c=a(2948),o=a(76306),s=a(49935),l=a(38502),p=a(83345),m=a(83523),u=a(38143),d=a(4594),E=a(14070),v=a(97291),I=a(99746);function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var g="insights.header",h=i.T.encloseNamespace(g);function S(e){var t,a,i,S,y,b,N,T=(b=(0,c.D)(u.g.ANONYMISE_USERS,!1,{storage:r.Z1.LocalStorage}),N=2,function(e){if(Array.isArray(e))return e}(b)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,c,o=[],s=!0,l=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;s=!1}else for(;!(s=(n=r.call(a)).done)&&(o.push(n.value),o.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=a.return&&(c=a.return(),Object(c)!==c))return}finally{if(l)throw i}}return o}}(b,N)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?f(e,t):void 0}}(b,N)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),O=T[0],A=T[1];return n.createElement("div",null,n.createElement(I.p,{analyticsUrl:e.analyticsWebUrl,hasAnalytics:e.hasAnalytics,video:e.video}),n.createElement("section",{className:"mb-4"},n.createElement("div",{className:"mb-3"},n.createElement("div",{className:"d-flex justify-content-between align-items-center mb-3"},e.video?n.createElement(s.Oo,{breadcrumbs:[{name:"Reports",appLink:{application:v.O.MY_SHARES,action:E.e.MyShares.HOME}},{name:e.video.name,active:!0}]}):n.createElement(s.b2,null),n.createElement(o.m,{dropdownToggleClassName:"btn btn-outline-dark",actions:(y=[{label:"Edit time range",appLink:{application:v.O.INSIGHTS,action:E.e.Insights.INTERACTIVE_GENERATE_REPORT,args:[null===(t=e.video)||void 0===t?void 0:t.id]}},{label:"Edit audience",appLink:{application:v.O.INSIGHTS,action:E.e.Insights.INTERACTIVE_GENERATE_REPORT,args:[null===(a=e.video)||void 0===a?void 0:a.id]}}],(null===(i=e.video)||void 0===i?void 0:i.typeId)===d.E.Interactive&&y.push({label:h("generateReport"),appLink:{application:v.O.INSIGHTS,action:E.e.Insights.INTERACTIVE_GENERATE_REPORT,args:[null===(S=e.video)||void 0===S?void 0:S.id]}}),y)}))),n.createElement("div",{className:"d-flex align-items-center mb-4"},n.createElement(l.r,{tabs:e.tabs}),n.createElement("div",{className:"flex-grow-1"}),n.createElement("div",{className:"d-flex gap-3"},n.createElement("label",{htmlFor:"anonymiseNames",className:"mb-0"},n.createElement(p.x,{namespace:g,phrase:"anonymiseNames"})),n.createElement(m.Z,{id:"anonymiseNames",on:O,onClick:function(){return A(!O)}})))))}},10447:(e,t,a)=>{a.d(t,{$6:()=>o,$o:()=>s,W_:()=>u,aq:()=>p,kj:()=>l,lo:()=>m});var n=a(23481),i=a(14070),r=a(97291),c=n.T.encloseNamespace("shared.insightsUtils");function o(e,t,a){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[{name:c("insights"),active:"insights"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.VIDEO_OVERVIEW,args:[e],params:a}},{name:c("heatmap"),active:"heatmap"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.VIDEO_HEATMAP,args:[e],params:a}}];return n?[{name:"Report",active:"shareOptions"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.VIDEO_SHARE_OPTIONS,args:[e],params:a}}].concat(o):o}function s(e,t,a){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[{name:c("insights"),active:"insights"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.CLIP_OVERVIEW,args:[e],params:a}},{name:c("heatmap"),active:"heatmap"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.CLIP_HEATMAP,args:[e],params:a}}];return n?[{name:"Report",active:"shareOptions"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.CLIP_SHARE_OPTIONS,args:[e],params:a}}].concat(o):o}function l(e,t,a){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[{name:c("insights"),active:"insights"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.INTERACTIVE_OVERVIEW,args:[e],params:a}},{name:c("results"),active:"results"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.INTERACTIVE_STUDENTS,args:[e],params:a}},{name:c("questions"),active:"questions"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.INTERACTIVE_QUESTIONS,args:[e],params:a}},{name:c("heatmap"),active:"heatmap"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.INTERACTIVE_HEATMAP,args:[e],params:a}}];return n?[{name:"Report",active:"shareOptions"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.INTERACTIVE_SHARE_OPTIONS,args:[e],params:a}}].concat(o):o}function p(e,t,a){return[{name:c("insights"),active:"insights"===t,appLink:{application:r.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_OVERVIEW_DEMO,args:[e],params:a}},{name:c("results"),active:"results"===t,appLink:{application:r.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_STUDENTS_DEMO,args:[e],params:a}},{name:c("questions"),active:"questions"===t,appLink:{application:r.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_QUESTIONS_DEMO,args:[e],params:a}},{name:c("heatmap"),active:"heatmap"===t,appLink:{application:r.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_HEATMAP_DEMO,args:[e],params:a}}]}function m(e,t,a){return[{name:"Report",active:"shareOptions"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.SERIES_SHARE_OPTIONS,args:[e],params:a}},{name:"Videos",active:"videos"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.SERIES_VIDEOS,args:[e],params:a}}]}function u(e,t,a){return[{name:"Report",active:"shareOptions"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.PLAYLIST_SHARE_OPTIONS,args:[e],params:a}},{name:"Videos",active:"videos"===t,appLink:{application:r.O.INSIGHTS,action:i.e.Insights.PLAYLIST_VIDEOS,args:[e],params:a}}]}},22771:(e,t,a)=>{a.d(t,{Z:()=>n});const n={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
2
- //# sourceMappingURL=2072-50b656cb3b-lite.chunk.js.map