bitsnap-react 1.12.0 → 1.13.0

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 (90) hide show
  1. package/README.md +40 -3
  2. package/dist/CartProvider-F7ER3WSS.js +2 -0
  3. package/dist/CartProvider-F7ER3WSS.js.map +1 -0
  4. package/dist/CartProvider-N73XNL7S.mjs +2 -0
  5. package/dist/analytics.js +1 -1
  6. package/dist/analytics.js.map +1 -1
  7. package/dist/analytics.mjs +1 -1
  8. package/dist/catalog.js +1 -1
  9. package/dist/catalog.js.map +1 -1
  10. package/dist/catalog.mjs +1 -1
  11. package/dist/{chunk-ICFYSZTV.js → chunk-3A4YOO7Z.js} +2 -2
  12. package/dist/chunk-3A4YOO7Z.js.map +1 -0
  13. package/dist/{chunk-UCESDAEC.mjs → chunk-3DGHF373.mjs} +2 -2
  14. package/dist/chunk-5GMWRCHK.mjs +4 -0
  15. package/dist/chunk-5GMWRCHK.mjs.map +1 -0
  16. package/dist/{chunk-MLSKHOA3.js → chunk-6CUCRTIK.js} +2 -2
  17. package/dist/chunk-6CUCRTIK.js.map +1 -0
  18. package/dist/{chunk-DGUIG334.js → chunk-EWLOGFF2.js} +2 -2
  19. package/dist/chunk-EWLOGFF2.js.map +1 -0
  20. package/dist/chunk-GAVLY6RX.mjs +2 -0
  21. package/dist/chunk-GAVLY6RX.mjs.map +1 -0
  22. package/dist/{chunk-XTIY6PXH.js → chunk-IP4OOWZ6.js} +2 -2
  23. package/dist/chunk-IP4OOWZ6.js.map +1 -0
  24. package/dist/chunk-JSDGZ4NY.js.map +1 -1
  25. package/dist/{chunk-3QG7H2AI.mjs → chunk-K2EITRNW.mjs} +2 -2
  26. package/dist/{chunk-5R3WR22A.mjs → chunk-KH7DFTJY.mjs} +2 -2
  27. package/dist/chunk-KOYBZORL.js.map +1 -1
  28. package/dist/{chunk-E5DCEFI2.mjs → chunk-L6J6H73J.mjs} +2 -2
  29. package/dist/chunk-M4KEUK6I.js +2 -0
  30. package/dist/chunk-M4KEUK6I.js.map +1 -0
  31. package/dist/{chunk-QSIKRVZL.mjs → chunk-OC7YS3UY.mjs} +2 -2
  32. package/dist/chunk-TMBC2BHN.js +4 -0
  33. package/dist/chunk-TMBC2BHN.js.map +1 -0
  34. package/dist/{chunk-DF2IK2GN.js → chunk-TSJCVFOX.js} +2 -2
  35. package/dist/chunk-TSJCVFOX.js.map +1 -0
  36. package/dist/{chunk-6IACFTJR.js → chunk-UFQVOGBS.js} +2 -2
  37. package/dist/chunk-UFQVOGBS.js.map +1 -0
  38. package/dist/chunk-XIHGWNTS.js.map +1 -1
  39. package/dist/{chunk-FF2ICGFQ.mjs → chunk-YNGXQJPE.mjs} +2 -2
  40. package/dist/{chunk-FF2ICGFQ.mjs.map → chunk-YNGXQJPE.mjs.map} +1 -1
  41. package/dist/consent.js.map +1 -1
  42. package/dist/course.js +1 -1
  43. package/dist/course.js.map +1 -1
  44. package/dist/course.mjs +1 -1
  45. package/dist/embed/analytics.js +1 -1
  46. package/dist/errors.js.map +1 -1
  47. package/dist/index.css +1 -1
  48. package/dist/index.css.map +1 -1
  49. package/dist/index.d.mts +59 -2
  50. package/dist/index.d.ts +59 -2
  51. package/dist/index.js +1 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/index.mjs +1 -1
  54. package/dist/index.mjs.map +1 -1
  55. package/dist/internal.js.map +1 -1
  56. package/dist/methods-ADH5XI4I.js +2 -0
  57. package/dist/methods-ADH5XI4I.js.map +1 -0
  58. package/dist/methods-BCR54EWX.mjs +2 -0
  59. package/dist/models.js.map +1 -1
  60. package/dist/returns.js +1 -1
  61. package/dist/returns.js.map +1 -1
  62. package/dist/returns.mjs +1 -1
  63. package/package.json +26 -51
  64. package/dist/CartProvider-XNFSUOCB.js +0 -2
  65. package/dist/CartProvider-XNFSUOCB.js.map +0 -1
  66. package/dist/CartProvider-YMJ7RFO4.mjs +0 -2
  67. package/dist/chunk-4BW6J7FP.js +0 -4
  68. package/dist/chunk-4BW6J7FP.js.map +0 -1
  69. package/dist/chunk-6IACFTJR.js.map +0 -1
  70. package/dist/chunk-DF2IK2GN.js.map +0 -1
  71. package/dist/chunk-DGUIG334.js.map +0 -1
  72. package/dist/chunk-ERL4Z7M7.js +0 -2
  73. package/dist/chunk-ERL4Z7M7.js.map +0 -1
  74. package/dist/chunk-ICFYSZTV.js.map +0 -1
  75. package/dist/chunk-MLSKHOA3.js.map +0 -1
  76. package/dist/chunk-P4Q5KXKS.mjs +0 -2
  77. package/dist/chunk-P4Q5KXKS.mjs.map +0 -1
  78. package/dist/chunk-PNTO3L2C.mjs +0 -4
  79. package/dist/chunk-PNTO3L2C.mjs.map +0 -1
  80. package/dist/chunk-XTIY6PXH.js.map +0 -1
  81. package/dist/methods-DDGOXLP6.mjs +0 -2
  82. package/dist/methods-RQPDIUUN.js +0 -2
  83. package/dist/methods-RQPDIUUN.js.map +0 -1
  84. /package/dist/{CartProvider-YMJ7RFO4.mjs.map → CartProvider-N73XNL7S.mjs.map} +0 -0
  85. /package/dist/{chunk-UCESDAEC.mjs.map → chunk-3DGHF373.mjs.map} +0 -0
  86. /package/dist/{chunk-3QG7H2AI.mjs.map → chunk-K2EITRNW.mjs.map} +0 -0
  87. /package/dist/{chunk-5R3WR22A.mjs.map → chunk-KH7DFTJY.mjs.map} +0 -0
  88. /package/dist/{chunk-E5DCEFI2.mjs.map → chunk-L6J6H73J.mjs.map} +0 -0
  89. /package/dist/{chunk-QSIKRVZL.mjs.map → chunk-OC7YS3UY.mjs.map} +0 -0
  90. /package/dist/{methods-DDGOXLP6.mjs.map → methods-BCR54EWX.mjs.map} +0 -0
package/dist/course.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{b as Fe,j as _e,k as Ke}from"./chunk-3QG7H2AI.mjs";import{m as Qe,n as We,q as N,r as Ye,s as Ae,u as ie,v as xe}from"./chunk-UCESDAEC.mjs";import{d as v,i as Je,m as je}from"./chunk-P4Q5KXKS.mjs";import{l as Ze,n as Xe,r as Me,s as ze}from"./chunk-FF2ICGFQ.mjs";import"./chunk-ADYVTMGH.mjs";import"./chunk-U6FLIRIV.mjs";import{ChevronLeft as Ee,List as Us,Play as Ls}from"lucide-react";import{useCallback as Bt,useEffect as Ge,useMemo as we,useRef as Bs,useState as fe}from"react";function De(e){let t={},s=e?.brand?.trim(),o=e?.brandDark?.trim()||s;if(s){t["--course-accent"]=s;let n=Ae(s);n&&(t["--course-accent-fg"]=n)}if(o){t["--course-accent-dark"]=o;let n=Ae(o);n&&(t["--course-accent-dark-fg"]=n)}return t}import{useCallback as Mt}from"react";import{createContext as Zt,useContext as Xt}from"react";var He=Zt(void 0),qe=He.Provider;function h(){let e=Xt(He);if(e==null)throw new Error("Course components have to be rendered inside PanelCourse");return e}function Q(){let{analytics:e,preview:t}=h();return Mt((s,o)=>{t||e?.courseId==null||e.instrument.track(s,{...o,course_id:e.courseId})},[e,t])}import{CheckCircle2 as Wt,ClipboardCheck as Yt,Lock as Ft,PlayCircle as _t,FileText as Kt}from"lucide-react";function ce(e){return[...e.sections.flatMap(t=>t.items.map(s=>({...s,sectionId:t.id}))),...e.finalItems.map(t=>({...t,sectionId:""}))]}function le(e,t){if(!(t==null||t===""))return ce(e).find(s=>s.id===t)}function ye(e,t){let s=ce(e),o=s.findIndex(n=>n.id===t);return o<0?{}:{prev:s[o-1],next:s[o+1]}}function Oe(e,t){let{next:s}=ye(e,t);return s!=null&&s.kind==="lesson"&&!s.locked?s:void 0}function zt(e){let t=0,s=0;for(let o of e.sections)for(let n of o.items)n.kind==="lesson"&&(t+=1,n.completed&&(s+=1));return{total:t,completed:s,percent:t===0?0:Math.round(s/t*100)}}function $e(e,t){let s=e.sections.map(n=>({...n,items:n.items.map(i=>i.id===t&&i.kind==="lesson"?{...i,completed:!0}:i)})),o=zt({sections:s});return{...e,sections:s,totalLessons:o.total,completedLessons:o.completed,progressPercent:o.percent}}function et(e,t){return le(e,t)!=null?t:le(e,e.resumeItemId)?.locked===!1?e.resumeItemId:ce(e).find(s=>!s.locked)?.id}function w(e,t){return e.replace(/\{(\w+)\}/g,(s,o)=>o in t?String(t[o]):s)}function tt(e,t){return t>0&&e/t>=.8}function st(e,t){return e<5||t>0&&e>=t-5?0:Math.floor(e)}function Se(e){let t=Math.max(0,Math.floor(e)),s=Math.floor(t/3600),o=Math.floor(t%3600/60),n=String(t%60).padStart(2,"0");return s>0?`${s}:${String(o).padStart(2,"0")}:${n}`:`${o}:${n}`}function nt(e){if(!(e>0))return"0 B";let t=["B","KB","MB","GB"],s=Math.min(Math.floor(Math.log(e)/Math.log(1024)),t.length-1),o=e/1024**s;return`${s===0||o>=10?Math.round(o):o.toFixed(1)} ${t[s]}`}function ot(e){switch(e.type){case"mcq":return{type:"mcq",selectedIds:[]};case"todolist":return{type:"todolist",checkedIds:[]};case"fill_gap":return{type:"fill_gap",values:{}};case"sort_order":return{type:"sort_order",orderedIds:e.items.map(t=>t.id)}}}function Qt(e,t){if(t==null||t.type!==e.config.type)return!1;switch(t.type){case"mcq":return t.selectedIds.length>0;case"todolist":return t.checkedIds.length>0;case"fill_gap":return Object.values(t.values).some(s=>s.trim()!=="");case"sort_order":return t.orderedIds.length>0}}function rt(e,t){return e.filter(s=>!Qt(s,t[s.id])).length}function at(e,t,s){if(t===s||t<0||s<0||t>=e.length||s>=e.length)return[...e];let o=[...e],[n]=o.splice(t,1);return o.splice(s,0,n),o}function he(e,t){let s=[],o=/\{\{\s*([^{}\s]+)\s*\}\}/g,n=0;for(let i of e.matchAll(o)){let a=i[1];t.includes(a)&&(i.index>n&&s.push({type:"text",text:e.slice(n,i.index)}),s.push({type:"blank",id:a}),n=i.index+i[0].length)}return n<e.length&&s.push({type:"text",text:e.slice(n)}),s}function it(e,t){let{config:s}=e;if(t==null||t.type!==s.type)return"";let o=(n,i)=>n.find(a=>a.id===i)?.label??i;return s.type==="mcq"&&t.type==="mcq"?t.selectedIds.map(n=>o(s.choices,n)).join(", "):s.type==="todolist"&&t.type==="todolist"?t.checkedIds.map(n=>o(s.steps,n)).join(", "):s.type==="sort_order"&&t.type==="sort_order"?t.orderedIds.map(n=>o(s.items,n)).join(" \u2192 "):s.type==="fill_gap"&&t.type==="fill_gap"?he(s.template,s.blanks).map(n=>n.type==="text"?n.text:`[${t.values[n.id]??""}]`).join(""):""}import{jsx as V,jsxs as _}from"react/jsx-runtime";function lt({item:e}){return e.locked?V(Ft,{className:"size-4 text-neutral-500","aria-hidden":!0}):e.completed?V(Wt,{className:"size-4 text-emerald-600 dark:text-emerald-400","aria-hidden":!0}):e.kind==="test"?V(Yt,{className:"size-4 text-neutral-500","aria-hidden":!0}):e.durationSeconds>0?V(_t,{className:"size-4 text-neutral-500","aria-hidden":!0}):V(Kt,{className:"size-4 text-neutral-500","aria-hidden":!0})}function Jt({item:e,selected:t,variant:s,onSelect:o}){let{texts:n}=h(),i=e.lockReason?w(n.lockedByTest,{test:e.lockReason.gatingTestTitle}):n.locked,a=e.locked?i:e.completed?n.completed:void 0;return V("li",{children:_("button",{type:"button","data-item-id":e.id,"data-locked":e.locked||void 0,"aria-current":t?"true":void 0,"aria-disabled":e.locked||void 0,title:e.locked?i:void 0,onClick:()=>{e.locked||o(e)},className:v("flex w-full items-start gap-3 rounded-lg p-2 text-left text-sm outline-none transition focus-visible:ring-[3px] focus-visible:ring-ring/50",t?"bg-neutral-200 dark:bg-neutral-700":"hover:bg-neutral-100 dark:hover:bg-neutral-800",e.locked&&"cursor-not-allowed opacity-60 hover:bg-transparent dark:hover:bg-transparent"),children:[s==="playlist"&&e.kind==="lesson"&&_("span",{className:"relative aspect-video w-24 shrink-0 overflow-hidden rounded bg-neutral-200 dark:bg-neutral-800",children:[e.thumbnailUrl&&V("img",{src:e.thumbnailUrl,alt:"",loading:"lazy",draggable:!1,className:"size-full object-cover"}),e.durationSeconds>0&&V("span",{className:"absolute right-1 bottom-1 rounded bg-black/75 px-1 text-[10px] text-white",children:Se(e.durationSeconds)})]}),(s==="modules"||e.kind==="test")&&V("span",{className:"mt-0.5 shrink-0",children:V(lt,{item:e})}),_("span",{className:"min-w-0 flex-1",children:[V("span",{className:"block font-medium break-words",children:e.title}),_("span",{className:"mt-0.5 flex flex-wrap items-center gap-x-2 text-xs text-neutral-500 dark:text-neutral-400",children:[e.kind==="test"&&V("span",{children:n.testBadge}),e.isFree&&!e.locked&&V("span",{children:n.free}),s==="modules"&&e.durationSeconds>0&&V("span",{children:Se(e.durationSeconds)}),a&&V("span",{children:a})]})]}),s==="playlist"&&e.kind==="lesson"&&V("span",{className:"mt-0.5 shrink-0",children:V(lt,{item:e})})]})})}function ct({course:e,selectedId:t,onSelect:s,variant:o,className:n}){let{texts:i}=h(),a=r=>V("ul",{className:"flex flex-col gap-1",children:r.map(c=>V(Jt,{item:c,selected:c.id===t,variant:o,onSelect:s},c.id))});return _("nav",{"aria-label":i.contents,className:v("space-y-4",n),children:[e.sections.map(r=>{let c=r.items.filter(y=>y.kind==="lesson"),b=c.filter(y=>y.completed).length;return _("section",{"data-section-id":r.id,children:[_("h3",{className:"mb-1 flex items-baseline justify-between gap-2 px-2 text-sm font-semibold",children:[V("span",{className:"break-words",children:r.title}),c.length>0&&_("span",{className:"shrink-0 text-xs font-normal text-neutral-500 dark:text-neutral-400",children:[b,"/",c.length]})]}),a(r.items)]},r.id)}),e.finalItems.length>0&&V("section",{"data-section-id":"final",children:a(e.finalItems)})]})}import{createClient as ls}from"@connectrpc/connect";import{enumDesc as nn,fileDesc as jt,messageDesc as on,serviceDesc as Dt}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as Ht}from"@bufbuild/protobuf/wkt";var qt=jt("CiFwdWJsaWMvdjEvdXNlcl9wYW5lbF9jb3Vyc2UucHJvdG8SDXB1YmxpY19hcGkudjEiRAoPUGFuZWxMb2NrUmVhc29uEhYKDmdhdGluZ190ZXN0X2lkGAEgASgJEhkKEWdhdGluZ190ZXN0X3RpdGxlGAIgASgJIrQCCg9QYW5lbENvdXJzZUl0ZW0SCgoCaWQYASABKAkSMAoEa2luZBgCIAEoDjIiLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VJdGVtS2luZBINCgV0aXRsZRgDIAEoCRIPCgdpc19mcmVlGAQgASgIEg4KBmxvY2tlZBgFIAEoCBI4Cgtsb2NrX3JlYXNvbhgGIAEoCzIeLnB1YmxpY19hcGkudjEuUGFuZWxMb2NrUmVhc29uSACIAQESEQoJY29tcGxldGVkGAcgASgIEhgKEGR1cmF0aW9uX3NlY29uZHMYCCABKAUSGgoNdGh1bWJuYWlsX3VybBgJIAEoCUgBiAEBEg4KBmdhdGluZxgKIAEoCEIOCgxfbG9ja19yZWFzb25CEAoOX3RodW1ibmFpbF91cmwicwoSUGFuZWxDb3Vyc2VTZWN0aW9uEgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEi0KBWl0ZW1zGAQgAygLMh4ucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUl0ZW0i3wIKC1BhbmVsQ291cnNlEgoKAmlkGAEgASgJEiwKBHR5cGUYAiABKA4yHi5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlVHlwZRINCgV0aXRsZRgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCRIWCgljb3Zlcl91cmwYBSABKAlIAIgBARIVCg10b3RhbF9sZXNzb25zGAYgASgFEhkKEWNvbXBsZXRlZF9sZXNzb25zGAcgASgFEhgKEHByb2dyZXNzX3BlcmNlbnQYCCABKAUSMwoIc2VjdGlvbnMYCSADKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlU2VjdGlvbhIzCgtmaW5hbF9pdGVtcxgKIAMoCzIeLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VJdGVtEhYKDnJlc3VtZV9pdGVtX2lkGAsgASgJQgwKCl9jb3Zlcl91cmwiRAoZVXNlclBhbmVsR2V0Q291cnNlUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIosBChpVc2VyUGFuZWxHZXRDb3Vyc2VSZXNwb25zZRItCgdzdWNjZXNzGAEgASgLMhoucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAQggKBnJlc3VsdCJfCgpQYW5lbFZpZGVvEg8KB2hsc191cmwYASABKAkSFwoKcG9zdGVyX3VybBgCIAEoCUgAiAEBEhgKEGR1cmF0aW9uX3NlY29uZHMYAyABKAVCDQoLX3Bvc3Rlcl91cmwiRgoPUGFuZWxBdHRhY2htZW50EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEc2l6ZRgDIAEoAxILCgN1cmwYBCABKAkiTAoMUGFuZWxJdGVtUmVmEgoKAmlkGAEgASgJEjAKBGtpbmQYAiABKA4yIi5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlSXRlbUtpbmQigQQKC1BhbmVsTGVzc29uEgoKAmlkGAEgASgJEhIKCnNlY3Rpb25faWQYAiABKAkSDQoFdGl0bGUYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSFAoMY29udGVudF9odG1sGAUgASgJEi0KBXZpZGVvGAYgASgLMhkucHVibGljX2FwaS52MS5QYW5lbFZpZGVvSACIAQESMwoLYXR0YWNobWVudHMYByADKAsyHi5wdWJsaWNfYXBpLnYxLlBhbmVsQXR0YWNobWVudBIuCgRwcmV2GAggASgLMhsucHVibGljX2FwaS52MS5QYW5lbEl0ZW1SZWZIAYgBARIuCgRuZXh0GAkgASgLMhsucHVibGljX2FwaS52MS5QYW5lbEl0ZW1SZWZIAogBARIRCgljb21wbGV0ZWQYCiABKAgSGAoQcG9zaXRpb25fc2Vjb25kcxgLIAEoBRIRCglteV9yYXRpbmcYDCABKAUSFgoOYXZlcmFnZV9yYXRpbmcYDSABKAISFAoMcmF0aW5nX2NvdW50GA4gASgFEjcKDnVybHNfZXhwaXJlX2F0GA8gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBQggKBl92aWRlb0IHCgVfcHJldkIHCgVfbmV4dEIRCg9fdXJsc19leHBpcmVfYXQiVwoZVXNlclBhbmVsR2V0TGVzc29uUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhEKCWxlc3Nvbl9pZBgDIAEoCSKLAQoaVXNlclBhbmVsR2V0TGVzc29uUmVzcG9uc2USLQoHc3VjY2VzcxgBIAEoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25IABI0CgdmYWlsdXJlGAIgASgOMiEucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUZhaWx1cmVIAEIICgZyZXN1bHQipwEKIlVzZXJQYW5lbFNhdmVMZXNzb25Qcm9ncmVzc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIRCglsZXNzb25faWQYAyABKAkSEQoJY29tcGxldGVkGAQgASgIEhgKEHBvc2l0aW9uX3NlY29uZHMYBSABKAUSGAoQZHVyYXRpb25fc2Vjb25kcxgGIAEoBSKFAgojVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2USTAoHc3VjY2VzcxgBIAEoCzI5LnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaUAoGUmVzdWx0EhEKCWNvbXBsZXRlZBgBIAEoCBIZChFjb21wbGV0ZWRfbGVzc29ucxgCIAEoBRIYChBwcm9ncmVzc19wZXJjZW50GAMgASgFQggKBnJlc3VsdCIoCgtQYW5lbENob2ljZRIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCSJPCg5QYW5lbE1jcUNvbmZpZxIrCgdjaG9pY2VzGAEgAygLMhoucHVibGljX2FwaS52MS5QYW5lbENob2ljZRIQCghtdWx0aXBsZRgCIAEoCCKCAQoTUGFuZWxUb2RvbGlzdENvbmZpZxI2CgVzdGVwcxgBIAMoCzInLnB1YmxpY19hcGkudjEuUGFuZWxUb2RvbGlzdENvbmZpZy5TdGVwGjMKBFN0ZXASCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSEAoIcmVxdWlyZWQYAyABKAgiNgoSUGFuZWxGaWxsR2FwQ29uZmlnEhAKCHRlbXBsYXRlGAEgASgJEg4KBmJsYW5rcxgCIAMoCSJBChRQYW5lbFNvcnRPcmRlckNvbmZpZxIpCgVpdGVtcxgBIAMoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxDaG9pY2UioQIKEVBhbmVsVGVzdFF1ZXN0aW9uEgoKAmlkGAEgASgJEg4KBnByb21wdBgCIAEoCRIOCgZwb2ludHMYAyABKAUSLAoDbWNxGAogASgLMh0ucHVibGljX2FwaS52MS5QYW5lbE1jcUNvbmZpZ0gAEjYKCHRvZG9saXN0GAsgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRvZG9saXN0Q29uZmlnSAASNQoIZmlsbF9nYXAYDCABKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsRmlsbEdhcENvbmZpZ0gAEjkKCnNvcnRfb3JkZXIYDSABKAsyIy5wdWJsaWNfYXBpLnYxLlBhbmVsU29ydE9yZGVyQ29uZmlnSABCCAoGY29uZmlnIqsCCglQYW5lbFRlc3QSCgoCaWQYASABKAkSDQoFdGl0bGUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDgoGZ2F0aW5nGAQgASgIEh4KFnBhc3NfdGhyZXNob2xkX3BlcmNlbnQYBSABKAUSGAoQYXR0ZW1wdHNfYWxsb3dlZBgGIAEoBRIaCg1hdHRlbXB0c19sZWZ0GAcgASgFSACIAQESFQoNYXR0ZW1wdF9jb3VudBgIIAEoBRIaChJiZXN0X3Njb3JlX3BlcmNlbnQYCSABKAUSDgoGcGFzc2VkGAogASgIEjMKCXF1ZXN0aW9ucxgLIAMoCzIgLnB1YmxpY19hcGkudjEuUGFuZWxUZXN0UXVlc3Rpb25CEAoOX2F0dGVtcHRzX2xlZnQiUwoXVXNlclBhbmVsR2V0VGVzdFJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIPCgd0ZXN0X2lkGAMgASgJIocBChhVc2VyUGFuZWxHZXRUZXN0UmVzcG9uc2USKwoHc3VjY2VzcxgBIAEoCzIYLnB1YmxpY19hcGkudjEuUGFuZWxUZXN0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSABCCAoGcmVzdWx0IiYKDlBhbmVsTWNxQW5zd2VyEhQKDHNlbGVjdGVkX2lkcxgBIAMoCSIqChNQYW5lbFRvZG9saXN0QW5zd2VyEhMKC2NoZWNrZWRfaWRzGAEgAygJIoIBChJQYW5lbEZpbGxHYXBBbnN3ZXISPQoGdmFsdWVzGAEgAygLMi0ucHVibGljX2FwaS52MS5QYW5lbEZpbGxHYXBBbnN3ZXIuVmFsdWVzRW50cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIrChRQYW5lbFNvcnRPcmRlckFuc3dlchITCgtvcmRlcmVkX2lkcxgBIAMoCSKDAgoLUGFuZWxBbnN3ZXISEwoLcXVlc3Rpb25faWQYASABKAkSLAoDbWNxGAogASgLMh0ucHVibGljX2FwaS52MS5QYW5lbE1jcUFuc3dlckgAEjYKCHRvZG9saXN0GAsgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRvZG9saXN0QW5zd2VySAASNQoIZmlsbF9nYXAYDCABKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsRmlsbEdhcEFuc3dlckgAEjkKCnNvcnRfb3JkZXIYDSABKAsyIy5wdWJsaWNfYXBpLnYxLlBhbmVsU29ydE9yZGVyQW5zd2VySABCBwoFdmFsdWUijQEKE1BhbmVsVGVzdFN1Ym1pc3Npb24SCgoCaWQYASABKAkSFQoNc2NvcmVfcGVyY2VudBgCIAEoBRIOCgZwYXNzZWQYAyABKAgSEwoLZHVyYXRpb25fbXMYBCABKAMSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAilwEKE1BhbmVsUXVlc3Rpb25SZXN1bHQSEwoLcXVlc3Rpb25faWQYASABKAkSDwoHY29ycmVjdBgCIAEoCBIOCgZwb2ludHMYAyABKAUSNwoOY29ycmVjdF9hbnN3ZXIYBCABKAsyGi5wdWJsaWNfYXBpLnYxLlBhbmVsQW5zd2VySACIAQFCEQoPX2NvcnJlY3RfYW5zd2VyIpgBChpVc2VyUGFuZWxTdWJtaXRUZXN0UmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEg8KB3Rlc3RfaWQYAyABKAkSKwoHYW5zd2VycxgEIAMoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxBbnN3ZXISEwoLZHVyYXRpb25fbXMYBSABKAMiyQIKG1VzZXJQYW5lbFN1Ym1pdFRlc3RSZXNwb25zZRJECgdzdWNjZXNzGAEgASgLMjEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxTdWJtaXRUZXN0UmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaowEKBlJlc3VsdBI2CgpzdWJtaXNzaW9uGAEgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRlc3RTdWJtaXNzaW9uEjMKB3Jlc3VsdHMYAiADKAsyIi5wdWJsaWNfYXBpLnYxLlBhbmVsUXVlc3Rpb25SZXN1bHQSGgoNYXR0ZW1wdHNfbGVmdBgDIAEoBUgAiAEBQhAKDl9hdHRlbXB0c19sZWZ0QggKBnJlc3VsdCJfCiNVc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEg8KB3Rlc3RfaWQYAyABKAkiqwIKJFVzZXJQYW5lbExpc3RUZXN0U3VibWlzc2lvbnNSZXNwb25zZRJNCgdzdWNjZXNzGAEgASgLMjoucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAadAoGUmVzdWx0EjcKC3N1Ym1pc3Npb25zGAEgAygLMiIucHVibGljX2FwaS52MS5QYW5lbFRlc3RTdWJtaXNzaW9uEhoKEmJlc3Rfc2NvcmVfcGVyY2VudBgCIAEoBRIVCg1hdHRlbXB0X2NvdW50GAMgASgFQggKBnJlc3VsdCJWChNQYW5lbFF1ZXN0aW9uQW5zd2VyEg8KB2NvbnRlbnQYASABKAkSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAizAEKE1BhbmVsTGVzc29uUXVlc3Rpb24SCgoCaWQYASABKAkSDwoHY29udGVudBgCIAEoCRITCgthdXRob3JfbmFtZRgDIAEoCRIPCgdpc19taW5lGAQgASgIEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjcKBmFuc3dlchgGIAEoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxRdWVzdGlvbkFuc3dlckgAiAEBQgkKB19hbnN3ZXIiYQojVXNlclBhbmVsTGlzdExlc3NvblF1ZXN0aW9uc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIRCglsZXNzb25faWQYAyABKAki9gEKJFVzZXJQYW5lbExpc3RMZXNzb25RdWVzdGlvbnNSZXNwb25zZRJNCgdzdWNjZXNzGAEgASgLMjoucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0TGVzc29uUXVlc3Rpb25zUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaPwoGUmVzdWx0EjUKCXF1ZXN0aW9ucxgBIAMoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25RdWVzdGlvbkIICgZyZXN1bHQicAohVXNlclBhbmVsQXNrTGVzc29uUXVlc3Rpb25SZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIRCglhY2Nlc3NfaWQYAiABKAkSEQoJbGVzc29uX2lkGAMgASgJEg8KB2NvbnRlbnQYBCABKAkimwEKIlVzZXJQYW5lbEFza0xlc3NvblF1ZXN0aW9uUmVzcG9uc2USNQoHc3VjY2VzcxgBIAEoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25RdWVzdGlvbkgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAQggKBnJlc3VsdCJ4ChpVc2VyUGFuZWxSYXRlTGVzc29uUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhEKCWxlc3Nvbl9pZBgDIAEoCRINCgVzY29yZRgEIAEoBRIPCgdjb21tZW50GAUgASgJIu4BChtVc2VyUGFuZWxSYXRlTGVzc29uUmVzcG9uc2USRAoHc3VjY2VzcxgBIAEoCzIxLnB1YmxpY19hcGkudjEuVXNlclBhbmVsUmF0ZUxlc3NvblJlc3BvbnNlLlJlc3VsdEgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAGkkKBlJlc3VsdBIRCglteV9yYXRpbmcYASABKAUSFgoOYXZlcmFnZV9yYXRpbmcYAiABKAISFAoMcmF0aW5nX2NvdW50GAMgASgFQggKBnJlc3VsdCr6AgoSUGFuZWxDb3Vyc2VGYWlsdXJlEiAKHFBBTkVMX0NPVVJTRV9GQUlMVVJFX1VOS05PV04QABIlCiFQQU5FTF9DT1VSU0VfRkFJTFVSRV9VTkFVVEhPUklaRUQQARIpCiVQQU5FTF9DT1VSU0VfRkFJTFVSRV9DT1VSU0VfTk9UX0ZPVU5EEAISJwojUEFORUxfQ09VUlNFX0ZBSUxVUkVfSVRFTV9OT1RfRk9VTkQQAxIkCiBQQU5FTF9DT1VSU0VfRkFJTFVSRV9JVEVNX0xPQ0tFRBAEEikKJVBBTkVMX0NPVVJTRV9GQUlMVVJFX05PX0FUVEVNUFRTX0xFRlQQBRIpCiVQQU5FTF9DT1VSU0VfRkFJTFVSRV9JTlZBTElEX0FSR1VNRU5UEAYSJQohUEFORUxfQ09VUlNFX0ZBSUxVUkVfUkFURV9MSU1JVEVEEAcSJAogUEFORUxfQ09VUlNFX0ZBSUxVUkVfVU5BVkFJTEFCTEUQCCptCg9QYW5lbENvdXJzZVR5cGUSHQoZUEFORUxfQ09VUlNFX1RZUEVfVU5LTk9XThAAEh4KGlBBTkVMX0NPVVJTRV9UWVBFX1NUQU5EQVJEEAESGwoXUEFORUxfQ09VUlNFX1RZUEVfVklERU8QAip9ChNQYW5lbENvdXJzZUl0ZW1LaW5kEiIKHlBBTkVMX0NPVVJTRV9JVEVNX0tJTkRfVU5LTk9XThAAEiEKHVBBTkVMX0NPVVJTRV9JVEVNX0tJTkRfTEVTU09OEAESHwobUEFORUxfQ09VUlNFX0lURU1fS0lORF9URVNUEAIy+QcKFlVzZXJQYW5lbENvdXJzZVNlcnZpY2USYAoJR2V0Q291cnNlEigucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRDb3Vyc2VSZXF1ZXN0GikucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRDb3Vyc2VSZXNwb25zZRJgCglHZXRMZXNzb24SKC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldExlc3NvblJlcXVlc3QaKS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldExlc3NvblJlc3BvbnNlEnsKElNhdmVMZXNzb25Qcm9ncmVzcxIxLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVxdWVzdBoyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2USWgoHR2V0VGVzdBImLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0VGVzdFJlcXVlc3QaJy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFRlc3RSZXNwb25zZRJjCgpTdWJtaXRUZXN0EikucHVibGljX2FwaS52MS5Vc2VyUGFuZWxTdWJtaXRUZXN0UmVxdWVzdBoqLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU3VibWl0VGVzdFJlc3BvbnNlEn4KE0xpc3RUZXN0U3VibWlzc2lvbnMSMi5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExpc3RUZXN0U3VibWlzc2lvbnNSZXF1ZXN0GjMucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVzcG9uc2USfgoTTGlzdExlc3NvblF1ZXN0aW9ucxIyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTGlzdExlc3NvblF1ZXN0aW9uc1JlcXVlc3QaMy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExpc3RMZXNzb25RdWVzdGlvbnNSZXNwb25zZRJ4ChFBc2tMZXNzb25RdWVzdGlvbhIwLnB1YmxpY19hcGkudjEuVXNlclBhbmVsQXNrTGVzc29uUXVlc3Rpb25SZXF1ZXN0GjEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxBc2tMZXNzb25RdWVzdGlvblJlc3BvbnNlEmMKClJhdGVMZXNzb24SKS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFJhdGVMZXNzb25SZXF1ZXN0GioucHVibGljX2FwaS52MS5Vc2VyUGFuZWxSYXRlTGVzc29uUmVzcG9uc2ViBnByb3RvMw",[Ht]);var ut=Dt(qt,0);import{Code as se,ConnectError as Ot}from"@connectrpc/connect";import{timestampDate as me}from"@bufbuild/protobuf/wkt";var Z=class extends Error{code;constructor(t,s){super(s??t),this.name="CourseError",this.code=t}};var $t={0:"unknown",1:"unauthorized",2:"course_not_found",3:"item_not_found",4:"item_locked",5:"no_attempts_left",6:"invalid_argument",7:"rate_limited",8:"unavailable"};function es(e){return $t[e]??"unknown"}function ts(e){if(e instanceof Z)return e;let t=Ot.from(e);switch(t.code){case se.Unauthenticated:case se.PermissionDenied:return new Z("unauthorized",t.rawMessage);case se.NotFound:return new Z("course_not_found",t.rawMessage);case se.ResourceExhausted:return new Z("rate_limited",t.rawMessage);case se.Unavailable:case se.DeadlineExceeded:return new Z("unavailable",t.rawMessage);default:return e}}function F(e){let{result:t}=e;if(t.case==="success")return t.value;throw t.case==="failure"?new Z(es(t.value)):new Z("unknown","empty response")}function dt(e){return{id:e.id,kind:e.kind===2?"test":"lesson",title:e.title,isFree:e.isFree,locked:e.locked,lockReason:e.locked&&e.lockReason!=null?{gatingTestId:e.lockReason.gatingTestId,gatingTestTitle:e.lockReason.gatingTestTitle}:void 0,completed:e.completed,durationSeconds:e.durationSeconds,thumbnailUrl:e.thumbnailUrl||void 0,gating:e.gating}}function ss(e){return{id:e.id,type:e.type===2?"video":"standard",title:e.title,description:e.description,coverUrl:e.coverUrl||void 0,totalLessons:e.totalLessons,completedLessons:e.completedLessons,progressPercent:e.progressPercent,sections:e.sections.map(t=>({id:t.id,title:t.title,description:t.description,items:t.items.map(dt)})),finalItems:e.finalItems.map(dt),resumeItemId:e.resumeItemId}}function pt(e){return e==null?void 0:{id:e.id,kind:e.kind===2?"test":"lesson"}}function ns(e){return{id:e.id,sectionId:e.sectionId,title:e.title,description:e.description,contentHtml:e.contentHtml,video:e.video!=null&&e.video.hlsUrl!==""?{hlsUrl:e.video.hlsUrl,posterUrl:e.video.posterUrl||void 0,durationSeconds:e.video.durationSeconds}:void 0,attachments:e.attachments.map(t=>({id:t.id,name:t.name,size:Number(t.size),url:t.url})),prev:pt(e.prev),next:pt(e.next),completed:e.completed,positionSeconds:e.positionSeconds,myRating:e.myRating,averageRating:e.averageRating,ratingCount:e.ratingCount,urlsExpireAt:e.urlsExpireAt!=null?me(e.urlsExpireAt):void 0}}function os(e){let t={id:e.id,prompt:e.prompt,points:e.points},{config:s}=e;switch(s.case){case"mcq":return{...t,config:{type:"mcq",choices:s.value.choices.map(o=>({id:o.id,label:o.label})),multiple:s.value.multiple}};case"todolist":return{...t,config:{type:"todolist",steps:s.value.steps.map(o=>({id:o.id,label:o.label,required:o.required}))}};case"fillGap":return{...t,config:{type:"fill_gap",template:s.value.template,blanks:[...s.value.blanks]}};case"sortOrder":return{...t,config:{type:"sort_order",items:s.value.items.map(o=>({id:o.id,label:o.label}))}};default:return}}function rs(e){return{id:e.id,title:e.title,description:e.description,gating:e.gating,passThresholdPercent:e.passThresholdPercent,attemptsAllowed:e.attemptsAllowed,attemptsLeft:e.attemptsLeft,attemptCount:e.attemptCount,bestScorePercent:e.bestScorePercent,passed:e.passed,questions:e.questions.map(os).filter(t=>t!=null)}}function mt(e){return{id:e.id,scorePercent:e.scorePercent,passed:e.passed,durationMs:Number(e.durationMs),createdAt:e.createdAt!=null?me(e.createdAt):void 0}}function as(e){let{value:t}=e;switch(t.case){case"mcq":return{type:"mcq",selectedIds:[...t.value.selectedIds]};case"todolist":return{type:"todolist",checkedIds:[...t.value.checkedIds]};case"fillGap":return{type:"fill_gap",values:{...t.value.values}};case"sortOrder":return{type:"sort_order",orderedIds:[...t.value.orderedIds]};default:return}}function is(e,t){switch(t.type){case"mcq":return{questionId:e,value:{case:"mcq",value:{selectedIds:t.selectedIds}}};case"todolist":return{questionId:e,value:{case:"todolist",value:{checkedIds:t.checkedIds}}};case"fill_gap":return{questionId:e,value:{case:"fillGap",value:{values:t.values}}};case"sort_order":return{questionId:e,value:{case:"sortOrder",value:{orderedIds:t.orderedIds}}}}}function gt(e){return{id:e.id,content:e.content,authorName:e.authorName,isMine:e.isMine,createdAt:e.createdAt!=null?me(e.createdAt):void 0,answer:e.answer!=null?{content:e.answer.content,createdAt:e.answer.createdAt!=null?me(e.answer.createdAt):void 0}:void 0}}function ve(e,t){let s=()=>({accessId:t.accessId,accessToken:typeof t.accessToken=="function"?t.accessToken()??"":t.accessToken});async function o(n){try{return await n()}catch(i){throw ts(i)}}return{getCourse:()=>o(async()=>ss(F(await e.getCourse(s())))),getLesson:n=>o(async()=>ns(F(await e.getLesson({...s(),lessonId:n})))),saveProgress:n=>o(async()=>{let i=F(await e.saveLessonProgress({...s(),...n}));return{completed:i.completed,completedLessons:i.completedLessons,progressPercent:i.progressPercent}}),getTest:n=>o(async()=>rs(F(await e.getTest({...s(),testId:n})))),submitTest:(n,i,a)=>o(async()=>{let r=F(await e.submitTest({...s(),testId:n,durationMs:BigInt(Math.max(0,Math.round(a))),answers:Object.entries(i).map(([c,b])=>is(c,b))}));if(r.submission==null)throw new Z("unknown","missing submission");return{submission:mt(r.submission),results:r.results.map(c=>({questionId:c.questionId,correct:c.correct,points:c.points,correctAnswer:c.correctAnswer!=null?as(c.correctAnswer):void 0})),attemptsLeft:r.attemptsLeft}}),listSubmissions:n=>o(async()=>{let i=F(await e.listTestSubmissions({...s(),testId:n}));return{submissions:i.submissions.map(mt),bestScorePercent:i.bestScorePercent,attemptCount:i.attemptCount}}),listQuestions:n=>o(async()=>F(await e.listLessonQuestions({...s(),lessonId:n})).questions.map(gt)),askQuestion:(n,i)=>o(async()=>gt(F(await e.askLessonQuestion({...s(),lessonId:n,content:i})))),rate:(n,i,a="")=>o(async()=>{let r=F(await e.rateLesson({...s(),lessonId:n,score:i,comment:a}));return{myRating:r.myRating,averageRating:r.averageRating,ratingCount:r.ratingCount}})}}function Ce(e){let t=e.host??Qe(),s=ls(ut,We(t));return ve(s,{accessId:e.accessId,accessToken:e.accessToken??(()=>{let{projectID:o,host:n}=Fe();return Ke(o,n)})})}import{ChevronLeft as ys,ChevronRight as Ss,Download as hs,Paperclip as vs}from"lucide-react";import{useEffect as Nt,useMemo as Cs,useRef as Ie,useState as Pt}from"react";import{useState as H}from"react";import{Star as cs}from"lucide-react";import{useState as us}from"react";import{jsx as ge}from"react/jsx-runtime";function bt({value:e,onSelect:t,disabled:s}){let{texts:o}=h(),[n,i]=us(0),a=n||e;return ge("div",{className:"flex items-center gap-1",role:t?"radiogroup":"img","aria-label":w(o.rateStar,{n:Math.round(e)}),children:[1,2,3,4,5].map(r=>{let c=r<=Math.round(a),b=ge(cs,{className:v("size-5",c?"fill-amber-400 text-amber-400":"text-neutral-300 dark:text-neutral-600"),"aria-hidden":!0});return t?ge("button",{type:"button",role:"radio","aria-checked":r===e,"aria-label":w(o.rateStar,{n:r}),disabled:s,className:"rounded p-0.5 outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:opacity-50",onMouseEnter:()=>i(r),onMouseLeave:()=>i(0),onClick:()=>t(r),children:b},r):ge("span",{children:b},r)})})}import{AlertTriangle as ds}from"lucide-react";import{jsx as K,jsxs as Re}from"react/jsx-runtime";var ft="bg-[var(--course-accent,var(--primary))] text-[var(--course-accent-fg,var(--primary-foreground))] dark:bg-[var(--course-accent-dark,var(--course-accent,var(--primary)))] dark:text-[var(--course-accent-dark-fg,var(--course-accent-fg,var(--primary-foreground)))]",$=v(ft,"hover:bg-[var(--course-accent,var(--primary))] hover:opacity-90 dark:hover:bg-[var(--course-accent-dark,var(--course-accent,var(--primary)))]"),z="rounded-xl bg-white p-4 drop-shadow-xl sm:p-6 dark:border dark:border-neutral-700 dark:bg-neutral-900 dark:drop-shadow-none";function J(e,t){if(e instanceof Z)switch(e.code){case"unauthorized":return t.errorUnauthorized;case"course_not_found":case"item_not_found":return t.errorNotFound;case"unavailable":return t.errorUnavailable}return t.errorGeneric}function ee({error:e,onRetry:t,className:s}){let{texts:o}=h();return Re("div",{role:"alert",className:v("flex flex-col items-start gap-3 rounded-xl border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-900 dark:bg-red-950 dark:text-red-300",s),children:[Re("p",{className:"flex items-center gap-2 font-medium",children:[K(ds,{className:"size-4 shrink-0","aria-hidden":!0}),J(e,o)]}),t&&K(N,{variant:"outline",size:"sm",onClick:t,children:o.retry})]})}function ue({label:e}){let{texts:t}=h();return Re("div",{role:"status","aria-label":e??t.loading,className:"space-y-3",children:[K(ie,{className:"aspect-video w-full"}),K(ie,{className:"h-6 w-2/3"}),K(ie,{className:"h-4 w-full"}),K(ie,{className:"h-4 w-5/6"})]})}function At({percent:e,label:t}){let s=Math.max(0,Math.min(100,Math.round(e)));return K("div",{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":s,"aria-label":t,className:"h-2 w-full overflow-hidden rounded-full bg-neutral-200 dark:bg-neutral-700",children:K("div",{className:v("h-full rounded-full transition-all duration-300",ft),style:{width:`${s}%`}})})}import{useCallback as ke,useEffect as ps,useRef as Ne,useState as xt}from"react";function j(e,t,s){let[o,n]=xt(s!==void 0?{status:"success",data:s}:{status:"loading"}),[i,a]=xt(0),r=Ne(0),c=Ne(e);c.current=e;let b=Ne(s!==void 0);ps(()=>{if(b.current){b.current=!1;return}let p=++r.current;return n({status:"loading"}),c.current().then(A=>{p===r.current&&n({status:"success",data:A})}).catch(A=>{p===r.current&&n({status:"error",error:A})}),()=>{r.current+=1}},[...t,i]);let y=ke(()=>a(p=>p+1),[]),f=ke(()=>{let p=++r.current;c.current().then(A=>{p===r.current&&n({status:"success",data:A})}).catch(()=>{})},[]),d=ke(p=>{n(A=>A.status==="success"?{status:"success",data:p(A.data)}:A)},[]);return{...o,reload:y,refresh:f,mutate:d}}import{jsx as G,jsxs as D}from"react/jsx-runtime";function St({lessonId:e,initial:t}){let{dataSource:s,texts:o,preview:n}=h(),i=Q(),[a,r]=H(t),[c,b]=H(t.myRating),[y,f]=H(""),[d,p]=H("idle"),[A,C]=H();async function I(){if(!(c<1)){p("saving");try{r(await s.rate(e,c,y.trim())),p("saved"),i("lesson_rated",{lesson_id:e,rating:c})}catch(g){C(g),p("error")}}}return D("section",{"aria-labelledby":`rate-${e}`,className:"space-y-3",children:[G("h3",{id:`rate-${e}`,className:"text-lg font-semibold",children:o.rateTitle}),G(bt,{value:c,onSelect:g=>{b(g),p("idle")},disabled:n||d==="saving"}),a.ratingCount>0&&G("p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:w(o.rateAverage,{average:a.averageRating.toFixed(1),count:a.ratingCount})}),!n&&c>0&&D("div",{className:"space-y-2",children:[G(xe,{value:y,maxLength:1e3,placeholder:o.ratePlaceholder,onChange:g=>{f(g.target.value),p("idle")}}),G(N,{size:"sm",className:$,disabled:d==="saving",onClick:I,children:o.rateSubmit})]}),d==="saved"&&G("p",{role:"status",className:"text-sm text-emerald-700 dark:text-emerald-400",children:o.rateSaved}),d==="error"&&G("p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:J(A,o)})]})}function yt(e){return e==null?"":e.toLocaleDateString()}function ht({lessonId:e}){let{dataSource:t,texts:s,preview:o}=h(),n=j(()=>t.listQuestions(e),[t,e]),[i,a]=H(""),[r,c]=H("idle"),[b,y]=H();async function f(){let d=i.trim();if(d!==""){c("sending");try{let p=await t.askQuestion(e,d);n.mutate(A=>[p,...A]),a(""),c("sent")}catch(p){y(p),c("error")}}}return D("section",{"aria-labelledby":`qa-${e}`,className:"space-y-4",children:[G("h3",{id:`qa-${e}`,className:"text-lg font-semibold",children:s.questionsTitle}),D("form",{className:"space-y-2",onSubmit:d=>{d.preventDefault(),f()},children:[G(xe,{value:i,maxLength:2e3,placeholder:s.questionPlaceholder,"aria-label":s.questionPlaceholder,onChange:d=>{a(d.target.value),c("idle")}}),G(N,{type:"submit",size:"sm",className:$,disabled:r==="sending"||i.trim()==="",children:s.questionSubmit}),r==="sent"&&G("p",{role:"status",className:"text-sm text-emerald-700 dark:text-emerald-400",children:s.questionSent}),r==="error"&&G("p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:J(b,s)})]}),n.status==="loading"&&G("p",{role:"status",className:"text-sm text-neutral-500",children:s.loading}),n.status==="error"&&G(ee,{error:n.error,onRetry:n.reload}),n.status==="success"&&(n.data.length===0?G("p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:s.questionsEmpty}):G("ul",{className:"space-y-3",children:n.data.map(d=>D("li",{className:"rounded-lg bg-neutral-100 p-3 text-sm dark:bg-neutral-800",children:[D("p",{className:"mb-1 text-xs text-neutral-500 dark:text-neutral-400",children:[d.isMine?s.questionMine:d.authorName,d.createdAt&&` \xB7 ${yt(d.createdAt)}`]}),G("p",{className:"break-words whitespace-pre-wrap",children:d.content}),d.answer&&D("div",{className:"mt-2 border-l-2 border-neutral-400 pl-3 dark:border-neutral-500",children:[D("p",{className:"mb-1 text-xs font-medium text-neutral-500 dark:text-neutral-400",children:[s.questionTeamAnswer,d.answer.createdAt&&` \xB7 ${yt(d.answer.createdAt)}`]}),G("p",{className:"break-words whitespace-pre-wrap",children:d.answer.content})]})]},d.id))}))]})}import ms from"dompurify";var gs={USE_PROFILES:{html:!0},FORBID_TAGS:["style","form","input","button","textarea","select","iframe","frame","object","embed","base","meta","link"],FORBID_ATTR:["style","srcdoc","formaction"],ALLOW_DATA_ATTR:!1,RETURN_TRUSTED_TYPE:!1};function bs(e){if(e.isSupported===!1||e.sanitize==null)return()=>"";let t=e.sanitize.bind(e);return e.addHook?.("afterSanitizeAttributes",s=>{s.tagName==="A"&&s.hasAttribute("href")&&(s.setAttribute("target","_blank"),s.setAttribute("rel","noopener noreferrer nofollow")),s.tagName==="IMG"&&(s.setAttribute("loading","lazy"),s.setAttribute("referrerpolicy","no-referrer"))}),s=>s==null||s===""?"":String(t(s,gs))}var vt;function Pe(e){return typeof window>"u"?"":(vt??=bs(ms),vt(e))}import ne from"hls.js";import{useCallback as fs,useEffect as As,useRef as be,useState as Ct}from"react";import{jsx as Ve,jsxs as Rt}from"react/jsx-runtime";function xs(e){return e.canPlayType("application/vnd.apple.mpegurl")!==""}function kt({src:e,poster:t,startAt:s=0,durationHint:o=0,autoPlay:n=!1,lessonId:i,onReport:a,onEnded:r,onExpired:c,className:b}){let{texts:y}=h(),f=Q(),d=be(f);d.current=f;let p=be(null),[A,C]=Ct(!1),[I,g]=Ct(0),k=be({onReport:a,onEnded:r,onExpired:c,durationHint:o});k.current={onReport:a,onEnded:r,onExpired:c,durationHint:o};let M=be(void 0),E=fs((l,R=p.current)=>{if(R==null||k.current.onReport==null)return;let m=Math.floor(R.currentTime);if(m<=0&&l!=="ended")return;let T=Number.isFinite(R.duration)?R.duration:k.current.durationHint;M.current=m,k.current.onReport({positionSeconds:m,durationSeconds:Math.floor(T||0),reason:l})},[]);return As(()=>{let l=p.current;if(l==null)return;C(!1);let R,m=!1,T=!1,B,q=()=>{s>0&&(l.currentTime=s),n&&l.play().catch(()=>{})};xs(l)?(l.src=e,l.addEventListener("loadedmetadata",q,{once:!0})):ne.isSupported()?(R=new ne,R.attachMedia(l),R.loadSource(e),R.on(ne.Events.MANIFEST_PARSED,q),R.on(ne.Events.ERROR,(O,Y)=>{if(!Y.fatal)return;let Be=Y.response?.code;Be===401||Be===403?(k.current.onExpired?.(),C(!0)):Y.type===ne.ErrorTypes.NETWORK_ERROR&&!m?(m=!0,R?.startLoad()):Y.type===ne.ErrorTypes.MEDIA_ERROR&&!T?(T=!0,R?.recoverMediaError()):C(!0)})):l.src=e;let pe=()=>{clearInterval(B),B=setInterval(()=>E("periodic"),15e3)},te=()=>{clearInterval(B),l.ended||E("pause")},oe=new Set,S=l.currentTime,W=0,re=O=>{if(i!=null)for(let Y of ze(O,oe))d.current("video_progress",{lesson_id:i,milestone:Y})},ae=()=>{let O=l.currentTime,Y=Number.isFinite(l.duration)?l.duration:k.current.durationHint;Y>0&&!l.seeking&&O>=S&&O-S<=2&&(W=Math.max(W,O),re(W/Y*100)),S=O},Ue=()=>{clearInterval(B),i!=null&&!oe.has(100)&&(oe.add(100),d.current("video_progress",{lesson_id:i,milestone:100})),E("ended"),k.current.onEnded?.()},Le=()=>{R==null&&C(!0)};return l.addEventListener("play",pe),l.addEventListener("pause",te),l.addEventListener("ended",Ue),l.addEventListener("error",Le),l.addEventListener("timeupdate",ae),()=>{clearInterval(B),l.removeEventListener("play",pe),l.removeEventListener("pause",te),l.removeEventListener("ended",Ue),l.removeEventListener("error",Le),l.removeEventListener("timeupdate",ae),l.removeEventListener("loadedmetadata",q),!l.ended&&l.currentTime>0&&E("leave",l),R?.destroy(),l.removeAttribute("src"),l.load()}},[e,I]),Rt("div",{className:v("relative overflow-hidden rounded-xl bg-black",b),children:[Ve("video",{ref:p,className:"aspect-video w-full",poster:t,controls:!0,playsInline:!0,preload:"metadata",controlsList:"nodownload"}),A&&Rt("div",{role:"alert",className:"absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/80 p-4 text-center text-sm text-white",children:[Ve("p",{children:y.videoError}),Ve(N,{variant:"secondary",size:"sm",onClick:()=>{k.current.onExpired?.(),g(l=>l+1)},children:y.videoRetry})]})]})}import{jsx as U,jsxs as X}from"react/jsx-runtime";function Vt({lesson:e,position:t=0,courseType:s,prev:o,next:n,autoplay:i,onAutoplayChange:a,startPlaying:r,onNavigate:c,onProgressSaved:b,onEnded:y,onUrlsExpired:f}){let{dataSource:d,texts:p,preview:A}=h(),C=Q(),[I,g]=Pt(e.completed),k=Ie(e.completed),M=Ie(void 0),E=Ie(e.positionSeconds),[l,R]=Pt(!1);Nt(()=>{C("lesson_started",{lesson_id:e.id,position:t})},[e.id]);let m=e.urlsExpireAt?.getTime();Nt(()=>{if(m==null)return;let S=m-Date.now()-6e4;if(S<=0||S>2**31-1)return;let W=setTimeout(f,S);return()=>clearTimeout(W)},[m]);let T=Cs(()=>Pe(e.contentHtml),[e.contentHtml]);async function B(S,W,re){if(A)return;let ae=await d.saveProgress({lessonId:e.id,completed:re,positionSeconds:S,durationSeconds:W});M.current=S,ae.completed&&!k.current&&(k.current=!0,g(!0),C("lesson_completed",{lesson_id:e.id,position:t})),b(e.id,ae)}function q(S){if(E.current=S.positionSeconds,A||S.reason==="periodic"&&S.positionSeconds===M.current)return;let W=S.reason==="ended"||tt(S.positionSeconds,S.durationSeconds);B(S.positionSeconds,S.durationSeconds,W&&!k.current).catch(re=>{console.warn("Saving the progress of the lesson failed",re)})}async function pe(){R(!0);try{await B(E.current,e.video?.durationSeconds??0,!0)}catch(S){console.warn("Marking the lesson as completed failed",S)}finally{R(!1)}}let te=e.description.trim(),oe=T!==""||te!=="";return X("article",{"data-lesson-id":e.id,className:"min-w-0 space-y-5","aria-labelledby":`lesson-${e.id}`,children:[e.video&&U(kt,{src:e.video.hlsUrl,poster:e.video.posterUrl,lessonId:e.id,startAt:st(E.current,e.video.durationSeconds),durationHint:e.video.durationSeconds,autoPlay:r,onReport:q,onEnded:y,onExpired:f}),X("div",{className:v(z,"space-y-5"),children:[X("header",{className:"flex flex-wrap items-start justify-between gap-3",children:[U("h2",{id:`lesson-${e.id}`,className:"text-2xl font-semibold break-words",children:e.title}),!A&&U(N,{size:"sm",variant:I?"outline":"default",className:v(!I&&$),disabled:I||l,onClick:pe,children:I?p.markedComplete:p.markComplete})]}),s==="video"&&e.video&&X("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm text-neutral-600 dark:text-neutral-300",children:[U("input",{type:"checkbox",checked:i,onChange:S=>a(S.target.checked)}),p.autoplay]}),te!==""&&U("p",{className:"text-sm break-words whitespace-pre-wrap text-neutral-700 dark:text-neutral-300",children:te}),T!==""&&U("div",{className:"bitsnap-course-html break-words [&_a]:underline [&_blockquote]:border-l-4 [&_blockquote]:pl-4 [&_h1]:text-2xl [&_h1]:font-semibold [&_h2]:text-xl [&_h2]:font-semibold [&_h3]:text-lg [&_h3]:font-semibold [&_img]:h-auto [&_img]:max-w-full [&_ol]:list-decimal [&_ol]:pl-6 [&_p]:my-3 [&_pre]:overflow-x-auto [&_table]:block [&_table]:max-w-full [&_table]:overflow-x-auto [&_ul]:list-disc [&_ul]:pl-6",dangerouslySetInnerHTML:{__html:T}}),!oe&&!e.video&&U("p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:p.noContent}),e.attachments.length>0&&X("section",{"aria-labelledby":`files-${e.id}`,className:"space-y-2",children:[X("h3",{id:`files-${e.id}`,className:"flex items-center gap-2 text-lg font-semibold",children:[U(vs,{className:"size-4","aria-hidden":!0}),p.attachments]}),U("ul",{className:"space-y-2",children:e.attachments.map(S=>U("li",{children:X("a",{href:S.url,target:"_blank",rel:"noopener noreferrer",download:S.name,className:"flex items-center justify-between gap-3 rounded-lg bg-neutral-100 px-3 py-2 text-sm transition hover:bg-neutral-200 dark:bg-neutral-800 dark:hover:bg-neutral-700",children:[X("span",{className:"min-w-0 break-words",children:[S.name,U("span",{className:"ml-2 text-xs text-neutral-500 dark:text-neutral-400",children:nt(S.size)})]}),X("span",{className:"flex shrink-0 items-center gap-1 text-xs font-medium",children:[p.download,U(hs,{className:"size-3.5","aria-hidden":!0})]})]})},S.id))})]}),X("nav",{className:"flex items-center justify-between gap-3 border-t pt-4",children:[X(N,{variant:"outline",size:"sm",disabled:o==null,onClick:()=>o&&c(o),children:[U(ys,{"aria-hidden":!0}),p.prevItem]}),X(N,{variant:"outline",size:"sm",disabled:n==null,onClick:()=>n&&c(n),children:[p.nextItem,U(Ss,{"aria-hidden":!0})]})]})]}),U("div",{className:v(z),children:U(St,{lessonId:e.id,initial:{myRating:e.myRating,averageRating:e.averageRating,ratingCount:e.ratingCount}})}),U("div",{className:v(z),children:U(ht,{lessonId:e.id})})]})}var It={pl:{back:"Wr\xF3\u0107",loading:"\u0141adowanie kursu...",retry:"Spr\xF3buj ponownie",errorGeneric:"Nie uda\u0142o si\u0119 za\u0142adowa\u0107 danych. Spr\xF3buj ponownie za chwil\u0119.",errorUnauthorized:"Nie masz dost\u0119pu do tego kursu. Zaloguj si\u0119 ponownie lub skontaktuj si\u0119 z pomoc\u0105.",errorNotFound:"Nie znaleziono tego kursu lub lekcji.",errorUnavailable:"Kurs jest chwilowo niedost\u0119pny. Spr\xF3buj ponownie za chwil\u0119.",previewBadge:"Podgl\u0105d",progressLessons:"{done} z {total} lekcji",progressPercent:"{percent}% uko\u0144czono",contents:"Spis tre\u015Bci",free:"Darmowa",locked:"Zablokowane",lockedByTest:"Odblokuje je zaliczenie testu: {test}",lockedPage:"Ta lekcja jest zablokowana. Zalicz test \u201E{test}\u201D, aby j\u0105 odblokowa\u0107.",testBadge:"Test",completed:"Uko\u0144czono",continueCourse:"Kontynuuj kurs",noItem:"Wybierz lekcj\u0119 z listy.",markComplete:"Oznacz jako uko\u0144czon\u0105",markedComplete:"Lekcja uko\u0144czona",prevItem:"Poprzednia",nextItem:"Nast\u0119pna",attachments:"Materia\u0142y do pobrania",download:"Pobierz",autoplay:"Autoodtwarzanie nast\u0119pnej lekcji",videoError:"Nie uda\u0142o si\u0119 odtworzy\u0107 wideo.",videoRetry:"Od\u015Bwie\u017C wideo",noContent:"Ta lekcja nie ma jeszcze tre\u015Bci.",testGating:"Zaliczenie tego testu odblokowuje kolejne lekcje.",testAttemptsLeft:"Pozosta\u0142o pr\xF3b: {count}",testAttemptsUnlimited:"Liczba pr\xF3b nie jest ograniczona.",testNoAttemptsLeft:"Wykorzystano wszystkie pr\xF3by.",testPassThreshold:"Pr\xF3g zaliczenia: {percent}%",testBestScore:"Najlepszy wynik: {percent}%",testSubmit:"Sprawd\u017A odpowiedzi",testSubmitting:"Sprawdzanie...",testUnanswered:"Pytania bez odpowiedzi: {count}",testPassed:"Test zaliczony",testFailed:"Test niezaliczony",testScore:"Wynik: {percent}%",testCorrect:"Poprawnie",testIncorrect:"Niepoprawnie",testCorrectAnswer:"Poprawna odpowied\u017A",testTryAgain:"Spr\xF3buj ponownie",testPreviousAttempts:"Poprzednie podej\u015Bcia",testAttemptRow:"{percent}% \xB7 {date}",testNoQuestions:"Ten test nie ma jeszcze pyta\u0144.",mcqSingle:"Wybierz jedn\u0105 odpowied\u017A",mcqMultiple:"Zaznacz wszystkie poprawne odpowiedzi",todoHint:"Zaznacz wykonane kroki",todoRequired:"wymagany",gapPlaceholder:"uzupe\u0142nij",sortHint:"U\u0142\xF3\u017C elementy w poprawnej kolejno\u015Bci",moveUp:"Przesu\u0144 w g\xF3r\u0119",moveDown:"Przesu\u0144 w d\xF3\u0142",questionsTitle:"Pytania do lekcji",questionsEmpty:"Nikt jeszcze nie zada\u0142 pytania.",questionPlaceholder:"Zadaj pytanie autorowi kursu",questionSubmit:"Wy\u015Blij pytanie",questionSent:"Pytanie wys\u0142ane.",questionMine:"Ty",questionTeamAnswer:"Odpowied\u017A autora",rateTitle:"Oce\u0144 lekcj\u0119",rateStar:"{n} z 5",ratePlaceholder:"Komentarz (opcjonalnie)",rateSubmit:"Zapisz ocen\u0119",rateSaved:"Dzi\u0119kujemy za ocen\u0119.",rateAverage:"\u015Arednia ocena {average} ({count})"},en:{back:"Back",loading:"Loading the course...",retry:"Try again",errorGeneric:"Could not load the data. Please try again in a moment.",errorUnauthorized:"You do not have access to this course. Sign in again or contact support.",errorNotFound:"This course or lesson was not found.",errorUnavailable:"The course is temporarily unavailable. Please try again in a moment.",previewBadge:"Preview",progressLessons:"{done} of {total} lessons",progressPercent:"{percent}% complete",contents:"Contents",free:"Free",locked:"Locked",lockedByTest:"Pass the test to unlock it: {test}",lockedPage:"This lesson is locked. Pass the test \u201C{test}\u201D to unlock it.",testBadge:"Test",completed:"Completed",continueCourse:"Continue the course",noItem:"Pick a lesson from the list.",markComplete:"Mark as completed",markedComplete:"Lesson completed",prevItem:"Previous",nextItem:"Next",attachments:"Downloads",download:"Download",autoplay:"Autoplay the next lesson",videoError:"The video could not be played.",videoRetry:"Reload the video",noContent:"This lesson has no content yet.",testGating:"Passing this test unlocks the following lessons.",testAttemptsLeft:"Attempts left: {count}",testAttemptsUnlimited:"The number of attempts is unlimited.",testNoAttemptsLeft:"You have used all attempts.",testPassThreshold:"Passing score: {percent}%",testBestScore:"Best score: {percent}%",testSubmit:"Check answers",testSubmitting:"Checking...",testUnanswered:"Unanswered questions: {count}",testPassed:"Test passed",testFailed:"Test not passed",testScore:"Score: {percent}%",testCorrect:"Correct",testIncorrect:"Incorrect",testCorrectAnswer:"Correct answer",testTryAgain:"Try again",testPreviousAttempts:"Previous attempts",testAttemptRow:"{percent}% \xB7 {date}",testNoQuestions:"This test has no questions yet.",mcqSingle:"Choose one answer",mcqMultiple:"Select all correct answers",todoHint:"Check the steps you have done",todoRequired:"required",gapPlaceholder:"fill in",sortHint:"Put the items in the correct order",moveUp:"Move up",moveDown:"Move down",questionsTitle:"Questions about this lesson",questionsEmpty:"Nobody has asked a question yet.",questionPlaceholder:"Ask the course author a question",questionSubmit:"Send question",questionSent:"Question sent.",questionMine:"You",questionTeamAnswer:"Answer from the author",rateTitle:"Rate this lesson",rateStar:"{n} of 5",ratePlaceholder:"Comment (optional)",rateSubmit:"Save rating",rateSaved:"Thanks for your rating.",rateAverage:"Average rating {average} ({count})"}};function Te(e,t=je()){return Je(It,t,e)}import{ArrowDown as Rs,ArrowUp as ks,Check as wt,X as Et}from"lucide-react";import{useRef as Tt,useState as de}from"react";import{Fragment as Gs,jsx as u,jsxs as P}from"react/jsx-runtime";function Ns({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=h();if(e.config.type!=="mcq")return null;let{choices:i,multiple:a}=e.config;return P("fieldset",{className:"space-y-2",disabled:s,children:[u("legend",{className:"mb-2 text-xs text-neutral-500 dark:text-neutral-400",children:a?n.mcqMultiple:n.mcqSingle}),i.map(r=>{let c=t.selectedIds.includes(r.id);return P("label",{className:"flex cursor-pointer items-start gap-3 rounded-lg bg-neutral-100 px-3 py-2 text-sm dark:bg-neutral-800",children:[u("input",{className:"mt-0.5",type:a?"checkbox":"radio",name:`q-${e.id}`,checked:c,onChange:()=>o({type:"mcq",selectedIds:a?c?t.selectedIds.filter(b=>b!==r.id):[...t.selectedIds,r.id]:[r.id]})}),u("span",{className:"break-words",children:r.label})]},r.id)})]})}function Ps({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=h();return e.config.type!=="todolist"?null:P("fieldset",{className:"space-y-2",disabled:s,children:[u("legend",{className:"mb-2 text-xs text-neutral-500 dark:text-neutral-400",children:n.todoHint}),e.config.steps.map(i=>{let a=t.checkedIds.includes(i.id);return P("label",{className:"flex cursor-pointer items-start gap-3 rounded-lg bg-neutral-100 px-3 py-2 text-sm dark:bg-neutral-800",children:[u("input",{className:"mt-0.5",type:"checkbox",checked:a,onChange:()=>o({type:"todolist",checkedIds:a?t.checkedIds.filter(r=>r!==i.id):[...t.checkedIds,i.id]})}),P("span",{className:"break-words",children:[i.label,i.required&&P("span",{className:"ml-2 text-xs text-neutral-500 dark:text-neutral-400",children:["(",n.todoRequired,")"]})]})]},i.id)})]})}function Vs({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=h();if(e.config.type!=="fill_gap")return null;let i=he(e.config.template,e.config.blanks);return u("p",{className:"text-sm leading-10 break-words",children:i.map((a,r)=>a.type==="text"?u("span",{className:"whitespace-pre-wrap",children:a.text},r):u(Ye,{className:"mx-1 inline-block h-8 w-36 align-middle","aria-label":`${n.gapPlaceholder} ${a.id}`,placeholder:n.gapPlaceholder,disabled:s,value:t.values[a.id]??"",onChange:c=>o({type:"fill_gap",values:{...t.values,[a.id]:c.target.value}})},r))})}function Is({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=h();if(e.config.type!=="sort_order")return null;let i=new Map(e.config.items.map(r=>[r.id,r.label])),a=(r,c)=>o({type:"sort_order",orderedIds:at(t.orderedIds,r,c)});return P("div",{className:"space-y-2",children:[u("p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:n.sortHint}),u("ol",{className:"space-y-2",children:t.orderedIds.map((r,c)=>P("li",{className:"flex items-center gap-2 rounded-lg bg-neutral-100 px-3 py-2 text-sm dark:bg-neutral-800",children:[P("span",{className:"w-5 text-xs text-neutral-500",children:[c+1,"."]}),u("span",{className:"min-w-0 flex-1 break-words",children:i.get(r)??r}),u(N,{type:"button",variant:"ghost",size:"icon-xs","aria-label":n.moveUp,disabled:s||c===0,onClick:()=>a(c,c-1),children:u(ks,{"aria-hidden":!0})}),u(N,{type:"button",variant:"ghost",size:"icon-xs","aria-label":n.moveDown,disabled:s||c===t.orderedIds.length-1,onClick:()=>a(c,c+1),children:u(Rs,{"aria-hidden":!0})})]},r))})]})}function Ts({question:e,answer:t,disabled:s,onChange:o}){let n={question:e,disabled:s,onChange:o};switch(t.type){case"mcq":return u(Ns,{...n,answer:t});case"todolist":return u(Ps,{...n,answer:t});case"fill_gap":return u(Vs,{...n,answer:t});case"sort_order":return u(Is,{...n,answer:t})}}function ws({list:e}){let{texts:t}=h();return e.submissions.length===0?null:P("section",{className:"space-y-2",children:[u("h3",{className:"text-sm font-semibold",children:t.testPreviousAttempts}),u("ul",{className:"space-y-1 text-sm",children:e.submissions.map(s=>P("li",{className:"flex items-center gap-2 text-neutral-700 dark:text-neutral-300",children:[s.passed?u(wt,{className:"size-4 text-emerald-600","aria-hidden":!0}):u(Et,{className:"size-4 text-red-600","aria-hidden":!0}),w(t.testAttemptRow,{percent:s.scorePercent,date:s.createdAt?.toLocaleString()??""})]},s.id))})]})}function Es({test:e,onSubmitted:t,onTryAgain:s}){let{dataSource:o,texts:n}=h(),[i,a]=de({}),[r,c]=de(),[b,y]=de(!1),[f,d]=de(),p=Tt(Date.now()),A=Tt(e.questions).current,C=e.attemptsLeft!=null&&e.attemptsLeft<=0,I=r?r.attemptsLeft:e.attemptsLeft,g=rt(A,i),k=l=>i[l.id]??ot(l.config);async function M(){y(!0),d(void 0);try{let l={};for(let m of A)l[m.id]=k(m);let R=await o.submitTest(e.id,l,Date.now()-p.current);c(R),t(R)}catch(l){d(l)}finally{y(!1)}}let E=new Map(r?.results.map(l=>[l.questionId,l]));return A.length===0?u("p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:n.testNoQuestions}):P("form",{className:"space-y-6",onSubmit:l=>{l.preventDefault(),r==null&&!C&&M()},children:[r&&P("div",{role:"status",className:v("rounded-xl p-4 text-sm",r.submission.passed?"bg-emerald-50 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-300":"bg-red-50 text-red-800 dark:bg-red-950 dark:text-red-300"),children:[u("p",{className:"text-base font-semibold",children:r.submission.passed?n.testPassed:n.testFailed}),u("p",{children:w(n.testScore,{percent:r.submission.scorePercent})})]}),u("ol",{className:"space-y-6",children:A.map((l,R)=>{let m=E.get(l.id),T=m?.correctAnswer!=null?it(l,m.correctAnswer):"";return P("li",{className:"space-y-3","data-question-id":l.id,children:[P("p",{className:"font-medium break-words",children:[R+1,". ",l.prompt]}),u(Ts,{question:l,answer:k(l),disabled:r!=null||b||C,onChange:B=>a(q=>({...q,[l.id]:B}))}),m&&P("div",{className:v("flex items-start gap-2 text-sm",m.correct?"text-emerald-700 dark:text-emerald-400":"text-red-700 dark:text-red-400"),children:[m.correct?u(wt,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}):u(Et,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}),P("span",{children:[m.correct?n.testCorrect:n.testIncorrect,T!==""&&!m.correct&&P("span",{className:"block text-neutral-700 dark:text-neutral-300",children:[n.testCorrectAnswer,": ",T]})]})]})]},l.id)})}),f!=null&&u("p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:J(f,n)}),r==null?P("div",{className:"space-y-2",children:[g>0&&!C&&u("p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:w(n.testUnanswered,{count:g})}),u(N,{type:"submit",className:$,disabled:b||C,children:b?n.testSubmitting:n.testSubmit})]}):I!==0&&!r.submission.passed&&u(N,{type:"button",variant:"outline",onClick:s,children:n.testTryAgain})]})}function Gt({testId:e,title:t,onSubmitted:s}){let{dataSource:o,texts:n}=h(),i=Q(),a=j(()=>o.getTest(e),[o,e]),r=j(()=>o.listSubmissions(e).catch(()=>{}),[o,e]),[c,b]=de(0);return P("article",{"data-test-id":e,className:v(z,"min-w-0 space-y-5"),children:[u("h2",{className:"text-2xl font-semibold break-words",children:a.status==="success"?a.data.title:t}),a.status==="loading"&&u(ue,{}),a.status==="error"&&u(ee,{error:a.error,onRetry:a.reload}),a.status==="success"&&P(Gs,{children:[a.data.description.trim()!==""&&u("p",{className:"text-sm break-words whitespace-pre-wrap text-neutral-700 dark:text-neutral-300",children:a.data.description}),P("ul",{className:"space-y-1 text-sm text-neutral-600 dark:text-neutral-400",children:[a.data.gating&&u("li",{children:n.testGating}),u("li",{children:w(n.testPassThreshold,{percent:a.data.passThresholdPercent})}),u("li",{children:a.data.attemptsLeft==null?n.testAttemptsUnlimited:w(n.testAttemptsLeft,{count:a.data.attemptsLeft})}),a.data.attemptCount>0&&u("li",{children:w(n.testBestScore,{percent:a.data.bestScorePercent})})]}),a.data.attemptsLeft!=null&&a.data.attemptsLeft<=0&&u("p",{role:"alert",className:"text-sm font-medium text-red-700 dark:text-red-400",children:n.testNoAttemptsLeft}),u(Es,{test:a.data,onSubmitted:y=>{i("test_submitted",{lesson_id:e,score_bucket:Me(y.submission.scorePercent)}),s(y),r.refresh(),a.refresh()},onTryAgain:()=>b(y=>y+1)},c),r.status==="success"&&r.data&&u(ws,{list:r.data})]})]})}import{jsx as x,jsxs as L}from"react/jsx-runtime";var Ut="bitsnap-course-autoplay";function Zs(){let[e,t]=fe(!1);Ge(()=>{try{t(window.localStorage.getItem(Ut)==="1")}catch{}},[]);let s=Bt(o=>{t(o);try{window.localStorage.setItem(Ut,o?"1":"0")}catch{}},[]);return[e,s]}function Lt(e){return e==null?void 0:{id:e.id,kind:e.kind}}function Xs({item:e}){let{texts:t}=h();return L("div",{className:v(z,"space-y-2"),role:"status",children:[x("h2",{className:"text-2xl font-semibold break-words",children:e.title}),x("p",{className:"text-sm text-neutral-600 dark:text-neutral-300",children:e.lockReason?w(t.lockedPage,{test:e.lockReason.gatingTestTitle}):t.locked})]})}function Ms({course:e,item:t,autoplay:s,onAutoplayChange:o,startPlaying:n,onNavigate:i,onProgressSaved:a,onEnded:r,onLocked:c}){let{dataSource:b,texts:y}=h(),f=j(()=>b.getLesson(t.id),[b,t.id]),d=f.status==="error"&&f.error instanceof Z&&f.error.code==="item_locked";if(Ge(()=>{d&&c()},[d]),f.status==="loading")return x(ue,{});if(f.status==="error")return d?L("div",{className:v(z,"space-y-2"),role:"alert",children:[x("h2",{className:"text-2xl font-semibold break-words",children:t.title}),x("p",{className:"text-sm",children:J(f.error,y)})]}):x(ee,{error:f.error,onRetry:f.reload});let p=ye(e,t.id),A=ce(e).filter(C=>C.kind!=="test").findIndex(C=>C.id===t.id)+1;return x(Vt,{lesson:f.data,position:A,courseType:e.type,prev:f.data.prev??Lt(p.prev),next:f.data.next??Lt(p.next),autoplay:s,onAutoplayChange:o,startPlaying:n,onNavigate:i,onProgressSaved:a,onEnded:r,onUrlsExpired:f.refresh},f.data.id)}function zs({course:e,selectedId:t,onSelect:s,onBack:o,onCourseChange:n,onCourseRefresh:i}){let{texts:a,preview:r}=h(),c=Q(),b=Bs(null),[y,f]=fe(!1),[d,p]=Zs(),[A,C]=fe(),I=et(e,t),g=le(e,I);Ge(()=>{c("course_opened",{})},[e.id]);let k=(m,T=!1)=>{C(T?m:void 0),f(!1),s(m),b.current?.scrollIntoView({block:"start",behavior:"smooth"})},M=x(ct,{course:e,selectedId:I,variant:e.type==="video"?"playlist":"modules",onSelect:m=>k(m.id)}),E;g==null?E=x("p",{className:"text-sm text-neutral-500",children:a.noItem}):g.locked?E=x(Xs,{item:g}):g.kind==="test"?E=x(Gt,{testId:g.id,title:g.title,onSubmitted:()=>i()},g.id):E=x(Ms,{course:e,item:g,autoplay:d,onAutoplayChange:p,startPlaying:A===g.id,onNavigate:m=>k(m.id),onProgressSaved:(m,T)=>n(B=>({...T.completed?$e(B,m):B,completedLessons:T.completedLessons,progressPercent:T.progressPercent})),onEnded:()=>{if(!d)return;let m=Oe(e,g.id);m&&k(m.id,!0)},onLocked:i},g.id);let l=e.type==="video",R=e.resumeItemId!==""&&e.resumeItemId!==I&&le(e,e.resumeItemId)?.locked===!1;return L("div",{ref:b,className:"space-y-4 scroll-mt-4",children:[L("header",{className:"space-y-3",children:[L("div",{className:"flex flex-wrap items-center gap-2",children:[o&&L(N,{variant:"ghost",size:"sm",onClick:o,children:[x(Ee,{"aria-hidden":!0}),a.back]}),r&&x("span",{"data-course-preview":!0,className:"rounded-full bg-amber-100 px-3 py-0.5 text-xs font-semibold text-amber-900 dark:bg-amber-900/40 dark:text-amber-200",children:a.previewBadge})]}),L("div",{className:"flex flex-wrap items-end justify-between gap-4",children:[x("div",{className:"min-w-0 space-y-1",children:x("h1",{className:"text-2xl font-semibold break-words sm:text-3xl",children:e.title})}),R&&L(N,{size:"sm",variant:"outline",onClick:()=>k(e.resumeItemId),children:[x(Ls,{"aria-hidden":!0}),a.continueCourse]})]}),L("div",{className:"max-w-xl space-y-1",children:[x(At,{percent:e.progressPercent,label:w(a.progressPercent,{percent:e.progressPercent})}),L("p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:[w(a.progressLessons,{done:e.completedLessons,total:e.totalLessons})," \xB7 ",w(a.progressPercent,{percent:e.progressPercent})]})]})]}),L("div",{className:v("grid gap-6",l?"lg:grid-cols-[minmax(0,1fr)_380px]":"lg:grid-cols-[320px_minmax(0,1fr)]"),children:[!l&&x("div",{className:"lg:hidden",children:L(N,{variant:"outline",size:"sm","aria-expanded":y,onClick:()=>f(m=>!m),children:[x(Us,{"aria-hidden":!0}),a.contents]})}),!l&&x("aside",{className:v(z,"p-3 sm:p-3 lg:sticky lg:top-4 lg:block lg:max-h-[calc(100vh-2rem)] lg:self-start lg:overflow-y-auto",y?"block":"hidden"),children:M}),x("div",{className:"min-w-0","data-course-content":!0,children:E}),l&&x("aside",{className:v(z,"p-3 sm:p-3 lg:sticky lg:top-4 lg:max-h-[calc(100vh-2rem)] lg:self-start lg:overflow-y-auto"),children:M})]})]})}function Qs({accessId:e,accessToken:t,dataSource:s,preview:o=!1,itemId:n,onItemChange:i,onBack:a,initialCourse:r,texts:c,locale:b,theme:y,className:f,analytics:d}){let p=_e(),A=Xe(p.projectID,o?!1:d,"course"),C=we(()=>Te(c,b),[c,b]),I=we(()=>{if(s)return s;if(e==null||e==="")throw new Error("PanelCourse needs an accessId or a dataSource");return Ce({accessId:e,accessToken:t})},[s,e,t]),g=j(()=>I.getCourse(),[I],r),[k,M]=fe(),E=i?n:n??k,l=Bt(B=>{M(B),i?.(B)},[i]),R=De(y?.colors??p.theme?.colors),m=g.status==="success"?g.data.id:void 0,T=we(()=>({dataSource:I,texts:C,preview:o,analytics:{courseId:m,instrument:A}}),[I,C,o,m,A]);return x(Ze,{value:A,children:x(qe,{value:T,children:L("div",{"data-bitsnap-course":!0,"data-course-type":g.status==="success"?g.data.type:void 0,style:R,className:v("font-inter w-full max-w-7xl",f),children:[g.status==="loading"&&L("div",{className:"space-y-4",children:[a&&L(N,{variant:"ghost",size:"sm",onClick:a,children:[x(Ee,{"aria-hidden":!0}),C.back]}),x("p",{className:"sr-only",role:"status",children:C.loading}),x(ue,{})]}),g.status==="error"&&L("div",{className:"space-y-4",children:[a&&L(N,{variant:"ghost",size:"sm",onClick:a,children:[x(Ee,{"aria-hidden":!0}),C.back]}),x(ee,{error:g.error,onRetry:g.reload})]}),g.status==="success"&&x(zs,{course:g.data,selectedId:E,onSelect:l,onBack:a,onCourseChange:g.mutate,onCourseRefresh:g.refresh})]})})})}export{It as COURSE_TEXT_TABLES,Z as CourseError,Qs as PanelCourse,ve as createCourseDataSource,Ce as createRpcCourseDataSource,Te as getCourseTexts,Pe as sanitizeLessonHtml};
1
+ import{b as Fe,j as _e,k as Ke}from"./chunk-K2EITRNW.mjs";import{m as Qe,n as We,q as N,r as Ye,s as Ae,u as ie,v as xe}from"./chunk-3DGHF373.mjs";import{d as v,i as Je,m as je}from"./chunk-GAVLY6RX.mjs";import{l as Ze,n as Xe,r as Me,s as ze}from"./chunk-YNGXQJPE.mjs";import"./chunk-ADYVTMGH.mjs";import"./chunk-U6FLIRIV.mjs";import{ChevronLeft as Ee,List as Us,Play as Ls}from"lucide-react";import{useCallback as Bt,useEffect as Ge,useMemo as we,useRef as Bs,useState as fe}from"react";function De(e){let t={},s=e?.brand?.trim(),o=e?.brandDark?.trim()||s;if(s){t["--course-accent"]=s;let n=Ae(s);n&&(t["--course-accent-fg"]=n)}if(o){t["--course-accent-dark"]=o;let n=Ae(o);n&&(t["--course-accent-dark-fg"]=n)}return t}import{useCallback as Mt}from"react";import{createContext as Zt,useContext as Xt}from"react";var He=Zt(void 0),qe=He.Provider;function h(){let e=Xt(He);if(e==null)throw new Error("Course components have to be rendered inside PanelCourse");return e}function Q(){let{analytics:e,preview:t}=h();return Mt((s,o)=>{t||e?.courseId==null||e.instrument.track(s,{...o,course_id:e.courseId})},[e,t])}import{CheckCircle2 as Wt,ClipboardCheck as Yt,Lock as Ft,PlayCircle as _t,FileText as Kt}from"lucide-react";function ce(e){return[...e.sections.flatMap(t=>t.items.map(s=>({...s,sectionId:t.id}))),...e.finalItems.map(t=>({...t,sectionId:""}))]}function le(e,t){if(!(t==null||t===""))return ce(e).find(s=>s.id===t)}function ye(e,t){let s=ce(e),o=s.findIndex(n=>n.id===t);return o<0?{}:{prev:s[o-1],next:s[o+1]}}function Oe(e,t){let{next:s}=ye(e,t);return s!=null&&s.kind==="lesson"&&!s.locked?s:void 0}function zt(e){let t=0,s=0;for(let o of e.sections)for(let n of o.items)n.kind==="lesson"&&(t+=1,n.completed&&(s+=1));return{total:t,completed:s,percent:t===0?0:Math.round(s/t*100)}}function $e(e,t){let s=e.sections.map(n=>({...n,items:n.items.map(i=>i.id===t&&i.kind==="lesson"?{...i,completed:!0}:i)})),o=zt({sections:s});return{...e,sections:s,totalLessons:o.total,completedLessons:o.completed,progressPercent:o.percent}}function et(e,t){return le(e,t)!=null?t:le(e,e.resumeItemId)?.locked===!1?e.resumeItemId:ce(e).find(s=>!s.locked)?.id}function w(e,t){return e.replace(/\{(\w+)\}/g,(s,o)=>o in t?String(t[o]):s)}function tt(e,t){return t>0&&e/t>=.8}function st(e,t){return e<5||t>0&&e>=t-5?0:Math.floor(e)}function Se(e){let t=Math.max(0,Math.floor(e)),s=Math.floor(t/3600),o=Math.floor(t%3600/60),n=String(t%60).padStart(2,"0");return s>0?`${s}:${String(o).padStart(2,"0")}:${n}`:`${o}:${n}`}function nt(e){if(!(e>0))return"0 B";let t=["B","KB","MB","GB"],s=Math.min(Math.floor(Math.log(e)/Math.log(1024)),t.length-1),o=e/1024**s;return`${s===0||o>=10?Math.round(o):o.toFixed(1)} ${t[s]}`}function ot(e){switch(e.type){case"mcq":return{type:"mcq",selectedIds:[]};case"todolist":return{type:"todolist",checkedIds:[]};case"fill_gap":return{type:"fill_gap",values:{}};case"sort_order":return{type:"sort_order",orderedIds:e.items.map(t=>t.id)}}}function Qt(e,t){if(t==null||t.type!==e.config.type)return!1;switch(t.type){case"mcq":return t.selectedIds.length>0;case"todolist":return t.checkedIds.length>0;case"fill_gap":return Object.values(t.values).some(s=>s.trim()!=="");case"sort_order":return t.orderedIds.length>0}}function rt(e,t){return e.filter(s=>!Qt(s,t[s.id])).length}function at(e,t,s){if(t===s||t<0||s<0||t>=e.length||s>=e.length)return[...e];let o=[...e],[n]=o.splice(t,1);return o.splice(s,0,n),o}function he(e,t){let s=[],o=/\{\{\s*([^{}\s]+)\s*\}\}/g,n=0;for(let i of e.matchAll(o)){let a=i[1];t.includes(a)&&(i.index>n&&s.push({type:"text",text:e.slice(n,i.index)}),s.push({type:"blank",id:a}),n=i.index+i[0].length)}return n<e.length&&s.push({type:"text",text:e.slice(n)}),s}function it(e,t){let{config:s}=e;if(t==null||t.type!==s.type)return"";let o=(n,i)=>n.find(a=>a.id===i)?.label??i;return s.type==="mcq"&&t.type==="mcq"?t.selectedIds.map(n=>o(s.choices,n)).join(", "):s.type==="todolist"&&t.type==="todolist"?t.checkedIds.map(n=>o(s.steps,n)).join(", "):s.type==="sort_order"&&t.type==="sort_order"?t.orderedIds.map(n=>o(s.items,n)).join(" \u2192 "):s.type==="fill_gap"&&t.type==="fill_gap"?he(s.template,s.blanks).map(n=>n.type==="text"?n.text:`[${t.values[n.id]??""}]`).join(""):""}import{jsx as V,jsxs as _}from"react/jsx-runtime";function lt({item:e}){return e.locked?V(Ft,{className:"size-4 text-neutral-500","aria-hidden":!0}):e.completed?V(Wt,{className:"size-4 text-emerald-600 dark:text-emerald-400","aria-hidden":!0}):e.kind==="test"?V(Yt,{className:"size-4 text-neutral-500","aria-hidden":!0}):e.durationSeconds>0?V(_t,{className:"size-4 text-neutral-500","aria-hidden":!0}):V(Kt,{className:"size-4 text-neutral-500","aria-hidden":!0})}function Jt({item:e,selected:t,variant:s,onSelect:o}){let{texts:n}=h(),i=e.lockReason?w(n.lockedByTest,{test:e.lockReason.gatingTestTitle}):n.locked,a=e.locked?i:e.completed?n.completed:void 0;return V("li",{children:_("button",{type:"button","data-item-id":e.id,"data-locked":e.locked||void 0,"aria-current":t?"true":void 0,"aria-disabled":e.locked||void 0,title:e.locked?i:void 0,onClick:()=>{e.locked||o(e)},className:v("flex w-full items-start gap-3 rounded-lg p-2 text-left text-sm outline-none transition focus-visible:ring-[3px] focus-visible:ring-ring/50",t?"bg-neutral-200 dark:bg-neutral-700":"hover:bg-neutral-100 dark:hover:bg-neutral-800",e.locked&&"cursor-not-allowed opacity-60 hover:bg-transparent dark:hover:bg-transparent"),children:[s==="playlist"&&e.kind==="lesson"&&_("span",{className:"relative aspect-video w-24 shrink-0 overflow-hidden rounded bg-neutral-200 dark:bg-neutral-800",children:[e.thumbnailUrl&&V("img",{src:e.thumbnailUrl,alt:"",loading:"lazy",draggable:!1,className:"size-full object-cover"}),e.durationSeconds>0&&V("span",{className:"absolute right-1 bottom-1 rounded bg-black/75 px-1 text-[10px] text-white",children:Se(e.durationSeconds)})]}),(s==="modules"||e.kind==="test")&&V("span",{className:"mt-0.5 shrink-0",children:V(lt,{item:e})}),_("span",{className:"min-w-0 flex-1",children:[V("span",{className:"block font-medium break-words",children:e.title}),_("span",{className:"mt-0.5 flex flex-wrap items-center gap-x-2 text-xs text-neutral-500 dark:text-neutral-400",children:[e.kind==="test"&&V("span",{children:n.testBadge}),e.isFree&&!e.locked&&V("span",{children:n.free}),s==="modules"&&e.durationSeconds>0&&V("span",{children:Se(e.durationSeconds)}),a&&V("span",{children:a})]})]}),s==="playlist"&&e.kind==="lesson"&&V("span",{className:"mt-0.5 shrink-0",children:V(lt,{item:e})})]})})}function ct({course:e,selectedId:t,onSelect:s,variant:o,className:n}){let{texts:i}=h(),a=r=>V("ul",{className:"flex flex-col gap-1",children:r.map(c=>V(Jt,{item:c,selected:c.id===t,variant:o,onSelect:s},c.id))});return _("nav",{"aria-label":i.contents,className:v("space-y-4",n),children:[e.sections.map(r=>{let c=r.items.filter(y=>y.kind==="lesson"),b=c.filter(y=>y.completed).length;return _("section",{"data-section-id":r.id,children:[_("h3",{className:"mb-1 flex items-baseline justify-between gap-2 px-2 text-sm font-semibold",children:[V("span",{className:"break-words",children:r.title}),c.length>0&&_("span",{className:"shrink-0 text-xs font-normal text-neutral-500 dark:text-neutral-400",children:[b,"/",c.length]})]}),a(r.items)]},r.id)}),e.finalItems.length>0&&V("section",{"data-section-id":"final",children:a(e.finalItems)})]})}import{createClient as ls}from"@connectrpc/connect";import{enumDesc as nn,fileDesc as jt,messageDesc as on,serviceDesc as Dt}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as Ht}from"@bufbuild/protobuf/wkt";var qt=jt("CiFwdWJsaWMvdjEvdXNlcl9wYW5lbF9jb3Vyc2UucHJvdG8SDXB1YmxpY19hcGkudjEiRAoPUGFuZWxMb2NrUmVhc29uEhYKDmdhdGluZ190ZXN0X2lkGAEgASgJEhkKEWdhdGluZ190ZXN0X3RpdGxlGAIgASgJIrQCCg9QYW5lbENvdXJzZUl0ZW0SCgoCaWQYASABKAkSMAoEa2luZBgCIAEoDjIiLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VJdGVtS2luZBINCgV0aXRsZRgDIAEoCRIPCgdpc19mcmVlGAQgASgIEg4KBmxvY2tlZBgFIAEoCBI4Cgtsb2NrX3JlYXNvbhgGIAEoCzIeLnB1YmxpY19hcGkudjEuUGFuZWxMb2NrUmVhc29uSACIAQESEQoJY29tcGxldGVkGAcgASgIEhgKEGR1cmF0aW9uX3NlY29uZHMYCCABKAUSGgoNdGh1bWJuYWlsX3VybBgJIAEoCUgBiAEBEg4KBmdhdGluZxgKIAEoCEIOCgxfbG9ja19yZWFzb25CEAoOX3RodW1ibmFpbF91cmwicwoSUGFuZWxDb3Vyc2VTZWN0aW9uEgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEi0KBWl0ZW1zGAQgAygLMh4ucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUl0ZW0i3wIKC1BhbmVsQ291cnNlEgoKAmlkGAEgASgJEiwKBHR5cGUYAiABKA4yHi5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlVHlwZRINCgV0aXRsZRgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCRIWCgljb3Zlcl91cmwYBSABKAlIAIgBARIVCg10b3RhbF9sZXNzb25zGAYgASgFEhkKEWNvbXBsZXRlZF9sZXNzb25zGAcgASgFEhgKEHByb2dyZXNzX3BlcmNlbnQYCCABKAUSMwoIc2VjdGlvbnMYCSADKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlU2VjdGlvbhIzCgtmaW5hbF9pdGVtcxgKIAMoCzIeLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VJdGVtEhYKDnJlc3VtZV9pdGVtX2lkGAsgASgJQgwKCl9jb3Zlcl91cmwiRAoZVXNlclBhbmVsR2V0Q291cnNlUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIosBChpVc2VyUGFuZWxHZXRDb3Vyc2VSZXNwb25zZRItCgdzdWNjZXNzGAEgASgLMhoucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAQggKBnJlc3VsdCJfCgpQYW5lbFZpZGVvEg8KB2hsc191cmwYASABKAkSFwoKcG9zdGVyX3VybBgCIAEoCUgAiAEBEhgKEGR1cmF0aW9uX3NlY29uZHMYAyABKAVCDQoLX3Bvc3Rlcl91cmwiRgoPUGFuZWxBdHRhY2htZW50EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEc2l6ZRgDIAEoAxILCgN1cmwYBCABKAkiTAoMUGFuZWxJdGVtUmVmEgoKAmlkGAEgASgJEjAKBGtpbmQYAiABKA4yIi5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlSXRlbUtpbmQigQQKC1BhbmVsTGVzc29uEgoKAmlkGAEgASgJEhIKCnNlY3Rpb25faWQYAiABKAkSDQoFdGl0bGUYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSFAoMY29udGVudF9odG1sGAUgASgJEi0KBXZpZGVvGAYgASgLMhkucHVibGljX2FwaS52MS5QYW5lbFZpZGVvSACIAQESMwoLYXR0YWNobWVudHMYByADKAsyHi5wdWJsaWNfYXBpLnYxLlBhbmVsQXR0YWNobWVudBIuCgRwcmV2GAggASgLMhsucHVibGljX2FwaS52MS5QYW5lbEl0ZW1SZWZIAYgBARIuCgRuZXh0GAkgASgLMhsucHVibGljX2FwaS52MS5QYW5lbEl0ZW1SZWZIAogBARIRCgljb21wbGV0ZWQYCiABKAgSGAoQcG9zaXRpb25fc2Vjb25kcxgLIAEoBRIRCglteV9yYXRpbmcYDCABKAUSFgoOYXZlcmFnZV9yYXRpbmcYDSABKAISFAoMcmF0aW5nX2NvdW50GA4gASgFEjcKDnVybHNfZXhwaXJlX2F0GA8gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBQggKBl92aWRlb0IHCgVfcHJldkIHCgVfbmV4dEIRCg9fdXJsc19leHBpcmVfYXQiVwoZVXNlclBhbmVsR2V0TGVzc29uUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhEKCWxlc3Nvbl9pZBgDIAEoCSKLAQoaVXNlclBhbmVsR2V0TGVzc29uUmVzcG9uc2USLQoHc3VjY2VzcxgBIAEoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25IABI0CgdmYWlsdXJlGAIgASgOMiEucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUZhaWx1cmVIAEIICgZyZXN1bHQipwEKIlVzZXJQYW5lbFNhdmVMZXNzb25Qcm9ncmVzc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIRCglsZXNzb25faWQYAyABKAkSEQoJY29tcGxldGVkGAQgASgIEhgKEHBvc2l0aW9uX3NlY29uZHMYBSABKAUSGAoQZHVyYXRpb25fc2Vjb25kcxgGIAEoBSKFAgojVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2USTAoHc3VjY2VzcxgBIAEoCzI5LnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaUAoGUmVzdWx0EhEKCWNvbXBsZXRlZBgBIAEoCBIZChFjb21wbGV0ZWRfbGVzc29ucxgCIAEoBRIYChBwcm9ncmVzc19wZXJjZW50GAMgASgFQggKBnJlc3VsdCIoCgtQYW5lbENob2ljZRIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCSJPCg5QYW5lbE1jcUNvbmZpZxIrCgdjaG9pY2VzGAEgAygLMhoucHVibGljX2FwaS52MS5QYW5lbENob2ljZRIQCghtdWx0aXBsZRgCIAEoCCKCAQoTUGFuZWxUb2RvbGlzdENvbmZpZxI2CgVzdGVwcxgBIAMoCzInLnB1YmxpY19hcGkudjEuUGFuZWxUb2RvbGlzdENvbmZpZy5TdGVwGjMKBFN0ZXASCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSEAoIcmVxdWlyZWQYAyABKAgiNgoSUGFuZWxGaWxsR2FwQ29uZmlnEhAKCHRlbXBsYXRlGAEgASgJEg4KBmJsYW5rcxgCIAMoCSJBChRQYW5lbFNvcnRPcmRlckNvbmZpZxIpCgVpdGVtcxgBIAMoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxDaG9pY2UioQIKEVBhbmVsVGVzdFF1ZXN0aW9uEgoKAmlkGAEgASgJEg4KBnByb21wdBgCIAEoCRIOCgZwb2ludHMYAyABKAUSLAoDbWNxGAogASgLMh0ucHVibGljX2FwaS52MS5QYW5lbE1jcUNvbmZpZ0gAEjYKCHRvZG9saXN0GAsgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRvZG9saXN0Q29uZmlnSAASNQoIZmlsbF9nYXAYDCABKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsRmlsbEdhcENvbmZpZ0gAEjkKCnNvcnRfb3JkZXIYDSABKAsyIy5wdWJsaWNfYXBpLnYxLlBhbmVsU29ydE9yZGVyQ29uZmlnSABCCAoGY29uZmlnIqsCCglQYW5lbFRlc3QSCgoCaWQYASABKAkSDQoFdGl0bGUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDgoGZ2F0aW5nGAQgASgIEh4KFnBhc3NfdGhyZXNob2xkX3BlcmNlbnQYBSABKAUSGAoQYXR0ZW1wdHNfYWxsb3dlZBgGIAEoBRIaCg1hdHRlbXB0c19sZWZ0GAcgASgFSACIAQESFQoNYXR0ZW1wdF9jb3VudBgIIAEoBRIaChJiZXN0X3Njb3JlX3BlcmNlbnQYCSABKAUSDgoGcGFzc2VkGAogASgIEjMKCXF1ZXN0aW9ucxgLIAMoCzIgLnB1YmxpY19hcGkudjEuUGFuZWxUZXN0UXVlc3Rpb25CEAoOX2F0dGVtcHRzX2xlZnQiUwoXVXNlclBhbmVsR2V0VGVzdFJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIPCgd0ZXN0X2lkGAMgASgJIocBChhVc2VyUGFuZWxHZXRUZXN0UmVzcG9uc2USKwoHc3VjY2VzcxgBIAEoCzIYLnB1YmxpY19hcGkudjEuUGFuZWxUZXN0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSABCCAoGcmVzdWx0IiYKDlBhbmVsTWNxQW5zd2VyEhQKDHNlbGVjdGVkX2lkcxgBIAMoCSIqChNQYW5lbFRvZG9saXN0QW5zd2VyEhMKC2NoZWNrZWRfaWRzGAEgAygJIoIBChJQYW5lbEZpbGxHYXBBbnN3ZXISPQoGdmFsdWVzGAEgAygLMi0ucHVibGljX2FwaS52MS5QYW5lbEZpbGxHYXBBbnN3ZXIuVmFsdWVzRW50cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIrChRQYW5lbFNvcnRPcmRlckFuc3dlchITCgtvcmRlcmVkX2lkcxgBIAMoCSKDAgoLUGFuZWxBbnN3ZXISEwoLcXVlc3Rpb25faWQYASABKAkSLAoDbWNxGAogASgLMh0ucHVibGljX2FwaS52MS5QYW5lbE1jcUFuc3dlckgAEjYKCHRvZG9saXN0GAsgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRvZG9saXN0QW5zd2VySAASNQoIZmlsbF9nYXAYDCABKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsRmlsbEdhcEFuc3dlckgAEjkKCnNvcnRfb3JkZXIYDSABKAsyIy5wdWJsaWNfYXBpLnYxLlBhbmVsU29ydE9yZGVyQW5zd2VySABCBwoFdmFsdWUijQEKE1BhbmVsVGVzdFN1Ym1pc3Npb24SCgoCaWQYASABKAkSFQoNc2NvcmVfcGVyY2VudBgCIAEoBRIOCgZwYXNzZWQYAyABKAgSEwoLZHVyYXRpb25fbXMYBCABKAMSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAilwEKE1BhbmVsUXVlc3Rpb25SZXN1bHQSEwoLcXVlc3Rpb25faWQYASABKAkSDwoHY29ycmVjdBgCIAEoCBIOCgZwb2ludHMYAyABKAUSNwoOY29ycmVjdF9hbnN3ZXIYBCABKAsyGi5wdWJsaWNfYXBpLnYxLlBhbmVsQW5zd2VySACIAQFCEQoPX2NvcnJlY3RfYW5zd2VyIpgBChpVc2VyUGFuZWxTdWJtaXRUZXN0UmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEg8KB3Rlc3RfaWQYAyABKAkSKwoHYW5zd2VycxgEIAMoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxBbnN3ZXISEwoLZHVyYXRpb25fbXMYBSABKAMiyQIKG1VzZXJQYW5lbFN1Ym1pdFRlc3RSZXNwb25zZRJECgdzdWNjZXNzGAEgASgLMjEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxTdWJtaXRUZXN0UmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaowEKBlJlc3VsdBI2CgpzdWJtaXNzaW9uGAEgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRlc3RTdWJtaXNzaW9uEjMKB3Jlc3VsdHMYAiADKAsyIi5wdWJsaWNfYXBpLnYxLlBhbmVsUXVlc3Rpb25SZXN1bHQSGgoNYXR0ZW1wdHNfbGVmdBgDIAEoBUgAiAEBQhAKDl9hdHRlbXB0c19sZWZ0QggKBnJlc3VsdCJfCiNVc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEg8KB3Rlc3RfaWQYAyABKAkiqwIKJFVzZXJQYW5lbExpc3RUZXN0U3VibWlzc2lvbnNSZXNwb25zZRJNCgdzdWNjZXNzGAEgASgLMjoucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAadAoGUmVzdWx0EjcKC3N1Ym1pc3Npb25zGAEgAygLMiIucHVibGljX2FwaS52MS5QYW5lbFRlc3RTdWJtaXNzaW9uEhoKEmJlc3Rfc2NvcmVfcGVyY2VudBgCIAEoBRIVCg1hdHRlbXB0X2NvdW50GAMgASgFQggKBnJlc3VsdCJWChNQYW5lbFF1ZXN0aW9uQW5zd2VyEg8KB2NvbnRlbnQYASABKAkSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAizAEKE1BhbmVsTGVzc29uUXVlc3Rpb24SCgoCaWQYASABKAkSDwoHY29udGVudBgCIAEoCRITCgthdXRob3JfbmFtZRgDIAEoCRIPCgdpc19taW5lGAQgASgIEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjcKBmFuc3dlchgGIAEoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxRdWVzdGlvbkFuc3dlckgAiAEBQgkKB19hbnN3ZXIiYQojVXNlclBhbmVsTGlzdExlc3NvblF1ZXN0aW9uc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIRCglsZXNzb25faWQYAyABKAki9gEKJFVzZXJQYW5lbExpc3RMZXNzb25RdWVzdGlvbnNSZXNwb25zZRJNCgdzdWNjZXNzGAEgASgLMjoucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0TGVzc29uUXVlc3Rpb25zUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaPwoGUmVzdWx0EjUKCXF1ZXN0aW9ucxgBIAMoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25RdWVzdGlvbkIICgZyZXN1bHQicAohVXNlclBhbmVsQXNrTGVzc29uUXVlc3Rpb25SZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIRCglhY2Nlc3NfaWQYAiABKAkSEQoJbGVzc29uX2lkGAMgASgJEg8KB2NvbnRlbnQYBCABKAkimwEKIlVzZXJQYW5lbEFza0xlc3NvblF1ZXN0aW9uUmVzcG9uc2USNQoHc3VjY2VzcxgBIAEoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25RdWVzdGlvbkgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAQggKBnJlc3VsdCJ4ChpVc2VyUGFuZWxSYXRlTGVzc29uUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhEKCWxlc3Nvbl9pZBgDIAEoCRINCgVzY29yZRgEIAEoBRIPCgdjb21tZW50GAUgASgJIu4BChtVc2VyUGFuZWxSYXRlTGVzc29uUmVzcG9uc2USRAoHc3VjY2VzcxgBIAEoCzIxLnB1YmxpY19hcGkudjEuVXNlclBhbmVsUmF0ZUxlc3NvblJlc3BvbnNlLlJlc3VsdEgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAGkkKBlJlc3VsdBIRCglteV9yYXRpbmcYASABKAUSFgoOYXZlcmFnZV9yYXRpbmcYAiABKAISFAoMcmF0aW5nX2NvdW50GAMgASgFQggKBnJlc3VsdCr6AgoSUGFuZWxDb3Vyc2VGYWlsdXJlEiAKHFBBTkVMX0NPVVJTRV9GQUlMVVJFX1VOS05PV04QABIlCiFQQU5FTF9DT1VSU0VfRkFJTFVSRV9VTkFVVEhPUklaRUQQARIpCiVQQU5FTF9DT1VSU0VfRkFJTFVSRV9DT1VSU0VfTk9UX0ZPVU5EEAISJwojUEFORUxfQ09VUlNFX0ZBSUxVUkVfSVRFTV9OT1RfRk9VTkQQAxIkCiBQQU5FTF9DT1VSU0VfRkFJTFVSRV9JVEVNX0xPQ0tFRBAEEikKJVBBTkVMX0NPVVJTRV9GQUlMVVJFX05PX0FUVEVNUFRTX0xFRlQQBRIpCiVQQU5FTF9DT1VSU0VfRkFJTFVSRV9JTlZBTElEX0FSR1VNRU5UEAYSJQohUEFORUxfQ09VUlNFX0ZBSUxVUkVfUkFURV9MSU1JVEVEEAcSJAogUEFORUxfQ09VUlNFX0ZBSUxVUkVfVU5BVkFJTEFCTEUQCCptCg9QYW5lbENvdXJzZVR5cGUSHQoZUEFORUxfQ09VUlNFX1RZUEVfVU5LTk9XThAAEh4KGlBBTkVMX0NPVVJTRV9UWVBFX1NUQU5EQVJEEAESGwoXUEFORUxfQ09VUlNFX1RZUEVfVklERU8QAip9ChNQYW5lbENvdXJzZUl0ZW1LaW5kEiIKHlBBTkVMX0NPVVJTRV9JVEVNX0tJTkRfVU5LTk9XThAAEiEKHVBBTkVMX0NPVVJTRV9JVEVNX0tJTkRfTEVTU09OEAESHwobUEFORUxfQ09VUlNFX0lURU1fS0lORF9URVNUEAIy+QcKFlVzZXJQYW5lbENvdXJzZVNlcnZpY2USYAoJR2V0Q291cnNlEigucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRDb3Vyc2VSZXF1ZXN0GikucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRDb3Vyc2VSZXNwb25zZRJgCglHZXRMZXNzb24SKC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldExlc3NvblJlcXVlc3QaKS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldExlc3NvblJlc3BvbnNlEnsKElNhdmVMZXNzb25Qcm9ncmVzcxIxLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVxdWVzdBoyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2USWgoHR2V0VGVzdBImLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0VGVzdFJlcXVlc3QaJy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFRlc3RSZXNwb25zZRJjCgpTdWJtaXRUZXN0EikucHVibGljX2FwaS52MS5Vc2VyUGFuZWxTdWJtaXRUZXN0UmVxdWVzdBoqLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU3VibWl0VGVzdFJlc3BvbnNlEn4KE0xpc3RUZXN0U3VibWlzc2lvbnMSMi5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExpc3RUZXN0U3VibWlzc2lvbnNSZXF1ZXN0GjMucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVzcG9uc2USfgoTTGlzdExlc3NvblF1ZXN0aW9ucxIyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTGlzdExlc3NvblF1ZXN0aW9uc1JlcXVlc3QaMy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExpc3RMZXNzb25RdWVzdGlvbnNSZXNwb25zZRJ4ChFBc2tMZXNzb25RdWVzdGlvbhIwLnB1YmxpY19hcGkudjEuVXNlclBhbmVsQXNrTGVzc29uUXVlc3Rpb25SZXF1ZXN0GjEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxBc2tMZXNzb25RdWVzdGlvblJlc3BvbnNlEmMKClJhdGVMZXNzb24SKS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFJhdGVMZXNzb25SZXF1ZXN0GioucHVibGljX2FwaS52MS5Vc2VyUGFuZWxSYXRlTGVzc29uUmVzcG9uc2ViBnByb3RvMw",[Ht]);var ut=Dt(qt,0);import{Code as se,ConnectError as Ot}from"@connectrpc/connect";import{timestampDate as me}from"@bufbuild/protobuf/wkt";var Z=class extends Error{code;constructor(t,s){super(s??t),this.name="CourseError",this.code=t}};var $t={0:"unknown",1:"unauthorized",2:"course_not_found",3:"item_not_found",4:"item_locked",5:"no_attempts_left",6:"invalid_argument",7:"rate_limited",8:"unavailable"};function es(e){return $t[e]??"unknown"}function ts(e){if(e instanceof Z)return e;let t=Ot.from(e);switch(t.code){case se.Unauthenticated:case se.PermissionDenied:return new Z("unauthorized",t.rawMessage);case se.NotFound:return new Z("course_not_found",t.rawMessage);case se.ResourceExhausted:return new Z("rate_limited",t.rawMessage);case se.Unavailable:case se.DeadlineExceeded:return new Z("unavailable",t.rawMessage);default:return e}}function F(e){let{result:t}=e;if(t.case==="success")return t.value;throw t.case==="failure"?new Z(es(t.value)):new Z("unknown","empty response")}function dt(e){return{id:e.id,kind:e.kind===2?"test":"lesson",title:e.title,isFree:e.isFree,locked:e.locked,lockReason:e.locked&&e.lockReason!=null?{gatingTestId:e.lockReason.gatingTestId,gatingTestTitle:e.lockReason.gatingTestTitle}:void 0,completed:e.completed,durationSeconds:e.durationSeconds,thumbnailUrl:e.thumbnailUrl||void 0,gating:e.gating}}function ss(e){return{id:e.id,type:e.type===2?"video":"standard",title:e.title,description:e.description,coverUrl:e.coverUrl||void 0,totalLessons:e.totalLessons,completedLessons:e.completedLessons,progressPercent:e.progressPercent,sections:e.sections.map(t=>({id:t.id,title:t.title,description:t.description,items:t.items.map(dt)})),finalItems:e.finalItems.map(dt),resumeItemId:e.resumeItemId}}function pt(e){return e==null?void 0:{id:e.id,kind:e.kind===2?"test":"lesson"}}function ns(e){return{id:e.id,sectionId:e.sectionId,title:e.title,description:e.description,contentHtml:e.contentHtml,video:e.video!=null&&e.video.hlsUrl!==""?{hlsUrl:e.video.hlsUrl,posterUrl:e.video.posterUrl||void 0,durationSeconds:e.video.durationSeconds}:void 0,attachments:e.attachments.map(t=>({id:t.id,name:t.name,size:Number(t.size),url:t.url})),prev:pt(e.prev),next:pt(e.next),completed:e.completed,positionSeconds:e.positionSeconds,myRating:e.myRating,averageRating:e.averageRating,ratingCount:e.ratingCount,urlsExpireAt:e.urlsExpireAt!=null?me(e.urlsExpireAt):void 0}}function os(e){let t={id:e.id,prompt:e.prompt,points:e.points},{config:s}=e;switch(s.case){case"mcq":return{...t,config:{type:"mcq",choices:s.value.choices.map(o=>({id:o.id,label:o.label})),multiple:s.value.multiple}};case"todolist":return{...t,config:{type:"todolist",steps:s.value.steps.map(o=>({id:o.id,label:o.label,required:o.required}))}};case"fillGap":return{...t,config:{type:"fill_gap",template:s.value.template,blanks:[...s.value.blanks]}};case"sortOrder":return{...t,config:{type:"sort_order",items:s.value.items.map(o=>({id:o.id,label:o.label}))}};default:return}}function rs(e){return{id:e.id,title:e.title,description:e.description,gating:e.gating,passThresholdPercent:e.passThresholdPercent,attemptsAllowed:e.attemptsAllowed,attemptsLeft:e.attemptsLeft,attemptCount:e.attemptCount,bestScorePercent:e.bestScorePercent,passed:e.passed,questions:e.questions.map(os).filter(t=>t!=null)}}function mt(e){return{id:e.id,scorePercent:e.scorePercent,passed:e.passed,durationMs:Number(e.durationMs),createdAt:e.createdAt!=null?me(e.createdAt):void 0}}function as(e){let{value:t}=e;switch(t.case){case"mcq":return{type:"mcq",selectedIds:[...t.value.selectedIds]};case"todolist":return{type:"todolist",checkedIds:[...t.value.checkedIds]};case"fillGap":return{type:"fill_gap",values:{...t.value.values}};case"sortOrder":return{type:"sort_order",orderedIds:[...t.value.orderedIds]};default:return}}function is(e,t){switch(t.type){case"mcq":return{questionId:e,value:{case:"mcq",value:{selectedIds:t.selectedIds}}};case"todolist":return{questionId:e,value:{case:"todolist",value:{checkedIds:t.checkedIds}}};case"fill_gap":return{questionId:e,value:{case:"fillGap",value:{values:t.values}}};case"sort_order":return{questionId:e,value:{case:"sortOrder",value:{orderedIds:t.orderedIds}}}}}function gt(e){return{id:e.id,content:e.content,authorName:e.authorName,isMine:e.isMine,createdAt:e.createdAt!=null?me(e.createdAt):void 0,answer:e.answer!=null?{content:e.answer.content,createdAt:e.answer.createdAt!=null?me(e.answer.createdAt):void 0}:void 0}}function ve(e,t){let s=()=>({accessId:t.accessId,accessToken:typeof t.accessToken=="function"?t.accessToken()??"":t.accessToken});async function o(n){try{return await n()}catch(i){throw ts(i)}}return{getCourse:()=>o(async()=>ss(F(await e.getCourse(s())))),getLesson:n=>o(async()=>ns(F(await e.getLesson({...s(),lessonId:n})))),saveProgress:n=>o(async()=>{let i=F(await e.saveLessonProgress({...s(),...n}));return{completed:i.completed,completedLessons:i.completedLessons,progressPercent:i.progressPercent}}),getTest:n=>o(async()=>rs(F(await e.getTest({...s(),testId:n})))),submitTest:(n,i,a)=>o(async()=>{let r=F(await e.submitTest({...s(),testId:n,durationMs:BigInt(Math.max(0,Math.round(a))),answers:Object.entries(i).map(([c,b])=>is(c,b))}));if(r.submission==null)throw new Z("unknown","missing submission");return{submission:mt(r.submission),results:r.results.map(c=>({questionId:c.questionId,correct:c.correct,points:c.points,correctAnswer:c.correctAnswer!=null?as(c.correctAnswer):void 0})),attemptsLeft:r.attemptsLeft}}),listSubmissions:n=>o(async()=>{let i=F(await e.listTestSubmissions({...s(),testId:n}));return{submissions:i.submissions.map(mt),bestScorePercent:i.bestScorePercent,attemptCount:i.attemptCount}}),listQuestions:n=>o(async()=>F(await e.listLessonQuestions({...s(),lessonId:n})).questions.map(gt)),askQuestion:(n,i)=>o(async()=>gt(F(await e.askLessonQuestion({...s(),lessonId:n,content:i})))),rate:(n,i,a="")=>o(async()=>{let r=F(await e.rateLesson({...s(),lessonId:n,score:i,comment:a}));return{myRating:r.myRating,averageRating:r.averageRating,ratingCount:r.ratingCount}})}}function Ce(e){let t=e.host??Qe(),s=ls(ut,We(t));return ve(s,{accessId:e.accessId,accessToken:e.accessToken??(()=>{let{projectID:o,host:n}=Fe();return Ke(o,n)})})}import{ChevronLeft as ys,ChevronRight as Ss,Download as hs,Paperclip as vs}from"lucide-react";import{useEffect as Nt,useMemo as Cs,useRef as Ie,useState as Pt}from"react";import{useState as H}from"react";import{Star as cs}from"lucide-react";import{useState as us}from"react";import{jsx as ge}from"react/jsx-runtime";function bt({value:e,onSelect:t,disabled:s}){let{texts:o}=h(),[n,i]=us(0),a=n||e;return ge("div",{className:"flex items-center gap-1",role:t?"radiogroup":"img","aria-label":w(o.rateStar,{n:Math.round(e)}),children:[1,2,3,4,5].map(r=>{let c=r<=Math.round(a),b=ge(cs,{className:v("size-5",c?"fill-amber-400 text-amber-400":"text-neutral-300 dark:text-neutral-600"),"aria-hidden":!0});return t?ge("button",{type:"button",role:"radio","aria-checked":r===e,"aria-label":w(o.rateStar,{n:r}),disabled:s,className:"rounded p-0.5 outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:opacity-50",onMouseEnter:()=>i(r),onMouseLeave:()=>i(0),onClick:()=>t(r),children:b},r):ge("span",{children:b},r)})})}import{AlertTriangle as ds}from"lucide-react";import{jsx as K,jsxs as Re}from"react/jsx-runtime";var ft="bg-[var(--course-accent,var(--primary))] text-[var(--course-accent-fg,var(--primary-foreground))] dark:bg-[var(--course-accent-dark,var(--course-accent,var(--primary)))] dark:text-[var(--course-accent-dark-fg,var(--course-accent-fg,var(--primary-foreground)))]",$=v(ft,"hover:bg-[var(--course-accent,var(--primary))] hover:opacity-90 dark:hover:bg-[var(--course-accent-dark,var(--course-accent,var(--primary)))]"),z="rounded-xl bg-white p-4 drop-shadow-xl sm:p-6 dark:border dark:border-neutral-700 dark:bg-neutral-900 dark:drop-shadow-none";function J(e,t){if(e instanceof Z)switch(e.code){case"unauthorized":return t.errorUnauthorized;case"course_not_found":case"item_not_found":return t.errorNotFound;case"unavailable":return t.errorUnavailable}return t.errorGeneric}function ee({error:e,onRetry:t,className:s}){let{texts:o}=h();return Re("div",{role:"alert",className:v("flex flex-col items-start gap-3 rounded-xl border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-900 dark:bg-red-950 dark:text-red-300",s),children:[Re("p",{className:"flex items-center gap-2 font-medium",children:[K(ds,{className:"size-4 shrink-0","aria-hidden":!0}),J(e,o)]}),t&&K(N,{variant:"outline",size:"sm",onClick:t,children:o.retry})]})}function ue({label:e}){let{texts:t}=h();return Re("div",{role:"status","aria-label":e??t.loading,className:"space-y-3",children:[K(ie,{className:"aspect-video w-full"}),K(ie,{className:"h-6 w-2/3"}),K(ie,{className:"h-4 w-full"}),K(ie,{className:"h-4 w-5/6"})]})}function At({percent:e,label:t}){let s=Math.max(0,Math.min(100,Math.round(e)));return K("div",{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":s,"aria-label":t,className:"h-2 w-full overflow-hidden rounded-full bg-neutral-200 dark:bg-neutral-700",children:K("div",{className:v("h-full rounded-full transition-all duration-300",ft),style:{width:`${s}%`}})})}import{useCallback as ke,useEffect as ps,useRef as Ne,useState as xt}from"react";function j(e,t,s){let[o,n]=xt(s!==void 0?{status:"success",data:s}:{status:"loading"}),[i,a]=xt(0),r=Ne(0),c=Ne(e);c.current=e;let b=Ne(s!==void 0);ps(()=>{if(b.current){b.current=!1;return}let p=++r.current;return n({status:"loading"}),c.current().then(A=>{p===r.current&&n({status:"success",data:A})}).catch(A=>{p===r.current&&n({status:"error",error:A})}),()=>{r.current+=1}},[...t,i]);let y=ke(()=>a(p=>p+1),[]),f=ke(()=>{let p=++r.current;c.current().then(A=>{p===r.current&&n({status:"success",data:A})}).catch(()=>{})},[]),d=ke(p=>{n(A=>A.status==="success"?{status:"success",data:p(A.data)}:A)},[]);return{...o,reload:y,refresh:f,mutate:d}}import{jsx as G,jsxs as D}from"react/jsx-runtime";function St({lessonId:e,initial:t}){let{dataSource:s,texts:o,preview:n}=h(),i=Q(),[a,r]=H(t),[c,b]=H(t.myRating),[y,f]=H(""),[d,p]=H("idle"),[A,C]=H();async function I(){if(!(c<1)){p("saving");try{r(await s.rate(e,c,y.trim())),p("saved"),i("lesson_rated",{lesson_id:e,rating:c})}catch(g){C(g),p("error")}}}return D("section",{"aria-labelledby":`rate-${e}`,className:"space-y-3",children:[G("h3",{id:`rate-${e}`,className:"text-lg font-semibold",children:o.rateTitle}),G(bt,{value:c,onSelect:g=>{b(g),p("idle")},disabled:n||d==="saving"}),a.ratingCount>0&&G("p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:w(o.rateAverage,{average:a.averageRating.toFixed(1),count:a.ratingCount})}),!n&&c>0&&D("div",{className:"space-y-2",children:[G(xe,{value:y,maxLength:1e3,placeholder:o.ratePlaceholder,onChange:g=>{f(g.target.value),p("idle")}}),G(N,{size:"sm",className:$,disabled:d==="saving",onClick:I,children:o.rateSubmit})]}),d==="saved"&&G("p",{role:"status",className:"text-sm text-emerald-700 dark:text-emerald-400",children:o.rateSaved}),d==="error"&&G("p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:J(A,o)})]})}function yt(e){return e==null?"":e.toLocaleDateString()}function ht({lessonId:e}){let{dataSource:t,texts:s,preview:o}=h(),n=j(()=>t.listQuestions(e),[t,e]),[i,a]=H(""),[r,c]=H("idle"),[b,y]=H();async function f(){let d=i.trim();if(d!==""){c("sending");try{let p=await t.askQuestion(e,d);n.mutate(A=>[p,...A]),a(""),c("sent")}catch(p){y(p),c("error")}}}return D("section",{"aria-labelledby":`qa-${e}`,className:"space-y-4",children:[G("h3",{id:`qa-${e}`,className:"text-lg font-semibold",children:s.questionsTitle}),D("form",{className:"space-y-2",onSubmit:d=>{d.preventDefault(),f()},children:[G(xe,{value:i,maxLength:2e3,placeholder:s.questionPlaceholder,"aria-label":s.questionPlaceholder,onChange:d=>{a(d.target.value),c("idle")}}),G(N,{type:"submit",size:"sm",className:$,disabled:r==="sending"||i.trim()==="",children:s.questionSubmit}),r==="sent"&&G("p",{role:"status",className:"text-sm text-emerald-700 dark:text-emerald-400",children:s.questionSent}),r==="error"&&G("p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:J(b,s)})]}),n.status==="loading"&&G("p",{role:"status",className:"text-sm text-neutral-500",children:s.loading}),n.status==="error"&&G(ee,{error:n.error,onRetry:n.reload}),n.status==="success"&&(n.data.length===0?G("p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:s.questionsEmpty}):G("ul",{className:"space-y-3",children:n.data.map(d=>D("li",{className:"rounded-lg bg-neutral-100 p-3 text-sm dark:bg-neutral-800",children:[D("p",{className:"mb-1 text-xs text-neutral-500 dark:text-neutral-400",children:[d.isMine?s.questionMine:d.authorName,d.createdAt&&` \xB7 ${yt(d.createdAt)}`]}),G("p",{className:"break-words whitespace-pre-wrap",children:d.content}),d.answer&&D("div",{className:"mt-2 border-l-2 border-neutral-400 pl-3 dark:border-neutral-500",children:[D("p",{className:"mb-1 text-xs font-medium text-neutral-500 dark:text-neutral-400",children:[s.questionTeamAnswer,d.answer.createdAt&&` \xB7 ${yt(d.answer.createdAt)}`]}),G("p",{className:"break-words whitespace-pre-wrap",children:d.answer.content})]})]},d.id))}))]})}import ms from"dompurify";var gs={USE_PROFILES:{html:!0},FORBID_TAGS:["style","form","input","button","textarea","select","iframe","frame","object","embed","base","meta","link"],FORBID_ATTR:["style","srcdoc","formaction"],ALLOW_DATA_ATTR:!1,RETURN_TRUSTED_TYPE:!1};function bs(e){if(e.isSupported===!1||e.sanitize==null)return()=>"";let t=e.sanitize.bind(e);return e.addHook?.("afterSanitizeAttributes",s=>{s.tagName==="A"&&s.hasAttribute("href")&&(s.setAttribute("target","_blank"),s.setAttribute("rel","noopener noreferrer nofollow")),s.tagName==="IMG"&&(s.setAttribute("loading","lazy"),s.setAttribute("referrerpolicy","no-referrer"))}),s=>s==null||s===""?"":String(t(s,gs))}var vt;function Pe(e){return typeof window>"u"?"":(vt??=bs(ms),vt(e))}import ne from"hls.js";import{useCallback as fs,useEffect as As,useRef as be,useState as Ct}from"react";import{jsx as Ve,jsxs as Rt}from"react/jsx-runtime";function xs(e){return e.canPlayType("application/vnd.apple.mpegurl")!==""}function kt({src:e,poster:t,startAt:s=0,durationHint:o=0,autoPlay:n=!1,lessonId:i,onReport:a,onEnded:r,onExpired:c,className:b}){let{texts:y}=h(),f=Q(),d=be(f);d.current=f;let p=be(null),[A,C]=Ct(!1),[I,g]=Ct(0),k=be({onReport:a,onEnded:r,onExpired:c,durationHint:o});k.current={onReport:a,onEnded:r,onExpired:c,durationHint:o};let M=be(void 0),E=fs((l,R=p.current)=>{if(R==null||k.current.onReport==null)return;let m=Math.floor(R.currentTime);if(m<=0&&l!=="ended")return;let T=Number.isFinite(R.duration)?R.duration:k.current.durationHint;M.current=m,k.current.onReport({positionSeconds:m,durationSeconds:Math.floor(T||0),reason:l})},[]);return As(()=>{let l=p.current;if(l==null)return;C(!1);let R,m=!1,T=!1,B,q=()=>{s>0&&(l.currentTime=s),n&&l.play().catch(()=>{})};xs(l)?(l.src=e,l.addEventListener("loadedmetadata",q,{once:!0})):ne.isSupported()?(R=new ne,R.attachMedia(l),R.loadSource(e),R.on(ne.Events.MANIFEST_PARSED,q),R.on(ne.Events.ERROR,(O,Y)=>{if(!Y.fatal)return;let Be=Y.response?.code;Be===401||Be===403?(k.current.onExpired?.(),C(!0)):Y.type===ne.ErrorTypes.NETWORK_ERROR&&!m?(m=!0,R?.startLoad()):Y.type===ne.ErrorTypes.MEDIA_ERROR&&!T?(T=!0,R?.recoverMediaError()):C(!0)})):l.src=e;let pe=()=>{clearInterval(B),B=setInterval(()=>E("periodic"),15e3)},te=()=>{clearInterval(B),l.ended||E("pause")},oe=new Set,S=l.currentTime,W=0,re=O=>{if(i!=null)for(let Y of ze(O,oe))d.current("video_progress",{lesson_id:i,milestone:Y})},ae=()=>{let O=l.currentTime,Y=Number.isFinite(l.duration)?l.duration:k.current.durationHint;Y>0&&!l.seeking&&O>=S&&O-S<=2&&(W=Math.max(W,O),re(W/Y*100)),S=O},Ue=()=>{clearInterval(B),i!=null&&!oe.has(100)&&(oe.add(100),d.current("video_progress",{lesson_id:i,milestone:100})),E("ended"),k.current.onEnded?.()},Le=()=>{R==null&&C(!0)};return l.addEventListener("play",pe),l.addEventListener("pause",te),l.addEventListener("ended",Ue),l.addEventListener("error",Le),l.addEventListener("timeupdate",ae),()=>{clearInterval(B),l.removeEventListener("play",pe),l.removeEventListener("pause",te),l.removeEventListener("ended",Ue),l.removeEventListener("error",Le),l.removeEventListener("timeupdate",ae),l.removeEventListener("loadedmetadata",q),!l.ended&&l.currentTime>0&&E("leave",l),R?.destroy(),l.removeAttribute("src"),l.load()}},[e,I]),Rt("div",{className:v("relative overflow-hidden rounded-xl bg-black",b),children:[Ve("video",{ref:p,className:"aspect-video w-full",poster:t,controls:!0,playsInline:!0,preload:"metadata",controlsList:"nodownload"}),A&&Rt("div",{role:"alert",className:"absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/80 p-4 text-center text-sm text-white",children:[Ve("p",{children:y.videoError}),Ve(N,{variant:"secondary",size:"sm",onClick:()=>{k.current.onExpired?.(),g(l=>l+1)},children:y.videoRetry})]})]})}import{jsx as U,jsxs as X}from"react/jsx-runtime";function Vt({lesson:e,position:t=0,courseType:s,prev:o,next:n,autoplay:i,onAutoplayChange:a,startPlaying:r,onNavigate:c,onProgressSaved:b,onEnded:y,onUrlsExpired:f}){let{dataSource:d,texts:p,preview:A}=h(),C=Q(),[I,g]=Pt(e.completed),k=Ie(e.completed),M=Ie(void 0),E=Ie(e.positionSeconds),[l,R]=Pt(!1);Nt(()=>{C("lesson_started",{lesson_id:e.id,position:t})},[e.id]);let m=e.urlsExpireAt?.getTime();Nt(()=>{if(m==null)return;let S=m-Date.now()-6e4;if(S<=0||S>2**31-1)return;let W=setTimeout(f,S);return()=>clearTimeout(W)},[m]);let T=Cs(()=>Pe(e.contentHtml),[e.contentHtml]);async function B(S,W,re){if(A)return;let ae=await d.saveProgress({lessonId:e.id,completed:re,positionSeconds:S,durationSeconds:W});M.current=S,ae.completed&&!k.current&&(k.current=!0,g(!0),C("lesson_completed",{lesson_id:e.id,position:t})),b(e.id,ae)}function q(S){if(E.current=S.positionSeconds,A||S.reason==="periodic"&&S.positionSeconds===M.current)return;let W=S.reason==="ended"||tt(S.positionSeconds,S.durationSeconds);B(S.positionSeconds,S.durationSeconds,W&&!k.current).catch(re=>{console.warn("Saving the progress of the lesson failed",re)})}async function pe(){R(!0);try{await B(E.current,e.video?.durationSeconds??0,!0)}catch(S){console.warn("Marking the lesson as completed failed",S)}finally{R(!1)}}let te=e.description.trim(),oe=T!==""||te!=="";return X("article",{"data-lesson-id":e.id,className:"min-w-0 space-y-5","aria-labelledby":`lesson-${e.id}`,children:[e.video&&U(kt,{src:e.video.hlsUrl,poster:e.video.posterUrl,lessonId:e.id,startAt:st(E.current,e.video.durationSeconds),durationHint:e.video.durationSeconds,autoPlay:r,onReport:q,onEnded:y,onExpired:f}),X("div",{className:v(z,"space-y-5"),children:[X("header",{className:"flex flex-wrap items-start justify-between gap-3",children:[U("h2",{id:`lesson-${e.id}`,className:"text-2xl font-semibold break-words",children:e.title}),!A&&U(N,{size:"sm",variant:I?"outline":"default",className:v(!I&&$),disabled:I||l,onClick:pe,children:I?p.markedComplete:p.markComplete})]}),s==="video"&&e.video&&X("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm text-neutral-600 dark:text-neutral-300",children:[U("input",{type:"checkbox",checked:i,onChange:S=>a(S.target.checked)}),p.autoplay]}),te!==""&&U("p",{className:"text-sm break-words whitespace-pre-wrap text-neutral-700 dark:text-neutral-300",children:te}),T!==""&&U("div",{className:"bitsnap-course-html break-words [&_a]:underline [&_blockquote]:border-l-4 [&_blockquote]:pl-4 [&_h1]:text-2xl [&_h1]:font-semibold [&_h2]:text-xl [&_h2]:font-semibold [&_h3]:text-lg [&_h3]:font-semibold [&_img]:h-auto [&_img]:max-w-full [&_ol]:list-decimal [&_ol]:pl-6 [&_p]:my-3 [&_pre]:overflow-x-auto [&_table]:block [&_table]:max-w-full [&_table]:overflow-x-auto [&_ul]:list-disc [&_ul]:pl-6",dangerouslySetInnerHTML:{__html:T}}),!oe&&!e.video&&U("p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:p.noContent}),e.attachments.length>0&&X("section",{"aria-labelledby":`files-${e.id}`,className:"space-y-2",children:[X("h3",{id:`files-${e.id}`,className:"flex items-center gap-2 text-lg font-semibold",children:[U(vs,{className:"size-4","aria-hidden":!0}),p.attachments]}),U("ul",{className:"space-y-2",children:e.attachments.map(S=>U("li",{children:X("a",{href:S.url,target:"_blank",rel:"noopener noreferrer",download:S.name,className:"flex items-center justify-between gap-3 rounded-lg bg-neutral-100 px-3 py-2 text-sm transition hover:bg-neutral-200 dark:bg-neutral-800 dark:hover:bg-neutral-700",children:[X("span",{className:"min-w-0 break-words",children:[S.name,U("span",{className:"ml-2 text-xs text-neutral-500 dark:text-neutral-400",children:nt(S.size)})]}),X("span",{className:"flex shrink-0 items-center gap-1 text-xs font-medium",children:[p.download,U(hs,{className:"size-3.5","aria-hidden":!0})]})]})},S.id))})]}),X("nav",{className:"flex items-center justify-between gap-3 border-t pt-4",children:[X(N,{variant:"outline",size:"sm",disabled:o==null,onClick:()=>o&&c(o),children:[U(ys,{"aria-hidden":!0}),p.prevItem]}),X(N,{variant:"outline",size:"sm",disabled:n==null,onClick:()=>n&&c(n),children:[p.nextItem,U(Ss,{"aria-hidden":!0})]})]})]}),U("div",{className:v(z),children:U(St,{lessonId:e.id,initial:{myRating:e.myRating,averageRating:e.averageRating,ratingCount:e.ratingCount}})}),U("div",{className:v(z),children:U(ht,{lessonId:e.id})})]})}var It={pl:{back:"Wr\xF3\u0107",loading:"\u0141adowanie kursu...",retry:"Spr\xF3buj ponownie",errorGeneric:"Nie uda\u0142o si\u0119 za\u0142adowa\u0107 danych. Spr\xF3buj ponownie za chwil\u0119.",errorUnauthorized:"Nie masz dost\u0119pu do tego kursu. Zaloguj si\u0119 ponownie lub skontaktuj si\u0119 z pomoc\u0105.",errorNotFound:"Nie znaleziono tego kursu lub lekcji.",errorUnavailable:"Kurs jest chwilowo niedost\u0119pny. Spr\xF3buj ponownie za chwil\u0119.",previewBadge:"Podgl\u0105d",progressLessons:"{done} z {total} lekcji",progressPercent:"{percent}% uko\u0144czono",contents:"Spis tre\u015Bci",free:"Darmowa",locked:"Zablokowane",lockedByTest:"Odblokuje je zaliczenie testu: {test}",lockedPage:"Ta lekcja jest zablokowana. Zalicz test \u201E{test}\u201D, aby j\u0105 odblokowa\u0107.",testBadge:"Test",completed:"Uko\u0144czono",continueCourse:"Kontynuuj kurs",noItem:"Wybierz lekcj\u0119 z listy.",markComplete:"Oznacz jako uko\u0144czon\u0105",markedComplete:"Lekcja uko\u0144czona",prevItem:"Poprzednia",nextItem:"Nast\u0119pna",attachments:"Materia\u0142y do pobrania",download:"Pobierz",autoplay:"Autoodtwarzanie nast\u0119pnej lekcji",videoError:"Nie uda\u0142o si\u0119 odtworzy\u0107 wideo.",videoRetry:"Od\u015Bwie\u017C wideo",noContent:"Ta lekcja nie ma jeszcze tre\u015Bci.",testGating:"Zaliczenie tego testu odblokowuje kolejne lekcje.",testAttemptsLeft:"Pozosta\u0142o pr\xF3b: {count}",testAttemptsUnlimited:"Liczba pr\xF3b nie jest ograniczona.",testNoAttemptsLeft:"Wykorzystano wszystkie pr\xF3by.",testPassThreshold:"Pr\xF3g zaliczenia: {percent}%",testBestScore:"Najlepszy wynik: {percent}%",testSubmit:"Sprawd\u017A odpowiedzi",testSubmitting:"Sprawdzanie...",testUnanswered:"Pytania bez odpowiedzi: {count}",testPassed:"Test zaliczony",testFailed:"Test niezaliczony",testScore:"Wynik: {percent}%",testCorrect:"Poprawnie",testIncorrect:"Niepoprawnie",testCorrectAnswer:"Poprawna odpowied\u017A",testTryAgain:"Spr\xF3buj ponownie",testPreviousAttempts:"Poprzednie podej\u015Bcia",testAttemptRow:"{percent}% \xB7 {date}",testNoQuestions:"Ten test nie ma jeszcze pyta\u0144.",mcqSingle:"Wybierz jedn\u0105 odpowied\u017A",mcqMultiple:"Zaznacz wszystkie poprawne odpowiedzi",todoHint:"Zaznacz wykonane kroki",todoRequired:"wymagany",gapPlaceholder:"uzupe\u0142nij",sortHint:"U\u0142\xF3\u017C elementy w poprawnej kolejno\u015Bci",moveUp:"Przesu\u0144 w g\xF3r\u0119",moveDown:"Przesu\u0144 w d\xF3\u0142",questionsTitle:"Pytania do lekcji",questionsEmpty:"Nikt jeszcze nie zada\u0142 pytania.",questionPlaceholder:"Zadaj pytanie autorowi kursu",questionSubmit:"Wy\u015Blij pytanie",questionSent:"Pytanie wys\u0142ane.",questionMine:"Ty",questionTeamAnswer:"Odpowied\u017A autora",rateTitle:"Oce\u0144 lekcj\u0119",rateStar:"{n} z 5",ratePlaceholder:"Komentarz (opcjonalnie)",rateSubmit:"Zapisz ocen\u0119",rateSaved:"Dzi\u0119kujemy za ocen\u0119.",rateAverage:"\u015Arednia ocena {average} ({count})"},en:{back:"Back",loading:"Loading the course...",retry:"Try again",errorGeneric:"Could not load the data. Please try again in a moment.",errorUnauthorized:"You do not have access to this course. Sign in again or contact support.",errorNotFound:"This course or lesson was not found.",errorUnavailable:"The course is temporarily unavailable. Please try again in a moment.",previewBadge:"Preview",progressLessons:"{done} of {total} lessons",progressPercent:"{percent}% complete",contents:"Contents",free:"Free",locked:"Locked",lockedByTest:"Pass the test to unlock it: {test}",lockedPage:"This lesson is locked. Pass the test \u201C{test}\u201D to unlock it.",testBadge:"Test",completed:"Completed",continueCourse:"Continue the course",noItem:"Pick a lesson from the list.",markComplete:"Mark as completed",markedComplete:"Lesson completed",prevItem:"Previous",nextItem:"Next",attachments:"Downloads",download:"Download",autoplay:"Autoplay the next lesson",videoError:"The video could not be played.",videoRetry:"Reload the video",noContent:"This lesson has no content yet.",testGating:"Passing this test unlocks the following lessons.",testAttemptsLeft:"Attempts left: {count}",testAttemptsUnlimited:"The number of attempts is unlimited.",testNoAttemptsLeft:"You have used all attempts.",testPassThreshold:"Passing score: {percent}%",testBestScore:"Best score: {percent}%",testSubmit:"Check answers",testSubmitting:"Checking...",testUnanswered:"Unanswered questions: {count}",testPassed:"Test passed",testFailed:"Test not passed",testScore:"Score: {percent}%",testCorrect:"Correct",testIncorrect:"Incorrect",testCorrectAnswer:"Correct answer",testTryAgain:"Try again",testPreviousAttempts:"Previous attempts",testAttemptRow:"{percent}% \xB7 {date}",testNoQuestions:"This test has no questions yet.",mcqSingle:"Choose one answer",mcqMultiple:"Select all correct answers",todoHint:"Check the steps you have done",todoRequired:"required",gapPlaceholder:"fill in",sortHint:"Put the items in the correct order",moveUp:"Move up",moveDown:"Move down",questionsTitle:"Questions about this lesson",questionsEmpty:"Nobody has asked a question yet.",questionPlaceholder:"Ask the course author a question",questionSubmit:"Send question",questionSent:"Question sent.",questionMine:"You",questionTeamAnswer:"Answer from the author",rateTitle:"Rate this lesson",rateStar:"{n} of 5",ratePlaceholder:"Comment (optional)",rateSubmit:"Save rating",rateSaved:"Thanks for your rating.",rateAverage:"Average rating {average} ({count})"}};function Te(e,t=je()){return Je(It,t,e)}import{ArrowDown as Rs,ArrowUp as ks,Check as wt,X as Et}from"lucide-react";import{useRef as Tt,useState as de}from"react";import{Fragment as Gs,jsx as u,jsxs as P}from"react/jsx-runtime";function Ns({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=h();if(e.config.type!=="mcq")return null;let{choices:i,multiple:a}=e.config;return P("fieldset",{className:"space-y-2",disabled:s,children:[u("legend",{className:"mb-2 text-xs text-neutral-500 dark:text-neutral-400",children:a?n.mcqMultiple:n.mcqSingle}),i.map(r=>{let c=t.selectedIds.includes(r.id);return P("label",{className:"flex cursor-pointer items-start gap-3 rounded-lg bg-neutral-100 px-3 py-2 text-sm dark:bg-neutral-800",children:[u("input",{className:"mt-0.5",type:a?"checkbox":"radio",name:`q-${e.id}`,checked:c,onChange:()=>o({type:"mcq",selectedIds:a?c?t.selectedIds.filter(b=>b!==r.id):[...t.selectedIds,r.id]:[r.id]})}),u("span",{className:"break-words",children:r.label})]},r.id)})]})}function Ps({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=h();return e.config.type!=="todolist"?null:P("fieldset",{className:"space-y-2",disabled:s,children:[u("legend",{className:"mb-2 text-xs text-neutral-500 dark:text-neutral-400",children:n.todoHint}),e.config.steps.map(i=>{let a=t.checkedIds.includes(i.id);return P("label",{className:"flex cursor-pointer items-start gap-3 rounded-lg bg-neutral-100 px-3 py-2 text-sm dark:bg-neutral-800",children:[u("input",{className:"mt-0.5",type:"checkbox",checked:a,onChange:()=>o({type:"todolist",checkedIds:a?t.checkedIds.filter(r=>r!==i.id):[...t.checkedIds,i.id]})}),P("span",{className:"break-words",children:[i.label,i.required&&P("span",{className:"ml-2 text-xs text-neutral-500 dark:text-neutral-400",children:["(",n.todoRequired,")"]})]})]},i.id)})]})}function Vs({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=h();if(e.config.type!=="fill_gap")return null;let i=he(e.config.template,e.config.blanks);return u("p",{className:"text-sm leading-10 break-words",children:i.map((a,r)=>a.type==="text"?u("span",{className:"whitespace-pre-wrap",children:a.text},r):u(Ye,{className:"mx-1 inline-block h-8 w-36 align-middle","aria-label":`${n.gapPlaceholder} ${a.id}`,placeholder:n.gapPlaceholder,disabled:s,value:t.values[a.id]??"",onChange:c=>o({type:"fill_gap",values:{...t.values,[a.id]:c.target.value}})},r))})}function Is({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=h();if(e.config.type!=="sort_order")return null;let i=new Map(e.config.items.map(r=>[r.id,r.label])),a=(r,c)=>o({type:"sort_order",orderedIds:at(t.orderedIds,r,c)});return P("div",{className:"space-y-2",children:[u("p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:n.sortHint}),u("ol",{className:"space-y-2",children:t.orderedIds.map((r,c)=>P("li",{className:"flex items-center gap-2 rounded-lg bg-neutral-100 px-3 py-2 text-sm dark:bg-neutral-800",children:[P("span",{className:"w-5 text-xs text-neutral-500",children:[c+1,"."]}),u("span",{className:"min-w-0 flex-1 break-words",children:i.get(r)??r}),u(N,{type:"button",variant:"ghost",size:"icon-xs","aria-label":n.moveUp,disabled:s||c===0,onClick:()=>a(c,c-1),children:u(ks,{"aria-hidden":!0})}),u(N,{type:"button",variant:"ghost",size:"icon-xs","aria-label":n.moveDown,disabled:s||c===t.orderedIds.length-1,onClick:()=>a(c,c+1),children:u(Rs,{"aria-hidden":!0})})]},r))})]})}function Ts({question:e,answer:t,disabled:s,onChange:o}){let n={question:e,disabled:s,onChange:o};switch(t.type){case"mcq":return u(Ns,{...n,answer:t});case"todolist":return u(Ps,{...n,answer:t});case"fill_gap":return u(Vs,{...n,answer:t});case"sort_order":return u(Is,{...n,answer:t})}}function ws({list:e}){let{texts:t}=h();return e.submissions.length===0?null:P("section",{className:"space-y-2",children:[u("h3",{className:"text-sm font-semibold",children:t.testPreviousAttempts}),u("ul",{className:"space-y-1 text-sm",children:e.submissions.map(s=>P("li",{className:"flex items-center gap-2 text-neutral-700 dark:text-neutral-300",children:[s.passed?u(wt,{className:"size-4 text-emerald-600","aria-hidden":!0}):u(Et,{className:"size-4 text-red-600","aria-hidden":!0}),w(t.testAttemptRow,{percent:s.scorePercent,date:s.createdAt?.toLocaleString()??""})]},s.id))})]})}function Es({test:e,onSubmitted:t,onTryAgain:s}){let{dataSource:o,texts:n}=h(),[i,a]=de({}),[r,c]=de(),[b,y]=de(!1),[f,d]=de(),p=Tt(Date.now()),A=Tt(e.questions).current,C=e.attemptsLeft!=null&&e.attemptsLeft<=0,I=r?r.attemptsLeft:e.attemptsLeft,g=rt(A,i),k=l=>i[l.id]??ot(l.config);async function M(){y(!0),d(void 0);try{let l={};for(let m of A)l[m.id]=k(m);let R=await o.submitTest(e.id,l,Date.now()-p.current);c(R),t(R)}catch(l){d(l)}finally{y(!1)}}let E=new Map(r?.results.map(l=>[l.questionId,l]));return A.length===0?u("p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:n.testNoQuestions}):P("form",{className:"space-y-6",onSubmit:l=>{l.preventDefault(),r==null&&!C&&M()},children:[r&&P("div",{role:"status",className:v("rounded-xl p-4 text-sm",r.submission.passed?"bg-emerald-50 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-300":"bg-red-50 text-red-800 dark:bg-red-950 dark:text-red-300"),children:[u("p",{className:"text-base font-semibold",children:r.submission.passed?n.testPassed:n.testFailed}),u("p",{children:w(n.testScore,{percent:r.submission.scorePercent})})]}),u("ol",{className:"space-y-6",children:A.map((l,R)=>{let m=E.get(l.id),T=m?.correctAnswer!=null?it(l,m.correctAnswer):"";return P("li",{className:"space-y-3","data-question-id":l.id,children:[P("p",{className:"font-medium break-words",children:[R+1,". ",l.prompt]}),u(Ts,{question:l,answer:k(l),disabled:r!=null||b||C,onChange:B=>a(q=>({...q,[l.id]:B}))}),m&&P("div",{className:v("flex items-start gap-2 text-sm",m.correct?"text-emerald-700 dark:text-emerald-400":"text-red-700 dark:text-red-400"),children:[m.correct?u(wt,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}):u(Et,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}),P("span",{children:[m.correct?n.testCorrect:n.testIncorrect,T!==""&&!m.correct&&P("span",{className:"block text-neutral-700 dark:text-neutral-300",children:[n.testCorrectAnswer,": ",T]})]})]})]},l.id)})}),f!=null&&u("p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:J(f,n)}),r==null?P("div",{className:"space-y-2",children:[g>0&&!C&&u("p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:w(n.testUnanswered,{count:g})}),u(N,{type:"submit",className:$,disabled:b||C,children:b?n.testSubmitting:n.testSubmit})]}):I!==0&&!r.submission.passed&&u(N,{type:"button",variant:"outline",onClick:s,children:n.testTryAgain})]})}function Gt({testId:e,title:t,onSubmitted:s}){let{dataSource:o,texts:n}=h(),i=Q(),a=j(()=>o.getTest(e),[o,e]),r=j(()=>o.listSubmissions(e).catch(()=>{}),[o,e]),[c,b]=de(0);return P("article",{"data-test-id":e,className:v(z,"min-w-0 space-y-5"),children:[u("h2",{className:"text-2xl font-semibold break-words",children:a.status==="success"?a.data.title:t}),a.status==="loading"&&u(ue,{}),a.status==="error"&&u(ee,{error:a.error,onRetry:a.reload}),a.status==="success"&&P(Gs,{children:[a.data.description.trim()!==""&&u("p",{className:"text-sm break-words whitespace-pre-wrap text-neutral-700 dark:text-neutral-300",children:a.data.description}),P("ul",{className:"space-y-1 text-sm text-neutral-600 dark:text-neutral-400",children:[a.data.gating&&u("li",{children:n.testGating}),u("li",{children:w(n.testPassThreshold,{percent:a.data.passThresholdPercent})}),u("li",{children:a.data.attemptsLeft==null?n.testAttemptsUnlimited:w(n.testAttemptsLeft,{count:a.data.attemptsLeft})}),a.data.attemptCount>0&&u("li",{children:w(n.testBestScore,{percent:a.data.bestScorePercent})})]}),a.data.attemptsLeft!=null&&a.data.attemptsLeft<=0&&u("p",{role:"alert",className:"text-sm font-medium text-red-700 dark:text-red-400",children:n.testNoAttemptsLeft}),u(Es,{test:a.data,onSubmitted:y=>{i("test_submitted",{lesson_id:e,score_bucket:Me(y.submission.scorePercent)}),s(y),r.refresh(),a.refresh()},onTryAgain:()=>b(y=>y+1)},c),r.status==="success"&&r.data&&u(ws,{list:r.data})]})]})}import{jsx as x,jsxs as L}from"react/jsx-runtime";var Ut="bitsnap-course-autoplay";function Zs(){let[e,t]=fe(!1);Ge(()=>{try{t(window.localStorage.getItem(Ut)==="1")}catch{}},[]);let s=Bt(o=>{t(o);try{window.localStorage.setItem(Ut,o?"1":"0")}catch{}},[]);return[e,s]}function Lt(e){return e==null?void 0:{id:e.id,kind:e.kind}}function Xs({item:e}){let{texts:t}=h();return L("div",{className:v(z,"space-y-2"),role:"status",children:[x("h2",{className:"text-2xl font-semibold break-words",children:e.title}),x("p",{className:"text-sm text-neutral-600 dark:text-neutral-300",children:e.lockReason?w(t.lockedPage,{test:e.lockReason.gatingTestTitle}):t.locked})]})}function Ms({course:e,item:t,autoplay:s,onAutoplayChange:o,startPlaying:n,onNavigate:i,onProgressSaved:a,onEnded:r,onLocked:c}){let{dataSource:b,texts:y}=h(),f=j(()=>b.getLesson(t.id),[b,t.id]),d=f.status==="error"&&f.error instanceof Z&&f.error.code==="item_locked";if(Ge(()=>{d&&c()},[d]),f.status==="loading")return x(ue,{});if(f.status==="error")return d?L("div",{className:v(z,"space-y-2"),role:"alert",children:[x("h2",{className:"text-2xl font-semibold break-words",children:t.title}),x("p",{className:"text-sm",children:J(f.error,y)})]}):x(ee,{error:f.error,onRetry:f.reload});let p=ye(e,t.id),A=ce(e).filter(C=>C.kind!=="test").findIndex(C=>C.id===t.id)+1;return x(Vt,{lesson:f.data,position:A,courseType:e.type,prev:f.data.prev??Lt(p.prev),next:f.data.next??Lt(p.next),autoplay:s,onAutoplayChange:o,startPlaying:n,onNavigate:i,onProgressSaved:a,onEnded:r,onUrlsExpired:f.refresh},f.data.id)}function zs({course:e,selectedId:t,onSelect:s,onBack:o,onCourseChange:n,onCourseRefresh:i}){let{texts:a,preview:r}=h(),c=Q(),b=Bs(null),[y,f]=fe(!1),[d,p]=Zs(),[A,C]=fe(),I=et(e,t),g=le(e,I);Ge(()=>{c("course_opened",{})},[e.id]);let k=(m,T=!1)=>{C(T?m:void 0),f(!1),s(m),b.current?.scrollIntoView({block:"start",behavior:"smooth"})},M=x(ct,{course:e,selectedId:I,variant:e.type==="video"?"playlist":"modules",onSelect:m=>k(m.id)}),E;g==null?E=x("p",{className:"text-sm text-neutral-500",children:a.noItem}):g.locked?E=x(Xs,{item:g}):g.kind==="test"?E=x(Gt,{testId:g.id,title:g.title,onSubmitted:()=>i()},g.id):E=x(Ms,{course:e,item:g,autoplay:d,onAutoplayChange:p,startPlaying:A===g.id,onNavigate:m=>k(m.id),onProgressSaved:(m,T)=>n(B=>({...T.completed?$e(B,m):B,completedLessons:T.completedLessons,progressPercent:T.progressPercent})),onEnded:()=>{if(!d)return;let m=Oe(e,g.id);m&&k(m.id,!0)},onLocked:i},g.id);let l=e.type==="video",R=e.resumeItemId!==""&&e.resumeItemId!==I&&le(e,e.resumeItemId)?.locked===!1;return L("div",{ref:b,className:"space-y-4 scroll-mt-4",children:[L("header",{className:"space-y-3",children:[L("div",{className:"flex flex-wrap items-center gap-2",children:[o&&L(N,{variant:"ghost",size:"sm",onClick:o,children:[x(Ee,{"aria-hidden":!0}),a.back]}),r&&x("span",{"data-course-preview":!0,className:"rounded-full bg-amber-100 px-3 py-0.5 text-xs font-semibold text-amber-900 dark:bg-amber-900/40 dark:text-amber-200",children:a.previewBadge})]}),L("div",{className:"flex flex-wrap items-end justify-between gap-4",children:[x("div",{className:"min-w-0 space-y-1",children:x("h1",{className:"text-2xl font-semibold break-words sm:text-3xl",children:e.title})}),R&&L(N,{size:"sm",variant:"outline",onClick:()=>k(e.resumeItemId),children:[x(Ls,{"aria-hidden":!0}),a.continueCourse]})]}),L("div",{className:"max-w-xl space-y-1",children:[x(At,{percent:e.progressPercent,label:w(a.progressPercent,{percent:e.progressPercent})}),L("p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:[w(a.progressLessons,{done:e.completedLessons,total:e.totalLessons})," \xB7 ",w(a.progressPercent,{percent:e.progressPercent})]})]})]}),L("div",{className:v("grid gap-6",l?"lg:grid-cols-[minmax(0,1fr)_380px]":"lg:grid-cols-[320px_minmax(0,1fr)]"),children:[!l&&x("div",{className:"lg:hidden",children:L(N,{variant:"outline",size:"sm","aria-expanded":y,onClick:()=>f(m=>!m),children:[x(Us,{"aria-hidden":!0}),a.contents]})}),!l&&x("aside",{className:v(z,"p-3 sm:p-3 lg:sticky lg:top-4 lg:block lg:max-h-[calc(100vh-2rem)] lg:self-start lg:overflow-y-auto",y?"block":"hidden"),children:M}),x("div",{className:"min-w-0","data-course-content":!0,children:E}),l&&x("aside",{className:v(z,"p-3 sm:p-3 lg:sticky lg:top-4 lg:max-h-[calc(100vh-2rem)] lg:self-start lg:overflow-y-auto"),children:M})]})]})}function Qs({accessId:e,accessToken:t,dataSource:s,preview:o=!1,itemId:n,onItemChange:i,onBack:a,initialCourse:r,texts:c,locale:b,theme:y,className:f,analytics:d}){let p=_e(),A=Xe(p.projectID,o?!1:d,"course"),C=we(()=>Te(c,b),[c,b]),I=we(()=>{if(s)return s;if(e==null||e==="")throw new Error("PanelCourse needs an accessId or a dataSource");return Ce({accessId:e,accessToken:t})},[s,e,t]),g=j(()=>I.getCourse(),[I],r),[k,M]=fe(),E=i?n:n??k,l=Bt(B=>{M(B),i?.(B)},[i]),R=De(y?.colors??p.theme?.colors),m=g.status==="success"?g.data.id:void 0,T=we(()=>({dataSource:I,texts:C,preview:o,analytics:{courseId:m,instrument:A}}),[I,C,o,m,A]);return x(Ze,{value:A,children:x(qe,{value:T,children:L("div",{"data-bitsnap-course":!0,"data-course-type":g.status==="success"?g.data.type:void 0,style:R,className:v("font-inter w-full max-w-7xl",f),children:[g.status==="loading"&&L("div",{className:"space-y-4",children:[a&&L(N,{variant:"ghost",size:"sm",onClick:a,children:[x(Ee,{"aria-hidden":!0}),C.back]}),x("p",{className:"sr-only",role:"status",children:C.loading}),x(ue,{})]}),g.status==="error"&&L("div",{className:"space-y-4",children:[a&&L(N,{variant:"ghost",size:"sm",onClick:a,children:[x(Ee,{"aria-hidden":!0}),C.back]}),x(ee,{error:g.error,onRetry:g.reload})]}),g.status==="success"&&x(zs,{course:g.data,selectedId:E,onSelect:l,onBack:a,onCourseChange:g.mutate,onCourseRefresh:g.refresh})]})})})}export{It as COURSE_TEXT_TABLES,Z as CourseError,Qs as PanelCourse,ve as createCourseDataSource,Ce as createRpcCourseDataSource,Te as getCourseTexts,Pe as sanitizeLessonHtml};
2
2
  //# sourceMappingURL=course.mjs.map
@@ -1 +1 @@
1
- "use strict";var BitsnapAnalyticsEmbed=(()=>{var F=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var ot=(e,t)=>{for(var n in t)F(e,n,{get:t[n],enumerable:!0})},it=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of nt(t))!rt.call(e,o)&&o!==n&&F(e,o,{get:()=>t[o],enumerable:!(r=tt(t,o))||r.enumerable});return e};var st=e=>it(F({},"__esModule",{value:!0}),e);var Kt={};ot(Kt,{dashboardRoute:()=>Je,init:()=>Xe});var l={maxBatchEvents:50,maxBodyBytes:65536,maxPropsChars:4096,maxPropString:200,maxPropArray:50,host:253,path:512,referrerHost:253,utm:100,refCode:64,id:64,sdk:64,pageId:32,region:64,osBrowser:32,tsSkewMs:864e5},at=["storefront_events","app_events","business_events"],ct=["live","test"],ut=["storefront","sdk_react","script","server","dashboard"],lt=["hosted","custom_domain","embed","api","panel"],J=["shop","catalog","product","cart","checkout","payment","panel","course","custom_page","order","returns","app","other"];var pt={storefront_events:["storefront","sdk_react","script"],app_events:["dashboard"],business_events:["server"]},A={value_minor:"number",currency:"string"},$e={page_view:{landing:"boolean"},product_list_viewed:{list_id:"string?",item_count:"number"},product_impression:{list_id:"string?",product_ids:"string[]",positions:"number[]"},product_clicked:{list_id:"string?",position:"number?"},product_view:{price_minor:"number",currency:"string",availability:"enum:in_stock|out_of_stock|preorder"},variant_selected:{},add_to_cart:{qty:"number",...A},remove_from_cart:{qty:"number",...A},cart_opened:{item_count:"number",...A},checkout_started:{item_count:"number",checkout_type:"enum:single|cart|link",...A},checkout_step_completed:{step:"enum:contact|delivery|invoice|consents"},checkout_validation_error:{field:"string",rule:"string"},coupon_applied:{coupon_id:"string"},coupon_rejected:{coupon_id:"string?",reason:"string"},delivery_method_selected:{method:"string"},payment_method_selected:{gateway:"string",method:"string"},payment_submitted:{gateway:"string",method:"string"},apple_pay_clicked:{},apple_pay_result:{outcome:"enum:success|fail|cancel"},payment_returned:{gateway:"string",method:"string?",outcome:"enum:success|fail|cancel|pending",error_code:"string?"},availability_signup:{},panel_login:{},panel_order_viewed:{},panel_download:{},return_started:{},return_submitted:{reason_code:"string",item_count:"number"},course_opened:{course_id:"string"},lesson_started:{course_id:"string",lesson_id:"string",position:"number"},lesson_completed:{course_id:"string",lesson_id:"string",position:"number"},video_progress:{course_id:"string",lesson_id:"string",milestone:"number"},test_submitted:{course_id:"string",lesson_id:"string",score_bucket:"enum:0-24|25-49|50-74|75-99|100"},lesson_rated:{course_id:"string",lesson_id:"string",rating:"number"},consent_updated:{consent_id:"string",action:"enum:accept_all|reject_all|custom|withdraw",analytics:"boolean",marketing:"boolean",preferences:"boolean",banner_version:"number"}},Ie={app_page_view:{route:"string",previous_route:"string?"},insight_shown:{insight_type:"string",rank:"number",category:"string"},insight_clicked:{insight_type:"string",rank:"number",category:"string"},insight_dismissed:{insight_type:"string",rank:"number",category:"string"},checklist_step_viewed:{step:"string"},checklist_step_completed:{step:"string"},gateway_connect_started:{gateway:"string",step:"string?"},gateway_connect_completed:{gateway:"string",step:"string?"},gateway_connect_failed:{gateway:"string",step:"string?",error_code:"string?"},domain_connect_started:{},domain_connect_verified:{},domain_connect_failed:{error_code:"string?"},product_created:{product_type:"string?"},product_published:{product_type:"string?"},product_editor_section_opened:{section:"string"},feature_enabled:{feature:"string"},stats_viewed:{tab:"string"},stats_filter_changed:{tab:"string",filter:"string"},report_exported:{report:"string",format:"string?"},search_performed:{result_count:"number"},error_shown:{code:"string",route:"string"},help_opened:{topic:"string?"},ai_assistant_used:{topic:"string?"},member_invited:{role:"string"}},R={gateway:"string?",method:"string?",value_minor:"number?",currency:"string?"},C={subscription_id:"string?",value_minor:"number?",currency:"string?"},Oe={transaction_created:R,transaction_success:R,transaction_failure:{...R,error_code:"string?"},transaction_expired:R,transaction_charge:R,subscription_created:C,subscription_paused:C,subscription_resumed:C,subscription_updated:C,subscription_deleted:C,subscription_charge_paid:C,subscription_charge_failed:{...C,error_code:"string?"},subscription_past_due:C,subscription_canceled:C,access_expires_in_3_days:{},access_expired:{},cart_recovery:{value_minor:"number?",currency:"string?"},testimonial_email_send:{},testimonial_fulfilled:{},partner_commission_earned:{partner_id:"string",commission_minor:"number",currency:"string"},checkout_session_created:{item_count:"number",checkout_type:"enum:single|cart|link",gateway:"string?",...A},order_paid:{gateway:"string",method:"string?",item_count:"number?",visitor_day:"string?",items:"line_items?",...A},refund_issued:{gateway:"string?",reason:"string?",...A},return_requested:{item_count:"number",reason_code:"string?"},automation_run_completed:{automation_id:"string",status:"string",trigger:"string?"},notification_sent:{medium:"string",template:"string?"},notification_failed:{medium:"string",template:"string?",error_code:"string?"},recovery_email_sent:{step:"number?"},recovery_link_clicked:{},api_request:{endpoint:"string",client:"string?",status:"number",latency_bucket:"enum:lt_50|lt_200|lt_1000|gte_1000",sample_rate:"number"}};var dt={...$e,...Ie,...Oe},ft={storefront_events:Object.keys($e),app_events:Object.keys(Ie),business_events:Object.keys(Oe)},Re=Object.fromEntries(at.flatMap(e=>ft[e].map(t=>[t,e])));function Ve(e){return typeof e=="string"&&Object.hasOwn(Re,e)}var qt=365*24*60*60;function Q(e){let t=e.startsWith("pk_")?e.slice(3):e;return/^[A-Za-z0-9]{1,32}$/.test(t)?t:null}var gt=/^([a-z][a-z0-9-]{0,39})@(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.+-]{1,20})?)$/;function Le(e){if(!e||e.length>l.sdk)return null;let t=gt.exec(e);return t?{package:t[1],version:t[2]}:null}var V=l.utm;function I(e,t){if(e==null)return null;let n=e.trim();return n.length===0||n.includes("@")?null:n.slice(0,t)}function O(e){let n=e.split("/").map(r=>r.includes("@")||r.includes("%40")?":email":/^[A-Za-z0-9_-]{24,}$/.test(r)?":token":r).join("/")||"/";return(n.startsWith("/")?n:`/${n}`).slice(0,l.path)}function ee(e,t){let n;try{n=new URL(e,t)}catch{return null}if(n.protocol!=="https:"&&n.protocol!=="http:")return null;let r=n.searchParams;return{host:n.hostname.toLowerCase().slice(0,l.host),path:O(n.pathname),utm_source:I(r.get("utm_source"),V),utm_medium:I(r.get("utm_medium"),V),utm_campaign:I(r.get("utm_campaign"),V),utm_content:I(r.get("utm_content"),V),utm_term:I(r.get("utm_term"),V),ref_code:I(r.get("ref"),l.refCode)}}var mt=/^[A-Za-z0-9_-]{1,64}$/;function Be(e){if(!e)return null;try{let t=new URL(e);return t.protocol!=="https:"&&t.protocol!=="http:"?null:t.hostname.toLowerCase().slice(0,l.referrerHost)}catch{return null}}var Gt=new TextEncoder;function j(e){return`bs_vid_${e}`}var _t=/^[A-Za-z0-9_-]{22}$/;var yt=/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,ht=/^[A-Za-z0-9_-]{8,32}$/,bt=/[^\s@]+@[^\s@]+\.[A-Za-z]{2,}\b/;function H(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function vt(e,t,n){let r=e[t];return r==null?null:typeof r!="string"?`bad_${t}`:r.length>n?`too_long_${t}`:null}function Et(e,t){let r=e.endsWith("?")?e.slice(0,-1):e;if(r.startsWith("enum:"))return typeof t=="string"&&r.slice(5).split("|").includes(t);switch(r){case"string":return typeof t=="string"&&t.length<=l.maxPropString;case"number":return typeof t=="number"&&Number.isFinite(t);case"boolean":return typeof t=="boolean";case"string[]":return Array.isArray(t)&&t.length<=l.maxPropArray&&t.every(o=>typeof o=="string"&&o.length<=l.maxPropString);case"number[]":return Array.isArray(t)&&t.length<=l.maxPropArray&&t.every(o=>typeof o=="number"&&Number.isFinite(o));case"line_items":return Array.isArray(t)&&t.length<=l.maxPropArray&&t.every(o=>H(o)&&typeof o.product_id=="string"&&mt.test(o.product_id)&&Ne(o.qty)&&Ne(o.value_minor));default:return!1}}function Ne(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function kt(e){return Le(e)!==null?!1:bt.test(e)}function X(e){return typeof e=="string"?kt(e):Array.isArray(e)?e.some(X):H(e)?Object.values(e).some(X):!1}function te(e,t){if(!Ve(e))return{ok:!1,reason:"unknown_event"};let n=dt[e];if(!n)return{ok:!1,reason:"unknown_event"};if(!H(t))return{ok:!1,reason:"bad_props"};let r={};for(let[o,s]of Object.entries(n)){let c=t[o];if(c==null){if(!s.endsWith("?"))return{ok:!1,reason:`props_missing_${o}`};continue}if(!Et(s,c))return{ok:!1,reason:`props_bad_${o}`};if(X(c))return{ok:!1,reason:`props_pii_${o}`};r[o]=s.startsWith("line_items")&&Array.isArray(c)?c.map(d=>({product_id:d.product_id,qty:d.qty,value_minor:d.value_minor})):c}return JSON.stringify(r).length>l.maxPropsChars?{ok:!1,reason:"props_too_large"}:{ok:!0,props:r}}function De(e,t={}){var d;let n=(d=t.from)!=null?d:"browser",r=g=>({ok:!1,reason:g});if(!H(e))return r("not_object");if(typeof e.event_id!="string"||!yt.test(e.event_id))return r("bad_event_id");if(!Ve(e.event))return r("unknown_event");let o=Re[e.event];if(n==="browser"){if(o==="business_events")return r("server_only_event");if(e.event==="consent_updated")return r("consent_via_consent_endpoint")}if(typeof e.ts!="number"||!Number.isInteger(e.ts)||e.ts<=0||e.ts>4e12)return r("bad_ts");if(e.schema_version!==1)return r("bad_schema_version");if(!ct.includes(e.env))return r("bad_env");if(!ut.includes(e.source))return r("bad_source");if(!pt[o].includes(e.source))return r("source_not_allowed_for_event");if(!lt.includes(e.channel))return r("bad_channel");if(e.sdk!=null&&(typeof e.sdk!="string"||Le(e.sdk)===null))return r("bad_sdk");if(e.page_id!=null&&(typeof e.page_id!="string"||!ht.test(e.page_id)))return r("bad_page_id");if(e.page_type!=null&&!J.includes(e.page_type))return r("bad_page_type");if(n==="browser"){if(typeof e.host!="string"||e.host.length===0)return r("bad_host");if(typeof e.path!="string"||!e.path.startsWith("/"))return r("bad_path")}if(typeof e.path=="string"&&e.path.includes("?"))return r("path_has_query");if(typeof e.path=="string"&&e.path.includes("#"))return r("path_has_fragment");let s=[["host",l.host],["path",l.path],["referrer_host",l.referrerHost],["utm_source",l.utm],["utm_medium",l.utm],["utm_campaign",l.utm],["utm_content",l.utm],["utm_term",l.utm],["ref_code",l.refCode],["product_id",l.id],["variant_id",l.id],["order_ref",l.id]];for(let[g,y]of s){let T=vt(e,g,y);if(T)return r(T)}if(e.visitor_id!=null&&(typeof e.visitor_id!="string"||!/^[A-Za-z0-9_-]{22}$/.test(e.visitor_id)))return r("bad_visitor_id");if(e.client_id!=null&&(typeof e.client_id!="string"||!_t.test(e.client_id)))return r("bad_client_id");let c=te(e.event,e.props);return c.ok?{ok:!0}:r(c.reason)}var Me="1.12.0";var ne=Symbol.for("bitsnap.pageViews");function St(e){var n;let t=e;return(n=t[ne])!=null?n:t[ne]={path:null,starters:new Set,watching:!1}}function Ct(e,t){let n=()=>{try{t()}catch{}};for(let r of["pushState","replaceState"]){let o=e.history[r];e.history[r]=function(...s){let c=o.apply(this,s);return n(),c}}e.addEventListener("popstate",n)}function re(e,t=window){try{let n=St(t),r=()=>e();n.watching||(n.watching=!0,Ct(t,()=>{var c,d;let s=t.location.pathname;s===n.path||n.starters.size===0||(n.path=s,(d=(c=n.starters.values().next()).value)==null||d.call(c))})),n.starters.add(r);let o=t.location.pathname;return o!==n.path&&(n.path=o,r()),()=>void n.starters.delete(r)}catch{return()=>{}}}function L(e){let t=new Uint8Array(e),n=typeof crypto!="undefined"?crypto:void 0;if(n&&typeof n.getRandomValues=="function")n.getRandomValues(t);else for(let r=0;r<e;r++)t[r]=Math.floor(Math.random()*256);return t}function oe(e){if(!e||/^[\d.]+$/.test(e)||e.includes(":"))return[];let t=e.split("."),n=[];for(let r=0;r<=t.length-2;r++)n.push(t.slice(r).join("."));return n}var wt=390*24*60*60,Tt=/^[A-Za-z0-9_-]{22}$/;function z(e){return e.BitsnapConsent}function xt(e,t){for(let n of e.cookie.split(";")){let r=n.indexOf("=");if(r!==-1&&n.slice(0,r).trim()===t)return n.slice(r+1).trim()}return null}function At(e){let t=e.toLowerCase();return t==="bitsnap.pl"||t.endsWith(".bitsnap.pl")}function ie(e,t){try{let n=z(e);if(!n)return!1;if(n.scope==="project")return n.projectKey===t;let r=At(e.location.hostname);return n.scope==="global"?!r:!1}catch{return!1}}function se(e,t){var n,r;try{return((r=(n=z(e))==null?void 0:n.get())==null?void 0:r.c.analytics)===!0&&ie(e,t)}catch{return!1}}function Ue(){let e="";return L(16).forEach(t=>e+=String.fromCharCode(t)),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function je(e,t){try{return xt(e,j(t))}catch{return null}}function K(e,t){let n=je(e,t);return n!==null&&Tt.test(n)?n:null}function He(e,t,n){try{let r=e.document,o=`${j(t)}=${n}; Max-Age=${wt}; Path=/; SameSite=Lax`+(e.location.protocol==="https:"?"; Secure":"");for(let s of oe(e.location.hostname).reverse())if(r.cookie=`${o}; Domain=${s}`,K(r,t)===n)return;r.cookie=o}catch{}}function ze(e,t){try{let n=e.document;if(je(n,t)===null)return;let r=`${j(t)}=; Max-Age=0; Path=/; SameSite=Lax`+(e.location.protocol==="https:"?"; Secure":"");n.cookie=r;for(let o of oe(e.location.hostname))n.cookie=`${r}; Domain=${o}`}catch{}}function ae(e,t){try{let n=e.navigator;return(n==null?void 0:n.globalPrivacyControl)===!0||(n==null?void 0:n.webdriver)===!0?null:se(e,t)?K(e.document,t):null}catch{return null}}var Nt="https://collect.bitsnap.pl",$t=5e3,It=20,Ke=32*1024,Ot=60*1024,We=/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function qe(e){return typeof TextEncoder=="function"?new TextEncoder().encode(e).length:unescape(encodeURIComponent(e)).length}var B={track(){},page(){},clientId:()=>null,flush(){},setEnabled(){},onEvent:()=>()=>{},configure(){},destroy(){}};function Rt(e=Date.now()){let t=L(16),n=e;for(let o=5;o>=0;o--)t[o]=n%256,n=Math.floor(n/256);t[6]=t[6]&15|112,t[8]=t[8]&63|128;let r=Array.from(t,o=>o.toString(16).padStart(2,"0")).join("");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}var Ge="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Vt(){return Array.from(L(16),e=>Ge[e%Ge.length]).join("")}function Ye(e){return typeof e=="string"&&J.includes(e)}function Lt(e,t,n=!1){let r=qe(JSON.stringify({k:e,events:[]})),o=[],s=[],c=r,d=()=>{s.length>0&&o.push({body:JSON.stringify({k:e,events:s}),bytes:c,count:s.length}),s=[],c=r};for(let g of t){let y=qe(JSON.stringify(g));r+y>Ke||((s.length>=l.maxBatchEvents||c+y+(s.length>0?1:0)>Ke)&&d(),c+=y+(s.length>0?1:0),s.push(g))}if(d(),n){let g=0,y=o.length;for(;y>0&&g+o[y-1].bytes<=Ot;)g+=o[y-1].bytes,y--;o=o.slice(y)}return o}function Ze(e){try{return typeof window=="undefined"||typeof document=="undefined"?B:Bt(e,window)}catch{return B}}function Bt(e,t){var ge,me,_e,ye;let n=Q((ge=e.projectKey)!=null?ge:""),r=!!e.debug,o=(...i)=>{r&&console.warn("[bitsnap analytics]",...i)};if(!n)return o("invalid projectKey, tracking is off"),B;let s=n,c=i=>`${(i||Nt).replace(/\/+$/,"")}/e`,d=c(e.endpoint),g=(me=e.source)!=null?me:"sdk_react",y=(_e=e.channel)!=null?_e:"embed",T=`bitsnap-react@${Me}`,S=Vt(),u=ee(t.location.href),P=(ye=e.env)!=null?ye:"live";if(!e.env)try{new URLSearchParams(t.location.search).has("test")&&(P="test")}catch{}let W=Be(document.referrer),m=e.enabled!==!1,h=null,v=0,p=[],f=null,E=new Set;e.onEvent&&E.add(e.onEvent);let k=[],b,w=!0;function q(){var _;let i=z(t);!i||i===b||(b=i,w=!i.ready,(_=i.ready)==null||_.then(()=>{b===i&&(w=!0,le())},()=>{b===i&&(w=!0)}))}function ce(){q();try{if(!b)return!1;let i=b.get();return!!b.denied&&b.denied("analytics")||!!i&&i.c.analytics===!1}catch{return!1}}function ue(i){E.forEach(_=>{try{_(i)}catch{}})}function G(i){try{if(q(),!b||!ie(t,s))return;se(t,s)?D()&&K(t.document,s)===null&&He(t,s,Ue()):i&&ze(t,s)}catch{}}function le(){if(G(!0),ce())p=[],k=[],M();else{if(w&&k.length>0){let i=k;k=[],i.forEach(ue)}p.length>0&&N()}}function D(){if(!m)return!1;let i=t.navigator;return i&&(i.globalPrivacyControl===!0||i.webdriver===!0)?!1:!ce()}function M(){f!==null&&clearTimeout(f),f=null}function Qe(){var i;f===null&&(f=setTimeout(()=>{f=null,N()},$t),(i=f.unref)==null||i.call(f))}function et(i){try{if(typeof fetch=="function"){fetch(d,{method:"POST",body:i,keepalive:!0,credentials:"omit",headers:{"Content-Type":"text/plain"}}).catch(()=>{});return}}catch{}try{let _=t.navigator;_&&typeof _.sendBeacon=="function"&&_.sendBeacon(d,new Blob([i],{type:"text/plain"}))}catch{}}function N(i=!1){try{if(M(),p.length===0)return;if(!D()){p=[];return}if(!w)return;G(w);let _=ae(t,s),a=_?p.map(x=>({...x,client_id:_})):p;p=[],Lt(s,a,i).forEach(x=>et(x.body))}catch{}}function pe(i,_,a){var be,ve,Ee,ke,Se,Ce,we,Te,xe,Ae,Pe;if(!D())return;let x=te(i,_);if(!x.ok){o("dropped",i,x.reason);return}let $=ee(t.location.href),Y={event_id:a!=null&&a.event_id&&We.test(a.event_id)?a.event_id:Rt(),event:i,ts:Date.now(),schema_version:1,env:P,source:g,channel:y,sdk:T,page_id:S,page_type:(a==null?void 0:a.page_type)!==void 0?a.page_type:h,host:(be=$==null?void 0:$.host)!=null?be:null,path:a!=null&&a.path?O(a.path.split(/[?#]/)[0]):(ve=$==null?void 0:$.path)!=null?ve:null,referrer_host:W,utm_source:(Ee=u==null?void 0:u.utm_source)!=null?Ee:null,utm_medium:(ke=u==null?void 0:u.utm_medium)!=null?ke:null,utm_campaign:(Se=u==null?void 0:u.utm_campaign)!=null?Se:null,utm_content:(Ce=u==null?void 0:u.utm_content)!=null?Ce:null,utm_term:(we=u==null?void 0:u.utm_term)!=null?we:null,ref_code:(Te=u==null?void 0:u.ref_code)!=null?Te:null,product_id:(xe=a==null?void 0:a.product_id)!=null?xe:null,variant_id:(Ae=a==null?void 0:a.variant_id)!=null?Ae:null,order_ref:(Pe=a==null?void 0:a.order_ref)!=null?Pe:null,props:x.props};a!=null&&a.event_id&&!We.test(a.event_id)&&o("ignored invalid event_id",i),g==="dashboard"&&e.visitorId&&(Y.visitor_id=e.visitorId);let he=De(Y);if(!he.ok){o("dropped",i,he.reason);return}let Z=Y;w?ue(Z):k.push(Z),p.push(Z),p.length>=It?N():Qe()}let de=()=>N(!0),fe=()=>{document.visibilityState==="hidden"&&N(!0)},U=()=>le();return t.addEventListener("pagehide",de),document.addEventListener("visibilitychange",fe),t.addEventListener("bitsnap:consent",U),t.addEventListener("bitsnap:consent:ready",U),q(),G(w),{track(i,_,a){try{pe(i,_,a)}catch{}},page(i,_){try{i!==void 0&&(h=i),pe("page_view",{landing:v++===0},_)}catch{}},clientId(i){try{return i!==void 0&&Q(i)!==s?null:D()?ae(t,s):null}catch{return null}},flush:()=>N(),setEnabled(i){m=!!i,m||(p=[],k=[],M())},configure(i){try{(i.env==="live"||i.env==="test")&&(P=i.env),typeof i.endpoint=="string"&&i.endpoint&&(d=c(i.endpoint))}catch{}},onEvent(i){return E.add(i),()=>void E.delete(i)},destroy(){p=[],k=[],M(),E.clear(),t.removeEventListener("pagehide",de),document.removeEventListener("visibilitychange",fe),t.removeEventListener("bitsnap:consent",U),t.removeEventListener("bitsnap:consent:ready",U)}}}var Dt=["storefront","dashboard","script"],Mt=["hosted","custom_domain","embed","panel"],Ut=/^[A-Za-z0-9_-]{22}$/;function Fe(e,t,n){return e.includes(t)?t:n}function Xe(e){try{if(typeof window=="undefined")return;let t=window.bitsnap;if(t!=null&&t.loaded)return t;let n=m=>(e==null?void 0:e.getAttribute(`data-${m}`))||void 0,r=n("env"),o=Fe(Dt,n("source"),"script"),s=Fe(Mt,n("channel"),"embed"),c=o==="dashboard",d=n("visitor-id"),g=n("project")?Ze({projectKey:n("project"),env:r==="live"||r==="test"?r:void 0,endpoint:n("endpoint"),source:o,channel:s,visitorId:c&&d&&Ut.test(d)?d:void 0}):B,y=n("route-template"),T=n("page-type"),S=Ye(T)?T:void 0,u;if(c){let m=S!=null?S:"app",h;u={track:(v,p,f)=>{var E;return g.track(v,p,{...f,page_type:(E=f==null?void 0:f.page_type)!=null?E:m})},page:(v,p)=>{var E,k,b;let f=O(((k=(E=p==null?void 0:p.path)!=null?E:y)!=null?k:Je(location.pathname)).split(/[?#]/)[0]);g.track("app_page_view",h&&h!==f?{route:f,previous_route:h}:{route:f},{...p,page_type:(b=v!=null?v:p==null?void 0:p.page_type)!=null?b:m,path:f}),h=f},loaded:!0}}else u={track:(m,h,v)=>g.track(m,h,v),page:(m,h)=>g.page(m!==void 0?m:S,h),loaded:!0};let P=m=>{try{let[h,...v]=Array.prototype.slice.call(m);(h==="track"||h==="page")&&u[h](...v)}catch{}},W=Array.isArray(t==null?void 0:t.q)?t.q:[];return window.bitsnap=u,W.forEach(P),u.q={push(...m){return m.forEach(P),0}},n("auto")!=="off"&&re(()=>u.page(S!=null?S:null)),u}catch{return}}var jt=new Set(["products","orders","customers","coupons","discounts","projects","users","members","invoices","returns","carts","subscriptions","pages","posts","courses","lessons","notifications","automations","webhooks","integrations","themes","newsletters","campaigns","forms","categories","collections","variants","tags","reviews","templates","payments","shipping","tests","partners"]),Ht=new Set(["new","create","add","edit","import","export","list","settings","stats","overview","all","archive","archived","drafts","preview","duplicate","bulk","search"]),zt=/^[A-Za-z0-9_]{3,24}$/;function Je(e){let t=O(e).split("/");return t.map((n,r)=>{var s;if(!n||n.startsWith(":"))return n;if(/\d/.test(n))return":id";let o=(s=t[r-1])==null?void 0:s.toLowerCase();return o&&jt.has(o)&&!Ht.has(n.toLowerCase())&&zt.test(n)?":id":n}).join("/")}typeof document!="undefined"&&Xe(document.currentScript);return st(Kt);})();
1
+ "use strict";var BitsnapAnalyticsEmbed=(()=>{var F=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var ot=(e,t)=>{for(var n in t)F(e,n,{get:t[n],enumerable:!0})},it=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of nt(t))!rt.call(e,o)&&o!==n&&F(e,o,{get:()=>t[o],enumerable:!(r=tt(t,o))||r.enumerable});return e};var st=e=>it(F({},"__esModule",{value:!0}),e);var Kt={};ot(Kt,{dashboardRoute:()=>Je,init:()=>Xe});var l={maxBatchEvents:50,maxBodyBytes:65536,maxPropsChars:4096,maxPropString:200,maxPropArray:50,host:253,path:512,referrerHost:253,utm:100,refCode:64,id:64,sdk:64,pageId:32,region:64,osBrowser:32,tsSkewMs:864e5},at=["storefront_events","app_events","business_events"],ct=["live","test"],ut=["storefront","sdk_react","script","server","dashboard"],lt=["hosted","custom_domain","embed","api","panel"],J=["shop","catalog","product","cart","checkout","payment","panel","course","custom_page","order","returns","app","other"];var pt={storefront_events:["storefront","sdk_react","script"],app_events:["dashboard"],business_events:["server"]},A={value_minor:"number",currency:"string"},$e={page_view:{landing:"boolean"},product_list_viewed:{list_id:"string?",item_count:"number"},product_impression:{list_id:"string?",product_ids:"string[]",positions:"number[]"},product_clicked:{list_id:"string?",position:"number?"},product_view:{price_minor:"number",currency:"string",availability:"enum:in_stock|out_of_stock|preorder"},variant_selected:{},add_to_cart:{qty:"number",...A},remove_from_cart:{qty:"number",...A},cart_opened:{item_count:"number",...A},checkout_started:{item_count:"number",checkout_type:"enum:single|cart|link",...A},checkout_step_completed:{step:"enum:contact|delivery|invoice|consents"},checkout_validation_error:{field:"string",rule:"string"},coupon_applied:{coupon_id:"string"},coupon_rejected:{coupon_id:"string?",reason:"string"},delivery_method_selected:{method:"string"},payment_method_selected:{gateway:"string",method:"string"},payment_submitted:{gateway:"string",method:"string"},apple_pay_clicked:{},apple_pay_result:{outcome:"enum:success|fail|cancel"},payment_returned:{gateway:"string",method:"string?",outcome:"enum:success|fail|cancel|pending",error_code:"string?"},availability_signup:{},panel_login:{},panel_order_viewed:{},panel_download:{},return_started:{},return_submitted:{reason_code:"string",item_count:"number"},course_opened:{course_id:"string"},lesson_started:{course_id:"string",lesson_id:"string",position:"number"},lesson_completed:{course_id:"string",lesson_id:"string",position:"number"},video_progress:{course_id:"string",lesson_id:"string",milestone:"number"},test_submitted:{course_id:"string",lesson_id:"string",score_bucket:"enum:0-24|25-49|50-74|75-99|100"},lesson_rated:{course_id:"string",lesson_id:"string",rating:"number"},consent_updated:{consent_id:"string",action:"enum:accept_all|reject_all|custom|withdraw",analytics:"boolean",marketing:"boolean",preferences:"boolean",banner_version:"number"}},Ie={app_page_view:{route:"string",previous_route:"string?"},insight_shown:{insight_type:"string",rank:"number",category:"string"},insight_clicked:{insight_type:"string",rank:"number",category:"string"},insight_dismissed:{insight_type:"string",rank:"number",category:"string"},checklist_step_viewed:{step:"string"},checklist_step_completed:{step:"string"},gateway_connect_started:{gateway:"string",step:"string?"},gateway_connect_completed:{gateway:"string",step:"string?"},gateway_connect_failed:{gateway:"string",step:"string?",error_code:"string?"},domain_connect_started:{},domain_connect_verified:{},domain_connect_failed:{error_code:"string?"},product_created:{product_type:"string?"},product_published:{product_type:"string?"},product_editor_section_opened:{section:"string"},feature_enabled:{feature:"string"},stats_viewed:{tab:"string"},stats_filter_changed:{tab:"string",filter:"string"},report_exported:{report:"string",format:"string?"},search_performed:{result_count:"number"},error_shown:{code:"string",route:"string"},help_opened:{topic:"string?"},ai_assistant_used:{topic:"string?"},member_invited:{role:"string"}},R={gateway:"string?",method:"string?",value_minor:"number?",currency:"string?"},C={subscription_id:"string?",value_minor:"number?",currency:"string?"},Oe={transaction_created:R,transaction_success:R,transaction_failure:{...R,error_code:"string?"},transaction_expired:R,transaction_charge:R,subscription_created:C,subscription_paused:C,subscription_resumed:C,subscription_updated:C,subscription_deleted:C,subscription_charge_paid:C,subscription_charge_failed:{...C,error_code:"string?"},subscription_past_due:C,subscription_canceled:C,access_expires_in_3_days:{},access_expired:{},cart_recovery:{value_minor:"number?",currency:"string?"},testimonial_email_send:{},testimonial_fulfilled:{},partner_commission_earned:{partner_id:"string",commission_minor:"number",currency:"string"},checkout_session_created:{item_count:"number",checkout_type:"enum:single|cart|link",gateway:"string?",...A},order_paid:{gateway:"string",method:"string?",item_count:"number?",visitor_day:"string?",items:"line_items?",...A},refund_issued:{gateway:"string?",reason:"string?",...A},return_requested:{item_count:"number",reason_code:"string?"},automation_run_completed:{automation_id:"string",status:"string",trigger:"string?"},notification_sent:{medium:"string",template:"string?"},notification_failed:{medium:"string",template:"string?",error_code:"string?"},recovery_email_sent:{step:"number?"},recovery_link_clicked:{},api_request:{endpoint:"string",client:"string?",status:"number",latency_bucket:"enum:lt_50|lt_200|lt_1000|gte_1000",sample_rate:"number"}};var dt={...$e,...Ie,...Oe},ft={storefront_events:Object.keys($e),app_events:Object.keys(Ie),business_events:Object.keys(Oe)},Re=Object.fromEntries(at.flatMap(e=>ft[e].map(t=>[t,e])));function Ve(e){return typeof e=="string"&&Object.hasOwn(Re,e)}var qt=365*24*60*60;function Q(e){let t=e.startsWith("pk_")?e.slice(3):e;return/^[A-Za-z0-9]{1,32}$/.test(t)?t:null}var gt=/^([a-z][a-z0-9-]{0,39})@(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.+-]{1,20})?)$/;function Le(e){if(!e||e.length>l.sdk)return null;let t=gt.exec(e);return t?{package:t[1],version:t[2]}:null}var V=l.utm;function I(e,t){if(e==null)return null;let n=e.trim();return n.length===0||n.includes("@")?null:n.slice(0,t)}function O(e){let n=e.split("/").map(r=>r.includes("@")||r.includes("%40")?":email":/^[A-Za-z0-9_-]{24,}$/.test(r)?":token":r).join("/")||"/";return(n.startsWith("/")?n:`/${n}`).slice(0,l.path)}function ee(e,t){let n;try{n=new URL(e,t)}catch{return null}if(n.protocol!=="https:"&&n.protocol!=="http:")return null;let r=n.searchParams;return{host:n.hostname.toLowerCase().slice(0,l.host),path:O(n.pathname),utm_source:I(r.get("utm_source"),V),utm_medium:I(r.get("utm_medium"),V),utm_campaign:I(r.get("utm_campaign"),V),utm_content:I(r.get("utm_content"),V),utm_term:I(r.get("utm_term"),V),ref_code:I(r.get("ref"),l.refCode)}}var mt=/^[A-Za-z0-9_-]{1,64}$/;function Be(e){if(!e)return null;try{let t=new URL(e);return t.protocol!=="https:"&&t.protocol!=="http:"?null:t.hostname.toLowerCase().slice(0,l.referrerHost)}catch{return null}}var Gt=new TextEncoder;function j(e){return`bs_vid_${e}`}var _t=/^[A-Za-z0-9_-]{22}$/;var yt=/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,ht=/^[A-Za-z0-9_-]{8,32}$/,bt=/[^\s@]+@[^\s@]+\.[A-Za-z]{2,}\b/;function H(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function vt(e,t,n){let r=e[t];return r==null?null:typeof r!="string"?`bad_${t}`:r.length>n?`too_long_${t}`:null}function Et(e,t){let r=e.endsWith("?")?e.slice(0,-1):e;if(r.startsWith("enum:"))return typeof t=="string"&&r.slice(5).split("|").includes(t);switch(r){case"string":return typeof t=="string"&&t.length<=l.maxPropString;case"number":return typeof t=="number"&&Number.isFinite(t);case"boolean":return typeof t=="boolean";case"string[]":return Array.isArray(t)&&t.length<=l.maxPropArray&&t.every(o=>typeof o=="string"&&o.length<=l.maxPropString);case"number[]":return Array.isArray(t)&&t.length<=l.maxPropArray&&t.every(o=>typeof o=="number"&&Number.isFinite(o));case"line_items":return Array.isArray(t)&&t.length<=l.maxPropArray&&t.every(o=>H(o)&&typeof o.product_id=="string"&&mt.test(o.product_id)&&Ne(o.qty)&&Ne(o.value_minor));default:return!1}}function Ne(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function kt(e){return Le(e)!==null?!1:bt.test(e)}function X(e){return typeof e=="string"?kt(e):Array.isArray(e)?e.some(X):H(e)?Object.values(e).some(X):!1}function te(e,t){if(!Ve(e))return{ok:!1,reason:"unknown_event"};let n=dt[e];if(!n)return{ok:!1,reason:"unknown_event"};if(!H(t))return{ok:!1,reason:"bad_props"};let r={};for(let[o,s]of Object.entries(n)){let c=t[o];if(c==null){if(!s.endsWith("?"))return{ok:!1,reason:`props_missing_${o}`};continue}if(!Et(s,c))return{ok:!1,reason:`props_bad_${o}`};if(X(c))return{ok:!1,reason:`props_pii_${o}`};r[o]=s.startsWith("line_items")&&Array.isArray(c)?c.map(d=>({product_id:d.product_id,qty:d.qty,value_minor:d.value_minor})):c}return JSON.stringify(r).length>l.maxPropsChars?{ok:!1,reason:"props_too_large"}:{ok:!0,props:r}}function De(e,t={}){var d;let n=(d=t.from)!=null?d:"browser",r=g=>({ok:!1,reason:g});if(!H(e))return r("not_object");if(typeof e.event_id!="string"||!yt.test(e.event_id))return r("bad_event_id");if(!Ve(e.event))return r("unknown_event");let o=Re[e.event];if(n==="browser"){if(o==="business_events")return r("server_only_event");if(e.event==="consent_updated")return r("consent_via_consent_endpoint")}if(typeof e.ts!="number"||!Number.isInteger(e.ts)||e.ts<=0||e.ts>4e12)return r("bad_ts");if(e.schema_version!==1)return r("bad_schema_version");if(!ct.includes(e.env))return r("bad_env");if(!ut.includes(e.source))return r("bad_source");if(!pt[o].includes(e.source))return r("source_not_allowed_for_event");if(!lt.includes(e.channel))return r("bad_channel");if(e.sdk!=null&&(typeof e.sdk!="string"||Le(e.sdk)===null))return r("bad_sdk");if(e.page_id!=null&&(typeof e.page_id!="string"||!ht.test(e.page_id)))return r("bad_page_id");if(e.page_type!=null&&!J.includes(e.page_type))return r("bad_page_type");if(n==="browser"){if(typeof e.host!="string"||e.host.length===0)return r("bad_host");if(typeof e.path!="string"||!e.path.startsWith("/"))return r("bad_path")}if(typeof e.path=="string"&&e.path.includes("?"))return r("path_has_query");if(typeof e.path=="string"&&e.path.includes("#"))return r("path_has_fragment");let s=[["host",l.host],["path",l.path],["referrer_host",l.referrerHost],["utm_source",l.utm],["utm_medium",l.utm],["utm_campaign",l.utm],["utm_content",l.utm],["utm_term",l.utm],["ref_code",l.refCode],["product_id",l.id],["variant_id",l.id],["order_ref",l.id]];for(let[g,y]of s){let T=vt(e,g,y);if(T)return r(T)}if(e.visitor_id!=null&&(typeof e.visitor_id!="string"||!/^[A-Za-z0-9_-]{22}$/.test(e.visitor_id)))return r("bad_visitor_id");if(e.client_id!=null&&(typeof e.client_id!="string"||!_t.test(e.client_id)))return r("bad_client_id");let c=te(e.event,e.props);return c.ok?{ok:!0}:r(c.reason)}var Me="1.13.0";var ne=Symbol.for("bitsnap.pageViews");function St(e){var n;let t=e;return(n=t[ne])!=null?n:t[ne]={path:null,starters:new Set,watching:!1}}function Ct(e,t){let n=()=>{try{t()}catch{}};for(let r of["pushState","replaceState"]){let o=e.history[r];e.history[r]=function(...s){let c=o.apply(this,s);return n(),c}}e.addEventListener("popstate",n)}function re(e,t=window){try{let n=St(t),r=()=>e();n.watching||(n.watching=!0,Ct(t,()=>{var c,d;let s=t.location.pathname;s===n.path||n.starters.size===0||(n.path=s,(d=(c=n.starters.values().next()).value)==null||d.call(c))})),n.starters.add(r);let o=t.location.pathname;return o!==n.path&&(n.path=o,r()),()=>void n.starters.delete(r)}catch{return()=>{}}}function L(e){let t=new Uint8Array(e),n=typeof crypto!="undefined"?crypto:void 0;if(n&&typeof n.getRandomValues=="function")n.getRandomValues(t);else for(let r=0;r<e;r++)t[r]=Math.floor(Math.random()*256);return t}function oe(e){if(!e||/^[\d.]+$/.test(e)||e.includes(":"))return[];let t=e.split("."),n=[];for(let r=0;r<=t.length-2;r++)n.push(t.slice(r).join("."));return n}var wt=390*24*60*60,Tt=/^[A-Za-z0-9_-]{22}$/;function z(e){return e.BitsnapConsent}function xt(e,t){for(let n of e.cookie.split(";")){let r=n.indexOf("=");if(r!==-1&&n.slice(0,r).trim()===t)return n.slice(r+1).trim()}return null}function At(e){let t=e.toLowerCase();return t==="bitsnap.pl"||t.endsWith(".bitsnap.pl")}function ie(e,t){try{let n=z(e);if(!n)return!1;if(n.scope==="project")return n.projectKey===t;let r=At(e.location.hostname);return n.scope==="global"?!r:!1}catch{return!1}}function se(e,t){var n,r;try{return((r=(n=z(e))==null?void 0:n.get())==null?void 0:r.c.analytics)===!0&&ie(e,t)}catch{return!1}}function Ue(){let e="";return L(16).forEach(t=>e+=String.fromCharCode(t)),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function je(e,t){try{return xt(e,j(t))}catch{return null}}function K(e,t){let n=je(e,t);return n!==null&&Tt.test(n)?n:null}function He(e,t,n){try{let r=e.document,o=`${j(t)}=${n}; Max-Age=${wt}; Path=/; SameSite=Lax`+(e.location.protocol==="https:"?"; Secure":"");for(let s of oe(e.location.hostname).reverse())if(r.cookie=`${o}; Domain=${s}`,K(r,t)===n)return;r.cookie=o}catch{}}function ze(e,t){try{let n=e.document;if(je(n,t)===null)return;let r=`${j(t)}=; Max-Age=0; Path=/; SameSite=Lax`+(e.location.protocol==="https:"?"; Secure":"");n.cookie=r;for(let o of oe(e.location.hostname))n.cookie=`${r}; Domain=${o}`}catch{}}function ae(e,t){try{let n=e.navigator;return(n==null?void 0:n.globalPrivacyControl)===!0||(n==null?void 0:n.webdriver)===!0?null:se(e,t)?K(e.document,t):null}catch{return null}}var Nt="https://collect.bitsnap.pl",$t=5e3,It=20,Ke=32*1024,Ot=60*1024,We=/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function qe(e){return typeof TextEncoder=="function"?new TextEncoder().encode(e).length:unescape(encodeURIComponent(e)).length}var B={track(){},page(){},clientId:()=>null,flush(){},setEnabled(){},onEvent:()=>()=>{},configure(){},destroy(){}};function Rt(e=Date.now()){let t=L(16),n=e;for(let o=5;o>=0;o--)t[o]=n%256,n=Math.floor(n/256);t[6]=t[6]&15|112,t[8]=t[8]&63|128;let r=Array.from(t,o=>o.toString(16).padStart(2,"0")).join("");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}var Ge="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Vt(){return Array.from(L(16),e=>Ge[e%Ge.length]).join("")}function Ye(e){return typeof e=="string"&&J.includes(e)}function Lt(e,t,n=!1){let r=qe(JSON.stringify({k:e,events:[]})),o=[],s=[],c=r,d=()=>{s.length>0&&o.push({body:JSON.stringify({k:e,events:s}),bytes:c,count:s.length}),s=[],c=r};for(let g of t){let y=qe(JSON.stringify(g));r+y>Ke||((s.length>=l.maxBatchEvents||c+y+(s.length>0?1:0)>Ke)&&d(),c+=y+(s.length>0?1:0),s.push(g))}if(d(),n){let g=0,y=o.length;for(;y>0&&g+o[y-1].bytes<=Ot;)g+=o[y-1].bytes,y--;o=o.slice(y)}return o}function Ze(e){try{return typeof window=="undefined"||typeof document=="undefined"?B:Bt(e,window)}catch{return B}}function Bt(e,t){var ge,me,_e,ye;let n=Q((ge=e.projectKey)!=null?ge:""),r=!!e.debug,o=(...i)=>{r&&console.warn("[bitsnap analytics]",...i)};if(!n)return o("invalid projectKey, tracking is off"),B;let s=n,c=i=>`${(i||Nt).replace(/\/+$/,"")}/e`,d=c(e.endpoint),g=(me=e.source)!=null?me:"sdk_react",y=(_e=e.channel)!=null?_e:"embed",T=`bitsnap-react@${Me}`,S=Vt(),u=ee(t.location.href),P=(ye=e.env)!=null?ye:"live";if(!e.env)try{new URLSearchParams(t.location.search).has("test")&&(P="test")}catch{}let W=Be(document.referrer),m=e.enabled!==!1,h=null,v=0,p=[],f=null,E=new Set;e.onEvent&&E.add(e.onEvent);let k=[],b,w=!0;function q(){var _;let i=z(t);!i||i===b||(b=i,w=!i.ready,(_=i.ready)==null||_.then(()=>{b===i&&(w=!0,le())},()=>{b===i&&(w=!0)}))}function ce(){q();try{if(!b)return!1;let i=b.get();return!!b.denied&&b.denied("analytics")||!!i&&i.c.analytics===!1}catch{return!1}}function ue(i){E.forEach(_=>{try{_(i)}catch{}})}function G(i){try{if(q(),!b||!ie(t,s))return;se(t,s)?D()&&K(t.document,s)===null&&He(t,s,Ue()):i&&ze(t,s)}catch{}}function le(){if(G(!0),ce())p=[],k=[],M();else{if(w&&k.length>0){let i=k;k=[],i.forEach(ue)}p.length>0&&N()}}function D(){if(!m)return!1;let i=t.navigator;return i&&(i.globalPrivacyControl===!0||i.webdriver===!0)?!1:!ce()}function M(){f!==null&&clearTimeout(f),f=null}function Qe(){var i;f===null&&(f=setTimeout(()=>{f=null,N()},$t),(i=f.unref)==null||i.call(f))}function et(i){try{if(typeof fetch=="function"){fetch(d,{method:"POST",body:i,keepalive:!0,credentials:"omit",headers:{"Content-Type":"text/plain"}}).catch(()=>{});return}}catch{}try{let _=t.navigator;_&&typeof _.sendBeacon=="function"&&_.sendBeacon(d,new Blob([i],{type:"text/plain"}))}catch{}}function N(i=!1){try{if(M(),p.length===0)return;if(!D()){p=[];return}if(!w)return;G(w);let _=ae(t,s),a=_?p.map(x=>({...x,client_id:_})):p;p=[],Lt(s,a,i).forEach(x=>et(x.body))}catch{}}function pe(i,_,a){var be,ve,Ee,ke,Se,Ce,we,Te,xe,Ae,Pe;if(!D())return;let x=te(i,_);if(!x.ok){o("dropped",i,x.reason);return}let $=ee(t.location.href),Y={event_id:a!=null&&a.event_id&&We.test(a.event_id)?a.event_id:Rt(),event:i,ts:Date.now(),schema_version:1,env:P,source:g,channel:y,sdk:T,page_id:S,page_type:(a==null?void 0:a.page_type)!==void 0?a.page_type:h,host:(be=$==null?void 0:$.host)!=null?be:null,path:a!=null&&a.path?O(a.path.split(/[?#]/)[0]):(ve=$==null?void 0:$.path)!=null?ve:null,referrer_host:W,utm_source:(Ee=u==null?void 0:u.utm_source)!=null?Ee:null,utm_medium:(ke=u==null?void 0:u.utm_medium)!=null?ke:null,utm_campaign:(Se=u==null?void 0:u.utm_campaign)!=null?Se:null,utm_content:(Ce=u==null?void 0:u.utm_content)!=null?Ce:null,utm_term:(we=u==null?void 0:u.utm_term)!=null?we:null,ref_code:(Te=u==null?void 0:u.ref_code)!=null?Te:null,product_id:(xe=a==null?void 0:a.product_id)!=null?xe:null,variant_id:(Ae=a==null?void 0:a.variant_id)!=null?Ae:null,order_ref:(Pe=a==null?void 0:a.order_ref)!=null?Pe:null,props:x.props};a!=null&&a.event_id&&!We.test(a.event_id)&&o("ignored invalid event_id",i),g==="dashboard"&&e.visitorId&&(Y.visitor_id=e.visitorId);let he=De(Y);if(!he.ok){o("dropped",i,he.reason);return}let Z=Y;w?ue(Z):k.push(Z),p.push(Z),p.length>=It?N():Qe()}let de=()=>N(!0),fe=()=>{document.visibilityState==="hidden"&&N(!0)},U=()=>le();return t.addEventListener("pagehide",de),document.addEventListener("visibilitychange",fe),t.addEventListener("bitsnap:consent",U),t.addEventListener("bitsnap:consent:ready",U),q(),G(w),{track(i,_,a){try{pe(i,_,a)}catch{}},page(i,_){try{i!==void 0&&(h=i),pe("page_view",{landing:v++===0},_)}catch{}},clientId(i){try{return i!==void 0&&Q(i)!==s?null:D()?ae(t,s):null}catch{return null}},flush:()=>N(),setEnabled(i){m=!!i,m||(p=[],k=[],M())},configure(i){try{(i.env==="live"||i.env==="test")&&(P=i.env),typeof i.endpoint=="string"&&i.endpoint&&(d=c(i.endpoint))}catch{}},onEvent(i){return E.add(i),()=>void E.delete(i)},destroy(){p=[],k=[],M(),E.clear(),t.removeEventListener("pagehide",de),document.removeEventListener("visibilitychange",fe),t.removeEventListener("bitsnap:consent",U),t.removeEventListener("bitsnap:consent:ready",U)}}}var Dt=["storefront","dashboard","script"],Mt=["hosted","custom_domain","embed","panel"],Ut=/^[A-Za-z0-9_-]{22}$/;function Fe(e,t,n){return e.includes(t)?t:n}function Xe(e){try{if(typeof window=="undefined")return;let t=window.bitsnap;if(t!=null&&t.loaded)return t;let n=m=>(e==null?void 0:e.getAttribute(`data-${m}`))||void 0,r=n("env"),o=Fe(Dt,n("source"),"script"),s=Fe(Mt,n("channel"),"embed"),c=o==="dashboard",d=n("visitor-id"),g=n("project")?Ze({projectKey:n("project"),env:r==="live"||r==="test"?r:void 0,endpoint:n("endpoint"),source:o,channel:s,visitorId:c&&d&&Ut.test(d)?d:void 0}):B,y=n("route-template"),T=n("page-type"),S=Ye(T)?T:void 0,u;if(c){let m=S!=null?S:"app",h;u={track:(v,p,f)=>{var E;return g.track(v,p,{...f,page_type:(E=f==null?void 0:f.page_type)!=null?E:m})},page:(v,p)=>{var E,k,b;let f=O(((k=(E=p==null?void 0:p.path)!=null?E:y)!=null?k:Je(location.pathname)).split(/[?#]/)[0]);g.track("app_page_view",h&&h!==f?{route:f,previous_route:h}:{route:f},{...p,page_type:(b=v!=null?v:p==null?void 0:p.page_type)!=null?b:m,path:f}),h=f},loaded:!0}}else u={track:(m,h,v)=>g.track(m,h,v),page:(m,h)=>g.page(m!==void 0?m:S,h),loaded:!0};let P=m=>{try{let[h,...v]=Array.prototype.slice.call(m);(h==="track"||h==="page")&&u[h](...v)}catch{}},W=Array.isArray(t==null?void 0:t.q)?t.q:[];return window.bitsnap=u,W.forEach(P),u.q={push(...m){return m.forEach(P),0}},n("auto")!=="off"&&re(()=>u.page(S!=null?S:null)),u}catch{return}}var jt=new Set(["products","orders","customers","coupons","discounts","projects","users","members","invoices","returns","carts","subscriptions","pages","posts","courses","lessons","notifications","automations","webhooks","integrations","themes","newsletters","campaigns","forms","categories","collections","variants","tags","reviews","templates","payments","shipping","tests","partners"]),Ht=new Set(["new","create","add","edit","import","export","list","settings","stats","overview","all","archive","archived","drafts","preview","duplicate","bulk","search"]),zt=/^[A-Za-z0-9_]{3,24}$/;function Je(e){let t=O(e).split("/");return t.map((n,r)=>{var s;if(!n||n.startsWith(":"))return n;if(/\d/.test(n))return":id";let o=(s=t[r-1])==null?void 0:s.toLowerCase();return o&&jt.has(o)&&!Ht.has(n.toLowerCase())&&zt.test(n)?":id":n}).join("/")}typeof document!="undefined"&&Xe(document.currentScript);return st(Kt);})();
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/emems/web/bitsnap/bitsnap/bitsnap-react/dist/errors.js","../src/errors.ts"],"names":["require_errors","__commonJSMin"],"mappings":"AAAA,+HAAkC,ICAlCA,CAAAA,CAAAC,gCAAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,SAAA,UAAA,CAAA,CAAA,CAAA","file":"/home/emems/web/bitsnap/bitsnap/bitsnap-react/dist/errors.js","sourcesContent":[null,""]}
1
+ {"version":3,"sources":["/home/emems/.t3/worktrees/bitsnap-react/cart-payment-method/dist/errors.js","../src/errors.ts"],"names":["require_errors","__commonJSMin"],"mappings":"AAAA,+HAAkC,ICAlCA,CAAAA,CAAAC,gCAAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,SAAA,UAAA,CAAA,CAAA,CAAA","file":"/home/emems/.t3/worktrees/bitsnap-react/cart-payment-method/dist/errors.js","sourcesContent":[null,""]}