bitsnap-react 1.19.0 → 1.20.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.
- package/dist/BitsnapCart-V4S4EXYV.js +2 -0
- package/dist/BitsnapCart-V4S4EXYV.js.map +1 -0
- package/dist/BitsnapCart-Z6JFYNH2.mjs +2 -0
- package/dist/CartProvider-5NP4WACK.js +2 -0
- package/dist/CartProvider-5NP4WACK.js.map +1 -0
- package/dist/CartProvider-G7FQUPXL.mjs +2 -0
- package/dist/PanelModelFiles-EKQRLF46.js.map +1 -1
- package/dist/analytics.js +1 -1
- package/dist/analytics.js.map +1 -1
- package/dist/analytics.mjs +1 -1
- package/dist/catalog.js +1 -1
- package/dist/catalog.js.map +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/chat.d.mts +10 -9
- package/dist/chat.d.ts +10 -9
- package/dist/chat.js +1 -1
- package/dist/chat.js.map +1 -1
- package/dist/chat.mjs +1 -1
- package/dist/chat.mjs.map +1 -1
- package/dist/{chunk-WG54EHST.mjs → chunk-2G46TAUX.mjs} +2 -2
- package/dist/chunk-2G46TAUX.mjs.map +1 -0
- package/dist/{chunk-DOJICJCQ.js → chunk-4Y233NII.js} +2 -2
- package/dist/chunk-4Y233NII.js.map +1 -0
- package/dist/chunk-5M3OUOMU.mjs +5 -0
- package/dist/chunk-5M3OUOMU.mjs.map +1 -0
- package/dist/chunk-6Q3VGPSF.js.map +1 -1
- package/dist/{chunk-DDIEFKNP.mjs → chunk-A2ZDFN3J.mjs} +2 -2
- package/dist/{chunk-GJOGATP6.js → chunk-AQYHQY2Y.js} +2 -2
- package/dist/chunk-AQYHQY2Y.js.map +1 -0
- package/dist/{chunk-N523LFAM.mjs → chunk-BTERIY6N.mjs} +2 -2
- package/dist/{chunk-MWWEPEU2.js → chunk-C736F727.js} +2 -2
- package/dist/chunk-C736F727.js.map +1 -0
- package/dist/{chunk-LGPNJ5XE.js → chunk-EFN4OW2C.js} +2 -2
- package/dist/chunk-EFN4OW2C.js.map +1 -0
- package/dist/{chunk-GQ5OKU74.js → chunk-GHBRR665.js} +2 -2
- package/dist/chunk-GHBRR665.js.map +1 -0
- package/dist/chunk-HKRH6FI6.mjs +2 -0
- package/dist/chunk-HKRH6FI6.mjs.map +1 -0
- package/dist/chunk-HP3I6D2R.js +2 -0
- package/dist/chunk-HP3I6D2R.js.map +1 -0
- package/dist/{chunk-D2ASWUXM.js → chunk-IRZJIPUF.js} +2 -2
- package/dist/chunk-IRZJIPUF.js.map +1 -0
- package/dist/{chunk-5M6M7FAR.mjs → chunk-IXQCN7MR.mjs} +2 -2
- package/dist/chunk-IXX6SUMB.mjs +2 -0
- package/dist/chunk-IXX6SUMB.mjs.map +1 -0
- package/dist/chunk-JSDGZ4NY.js.map +1 -1
- package/dist/chunk-KDL35KEI.js +2 -0
- package/dist/chunk-KDL35KEI.js.map +1 -0
- package/dist/{chunk-OR566YJI.mjs → chunk-KO7ZERN5.mjs} +2 -2
- package/dist/chunk-KO7ZERN5.mjs.map +1 -0
- package/dist/chunk-KOYBZORL.js.map +1 -1
- package/dist/chunk-KZWCVKLU.js +5 -0
- package/dist/chunk-KZWCVKLU.js.map +1 -0
- package/dist/{chunk-SCEWYZUZ.mjs → chunk-LHNTSQYO.mjs} +2 -2
- package/dist/{chunk-5JRUPLXY.mjs → chunk-LHQEM3CU.mjs} +2 -2
- package/dist/chunk-MDAFPGPA.js.map +1 -1
- package/dist/chunk-Q337IQNA.js.map +1 -1
- package/dist/{chunk-YV2C276H.js → chunk-RJPQMDIQ.js} +2 -2
- package/dist/chunk-RJPQMDIQ.js.map +1 -0
- package/dist/{chunk-SSSF64M7.mjs → chunk-TW25G7XX.mjs} +2 -2
- package/dist/{chunk-SSSF64M7.mjs.map → chunk-TW25G7XX.mjs.map} +1 -1
- package/dist/{chunk-MMLBQHBM.mjs → chunk-URQBHNJK.mjs} +2 -2
- package/dist/chunk-W3RGQYPD.js.map +1 -1
- package/dist/{chunk-2FD2QP4Y.js → chunk-YPA6MMGJ.js} +2 -2
- package/dist/chunk-YPA6MMGJ.js.map +1 -0
- package/dist/chunk-Z3YOJ6NZ.js +2 -0
- package/dist/chunk-Z3YOJ6NZ.js.map +1 -0
- package/dist/consent.js.map +1 -1
- package/dist/course.d.mts +1 -1
- package/dist/course.d.ts +1 -1
- package/dist/course.js +1 -1
- package/dist/course.js.map +1 -1
- package/dist/course.mjs +1 -1
- package/dist/embed/analytics.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +37 -34
- package/dist/index.d.ts +37 -34
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/methods-33CWGKNA.mjs +2 -0
- package/dist/methods-4GB652MQ.js +2 -0
- package/dist/methods-4GB652MQ.js.map +1 -0
- package/dist/model-files-client-P4PORZJ6.js.map +1 -1
- package/dist/models.js.map +1 -1
- package/dist/returns.js +1 -1
- package/dist/returns.js.map +1 -1
- package/dist/returns.mjs +1 -1
- package/dist/{types-B-sjyZQs.d.mts → types-CjWyHunk.d.mts} +2 -0
- package/dist/{types-iRe6ix2y.d.ts → types-DfqzDP9k.d.ts} +2 -0
- package/dist/viewer3d.js.map +1 -1
- package/dist/viewer3d.mjs +2 -2
- package/dist/{widgets-BVOSj9fU.d.ts → widgets-Bsojw94g.d.ts} +10 -1
- package/dist/{widgets-BT2LN2Nq.d.mts → widgets-u7xMJbsY.d.mts} +10 -1
- package/package.json +2 -2
- package/dist/BitsnapCart-E72W5RRZ.mjs +0 -2
- package/dist/BitsnapCart-Q2HER6GU.js +0 -2
- package/dist/BitsnapCart-Q2HER6GU.js.map +0 -1
- package/dist/CartProvider-677CE2FI.js +0 -2
- package/dist/CartProvider-677CE2FI.js.map +0 -1
- package/dist/CartProvider-YPDOFSYC.mjs +0 -2
- package/dist/chunk-2FD2QP4Y.js.map +0 -1
- package/dist/chunk-AAC576BC.mjs +0 -5
- package/dist/chunk-AAC576BC.mjs.map +0 -1
- package/dist/chunk-AB37DWOK.mjs +0 -2
- package/dist/chunk-AB37DWOK.mjs.map +0 -1
- package/dist/chunk-BUYTK7KM.js +0 -2
- package/dist/chunk-BUYTK7KM.js.map +0 -1
- package/dist/chunk-D2ASWUXM.js.map +0 -1
- package/dist/chunk-DOJICJCQ.js.map +0 -1
- package/dist/chunk-GJOGATP6.js.map +0 -1
- package/dist/chunk-GQ5OKU74.js.map +0 -1
- package/dist/chunk-KHQEDQYF.js +0 -5
- package/dist/chunk-KHQEDQYF.js.map +0 -1
- package/dist/chunk-LGPNJ5XE.js.map +0 -1
- package/dist/chunk-MWWEPEU2.js.map +0 -1
- package/dist/chunk-NWXZ45TV.js +0 -2
- package/dist/chunk-NWXZ45TV.js.map +0 -1
- package/dist/chunk-OR566YJI.mjs.map +0 -1
- package/dist/chunk-WG54EHST.mjs.map +0 -1
- package/dist/chunk-YV2C276H.js.map +0 -1
- package/dist/methods-64D5DD6K.js +0 -2
- package/dist/methods-64D5DD6K.js.map +0 -1
- package/dist/methods-NQA3DFLE.mjs +0 -2
- /package/dist/{BitsnapCart-E72W5RRZ.mjs.map → BitsnapCart-Z6JFYNH2.mjs.map} +0 -0
- /package/dist/{CartProvider-YPDOFSYC.mjs.map → CartProvider-G7FQUPXL.mjs.map} +0 -0
- /package/dist/{chunk-DDIEFKNP.mjs.map → chunk-A2ZDFN3J.mjs.map} +0 -0
- /package/dist/{chunk-N523LFAM.mjs.map → chunk-BTERIY6N.mjs.map} +0 -0
- /package/dist/{chunk-5M6M7FAR.mjs.map → chunk-IXQCN7MR.mjs.map} +0 -0
- /package/dist/{chunk-SCEWYZUZ.mjs.map → chunk-LHNTSQYO.mjs.map} +0 -0
- /package/dist/{chunk-5JRUPLXY.mjs.map → chunk-LHQEM3CU.mjs.map} +0 -0
- /package/dist/{chunk-MMLBQHBM.mjs.map → chunk-URQBHNJK.mjs.map} +0 -0
- /package/dist/{methods-NQA3DFLE.mjs.map → methods-33CWGKNA.mjs.map} +0 -0
package/dist/course.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkNWXZ45TVjs = require('./chunk-NWXZ45TV.js');var _chunk2FD2QP4Yjs = require('./chunk-2FD2QP4Y.js');var _chunkMDAFPGPAjs = require('./chunk-MDAFPGPA.js');require('./chunk-LGPNJ5XE.js');var _chunkDOJICJCQjs = require('./chunk-DOJICJCQ.js');var _chunkD2ASWUXMjs = require('./chunk-D2ASWUXM.js');require('./chunk-W3RGQYPD.js');var _chunkQ337IQNAjs = require('./chunk-Q337IQNA.js');require('./chunk-JSDGZ4NY.js');var _lucidereact = require('lucide-react');var _react = require('react');function lt(e){let t={},s=_optionalChain([e, 'optionalAccess', _2 => _2.brand, 'optionalAccess', _3 => _3.trim, 'call', _4 => _4()]),o=_optionalChain([e, 'optionalAccess', _5 => _5.brandDark, 'optionalAccess', _6 => _6.trim, 'call', _7 => _7()])||s;if(s){t["--course-accent"]=s;let n=_chunk2FD2QP4Yjs.m.call(void 0, s);n&&(t["--course-accent-fg"]=n)}if(o){t["--course-accent-dark"]=o;let n=_chunk2FD2QP4Yjs.m.call(void 0, o);n&&(t["--course-accent-dark-fg"]=n)}return t}var ct=_react.createContext.call(void 0, void 0),ut=ct.Provider;function C(){let e=_react.useContext.call(void 0, ct);if(e==null)throw new Error("Course components have to be rendered inside PanelCourse");return e}function F(){let{analytics:e,preview:t}=C();return _react.useCallback.call(void 0, (s,o)=>{t||_optionalChain([e, 'optionalAccess', _8 => _8.courseId])==null||e.instrument.track(s,{...o,course_id:e.courseId})},[e,t])}function xe(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 xe(e).find(s=>s.id===t)}function Ee(e,t){let s=xe(e),o=s.findIndex(n=>n.id===t);return o<0?{}:{prev:s[o-1],next:s[o+1]}}function dt(e,t){let{next:s}=Ee(e,t);return s!=null&&s.kind==="lesson"&&!s.locked?s:void 0}function $t(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 pt(e,t){let s=e.sections.map(n=>({...n,items:n.items.map(a=>a.id===t&&a.kind==="lesson"?{...a,completed:!0}:a)})),o=$t({sections:s});return{...e,sections:s,totalLessons:o.total,completedLessons:o.completed,progressPercent:o.percent}}function mt(e,t){return le(e,t)!=null?t:_optionalChain([le, 'call', _9 => _9(e,e.resumeItemId), 'optionalAccess', _10 => _10.locked])===!1?e.resumeItemId:_optionalChain([xe, 'call', _11 => _11(e), 'access', _12 => _12.find, 'call', _13 => _13(s=>!s.locked), 'optionalAccess', _14 => _14.id])}function I(e,t){return e.replace(/\{(\w+)\}/g,(s,o)=>o in t?String(t[o]):s)}function gt(e,t){return t>0&&e/t>=.8}function bt(e,t){return e<5||t>0&&e>=t-5?0:Math.floor(e)}function Ge(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 ft(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 xt(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 es(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 At(e,t){return e.filter(s=>!es(s,t[s.id])).length}function yt(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 Ue(e,t){let s=[],o=/\{\{\s*([^{}\s]+)\s*\}\}/g,n=0;for(let a of e.matchAll(o)){let r=a[1];t.includes(r)&&(a.index>n&&s.push({type:"text",text:e.slice(n,a.index)}),s.push({type:"blank",id:r}),n=a.index+a[0].length)}return n<e.length&&s.push({type:"text",text:e.slice(n)}),s}function St(e,t){let{config:s}=e;if(t==null||t.type!==s.type)return"";let o=(n,a)=>_nullishCoalesce(_optionalChain([n, 'access', _15 => _15.find, 'call', _16 => _16(r=>r.id===a), 'optionalAccess', _17 => _17.label]), () => (a));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"?Ue(s.template,s.blanks).map(n=>n.type==="text"?n.text:`[${_nullishCoalesce(t.values[n.id], () => (""))}]`).join(""):""}var _jsxruntime = require('react/jsx-runtime');function vt({item:e}){return e.locked?_jsxruntime.jsx.call(void 0, _lucidereact.Lock,{className:"size-4 text-neutral-500","aria-hidden":!0}):e.completed?_jsxruntime.jsx.call(void 0, _lucidereact.CheckCircle2,{className:"size-4 text-emerald-600 dark:text-emerald-400","aria-hidden":!0}):e.kind==="test"?_jsxruntime.jsx.call(void 0, _lucidereact.ClipboardCheck,{className:"size-4 text-neutral-500","aria-hidden":!0}):e.durationSeconds>0?_jsxruntime.jsx.call(void 0, _lucidereact.PlayCircle,{className:"size-4 text-neutral-500","aria-hidden":!0}):_jsxruntime.jsx.call(void 0, _lucidereact.FileText,{className:"size-4 text-neutral-500","aria-hidden":!0})}function cs({item:e,selected:t,variant:s,onSelect:o}){let{texts:n}=C(),a=e.lockReason?I(n.lockedByTest,{test:e.lockReason.gatingTestTitle}):n.locked,r=e.locked?a:e.completed?n.completed:void 0;return _jsxruntime.jsx.call(void 0, "li",{children:_jsxruntime.jsxs.call(void 0, "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?a:void 0,onClick:()=>{e.locked||o(e)},className:_chunkDOJICJCQjs.g.call(void 0, "flex min-h-11 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"&&_jsxruntime.jsxs.call(void 0, "span",{className:"relative aspect-video w-24 shrink-0 overflow-hidden rounded bg-neutral-200 dark:bg-neutral-800",children:[e.thumbnailUrl&&_jsxruntime.jsx.call(void 0, "img",{src:e.thumbnailUrl,alt:"",loading:"lazy",draggable:!1,className:"size-full object-cover"}),e.durationSeconds>0&&_jsxruntime.jsx.call(void 0, "span",{className:"absolute right-1 bottom-1 rounded bg-black/75 px-1 text-[10px] text-white",children:Ge(e.durationSeconds)})]}),(s==="modules"||e.kind==="test")&&_jsxruntime.jsx.call(void 0, "span",{className:"mt-0.5 shrink-0",children:_jsxruntime.jsx.call(void 0, vt,{item:e})}),_jsxruntime.jsxs.call(void 0, "span",{className:"min-w-0 flex-1",children:[_jsxruntime.jsx.call(void 0, "span",{className:"block font-medium break-words",children:e.title}),_jsxruntime.jsxs.call(void 0, "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"&&_jsxruntime.jsx.call(void 0, "span",{children:n.testBadge}),e.isFree&&!e.locked&&_jsxruntime.jsx.call(void 0, "span",{children:n.free}),s==="modules"&&e.durationSeconds>0&&_jsxruntime.jsx.call(void 0, "span",{children:Ge(e.durationSeconds)}),r&&_jsxruntime.jsx.call(void 0, "span",{children:r})]})]}),s==="playlist"&&e.kind==="lesson"&&_jsxruntime.jsx.call(void 0, "span",{className:"mt-0.5 shrink-0",children:_jsxruntime.jsx.call(void 0, vt,{item:e})})]})})}function Ct({course:e,selectedId:t,onSelect:s,variant:o,className:n}){let{texts:a}=C(),r=_react.useId.call(void 0, ),i=_react.useRef.call(void 0, null),u=_optionalChain([e, 'access', _18 => _18.sections, 'access', _19 => _19.find, 'call', _20 => _20(l=>l.items.some(p=>p.id===t)), 'optionalAccess', _21 => _21.id]),[b,A]=_react.useState.call(void 0, ()=>new Set(u?[u]:[]));_react.useEffect.call(void 0, ()=>{u&&A(l=>new Set([...l,u]))},[u]),_react.useEffect.call(void 0, ()=>{let l=_optionalChain([i, 'access', _22 => _22.current, 'optionalAccess', _23 => _23.querySelector, 'call', _24 => _24("[aria-current]")]);l&&!l.closest("[hidden]")&&_optionalChain([l, 'access', _25 => _25.scrollIntoView, 'optionalCall', _26 => _26({block:"nearest"})])},[t,b]);let V=l=>_jsxruntime.jsx.call(void 0, "ul",{className:"flex flex-col gap-1",children:l.map(p=>_jsxruntime.jsx.call(void 0, cs,{item:p,selected:p.id===t,variant:o,onSelect:s},p.id))});return _jsxruntime.jsxs.call(void 0, "nav",{ref:i,"aria-label":a.contents,className:_chunkDOJICJCQjs.g.call(void 0, "space-y-4",n),children:[e.sections.map(l=>{let p=l.items.filter(d=>d.kind==="lesson"),f=p.filter(d=>d.completed).length;return _jsxruntime.jsxs.call(void 0, "section",{"data-section-id":l.id,children:[_jsxruntime.jsx.call(void 0, "h3",{className:"mb-1 text-sm font-semibold",children:_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:"flex min-h-11 w-full items-center justify-between gap-2 rounded-lg px-2 text-left focus-visible:outline focus-visible:outline-2","aria-expanded":b.has(l.id),"aria-controls":`${r}-${l.id}`,onClick:()=>A(d=>{let N=new Set(d);return N.has(l.id)?N.delete(l.id):N.add(l.id),N}),children:[_jsxruntime.jsx.call(void 0, "span",{className:"break-words",children:l.title}),p.length>0&&_jsxruntime.jsxs.call(void 0, "span",{className:"shrink-0 text-xs font-normal text-neutral-500 dark:text-neutral-400",children:[f,"/",p.length]})]})}),_jsxruntime.jsx.call(void 0, "div",{id:`${r}-${l.id}`,hidden:!b.has(l.id),children:V(l.items)})]},l.id)}),e.finalItems.length>0&&_jsxruntime.jsx.call(void 0, "section",{"data-section-id":"final",children:V(e.finalItems)})]})}var _connect = require('@connectrpc/connect');var _codegenv2 = require('@bufbuild/protobuf/codegenv2');var _wkt = require('@bufbuild/protobuf/wkt');var ms=_codegenv2.fileDesc.call(void 0, "CiFwdWJsaWMvdjEvdXNlcl9wYW5lbF9jb3Vyc2UucHJvdG8SDXB1YmxpY19hcGkudjEiRAoPUGFuZWxMb2NrUmVhc29uEhYKDmdhdGluZ190ZXN0X2lkGAEgASgJEhkKEWdhdGluZ190ZXN0X3RpdGxlGAIgASgJIrQCCg9QYW5lbENvdXJzZUl0ZW0SCgoCaWQYASABKAkSMAoEa2luZBgCIAEoDjIiLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VJdGVtS2luZBINCgV0aXRsZRgDIAEoCRIPCgdpc19mcmVlGAQgASgIEg4KBmxvY2tlZBgFIAEoCBI4Cgtsb2NrX3JlYXNvbhgGIAEoCzIeLnB1YmxpY19hcGkudjEuUGFuZWxMb2NrUmVhc29uSACIAQESEQoJY29tcGxldGVkGAcgASgIEhgKEGR1cmF0aW9uX3NlY29uZHMYCCABKAUSGgoNdGh1bWJuYWlsX3VybBgJIAEoCUgBiAEBEg4KBmdhdGluZxgKIAEoCEIOCgxfbG9ja19yZWFzb25CEAoOX3RodW1ibmFpbF91cmwicwoSUGFuZWxDb3Vyc2VTZWN0aW9uEgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEi0KBWl0ZW1zGAQgAygLMh4ucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUl0ZW0i3wIKC1BhbmVsQ291cnNlEgoKAmlkGAEgASgJEiwKBHR5cGUYAiABKA4yHi5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlVHlwZRINCgV0aXRsZRgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCRIWCgljb3Zlcl91cmwYBSABKAlIAIgBARIVCg10b3RhbF9sZXNzb25zGAYgASgFEhkKEWNvbXBsZXRlZF9sZXNzb25zGAcgASgFEhgKEHByb2dyZXNzX3BlcmNlbnQYCCABKAUSMwoIc2VjdGlvbnMYCSADKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlU2VjdGlvbhIzCgtmaW5hbF9pdGVtcxgKIAMoCzIeLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VJdGVtEhYKDnJlc3VtZV9pdGVtX2lkGAsgASgJQgwKCl9jb3Zlcl91cmwiRAoZVXNlclBhbmVsR2V0Q291cnNlUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIosBChpVc2VyUGFuZWxHZXRDb3Vyc2VSZXNwb25zZRItCgdzdWNjZXNzGAEgASgLMhoucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAQggKBnJlc3VsdCJfCgpQYW5lbFZpZGVvEg8KB2hsc191cmwYASABKAkSFwoKcG9zdGVyX3VybBgCIAEoCUgAiAEBEhgKEGR1cmF0aW9uX3NlY29uZHMYAyABKAVCDQoLX3Bvc3Rlcl91cmwiRgoPUGFuZWxBdHRhY2htZW50EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEc2l6ZRgDIAEoAxILCgN1cmwYBCABKAkiTAoMUGFuZWxJdGVtUmVmEgoKAmlkGAEgASgJEjAKBGtpbmQYAiABKA4yIi5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlSXRlbUtpbmQigQQKC1BhbmVsTGVzc29uEgoKAmlkGAEgASgJEhIKCnNlY3Rpb25faWQYAiABKAkSDQoFdGl0bGUYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSFAoMY29udGVudF9odG1sGAUgASgJEi0KBXZpZGVvGAYgASgLMhkucHVibGljX2FwaS52MS5QYW5lbFZpZGVvSACIAQESMwoLYXR0YWNobWVudHMYByADKAsyHi5wdWJsaWNfYXBpLnYxLlBhbmVsQXR0YWNobWVudBIuCgRwcmV2GAggASgLMhsucHVibGljX2FwaS52MS5QYW5lbEl0ZW1SZWZIAYgBARIuCgRuZXh0GAkgASgLMhsucHVibGljX2FwaS52MS5QYW5lbEl0ZW1SZWZIAogBARIRCgljb21wbGV0ZWQYCiABKAgSGAoQcG9zaXRpb25fc2Vjb25kcxgLIAEoBRIRCglteV9yYXRpbmcYDCABKAUSFgoOYXZlcmFnZV9yYXRpbmcYDSABKAISFAoMcmF0aW5nX2NvdW50GA4gASgFEjcKDnVybHNfZXhwaXJlX2F0GA8gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBQggKBl92aWRlb0IHCgVfcHJldkIHCgVfbmV4dEIRCg9fdXJsc19leHBpcmVfYXQiVwoZVXNlclBhbmVsR2V0TGVzc29uUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhEKCWxlc3Nvbl9pZBgDIAEoCSKLAQoaVXNlclBhbmVsR2V0TGVzc29uUmVzcG9uc2USLQoHc3VjY2VzcxgBIAEoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25IABI0CgdmYWlsdXJlGAIgASgOMiEucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUZhaWx1cmVIAEIICgZyZXN1bHQipwEKIlVzZXJQYW5lbFNhdmVMZXNzb25Qcm9ncmVzc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIRCglsZXNzb25faWQYAyABKAkSEQoJY29tcGxldGVkGAQgASgIEhgKEHBvc2l0aW9uX3NlY29uZHMYBSABKAUSGAoQZHVyYXRpb25fc2Vjb25kcxgGIAEoBSKFAgojVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2USTAoHc3VjY2VzcxgBIAEoCzI5LnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaUAoGUmVzdWx0EhEKCWNvbXBsZXRlZBgBIAEoCBIZChFjb21wbGV0ZWRfbGVzc29ucxgCIAEoBRIYChBwcm9ncmVzc19wZXJjZW50GAMgASgFQggKBnJlc3VsdCIoCgtQYW5lbENob2ljZRIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCSJPCg5QYW5lbE1jcUNvbmZpZxIrCgdjaG9pY2VzGAEgAygLMhoucHVibGljX2FwaS52MS5QYW5lbENob2ljZRIQCghtdWx0aXBsZRgCIAEoCCKCAQoTUGFuZWxUb2RvbGlzdENvbmZpZxI2CgVzdGVwcxgBIAMoCzInLnB1YmxpY19hcGkudjEuUGFuZWxUb2RvbGlzdENvbmZpZy5TdGVwGjMKBFN0ZXASCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSEAoIcmVxdWlyZWQYAyABKAgiNgoSUGFuZWxGaWxsR2FwQ29uZmlnEhAKCHRlbXBsYXRlGAEgASgJEg4KBmJsYW5rcxgCIAMoCSJBChRQYW5lbFNvcnRPcmRlckNvbmZpZxIpCgVpdGVtcxgBIAMoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxDaG9pY2UioQIKEVBhbmVsVGVzdFF1ZXN0aW9uEgoKAmlkGAEgASgJEg4KBnByb21wdBgCIAEoCRIOCgZwb2ludHMYAyABKAUSLAoDbWNxGAogASgLMh0ucHVibGljX2FwaS52MS5QYW5lbE1jcUNvbmZpZ0gAEjYKCHRvZG9saXN0GAsgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRvZG9saXN0Q29uZmlnSAASNQoIZmlsbF9nYXAYDCABKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsRmlsbEdhcENvbmZpZ0gAEjkKCnNvcnRfb3JkZXIYDSABKAsyIy5wdWJsaWNfYXBpLnYxLlBhbmVsU29ydE9yZGVyQ29uZmlnSABCCAoGY29uZmlnIqsCCglQYW5lbFRlc3QSCgoCaWQYASABKAkSDQoFdGl0bGUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDgoGZ2F0aW5nGAQgASgIEh4KFnBhc3NfdGhyZXNob2xkX3BlcmNlbnQYBSABKAUSGAoQYXR0ZW1wdHNfYWxsb3dlZBgGIAEoBRIaCg1hdHRlbXB0c19sZWZ0GAcgASgFSACIAQESFQoNYXR0ZW1wdF9jb3VudBgIIAEoBRIaChJiZXN0X3Njb3JlX3BlcmNlbnQYCSABKAUSDgoGcGFzc2VkGAogASgIEjMKCXF1ZXN0aW9ucxgLIAMoCzIgLnB1YmxpY19hcGkudjEuUGFuZWxUZXN0UXVlc3Rpb25CEAoOX2F0dGVtcHRzX2xlZnQiUwoXVXNlclBhbmVsR2V0VGVzdFJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIPCgd0ZXN0X2lkGAMgASgJIocBChhVc2VyUGFuZWxHZXRUZXN0UmVzcG9uc2USKwoHc3VjY2VzcxgBIAEoCzIYLnB1YmxpY19hcGkudjEuUGFuZWxUZXN0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSABCCAoGcmVzdWx0IiYKDlBhbmVsTWNxQW5zd2VyEhQKDHNlbGVjdGVkX2lkcxgBIAMoCSIqChNQYW5lbFRvZG9saXN0QW5zd2VyEhMKC2NoZWNrZWRfaWRzGAEgAygJIoIBChJQYW5lbEZpbGxHYXBBbnN3ZXISPQoGdmFsdWVzGAEgAygLMi0ucHVibGljX2FwaS52MS5QYW5lbEZpbGxHYXBBbnN3ZXIuVmFsdWVzRW50cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIrChRQYW5lbFNvcnRPcmRlckFuc3dlchITCgtvcmRlcmVkX2lkcxgBIAMoCSKDAgoLUGFuZWxBbnN3ZXISEwoLcXVlc3Rpb25faWQYASABKAkSLAoDbWNxGAogASgLMh0ucHVibGljX2FwaS52MS5QYW5lbE1jcUFuc3dlckgAEjYKCHRvZG9saXN0GAsgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRvZG9saXN0QW5zd2VySAASNQoIZmlsbF9nYXAYDCABKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsRmlsbEdhcEFuc3dlckgAEjkKCnNvcnRfb3JkZXIYDSABKAsyIy5wdWJsaWNfYXBpLnYxLlBhbmVsU29ydE9yZGVyQW5zd2VySABCBwoFdmFsdWUijQEKE1BhbmVsVGVzdFN1Ym1pc3Npb24SCgoCaWQYASABKAkSFQoNc2NvcmVfcGVyY2VudBgCIAEoBRIOCgZwYXNzZWQYAyABKAgSEwoLZHVyYXRpb25fbXMYBCABKAMSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAilwEKE1BhbmVsUXVlc3Rpb25SZXN1bHQSEwoLcXVlc3Rpb25faWQYASABKAkSDwoHY29ycmVjdBgCIAEoCBIOCgZwb2ludHMYAyABKAUSNwoOY29ycmVjdF9hbnN3ZXIYBCABKAsyGi5wdWJsaWNfYXBpLnYxLlBhbmVsQW5zd2VySACIAQFCEQoPX2NvcnJlY3RfYW5zd2VyIpgBChpVc2VyUGFuZWxTdWJtaXRUZXN0UmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEg8KB3Rlc3RfaWQYAyABKAkSKwoHYW5zd2VycxgEIAMoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxBbnN3ZXISEwoLZHVyYXRpb25fbXMYBSABKAMiyQIKG1VzZXJQYW5lbFN1Ym1pdFRlc3RSZXNwb25zZRJECgdzdWNjZXNzGAEgASgLMjEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxTdWJtaXRUZXN0UmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaowEKBlJlc3VsdBI2CgpzdWJtaXNzaW9uGAEgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRlc3RTdWJtaXNzaW9uEjMKB3Jlc3VsdHMYAiADKAsyIi5wdWJsaWNfYXBpLnYxLlBhbmVsUXVlc3Rpb25SZXN1bHQSGgoNYXR0ZW1wdHNfbGVmdBgDIAEoBUgAiAEBQhAKDl9hdHRlbXB0c19sZWZ0QggKBnJlc3VsdCJfCiNVc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEg8KB3Rlc3RfaWQYAyABKAkiqwIKJFVzZXJQYW5lbExpc3RUZXN0U3VibWlzc2lvbnNSZXNwb25zZRJNCgdzdWNjZXNzGAEgASgLMjoucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAadAoGUmVzdWx0EjcKC3N1Ym1pc3Npb25zGAEgAygLMiIucHVibGljX2FwaS52MS5QYW5lbFRlc3RTdWJtaXNzaW9uEhoKEmJlc3Rfc2NvcmVfcGVyY2VudBgCIAEoBRIVCg1hdHRlbXB0X2NvdW50GAMgASgFQggKBnJlc3VsdCJWChNQYW5lbFF1ZXN0aW9uQW5zd2VyEg8KB2NvbnRlbnQYASABKAkSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAizAEKE1BhbmVsTGVzc29uUXVlc3Rpb24SCgoCaWQYASABKAkSDwoHY29udGVudBgCIAEoCRITCgthdXRob3JfbmFtZRgDIAEoCRIPCgdpc19taW5lGAQgASgIEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjcKBmFuc3dlchgGIAEoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxRdWVzdGlvbkFuc3dlckgAiAEBQgkKB19hbnN3ZXIiYQojVXNlclBhbmVsTGlzdExlc3NvblF1ZXN0aW9uc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIRCglsZXNzb25faWQYAyABKAki9gEKJFVzZXJQYW5lbExpc3RMZXNzb25RdWVzdGlvbnNSZXNwb25zZRJNCgdzdWNjZXNzGAEgASgLMjoucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0TGVzc29uUXVlc3Rpb25zUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaPwoGUmVzdWx0EjUKCXF1ZXN0aW9ucxgBIAMoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25RdWVzdGlvbkIICgZyZXN1bHQicAohVXNlclBhbmVsQXNrTGVzc29uUXVlc3Rpb25SZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIRCglhY2Nlc3NfaWQYAiABKAkSEQoJbGVzc29uX2lkGAMgASgJEg8KB2NvbnRlbnQYBCABKAkimwEKIlVzZXJQYW5lbEFza0xlc3NvblF1ZXN0aW9uUmVzcG9uc2USNQoHc3VjY2VzcxgBIAEoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25RdWVzdGlvbkgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAQggKBnJlc3VsdCJ4ChpVc2VyUGFuZWxSYXRlTGVzc29uUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhEKCWxlc3Nvbl9pZBgDIAEoCRINCgVzY29yZRgEIAEoBRIPCgdjb21tZW50GAUgASgJIu4BChtVc2VyUGFuZWxSYXRlTGVzc29uUmVzcG9uc2USRAoHc3VjY2VzcxgBIAEoCzIxLnB1YmxpY19hcGkudjEuVXNlclBhbmVsUmF0ZUxlc3NvblJlc3BvbnNlLlJlc3VsdEgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAGkkKBlJlc3VsdBIRCglteV9yYXRpbmcYASABKAUSFgoOYXZlcmFnZV9yYXRpbmcYAiABKAISFAoMcmF0aW5nX2NvdW50GAMgASgFQggKBnJlc3VsdCr6AgoSUGFuZWxDb3Vyc2VGYWlsdXJlEiAKHFBBTkVMX0NPVVJTRV9GQUlMVVJFX1VOS05PV04QABIlCiFQQU5FTF9DT1VSU0VfRkFJTFVSRV9VTkFVVEhPUklaRUQQARIpCiVQQU5FTF9DT1VSU0VfRkFJTFVSRV9DT1VSU0VfTk9UX0ZPVU5EEAISJwojUEFORUxfQ09VUlNFX0ZBSUxVUkVfSVRFTV9OT1RfRk9VTkQQAxIkCiBQQU5FTF9DT1VSU0VfRkFJTFVSRV9JVEVNX0xPQ0tFRBAEEikKJVBBTkVMX0NPVVJTRV9GQUlMVVJFX05PX0FUVEVNUFRTX0xFRlQQBRIpCiVQQU5FTF9DT1VSU0VfRkFJTFVSRV9JTlZBTElEX0FSR1VNRU5UEAYSJQohUEFORUxfQ09VUlNFX0ZBSUxVUkVfUkFURV9MSU1JVEVEEAcSJAogUEFORUxfQ09VUlNFX0ZBSUxVUkVfVU5BVkFJTEFCTEUQCCptCg9QYW5lbENvdXJzZVR5cGUSHQoZUEFORUxfQ09VUlNFX1RZUEVfVU5LTk9XThAAEh4KGlBBTkVMX0NPVVJTRV9UWVBFX1NUQU5EQVJEEAESGwoXUEFORUxfQ09VUlNFX1RZUEVfVklERU8QAip9ChNQYW5lbENvdXJzZUl0ZW1LaW5kEiIKHlBBTkVMX0NPVVJTRV9JVEVNX0tJTkRfVU5LTk9XThAAEiEKHVBBTkVMX0NPVVJTRV9JVEVNX0tJTkRfTEVTU09OEAESHwobUEFORUxfQ09VUlNFX0lURU1fS0lORF9URVNUEAIy+QcKFlVzZXJQYW5lbENvdXJzZVNlcnZpY2USYAoJR2V0Q291cnNlEigucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRDb3Vyc2VSZXF1ZXN0GikucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRDb3Vyc2VSZXNwb25zZRJgCglHZXRMZXNzb24SKC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldExlc3NvblJlcXVlc3QaKS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldExlc3NvblJlc3BvbnNlEnsKElNhdmVMZXNzb25Qcm9ncmVzcxIxLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVxdWVzdBoyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2USWgoHR2V0VGVzdBImLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0VGVzdFJlcXVlc3QaJy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFRlc3RSZXNwb25zZRJjCgpTdWJtaXRUZXN0EikucHVibGljX2FwaS52MS5Vc2VyUGFuZWxTdWJtaXRUZXN0UmVxdWVzdBoqLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU3VibWl0VGVzdFJlc3BvbnNlEn4KE0xpc3RUZXN0U3VibWlzc2lvbnMSMi5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExpc3RUZXN0U3VibWlzc2lvbnNSZXF1ZXN0GjMucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVzcG9uc2USfgoTTGlzdExlc3NvblF1ZXN0aW9ucxIyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTGlzdExlc3NvblF1ZXN0aW9uc1JlcXVlc3QaMy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExpc3RMZXNzb25RdWVzdGlvbnNSZXNwb25zZRJ4ChFBc2tMZXNzb25RdWVzdGlvbhIwLnB1YmxpY19hcGkudjEuVXNlclBhbmVsQXNrTGVzc29uUXVlc3Rpb25SZXF1ZXN0GjEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxBc2tMZXNzb25RdWVzdGlvblJlc3BvbnNlEmMKClJhdGVMZXNzb24SKS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFJhdGVMZXNzb25SZXF1ZXN0GioucHVibGljX2FwaS52MS5Vc2VyUGFuZWxSYXRlTGVzc29uUmVzcG9uc2ViBnByb3RvMw",[_wkt.file_google_protobuf_timestamp]);var Rt=_codegenv2.serviceDesc.call(void 0, ms,0);var B=class extends Error{constructor(t,s){super(_nullishCoalesce(s, () => (t))),this.name="CourseError",this.code=t}};var bs={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 fs(e){return _nullishCoalesce(bs[e], () => ("unknown"))}function xs(e){if(e instanceof B)return e;let t=_connect.ConnectError.from(e);switch(t.code){case _connect.Code.Unauthenticated:case _connect.Code.PermissionDenied:return new B("unauthorized",t.rawMessage);case _connect.Code.NotFound:return new B("course_not_found",t.rawMessage);case _connect.Code.ResourceExhausted:return new B("rate_limited",t.rawMessage);case _connect.Code.Unavailable:case _connect.Code.DeadlineExceeded:return new B("unavailable",t.rawMessage);default:return e}}function K(e){let{result:t}=e;if(t.case==="success")return t.value;throw t.case==="failure"?new B(fs(t.value)):new B("unknown","empty response")}function kt(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 As(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(kt)})),finalItems:e.finalItems.map(kt),resumeItemId:e.resumeItemId}}function Nt(e){return e==null?void 0:{id:e.id,kind:e.kind===2?"test":"lesson"}}function ys(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:Nt(e.prev),next:Nt(e.next),completed:e.completed,positionSeconds:e.positionSeconds,myRating:e.myRating,averageRating:e.averageRating,ratingCount:e.ratingCount,urlsExpireAt:e.urlsExpireAt!=null?_wkt.timestampDate.call(void 0, e.urlsExpireAt):void 0}}function Ss(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 hs(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(Ss).filter(t=>t!=null)}}function Pt(e){return{id:e.id,scorePercent:e.scorePercent,passed:e.passed,durationMs:Number(e.durationMs),createdAt:e.createdAt!=null?_wkt.timestampDate.call(void 0, e.createdAt):void 0}}function vs(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 Cs(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 Vt(e){return{id:e.id,content:e.content,authorName:e.authorName,isMine:e.isMine,createdAt:e.createdAt!=null?_wkt.timestampDate.call(void 0, e.createdAt):void 0,answer:e.answer!=null?{content:e.answer.content,createdAt:e.answer.createdAt!=null?_wkt.timestampDate.call(void 0, e.answer.createdAt):void 0}:void 0}}function Le(e,t){let s=()=>({accessId:t.accessId,accessToken:typeof t.accessToken=="function"?_nullishCoalesce(t.accessToken(), () => ("")):t.accessToken});async function o(n){try{return await n()}catch(a){throw xs(a)}}return{getCourse:()=>o(async()=>As(K(await e.getCourse(s())))),getLesson:n=>o(async()=>ys(K(await e.getLesson({...s(),lessonId:n})))),saveProgress:n=>o(async()=>{let a=K(await e.saveLessonProgress({...s(),...n}));return{completed:a.completed,completedLessons:a.completedLessons,progressPercent:a.progressPercent}}),getTest:n=>o(async()=>hs(K(await e.getTest({...s(),testId:n})))),submitTest:(n,a,r)=>o(async()=>{let i=K(await e.submitTest({...s(),testId:n,durationMs:BigInt(Math.max(0,Math.round(r))),answers:Object.entries(a).map(([u,b])=>Cs(u,b))}));if(i.submission==null)throw new B("unknown","missing submission");return{submission:Pt(i.submission),results:i.results.map(u=>({questionId:u.questionId,correct:u.correct,points:u.points,correctAnswer:u.correctAnswer!=null?vs(u.correctAnswer):void 0})),attemptsLeft:i.attemptsLeft}}),listSubmissions:n=>o(async()=>{let a=K(await e.listTestSubmissions({...s(),testId:n}));return{submissions:a.submissions.map(Pt),bestScorePercent:a.bestScorePercent,attemptCount:a.attemptCount}}),listQuestions:n=>o(async()=>K(await e.listLessonQuestions({...s(),lessonId:n})).questions.map(Vt)),askQuestion:(n,a)=>o(async()=>Vt(K(await e.askLessonQuestion({...s(),lessonId:n,content:a})))),rate:(n,a,r="")=>o(async()=>{let i=K(await e.rateLesson({...s(),lessonId:n,score:a,comment:r}));return{myRating:i.myRating,averageRating:i.averageRating,ratingCount:i.ratingCount}})}}function Be(e){let t=_nullishCoalesce(e.host, () => (_chunk2FD2QP4Yjs.h.call(void 0, ))),s=_connect.createClient.call(void 0, Rt,_chunk2FD2QP4Yjs.i.call(void 0, t));return Le(s,{accessId:e.accessId,accessToken:_nullishCoalesce(e.accessToken, () => ((()=>{let{projectID:o,host:n}=_chunkMDAFPGPAjs.b.call(void 0, );return _chunkMDAFPGPAjs.i.call(void 0, o,n)})))})}function Tt({value:e,onSelect:t,disabled:s}){let{texts:o}=C(),[n,a]=_react.useState.call(void 0, 0),r=n||e;return _jsxruntime.jsx.call(void 0, "div",{className:"flex items-center gap-1",role:t?"radiogroup":"img","aria-label":I(o.rateStar,{n:Math.round(e)}),children:[1,2,3,4,5].map(i=>{let u=i<=Math.round(r),b=_jsxruntime.jsx.call(void 0, _lucidereact.Star,{className:_chunkDOJICJCQjs.g.call(void 0, "size-5",u?"fill-amber-400 text-amber-400":"text-neutral-300 dark:text-neutral-600"),"aria-hidden":!0});return t?_jsxruntime.jsx.call(void 0, "button",{type:"button",role:"radio","aria-checked":i===e,"aria-label":I(o.rateStar,{n:i}),disabled:s,className:"rounded p-0.5 outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:opacity-50",onMouseEnter:()=>a(i),onMouseLeave:()=>a(0),onClick:()=>t(i),children:b},i):_jsxruntime.jsx.call(void 0, "span",{children:b},i)})})}var wt="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)))]",H=_chunkDOJICJCQjs.g.call(void 0, wt,"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 q(e,t){if(e instanceof B)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 oe({error:e,onRetry:t,className:s}){let{texts:o}=C();return _jsxruntime.jsxs.call(void 0, "div",{role:"alert",className:_chunkDOJICJCQjs.g.call(void 0, "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:[_jsxruntime.jsxs.call(void 0, "p",{className:"flex items-center gap-2 font-medium",children:[_jsxruntime.jsx.call(void 0, _lucidereact.AlertTriangle,{className:"size-4 shrink-0","aria-hidden":!0}),q(e,o)]}),t&&_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{variant:"outline",size:"sm",onClick:t,children:o.retry})]})}function Ae({label:e}){let{texts:t}=C();return _jsxruntime.jsxs.call(void 0, "div",{role:"status","aria-label":_nullishCoalesce(e, () => (t.loading)),className:"space-y-3",children:[_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.o,{className:"aspect-video w-full"}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.o,{className:"h-6 w-2/3"}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.o,{className:"h-4 w-full"}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.o,{className:"h-4 w-5/6"})]})}function It({percent:e,label:t}){let s=Math.max(0,Math.min(100,Math.round(e)));return _jsxruntime.jsx.call(void 0, "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:_jsxruntime.jsx.call(void 0, "div",{className:_chunkDOJICJCQjs.g.call(void 0, "h-full rounded-full transition-all duration-300",wt),style:{width:`${s}%`}})})}function O(e,t,s){let[o,n]=_react.useState.call(void 0, s!==void 0?{status:"success",data:s}:{status:"loading"}),[a,r]=_react.useState.call(void 0, 0),i=_react.useRef.call(void 0, 0),u=_react.useRef.call(void 0, e);u.current=e;let b=_react.useRef.call(void 0, s!==void 0);_react.useEffect.call(void 0, ()=>{if(b.current){b.current=!1;return}let p=++i.current;return n({status:"loading"}),u.current().then(f=>{p===i.current&&n({status:"success",data:f})}).catch(f=>{p===i.current&&n({status:"error",error:f})}),()=>{i.current+=1}},[...t,a]);let A=_react.useCallback.call(void 0, ()=>r(p=>p+1),[]),V=_react.useCallback.call(void 0, ()=>{let p=++i.current;u.current().then(f=>{p===i.current&&n({status:"success",data:f})}).catch(()=>{})},[]),l=_react.useCallback.call(void 0, p=>{n(f=>f.status==="success"?{status:"success",data:p(f.data)}:f)},[]);return{...o,reload:A,refresh:V,mutate:l}}function Ut({lessonId:e,initial:t}){let{dataSource:s,texts:o,preview:n}=C(),a=F(),[r,i]=_react.useState.call(void 0, t),[u,b]=_react.useState.call(void 0, t.myRating),[A,V]=_react.useState.call(void 0, ""),[l,p]=_react.useState.call(void 0, "idle"),[f,d]=_react.useState.call(void 0, );async function N(){if(!(u<1)){p("saving");try{i(await s.rate(e,u,A.trim())),p("saved"),a("lesson_rated",{lesson_id:e,rating:u})}catch(v){d(v),p("error")}}}return _jsxruntime.jsxs.call(void 0, "section",{"aria-labelledby":`rate-${e}`,className:"space-y-3",children:[_jsxruntime.jsx.call(void 0, "h3",{id:`rate-${e}`,className:"text-lg font-semibold",children:o.rateTitle}),_jsxruntime.jsx.call(void 0, Tt,{value:u,onSelect:v=>{b(v),p("idle")},disabled:n||l==="saving"}),r.ratingCount>0&&_jsxruntime.jsx.call(void 0, "p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:I(o.rateAverage,{average:r.averageRating.toFixed(1),count:r.ratingCount})}),!n&&u>0&&_jsxruntime.jsxs.call(void 0, "div",{className:"space-y-2",children:[_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.p,{value:A,maxLength:1e3,placeholder:o.ratePlaceholder,onChange:v=>{V(v.target.value),p("idle")}}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{size:"sm",className:H,disabled:l==="saving",onClick:N,children:o.rateSubmit})]}),l==="saved"&&_jsxruntime.jsx.call(void 0, "p",{role:"status",className:"text-sm text-emerald-700 dark:text-emerald-400",children:o.rateSaved}),l==="error"&&_jsxruntime.jsx.call(void 0, "p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:q(f,o)})]})}function Gt(e){return e==null?"":e.toLocaleDateString()}function Lt({lessonId:e}){let{dataSource:t,texts:s,preview:o}=C(),n=O(()=>t.listQuestions(e),[t,e]),[a,r]=_react.useState.call(void 0, ""),[i,u]=_react.useState.call(void 0, "idle"),[b,A]=_react.useState.call(void 0, );async function V(){let l=a.trim();if(l!==""){u("sending");try{let p=await t.askQuestion(e,l);n.mutate(f=>[p,...f]),r(""),u("sent")}catch(p){A(p),u("error")}}}return _jsxruntime.jsxs.call(void 0, "section",{"aria-labelledby":`qa-${e}`,className:"space-y-4",children:[_jsxruntime.jsx.call(void 0, "h3",{id:`qa-${e}`,className:"text-lg font-semibold",children:s.questionsTitle}),_jsxruntime.jsxs.call(void 0, "form",{className:"space-y-2",onSubmit:l=>{l.preventDefault(),V()},children:[_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.p,{value:a,maxLength:2e3,placeholder:s.questionPlaceholder,"aria-label":s.questionPlaceholder,onChange:l=>{r(l.target.value),u("idle")}}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{type:"submit",size:"sm",className:H,disabled:i==="sending"||a.trim()==="",children:s.questionSubmit}),i==="sent"&&_jsxruntime.jsx.call(void 0, "p",{role:"status",className:"text-sm text-emerald-700 dark:text-emerald-400",children:s.questionSent}),i==="error"&&_jsxruntime.jsx.call(void 0, "p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:q(b,s)})]}),n.status==="loading"&&_jsxruntime.jsx.call(void 0, "p",{role:"status",className:"text-sm text-neutral-500",children:s.loading}),n.status==="error"&&_jsxruntime.jsx.call(void 0, oe,{error:n.error,onRetry:n.reload}),n.status==="success"&&(n.data.length===0?_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:s.questionsEmpty}):_jsxruntime.jsx.call(void 0, "ul",{className:"space-y-3",children:n.data.map(l=>_jsxruntime.jsxs.call(void 0, "li",{className:"rounded-lg bg-neutral-100 p-3 text-sm dark:bg-neutral-800",children:[_jsxruntime.jsxs.call(void 0, "p",{className:"mb-1 text-xs text-neutral-500 dark:text-neutral-400",children:[l.isMine?s.questionMine:l.authorName,l.createdAt&&` \xB7 ${Gt(l.createdAt)}`]}),_jsxruntime.jsx.call(void 0, "p",{className:"break-words whitespace-pre-wrap",children:l.content}),l.answer&&_jsxruntime.jsxs.call(void 0, "div",{className:"mt-2 border-l-2 border-neutral-400 pl-3 dark:border-neutral-500",children:[_jsxruntime.jsxs.call(void 0, "p",{className:"mb-1 text-xs font-medium text-neutral-500 dark:text-neutral-400",children:[s.questionTeamAnswer,l.answer.createdAt&&` \xB7 ${Gt(l.answer.createdAt)}`]}),_jsxruntime.jsx.call(void 0, "p",{className:"break-words whitespace-pre-wrap",children:l.answer.content})]})]},l.id))}))]})}var _dompurify = require('dompurify'); var _dompurify2 = _interopRequireDefault(_dompurify);var ws={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 Is(e){if(e.isSupported===!1||e.sanitize==null)return()=>"";let t=e.sanitize.bind(e);return _optionalChain([e, 'access', _27 => _27.addHook, 'optionalCall', _28 => _28("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,ws))}var Bt;function ze(e){return typeof window>"u"?"":(Bt??=Is(_dompurify2.default),Bt(e))}var _hlsjs = require('hls.js'); var _hlsjs2 = _interopRequireDefault(_hlsjs);function Us(e){return e.canPlayType("application/vnd.apple.mpegurl")!==""}function Mt({src:e,poster:t,startAt:s=0,durationHint:o=0,autoPlay:n=!1,lessonId:a,onReport:r,onEnded:i,onExpired:u,className:b}){let{texts:A}=C(),V=F(),l=_react.useRef.call(void 0, V);l.current=V;let p=_react.useRef.call(void 0, null),[f,d]=_react.useState.call(void 0, !1),[N,v]=_react.useState.call(void 0, 0),x=_react.useRef.call(void 0, {onReport:r,onEnded:i,onExpired:u,durationHint:o});x.current={onReport:r,onEnded:i,onExpired:u,durationHint:o};let W=_react.useRef.call(void 0, void 0),L=_react.useCallback.call(void 0, (c,h=p.current)=>{if(h==null||x.current.onReport==null)return;let P=Math.floor(h.currentTime);if(P<=0&&c!=="ended")return;let Z=Number.isFinite(h.duration)?h.duration:x.current.durationHint;W.current=P,x.current.onReport({positionSeconds:P,durationSeconds:Math.floor(Z||0),reason:c})},[]);return _react.useEffect.call(void 0, ()=>{let c=p.current;if(c==null)return;d(!1);let h,P=!1,Z=!1,k,X=()=>{s>0&&(c.currentTime=s),n&&c.play().catch(()=>{})};Us(c)?(c.src=e,c.addEventListener("loadedmetadata",X,{once:!0})):_hlsjs2.default.isSupported()?(h=new _hlsjs2.default,h.attachMedia(c),h.loadSource(e),h.on(_hlsjs2.default.Events.MANIFEST_PARSED,X),h.on(_hlsjs2.default.Events.ERROR,(_,M)=>{if(!M.fatal)return;let Ce=_optionalChain([M, 'access', _29 => _29.response, 'optionalAccess', _30 => _30.code]);Ce===401||Ce===403?(_optionalChain([x, 'access', _31 => _31.current, 'access', _32 => _32.onExpired, 'optionalCall', _33 => _33()]),d(!0)):M.type===_hlsjs2.default.ErrorTypes.NETWORK_ERROR&&!P?(P=!0,_optionalChain([h, 'optionalAccess', _34 => _34.startLoad, 'call', _35 => _35()])):M.type===_hlsjs2.default.ErrorTypes.MEDIA_ERROR&&!Z?(Z=!0,_optionalChain([h, 'optionalAccess', _36 => _36.recoverMediaError, 'call', _37 => _37()])):d(!0)})):c.src=e;let te=()=>{clearInterval(k),k=setInterval(()=>L("periodic"),15e3)},he=()=>{clearInterval(k),c.ended||L("pause")},j=new Set,re=c.currentTime,ae=0,de=_=>{if(a!=null)for(let M of _chunkD2ASWUXMjs.s.call(void 0, _,j))l.current("video_progress",{lesson_id:a,milestone:M})},ie=()=>{let _=c.currentTime,M=Number.isFinite(c.duration)?c.duration:x.current.durationHint;M>0&&!c.seeking&&_>=re&&_-re<=2&&(ae=Math.max(ae,_),de(ae/M*100)),re=_},pe=()=>{clearInterval(k),a!=null&&!j.has(100)&&(j.add(100),l.current("video_progress",{lesson_id:a,milestone:100})),L("ended"),_optionalChain([x, 'access', _38 => _38.current, 'access', _39 => _39.onEnded, 'optionalCall', _40 => _40()])},ve=()=>{h==null&&d(!0)};return c.addEventListener("play",te),c.addEventListener("pause",he),c.addEventListener("ended",pe),c.addEventListener("error",ve),c.addEventListener("timeupdate",ie),()=>{clearInterval(k),c.removeEventListener("play",te),c.removeEventListener("pause",he),c.removeEventListener("ended",pe),c.removeEventListener("error",ve),c.removeEventListener("timeupdate",ie),c.removeEventListener("loadedmetadata",X),!c.ended&&c.currentTime>0&&L("leave",c),_optionalChain([h, 'optionalAccess', _41 => _41.destroy, 'call', _42 => _42()]),c.removeAttribute("src"),c.load()}},[e,N]),_jsxruntime.jsxs.call(void 0, "div",{className:_chunkDOJICJCQjs.g.call(void 0, "relative overflow-hidden rounded-xl bg-black",b),children:[_jsxruntime.jsx.call(void 0, "video",{ref:p,className:"aspect-video w-full",poster:t,controls:!0,playsInline:!0,preload:"metadata",controlsList:"nodownload"}),f&&_jsxruntime.jsxs.call(void 0, "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:[_jsxruntime.jsx.call(void 0, "p",{children:A.videoError}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{variant:"secondary",size:"sm",onClick:()=>{_optionalChain([x, 'access', _43 => _43.current, 'access', _44 => _44.onExpired, 'optionalCall', _45 => _45()]),v(c=>c+1)},children:A.videoRetry})]})]})}function Qt({lesson:e,mobileOutline:t,nextItem:s,position:o=0,courseType:n,prev:a,next:r,autoplay:i,onAutoplayChange:u,startPlaying:b,onNavigate:A,onProgressSaved:V,onEnded:l,onUrlsExpired:p}){let{dataSource:f,texts:d,preview:N}=C(),v=F(),[x,W]=_react.useState.call(void 0, e.completed),L=_react.useRef.call(void 0, e.completed),c=_react.useRef.call(void 0, void 0),h=_react.useRef.call(void 0, e.positionSeconds),[P,Z]=_react.useState.call(void 0, !1),[k,X]=_react.useState.call(void 0, !1),[te,he]=_react.useState.call(void 0, !1),j=_react.useId.call(void 0, ),[re,ae]=_react.useState.call(void 0, n==="video"?"lessons":"description");_react.useEffect.call(void 0, ()=>{v("lesson_started",{lesson_id:e.id,position:o})},[e.id]);let de=_optionalChain([e, 'access', _46 => _46.urlsExpireAt, 'optionalAccess', _47 => _47.getTime, 'call', _48 => _48()]);_react.useEffect.call(void 0, ()=>{if(de==null)return;let m=de-Date.now()-6e4;if(m<=0||m>2**31-1)return;let ne=setTimeout(p,m);return()=>clearTimeout(ne)},[de]);let ie=_react.useMemo.call(void 0, ()=>ze(e.contentHtml),[e.contentHtml]);async function pe(m,ne,Y){if(N)return;let be=await f.saveProgress({lessonId:e.id,completed:Y,positionSeconds:m,durationSeconds:ne});c.current=m,be.completed&&!L.current&&(L.current=!0,W(!0),he(!0),v("lesson_completed",{lesson_id:e.id,position:o})),V(e.id,be)}function ve(m){if(h.current=m.positionSeconds,N||m.reason==="periodic"&&m.positionSeconds===c.current)return;let ne=m.reason==="ended"||gt(m.positionSeconds,m.durationSeconds);pe(m.positionSeconds,m.durationSeconds,ne&&!L.current).catch(Y=>{console.warn("Saving the progress of the lesson failed",Y)})}async function _(){Z(!0);try{await pe(h.current,_nullishCoalesce(_optionalChain([e, 'access', _49 => _49.video, 'optionalAccess', _50 => _50.durationSeconds]), () => (0)),!0)}catch(m){console.warn("Marking the lesson as completed failed",m)}finally{Z(!1)}}let M=e.description.trim(),Ce=ie!==""||M!=="",se=[...n==="video"&&t?[{id:"lessons",label:_nullishCoalesce(d.lessonsTab, () => (d.contents))}]:[],{id:"description",label:_nullishCoalesce(d.descriptionTab, () => (e.title))},...e.attachments.length?[{id:"files",label:_nullishCoalesce(d.filesTab, () => (d.attachments))}]:[],{id:"questions",label:_nullishCoalesce(d.questionsTab, () => (d.questionsTitle))}],me=se.some(m=>m.id===re)?re:se[0].id,Re=m=>_chunkDOJICJCQjs.g.call(void 0, me!==m&&"hidden","lg:block"),ke=m=>({id:`${j}-panel-${m}`,role:"tabpanel","aria-labelledby":`${j}-tab-${m}`,tabIndex:0}),ge=_nullishCoalesce(_optionalChain([s, 'optionalAccess', _51 => _51.locked]), () => (!1)),Dt=!N&&_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{size:"sm",variant:x?"outline":"default",className:_chunkDOJICJCQjs.g.call(void 0, "min-h-11 h-auto whitespace-normal",!x&&H),disabled:x||P,onClick:_,children:x?d.markedComplete:d.markComplete}),Je=m=>_jsxruntime.jsxs.call(void 0, "nav",{"aria-label":_nullishCoalesce(d.lessonNavigation, () => (d.contents)),"data-lesson-navigation":m?"mobile":"desktop",className:m?"fixed inset-x-0 bottom-[var(--course-mobile-bottom,0px)] z-40 flex items-center justify-between gap-2 border-t border-neutral-200 bg-white px-3 pt-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] dark:border-neutral-700 dark:bg-neutral-900 lg:hidden":"hidden items-center justify-between gap-3 lg:flex",children:[_jsxruntime.jsxs.call(void 0, _chunk2FD2QP4Yjs.k,{variant:"outline",size:"sm",className:"min-h-11",disabled:a==null,onClick:()=>a&&A(a),children:[_jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft,{"aria-hidden":!0}),m?_nullishCoalesce(d.mobilePrev, () => (d.prevItem)):d.prevItem]}),Dt,_jsxruntime.jsxs.call(void 0, _chunk2FD2QP4Yjs.k,{variant:"outline",size:"sm",className:"min-h-11",disabled:r==null||ge,onClick:()=>r&&!ge&&A(r),children:[m?_nullishCoalesce(d.mobileNext, () => (d.nextItem)):d.nextItem,_jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight,{"aria-hidden":!0})]})]});return _jsxruntime.jsxs.call(void 0, "article",{"data-lesson-id":e.id,className:"min-w-0 space-y-5 pb-[calc(5rem+env(safe-area-inset-bottom)+var(--course-mobile-bottom,0px))] lg:pb-0","aria-labelledby":`lesson-${e.id}`,children:[e.video&&_jsxruntime.jsx.call(void 0, Mt,{src:e.video.hlsUrl,poster:e.video.posterUrl,lessonId:e.id,startAt:bt(h.current,e.video.durationSeconds),durationHint:e.video.durationSeconds,autoPlay:b,onReport:ve,onEnded:()=>{X(!0),l()},onExpired:p}),Je(!1),_jsxruntime.jsx.call(void 0, "div",{className:"lg:hidden",role:"tablist","aria-label":d.contents,children:_jsxruntime.jsx.call(void 0, "div",{className:"flex overflow-x-auto border-b border-neutral-200 dark:border-neutral-700",children:se.map((m,ne)=>_jsxruntime.jsx.call(void 0, "button",{type:"button",role:"tab",id:`${j}-tab-${m.id}`,"aria-selected":me===m.id,"aria-controls":`${j}-panel-${m.id}`,tabIndex:me===m.id?0:-1,className:_chunkDOJICJCQjs.g.call(void 0, "min-h-11 min-w-11 shrink-0 border-b-2 px-4 text-sm font-medium focus-visible:outline focus-visible:outline-2",me===m.id?"border-current":"border-transparent text-neutral-600 dark:text-neutral-300"),onClick:()=>ae(m.id),onKeyDown:Y=>{let be=Y.key==="ArrowRight"?1:Y.key==="ArrowLeft"?-1:0;if(!be&&Y.key!=="Home"&&Y.key!=="End")return;Y.preventDefault();let De=Y.key==="Home"?0:Y.key==="End"?se.length-1:(ne+be+se.length)%se.length;ae(se[De].id),_optionalChain([Y, 'access', _52 => _52.currentTarget, 'access', _53 => _53.parentElement, 'optionalAccess', _54 => _54.querySelectorAll, 'call', _55 => _55('[role="tab"]'), 'access', _56 => _56[De], 'optionalAccess', _57 => _57.focus, 'call', _58 => _58()])},children:m.label},m.id))})}),n==="video"&&t&&_jsxruntime.jsx.call(void 0, "div",{...ke("lessons"),className:_chunkDOJICJCQjs.g.call(void 0, z,me!=="lessons"&&"hidden","lg:hidden"),children:t}),_jsxruntime.jsxs.call(void 0, "div",{className:_chunkDOJICJCQjs.g.call(void 0, z,"space-y-5"),children:[_jsxruntime.jsx.call(void 0, "header",{className:"flex flex-wrap items-start justify-between gap-3",children:_jsxruntime.jsx.call(void 0, "h2",{id:`lesson-${e.id}`,className:"text-2xl font-semibold break-words",children:e.title})}),n==="video"&&e.video&&_jsxruntime.jsxs.call(void 0, "label",{className:"flex min-h-11 w-fit cursor-pointer items-center gap-2 text-sm text-neutral-600 dark:text-neutral-300",children:[_jsxruntime.jsx.call(void 0, "input",{type:"checkbox",checked:i,onChange:m=>u(m.target.checked)}),d.autoplay]}),_jsxruntime.jsxs.call(void 0, "div",{...ke("description"),className:Re("description"),children:[M!==""&&_jsxruntime.jsx.call(void 0, "p",{className:"text-sm break-words whitespace-pre-wrap text-neutral-700 dark:text-neutral-300",children:M}),ie!==""&&_jsxruntime.jsx.call(void 0, "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:ie}}),!Ce&&!e.video&&_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:d.noContent})]}),e.attachments.length>0&&_jsxruntime.jsx.call(void 0, "div",{...ke("files"),className:Re("files"),children:e.attachments.length>0&&_jsxruntime.jsxs.call(void 0, "section",{"aria-labelledby":`files-${e.id}`,className:"space-y-2",children:[_jsxruntime.jsxs.call(void 0, "h3",{id:`files-${e.id}`,className:"flex items-center gap-2 text-lg font-semibold",children:[_jsxruntime.jsx.call(void 0, _lucidereact.Paperclip,{className:"size-4","aria-hidden":!0}),d.attachments]}),_jsxruntime.jsx.call(void 0, "ul",{className:"space-y-2",children:e.attachments.map(m=>_jsxruntime.jsx.call(void 0, "li",{children:_jsxruntime.jsxs.call(void 0, "a",{href:m.url,target:"_blank",rel:"noopener noreferrer",download:m.name,className:"flex min-h-11 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:[_jsxruntime.jsxs.call(void 0, "span",{className:"min-w-0 break-words",children:[m.name,_jsxruntime.jsx.call(void 0, "span",{className:"ml-2 text-xs text-neutral-500 dark:text-neutral-400",children:ft(m.size)})]}),_jsxruntime.jsxs.call(void 0, "span",{className:"flex shrink-0 items-center gap-1 text-xs font-medium",children:[d.download,_jsxruntime.jsx.call(void 0, _lucidereact.Download,{className:"size-3.5","aria-hidden":!0})]})]})},m.id))})]})})]}),_jsxruntime.jsx.call(void 0, "div",{className:_chunkDOJICJCQjs.g.call(void 0, z,Re("description")),children:_jsxruntime.jsx.call(void 0, Ut,{lessonId:e.id,initial:{myRating:e.myRating,averageRating:e.averageRating,ratingCount:e.ratingCount}})}),_jsxruntime.jsx.call(void 0, "div",{...ke("questions"),className:_chunkDOJICJCQjs.g.call(void 0, z,Re("questions")),children:_jsxruntime.jsx.call(void 0, Lt,{lessonId:e.id})}),_jsxruntime.jsx.call(void 0, "p",{role:"status","aria-live":"polite",className:"text-sm text-emerald-700 dark:text-emerald-400",children:te?d.markedComplete:""}),(x||k)&&r&&s&&_jsxruntime.jsxs.call(void 0, "section",{"data-course-up-next":!0,className:_chunkDOJICJCQjs.g.call(void 0, z,"space-y-3"),children:[_jsxruntime.jsx.call(void 0, "h3",{className:"font-semibold break-words",children:I(_nullishCoalesce(d.upNext, () => (`${d.nextItem}: {title}`)),{title:s.title})}),ge&&_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-600 dark:text-neutral-300",children:s.lockReason?I(d.lockedByTest,{test:s.lockReason.gatingTestTitle}):d.locked}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{className:_chunkDOJICJCQjs.g.call(void 0, H,"min-h-11"),disabled:ge,onClick:()=>!ge&&A(r),children:_nullishCoalesce(d.openNext, () => (d.nextItem))})]}),Je(!0)]})}var Wt={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.",lessonsTab:"Lekcje",descriptionTab:"Opis",filesTab:"Pliki",questionsTab:"Pytania",upNext:"Nast\u0119pna lekcja: {title}",openNext:"Przejd\u017A dalej",courseCompleted:"Kurs uko\u0144czony",lessonNavigation:"Nawigacja lekcji",mobilePrev:"Wstecz",mobileNext:"Dalej",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.",lessonsTab:"Lessons",descriptionTab:"Description",filesTab:"Files",questionsTab:"Questions",upNext:"Next lesson: {title}",openNext:"Continue",courseCompleted:"Course completed",lessonNavigation:"Lesson navigation",mobilePrev:"Previous",mobileNext:"Next",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 Ye(e,t=_chunkQ337IQNAjs.f.call(void 0, )){return _chunkQ337IQNAjs.b.call(void 0, Wt,t,e)}function Ys({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=C();if(e.config.type!=="mcq")return null;let{choices:a,multiple:r}=e.config;return _jsxruntime.jsxs.call(void 0, "fieldset",{className:"space-y-2",disabled:s,children:[_jsxruntime.jsx.call(void 0, "legend",{className:"mb-2 text-xs text-neutral-500 dark:text-neutral-400",children:r?n.mcqMultiple:n.mcqSingle}),a.map(i=>{let u=t.selectedIds.includes(i.id);return _jsxruntime.jsxs.call(void 0, "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:[_jsxruntime.jsx.call(void 0, "input",{className:"mt-0.5",type:r?"checkbox":"radio",name:`q-${e.id}`,checked:u,onChange:()=>o({type:"mcq",selectedIds:r?u?t.selectedIds.filter(b=>b!==i.id):[...t.selectedIds,i.id]:[i.id]})}),_jsxruntime.jsx.call(void 0, "span",{className:"break-words",children:i.label})]},i.id)})]})}function Fs({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=C();return e.config.type!=="todolist"?null:_jsxruntime.jsxs.call(void 0, "fieldset",{className:"space-y-2",disabled:s,children:[_jsxruntime.jsx.call(void 0, "legend",{className:"mb-2 text-xs text-neutral-500 dark:text-neutral-400",children:n.todoHint}),e.config.steps.map(a=>{let r=t.checkedIds.includes(a.id);return _jsxruntime.jsxs.call(void 0, "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:[_jsxruntime.jsx.call(void 0, "input",{className:"mt-0.5",type:"checkbox",checked:r,onChange:()=>o({type:"todolist",checkedIds:r?t.checkedIds.filter(i=>i!==a.id):[...t.checkedIds,a.id]})}),_jsxruntime.jsxs.call(void 0, "span",{className:"break-words",children:[a.label,a.required&&_jsxruntime.jsxs.call(void 0, "span",{className:"ml-2 text-xs text-neutral-500 dark:text-neutral-400",children:["(",n.todoRequired,")"]})]})]},a.id)})]})}function _s({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=C();if(e.config.type!=="fill_gap")return null;let a=Ue(e.config.template,e.config.blanks);return _jsxruntime.jsx.call(void 0, "p",{className:"text-sm leading-10 break-words",children:a.map((r,i)=>r.type==="text"?_jsxruntime.jsx.call(void 0, "span",{className:"whitespace-pre-wrap",children:r.text},i):_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.l,{className:"mx-1 inline-block h-8 w-36 align-middle","aria-label":`${n.gapPlaceholder} ${r.id}`,placeholder:n.gapPlaceholder,disabled:s,value:_nullishCoalesce(t.values[r.id], () => ("")),onChange:u=>o({type:"fill_gap",values:{...t.values,[r.id]:u.target.value}})},i))})}function Ks({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=C();if(e.config.type!=="sort_order")return null;let a=new Map(e.config.items.map(i=>[i.id,i.label])),r=(i,u)=>o({type:"sort_order",orderedIds:yt(t.orderedIds,i,u)});return _jsxruntime.jsxs.call(void 0, "div",{className:"space-y-2",children:[_jsxruntime.jsx.call(void 0, "p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:n.sortHint}),_jsxruntime.jsx.call(void 0, "ol",{className:"space-y-2",children:t.orderedIds.map((i,u)=>_jsxruntime.jsxs.call(void 0, "li",{className:"flex items-center gap-2 rounded-lg bg-neutral-100 px-3 py-2 text-sm dark:bg-neutral-800",children:[_jsxruntime.jsxs.call(void 0, "span",{className:"w-5 text-xs text-neutral-500",children:[u+1,"."]}),_jsxruntime.jsx.call(void 0, "span",{className:"min-w-0 flex-1 break-words",children:_nullishCoalesce(a.get(i), () => (i))}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{type:"button",variant:"ghost",size:"icon-xs","aria-label":n.moveUp,disabled:s||u===0,onClick:()=>r(u,u-1),children:_jsxruntime.jsx.call(void 0, _lucidereact.ArrowUp,{"aria-hidden":!0})}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{type:"button",variant:"ghost",size:"icon-xs","aria-label":n.moveDown,disabled:s||u===t.orderedIds.length-1,onClick:()=>r(u,u+1),children:_jsxruntime.jsx.call(void 0, _lucidereact.ArrowDown,{"aria-hidden":!0})})]},i))})]})}function js({question:e,answer:t,disabled:s,onChange:o}){let n={question:e,disabled:s,onChange:o};switch(t.type){case"mcq":return _jsxruntime.jsx.call(void 0, Ys,{...n,answer:t});case"todolist":return _jsxruntime.jsx.call(void 0, Fs,{...n,answer:t});case"fill_gap":return _jsxruntime.jsx.call(void 0, _s,{...n,answer:t});case"sort_order":return _jsxruntime.jsx.call(void 0, Ks,{...n,answer:t})}}function Js({list:e}){let{texts:t}=C();return e.submissions.length===0?null:_jsxruntime.jsxs.call(void 0, "section",{className:"space-y-2",children:[_jsxruntime.jsx.call(void 0, "h3",{className:"text-sm font-semibold",children:t.testPreviousAttempts}),_jsxruntime.jsx.call(void 0, "ul",{className:"space-y-1 text-sm",children:e.submissions.map(s=>_jsxruntime.jsxs.call(void 0, "li",{className:"flex items-center gap-2 text-neutral-700 dark:text-neutral-300",children:[s.passed?_jsxruntime.jsx.call(void 0, _lucidereact.Check,{className:"size-4 text-emerald-600","aria-hidden":!0}):_jsxruntime.jsx.call(void 0, _lucidereact.X,{className:"size-4 text-red-600","aria-hidden":!0}),I(t.testAttemptRow,{percent:s.scorePercent,date:_nullishCoalesce(_optionalChain([s, 'access', _59 => _59.createdAt, 'optionalAccess', _60 => _60.toLocaleString, 'call', _61 => _61()]), () => (""))})]},s.id))})]})}function Ds({test:e,onSubmitted:t,onTryAgain:s}){let{dataSource:o,texts:n}=C(),[a,r]=_react.useState.call(void 0, {}),[i,u]=_react.useState.call(void 0, ),[b,A]=_react.useState.call(void 0, !1),[V,l]=_react.useState.call(void 0, ),p=_react.useRef.call(void 0, Date.now()),f=_react.useRef.call(void 0, e.questions).current,d=e.attemptsLeft!=null&&e.attemptsLeft<=0,N=i?i.attemptsLeft:e.attemptsLeft,v=At(f,a),x=c=>_nullishCoalesce(a[c.id], () => (xt(c.config)));async function W(){A(!0),l(void 0);try{let c={};for(let P of f)c[P.id]=x(P);let h=await o.submitTest(e.id,c,Date.now()-p.current);u(h),t(h)}catch(c){l(c)}finally{A(!1)}}let L=new Map(_optionalChain([i, 'optionalAccess', _62 => _62.results, 'access', _63 => _63.map, 'call', _64 => _64(c=>[c.questionId,c])]));return f.length===0?_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:n.testNoQuestions}):_jsxruntime.jsxs.call(void 0, "form",{className:"space-y-6",onSubmit:c=>{c.preventDefault(),i==null&&!d&&W()},children:[i&&_jsxruntime.jsxs.call(void 0, "div",{role:"status",className:_chunkDOJICJCQjs.g.call(void 0, "rounded-xl p-4 text-sm",i.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:[_jsxruntime.jsx.call(void 0, "p",{className:"text-base font-semibold",children:i.submission.passed?n.testPassed:n.testFailed}),_jsxruntime.jsx.call(void 0, "p",{children:I(n.testScore,{percent:i.submission.scorePercent})})]}),_jsxruntime.jsx.call(void 0, "ol",{className:"space-y-6",children:f.map((c,h)=>{let P=L.get(c.id),Z=_optionalChain([P, 'optionalAccess', _65 => _65.correctAnswer])!=null?St(c,P.correctAnswer):"";return _jsxruntime.jsxs.call(void 0, "li",{className:"space-y-3","data-question-id":c.id,children:[_jsxruntime.jsxs.call(void 0, "p",{className:"font-medium break-words",children:[h+1,". ",c.prompt]}),_jsxruntime.jsx.call(void 0, js,{question:c,answer:x(c),disabled:i!=null||b||d,onChange:k=>r(X=>({...X,[c.id]:k}))}),P&&_jsxruntime.jsxs.call(void 0, "div",{className:_chunkDOJICJCQjs.g.call(void 0, "flex items-start gap-2 text-sm",P.correct?"text-emerald-700 dark:text-emerald-400":"text-red-700 dark:text-red-400"),children:[P.correct?_jsxruntime.jsx.call(void 0, _lucidereact.Check,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}):_jsxruntime.jsx.call(void 0, _lucidereact.X,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}),_jsxruntime.jsxs.call(void 0, "span",{children:[P.correct?n.testCorrect:n.testIncorrect,Z!==""&&!P.correct&&_jsxruntime.jsxs.call(void 0, "span",{className:"block text-neutral-700 dark:text-neutral-300",children:[n.testCorrectAnswer,": ",Z]})]})]})]},c.id)})}),V!=null&&_jsxruntime.jsx.call(void 0, "p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:q(V,n)}),i==null?_jsxruntime.jsxs.call(void 0, "div",{className:"space-y-2",children:[v>0&&!d&&_jsxruntime.jsx.call(void 0, "p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:I(n.testUnanswered,{count:v})}),_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{type:"submit",className:H,disabled:b||d,children:b?n.testSubmitting:n.testSubmit})]}):N!==0&&!i.submission.passed&&_jsxruntime.jsx.call(void 0, _chunk2FD2QP4Yjs.k,{type:"button",variant:"outline",onClick:s,children:n.testTryAgain})]})}function Kt({testId:e,title:t,onSubmitted:s}){let{dataSource:o,texts:n}=C(),a=F(),r=O(()=>o.getTest(e),[o,e]),i=O(()=>o.listSubmissions(e).catch(()=>{}),[o,e]),[u,b]=_react.useState.call(void 0, 0);return _jsxruntime.jsxs.call(void 0, "article",{"data-test-id":e,className:_chunkDOJICJCQjs.g.call(void 0, z,"min-w-0 space-y-5"),children:[_jsxruntime.jsx.call(void 0, "h2",{className:"text-2xl font-semibold break-words",children:r.status==="success"?r.data.title:t}),r.status==="loading"&&_jsxruntime.jsx.call(void 0, Ae,{}),r.status==="error"&&_jsxruntime.jsx.call(void 0, oe,{error:r.error,onRetry:r.reload}),r.status==="success"&&_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[r.data.description.trim()!==""&&_jsxruntime.jsx.call(void 0, "p",{className:"text-sm break-words whitespace-pre-wrap text-neutral-700 dark:text-neutral-300",children:r.data.description}),_jsxruntime.jsxs.call(void 0, "ul",{className:"space-y-1 text-sm text-neutral-600 dark:text-neutral-400",children:[r.data.gating&&_jsxruntime.jsx.call(void 0, "li",{children:n.testGating}),_jsxruntime.jsx.call(void 0, "li",{children:I(n.testPassThreshold,{percent:r.data.passThresholdPercent})}),_jsxruntime.jsx.call(void 0, "li",{children:r.data.attemptsLeft==null?n.testAttemptsUnlimited:I(n.testAttemptsLeft,{count:r.data.attemptsLeft})}),r.data.attemptCount>0&&_jsxruntime.jsx.call(void 0, "li",{children:I(n.testBestScore,{percent:r.data.bestScorePercent})})]}),r.data.attemptsLeft!=null&&r.data.attemptsLeft<=0&&_jsxruntime.jsx.call(void 0, "p",{role:"alert",className:"text-sm font-medium text-red-700 dark:text-red-400",children:n.testNoAttemptsLeft}),_jsxruntime.jsx.call(void 0, Ds,{test:r.data,onSubmitted:A=>{a("test_submitted",{lesson_id:e,score_bucket:_chunkD2ASWUXMjs.r.call(void 0, A.submission.scorePercent)}),s(A),i.refresh(),r.refresh()},onTryAgain:()=>b(A=>A+1)},u),i.status==="success"&&i.data&&_jsxruntime.jsx.call(void 0, Js,{list:i.data})]})]})}var jt="bitsnap-course-autoplay";function tn(){let[e,t]=_react.useState.call(void 0, !1);_react.useEffect.call(void 0, ()=>{try{t(window.localStorage.getItem(jt)==="1")}catch (e2){}},[]);let s=_react.useCallback.call(void 0, o=>{t(o);try{window.localStorage.setItem(jt,o?"1":"0")}catch (e3){}},[]);return[e,s]}function _e(e){return e==null?void 0:{id:e.id,kind:e.kind}}function sn({item:e}){let{texts:t}=C();return _jsxruntime.jsxs.call(void 0, "div",{className:_chunkDOJICJCQjs.g.call(void 0, z,"space-y-2"),role:"status",children:[_jsxruntime.jsx.call(void 0, "h2",{className:"text-2xl font-semibold break-words",children:e.title}),_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-600 dark:text-neutral-300",children:e.lockReason?I(t.lockedPage,{test:e.lockReason.gatingTestTitle}):t.locked})]})}function nn({course:e,item:t,autoplay:s,onAutoplayChange:o,startPlaying:n,onNavigate:a,onProgressSaved:r,onEnded:i,onLocked:u,mobileOutline:b}){let{dataSource:A,texts:V}=C(),l=O(()=>A.getLesson(t.id),[A,t.id]),p=l.status==="error"&&l.error instanceof B&&l.error.code==="item_locked";if(_react.useEffect.call(void 0, ()=>{p&&u()},[p]),l.status==="loading")return _jsxruntime.jsx.call(void 0, Ae,{});if(l.status==="error")return p?_jsxruntime.jsxs.call(void 0, "div",{className:_chunkDOJICJCQjs.g.call(void 0, z,"space-y-2"),role:"alert",children:[_jsxruntime.jsx.call(void 0, "h2",{className:"text-2xl font-semibold break-words",children:t.title}),_jsxruntime.jsx.call(void 0, "p",{className:"text-sm",children:q(l.error,V)})]}):_jsxruntime.jsx.call(void 0, oe,{error:l.error,onRetry:l.reload});let f=Ee(e,t.id),d=xe(e).filter(N=>N.kind!=="test").findIndex(N=>N.id===t.id)+1;return _jsxruntime.jsx.call(void 0, Qt,{lesson:l.data,position:d,mobileOutline:b,nextItem:le(e,_optionalChain([(_nullishCoalesce(l.data.next, () => (_e(f.next)))), 'optionalAccess', _66 => _66.id])),courseType:e.type,prev:_nullishCoalesce(l.data.prev, () => (_e(f.prev))),next:_nullishCoalesce(l.data.next, () => (_e(f.next))),autoplay:s,onAutoplayChange:o,startPlaying:n,onNavigate:a,onProgressSaved:r,onEnded:i,onUrlsExpired:l.refresh},l.data.id)}function on({course:e,selectedId:t,onSelect:s,onBack:o,onCourseChange:n,onCourseRefresh:a}){let{texts:r,preview:i}=C(),u=F(),b=_react.useRef.call(void 0, null),A=_react.useId.call(void 0, ),[V,l]=_react.useState.call(void 0, !1),[p,f]=tn(),[d,N]=_react.useState.call(void 0, ),v=mt(e,t),x=le(e,v);_react.useEffect.call(void 0, ()=>{u("course_opened",{})},[e.id]);let W=(k,X=!1)=>{N(X?k:void 0),l(!1),s(k),_optionalChain([b, 'access', _67 => _67.current, 'optionalAccess', _68 => _68.scrollIntoView, 'call', _69 => _69({block:"start",behavior:"smooth"})])},L=_jsxruntime.jsx.call(void 0, Ct,{course:e,selectedId:v,variant:e.type==="video"?"playlist":"modules",onSelect:k=>W(k.id)}),c;x==null?c=_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-500",children:r.noItem}):x.locked?c=_jsxruntime.jsx.call(void 0, sn,{item:x}):x.kind==="test"?c=_jsxruntime.jsx.call(void 0, Kt,{testId:x.id,title:x.title,onSubmitted:()=>a()},x.id):c=_jsxruntime.jsx.call(void 0, nn,{course:e,item:x,autoplay:p,onAutoplayChange:f,startPlaying:d===x.id,onNavigate:k=>W(k.id),onProgressSaved:(k,X)=>n(te=>({...X.completed?pt(te,k):te,completedLessons:X.completedLessons,progressPercent:X.progressPercent})),onEnded:()=>{if(!p)return;let k=dt(e,x.id);k&&W(k.id,!0)},onLocked:a,mobileOutline:L},x.id);let h=e.type==="video",P=!h||x==null||x.locked||x.kind==="test",Z=e.resumeItemId!==""&&e.resumeItemId!==v&&_optionalChain([le, 'call', _70 => _70(e,e.resumeItemId), 'optionalAccess', _71 => _71.locked])===!1;return _jsxruntime.jsxs.call(void 0, "div",{ref:b,className:"space-y-4 scroll-mt-4",children:[_jsxruntime.jsxs.call(void 0, "header",{className:"space-y-3",children:[_jsxruntime.jsxs.call(void 0, "div",{className:"flex flex-wrap items-center gap-2",children:[o&&_jsxruntime.jsxs.call(void 0, _chunk2FD2QP4Yjs.k,{variant:"ghost",size:"sm",onClick:o,children:[_jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft,{"aria-hidden":!0}),r.back]}),i&&_jsxruntime.jsx.call(void 0, "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:r.previewBadge})]}),_jsxruntime.jsxs.call(void 0, "div",{className:"flex flex-wrap items-end justify-between gap-4",children:[_jsxruntime.jsx.call(void 0, "div",{className:"min-w-0 space-y-1",children:_jsxruntime.jsx.call(void 0, "h1",{className:"text-2xl font-semibold break-words sm:text-3xl",children:e.title})}),Z&&_jsxruntime.jsxs.call(void 0, _chunk2FD2QP4Yjs.k,{size:"sm",variant:"outline",onClick:()=>W(e.resumeItemId),children:[_jsxruntime.jsx.call(void 0, _lucidereact.Play,{"aria-hidden":!0}),r.continueCourse]})]}),_jsxruntime.jsxs.call(void 0, "div",{className:"max-w-xl space-y-1 md:max-w-none",children:[e.progressPercent>=100&&_jsxruntime.jsx.call(void 0, "p",{role:"status",className:"font-semibold text-emerald-700 dark:text-emerald-400",children:_nullishCoalesce(r.courseCompleted, () => (r.completed))}),_jsxruntime.jsx.call(void 0, It,{percent:e.progressPercent,label:I(r.progressPercent,{percent:e.progressPercent})}),_jsxruntime.jsxs.call(void 0, "p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:[I(r.progressLessons,{done:e.completedLessons,total:e.totalLessons})," \xB7 ",I(r.progressPercent,{percent:e.progressPercent})]})]})]}),_jsxruntime.jsxs.call(void 0, "div",{className:_chunkDOJICJCQjs.g.call(void 0, "grid gap-6",h?"lg:grid-cols-[minmax(0,1fr)_380px]":"lg:grid-cols-[320px_minmax(0,1fr)]"),children:[P&&_jsxruntime.jsx.call(void 0, "div",{className:"lg:hidden",children:_jsxruntime.jsxs.call(void 0, _chunk2FD2QP4Yjs.k,{variant:"outline",size:"sm",className:"min-h-11","aria-controls":A,"aria-expanded":V,onClick:()=>l(k=>!k),children:[_jsxruntime.jsx.call(void 0, _lucidereact.List,{"aria-hidden":!0}),r.contents]})}),P&&_jsxruntime.jsx.call(void 0, "aside",{id:A,className:_chunkDOJICJCQjs.g.call(void 0, z,h&&"lg:hidden","p-3 sm:p-3 lg:sticky lg:top-4 lg:max-h-[calc(100vh-2rem)] lg:self-start lg:overflow-y-auto",V?"block":"hidden",!h&&"lg:block"),children:L}),_jsxruntime.jsx.call(void 0, "div",{className:"min-w-0","data-course-content":!0,children:c}),h&&_jsxruntime.jsx.call(void 0, "aside",{className:_chunkDOJICJCQjs.g.call(void 0, z,"hidden p-3 sm:p-3 lg:block lg:sticky lg:top-4 lg:max-h-[calc(100vh-2rem)] lg:self-start lg:overflow-y-auto"),children:L})]})]})}function rn({accessId:e,accessToken:t,dataSource:s,preview:o=!1,itemId:n,onItemChange:a,onBack:r,initialCourse:i,texts:u,locale:b,theme:A,className:V,analytics:l}){let p=_chunkNWXZ45TVjs.b.call(void 0, ),f=_chunkD2ASWUXMjs.n.call(void 0, p.projectID,o?!1:l,"course"),d=_react.useMemo.call(void 0, ()=>Ye(u,b),[u,b]),N=_react.useMemo.call(void 0, ()=>{if(s)return s;if(e==null||e==="")throw new Error("PanelCourse needs an accessId or a dataSource");return Be({accessId:e,accessToken:t})},[s,e,t]),v=O(()=>N.getCourse(),[N],i),[x,W]=_react.useState.call(void 0, ),L=a?n:_nullishCoalesce(n, () => (x)),c=_react.useCallback.call(void 0, k=>{W(k),_optionalChain([a, 'optionalCall', _72 => _72(k)])},[a]),h=lt(_nullishCoalesce(_optionalChain([A, 'optionalAccess', _73 => _73.colors]), () => (_optionalChain([p, 'access', _74 => _74.theme, 'optionalAccess', _75 => _75.colors])))),P=v.status==="success"?v.data.id:void 0,Z=_react.useMemo.call(void 0, ()=>({dataSource:N,texts:d,preview:o,analytics:{courseId:P,instrument:f}}),[N,d,o,P,f]);return _jsxruntime.jsx.call(void 0, _chunkD2ASWUXMjs.l,{value:f,children:_jsxruntime.jsx.call(void 0, ut,{value:Z,children:_jsxruntime.jsxs.call(void 0, "div",{"data-bitsnap-course":!0,"data-course-type":v.status==="success"?v.data.type:void 0,style:h,className:_chunkDOJICJCQjs.g.call(void 0, "font-inter w-full max-w-7xl",V),children:[v.status==="loading"&&_jsxruntime.jsxs.call(void 0, "div",{className:"space-y-4",children:[r&&_jsxruntime.jsxs.call(void 0, _chunk2FD2QP4Yjs.k,{variant:"ghost",size:"sm",onClick:r,children:[_jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft,{"aria-hidden":!0}),d.back]}),_jsxruntime.jsx.call(void 0, "p",{className:"sr-only",role:"status",children:d.loading}),_jsxruntime.jsx.call(void 0, Ae,{})]}),v.status==="error"&&_jsxruntime.jsxs.call(void 0, "div",{className:"space-y-4",children:[r&&_jsxruntime.jsxs.call(void 0, _chunk2FD2QP4Yjs.k,{variant:"ghost",size:"sm",onClick:r,children:[_jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft,{"aria-hidden":!0}),d.back]}),_jsxruntime.jsx.call(void 0, oe,{error:v.error,onRetry:v.reload})]}),v.status==="success"&&_jsxruntime.jsx.call(void 0, on,{course:v.data,selectedId:L,onSelect:c,onBack:r,onCourseChange:v.mutate,onCourseRefresh:v.refresh})]})})})}exports.COURSE_TEXT_TABLES = Wt; exports.CourseError = B; exports.PanelCourse = rn; exports.createCourseDataSource = Le; exports.createRpcCourseDataSource = Be; exports.getCourseTexts = Ye; exports.sanitizeLessonHtml = ze;
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkKDL35KEIjs = require('./chunk-KDL35KEI.js');var _chunkYPA6MMGJjs = require('./chunk-YPA6MMGJ.js');var _chunkMDAFPGPAjs = require('./chunk-MDAFPGPA.js');require('./chunk-EFN4OW2C.js');var _chunk4Y233NIIjs = require('./chunk-4Y233NII.js');var _chunkIRZJIPUFjs = require('./chunk-IRZJIPUF.js');require('./chunk-W3RGQYPD.js');var _chunkQ337IQNAjs = require('./chunk-Q337IQNA.js');require('./chunk-JSDGZ4NY.js');var _lucidereact = require('lucide-react');var _react = require('react');function lt(e){let t={},s=_optionalChain([e, 'optionalAccess', _2 => _2.brand, 'optionalAccess', _3 => _3.trim, 'call', _4 => _4()]),o=_optionalChain([e, 'optionalAccess', _5 => _5.brandDark, 'optionalAccess', _6 => _6.trim, 'call', _7 => _7()])||s;if(s){t["--course-accent"]=s;let n=_chunkYPA6MMGJjs.m.call(void 0, s);n&&(t["--course-accent-fg"]=n)}if(o){t["--course-accent-dark"]=o;let n=_chunkYPA6MMGJjs.m.call(void 0, o);n&&(t["--course-accent-dark-fg"]=n)}return t}var ct=_react.createContext.call(void 0, void 0),ut=ct.Provider;function C(){let e=_react.useContext.call(void 0, ct);if(e==null)throw new Error("Course components have to be rendered inside PanelCourse");return e}function F(){let{analytics:e,preview:t}=C();return _react.useCallback.call(void 0, (s,o)=>{t||_optionalChain([e, 'optionalAccess', _8 => _8.courseId])==null||e.instrument.track(s,{...o,course_id:e.courseId})},[e,t])}function xe(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 xe(e).find(s=>s.id===t)}function Ee(e,t){let s=xe(e),o=s.findIndex(n=>n.id===t);return o<0?{}:{prev:s[o-1],next:s[o+1]}}function dt(e,t){let{next:s}=Ee(e,t);return s!=null&&s.kind==="lesson"&&!s.locked?s:void 0}function $t(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 pt(e,t){let s=e.sections.map(n=>({...n,items:n.items.map(a=>a.id===t&&a.kind==="lesson"?{...a,completed:!0}:a)})),o=$t({sections:s});return{...e,sections:s,totalLessons:o.total,completedLessons:o.completed,progressPercent:o.percent}}function mt(e,t){return le(e,t)!=null?t:_optionalChain([le, 'call', _9 => _9(e,e.resumeItemId), 'optionalAccess', _10 => _10.locked])===!1?e.resumeItemId:_optionalChain([xe, 'call', _11 => _11(e), 'access', _12 => _12.find, 'call', _13 => _13(s=>!s.locked), 'optionalAccess', _14 => _14.id])}function I(e,t){return e.replace(/\{(\w+)\}/g,(s,o)=>o in t?String(t[o]):s)}function gt(e,t){return t>0&&e/t>=.8}function bt(e,t){return e<5||t>0&&e>=t-5?0:Math.floor(e)}function Ge(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 ft(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 xt(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 es(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 At(e,t){return e.filter(s=>!es(s,t[s.id])).length}function yt(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 Ue(e,t){let s=[],o=/\{\{\s*([^{}\s]+)\s*\}\}/g,n=0;for(let a of e.matchAll(o)){let r=a[1];t.includes(r)&&(a.index>n&&s.push({type:"text",text:e.slice(n,a.index)}),s.push({type:"blank",id:r}),n=a.index+a[0].length)}return n<e.length&&s.push({type:"text",text:e.slice(n)}),s}function St(e,t){let{config:s}=e;if(t==null||t.type!==s.type)return"";let o=(n,a)=>_nullishCoalesce(_optionalChain([n, 'access', _15 => _15.find, 'call', _16 => _16(r=>r.id===a), 'optionalAccess', _17 => _17.label]), () => (a));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"?Ue(s.template,s.blanks).map(n=>n.type==="text"?n.text:`[${_nullishCoalesce(t.values[n.id], () => (""))}]`).join(""):""}var _jsxruntime = require('react/jsx-runtime');function vt({item:e}){return e.locked?_jsxruntime.jsx.call(void 0, _lucidereact.Lock,{className:"size-4 text-neutral-500","aria-hidden":!0}):e.completed?_jsxruntime.jsx.call(void 0, _lucidereact.CheckCircle2,{className:"size-4 text-emerald-600 dark:text-emerald-400","aria-hidden":!0}):e.kind==="test"?_jsxruntime.jsx.call(void 0, _lucidereact.ClipboardCheck,{className:"size-4 text-neutral-500","aria-hidden":!0}):e.durationSeconds>0?_jsxruntime.jsx.call(void 0, _lucidereact.PlayCircle,{className:"size-4 text-neutral-500","aria-hidden":!0}):_jsxruntime.jsx.call(void 0, _lucidereact.FileText,{className:"size-4 text-neutral-500","aria-hidden":!0})}function cs({item:e,selected:t,variant:s,onSelect:o}){let{texts:n}=C(),a=e.lockReason?I(n.lockedByTest,{test:e.lockReason.gatingTestTitle}):n.locked,r=e.locked?a:e.completed?n.completed:void 0;return _jsxruntime.jsx.call(void 0, "li",{children:_jsxruntime.jsxs.call(void 0, "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?a:void 0,onClick:()=>{e.locked||o(e)},className:_chunk4Y233NIIjs.g.call(void 0, "flex min-h-11 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"&&_jsxruntime.jsxs.call(void 0, "span",{className:"relative aspect-video w-24 shrink-0 overflow-hidden rounded bg-neutral-200 dark:bg-neutral-800",children:[e.thumbnailUrl&&_jsxruntime.jsx.call(void 0, "img",{src:e.thumbnailUrl,alt:"",loading:"lazy",draggable:!1,className:"size-full object-cover"}),e.durationSeconds>0&&_jsxruntime.jsx.call(void 0, "span",{className:"absolute right-1 bottom-1 rounded bg-black/75 px-1 text-[10px] text-white",children:Ge(e.durationSeconds)})]}),(s==="modules"||e.kind==="test")&&_jsxruntime.jsx.call(void 0, "span",{className:"mt-0.5 shrink-0",children:_jsxruntime.jsx.call(void 0, vt,{item:e})}),_jsxruntime.jsxs.call(void 0, "span",{className:"min-w-0 flex-1",children:[_jsxruntime.jsx.call(void 0, "span",{className:"block font-medium break-words",children:e.title}),_jsxruntime.jsxs.call(void 0, "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"&&_jsxruntime.jsx.call(void 0, "span",{children:n.testBadge}),e.isFree&&!e.locked&&_jsxruntime.jsx.call(void 0, "span",{children:n.free}),s==="modules"&&e.durationSeconds>0&&_jsxruntime.jsx.call(void 0, "span",{children:Ge(e.durationSeconds)}),r&&_jsxruntime.jsx.call(void 0, "span",{children:r})]})]}),s==="playlist"&&e.kind==="lesson"&&_jsxruntime.jsx.call(void 0, "span",{className:"mt-0.5 shrink-0",children:_jsxruntime.jsx.call(void 0, vt,{item:e})})]})})}function Ct({course:e,selectedId:t,onSelect:s,variant:o,className:n}){let{texts:a}=C(),r=_react.useId.call(void 0, ),i=_react.useRef.call(void 0, null),u=_optionalChain([e, 'access', _18 => _18.sections, 'access', _19 => _19.find, 'call', _20 => _20(l=>l.items.some(p=>p.id===t)), 'optionalAccess', _21 => _21.id]),[b,A]=_react.useState.call(void 0, ()=>new Set(u?[u]:[]));_react.useEffect.call(void 0, ()=>{u&&A(l=>new Set([...l,u]))},[u]),_react.useEffect.call(void 0, ()=>{let l=_optionalChain([i, 'access', _22 => _22.current, 'optionalAccess', _23 => _23.querySelector, 'call', _24 => _24("[aria-current]")]);l&&!l.closest("[hidden]")&&_optionalChain([l, 'access', _25 => _25.scrollIntoView, 'optionalCall', _26 => _26({block:"nearest"})])},[t,b]);let V=l=>_jsxruntime.jsx.call(void 0, "ul",{className:"flex flex-col gap-1",children:l.map(p=>_jsxruntime.jsx.call(void 0, cs,{item:p,selected:p.id===t,variant:o,onSelect:s},p.id))});return _jsxruntime.jsxs.call(void 0, "nav",{ref:i,"aria-label":a.contents,className:_chunk4Y233NIIjs.g.call(void 0, "space-y-4",n),children:[e.sections.map(l=>{let p=l.items.filter(d=>d.kind==="lesson"),f=p.filter(d=>d.completed).length;return _jsxruntime.jsxs.call(void 0, "section",{"data-section-id":l.id,children:[_jsxruntime.jsx.call(void 0, "h3",{className:"mb-1 text-sm font-semibold",children:_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:"flex min-h-11 w-full items-center justify-between gap-2 rounded-lg px-2 text-left focus-visible:outline focus-visible:outline-2","aria-expanded":b.has(l.id),"aria-controls":`${r}-${l.id}`,onClick:()=>A(d=>{let N=new Set(d);return N.has(l.id)?N.delete(l.id):N.add(l.id),N}),children:[_jsxruntime.jsx.call(void 0, "span",{className:"break-words",children:l.title}),p.length>0&&_jsxruntime.jsxs.call(void 0, "span",{className:"shrink-0 text-xs font-normal text-neutral-500 dark:text-neutral-400",children:[f,"/",p.length]})]})}),_jsxruntime.jsx.call(void 0, "div",{id:`${r}-${l.id}`,hidden:!b.has(l.id),children:V(l.items)})]},l.id)}),e.finalItems.length>0&&_jsxruntime.jsx.call(void 0, "section",{"data-section-id":"final",children:V(e.finalItems)})]})}var _connect = require('@connectrpc/connect');var _codegenv2 = require('@bufbuild/protobuf/codegenv2');var _wkt = require('@bufbuild/protobuf/wkt');var ms=_codegenv2.fileDesc.call(void 0, "CiFwdWJsaWMvdjEvdXNlcl9wYW5lbF9jb3Vyc2UucHJvdG8SDXB1YmxpY19hcGkudjEiRAoPUGFuZWxMb2NrUmVhc29uEhYKDmdhdGluZ190ZXN0X2lkGAEgASgJEhkKEWdhdGluZ190ZXN0X3RpdGxlGAIgASgJIrQCCg9QYW5lbENvdXJzZUl0ZW0SCgoCaWQYASABKAkSMAoEa2luZBgCIAEoDjIiLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VJdGVtS2luZBINCgV0aXRsZRgDIAEoCRIPCgdpc19mcmVlGAQgASgIEg4KBmxvY2tlZBgFIAEoCBI4Cgtsb2NrX3JlYXNvbhgGIAEoCzIeLnB1YmxpY19hcGkudjEuUGFuZWxMb2NrUmVhc29uSACIAQESEQoJY29tcGxldGVkGAcgASgIEhgKEGR1cmF0aW9uX3NlY29uZHMYCCABKAUSGgoNdGh1bWJuYWlsX3VybBgJIAEoCUgBiAEBEg4KBmdhdGluZxgKIAEoCEIOCgxfbG9ja19yZWFzb25CEAoOX3RodW1ibmFpbF91cmwicwoSUGFuZWxDb3Vyc2VTZWN0aW9uEgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEi0KBWl0ZW1zGAQgAygLMh4ucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUl0ZW0i3wIKC1BhbmVsQ291cnNlEgoKAmlkGAEgASgJEiwKBHR5cGUYAiABKA4yHi5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlVHlwZRINCgV0aXRsZRgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCRIWCgljb3Zlcl91cmwYBSABKAlIAIgBARIVCg10b3RhbF9sZXNzb25zGAYgASgFEhkKEWNvbXBsZXRlZF9sZXNzb25zGAcgASgFEhgKEHByb2dyZXNzX3BlcmNlbnQYCCABKAUSMwoIc2VjdGlvbnMYCSADKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlU2VjdGlvbhIzCgtmaW5hbF9pdGVtcxgKIAMoCzIeLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VJdGVtEhYKDnJlc3VtZV9pdGVtX2lkGAsgASgJQgwKCl9jb3Zlcl91cmwiRAoZVXNlclBhbmVsR2V0Q291cnNlUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIosBChpVc2VyUGFuZWxHZXRDb3Vyc2VSZXNwb25zZRItCgdzdWNjZXNzGAEgASgLMhoucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAQggKBnJlc3VsdCJfCgpQYW5lbFZpZGVvEg8KB2hsc191cmwYASABKAkSFwoKcG9zdGVyX3VybBgCIAEoCUgAiAEBEhgKEGR1cmF0aW9uX3NlY29uZHMYAyABKAVCDQoLX3Bvc3Rlcl91cmwiRgoPUGFuZWxBdHRhY2htZW50EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEc2l6ZRgDIAEoAxILCgN1cmwYBCABKAkiTAoMUGFuZWxJdGVtUmVmEgoKAmlkGAEgASgJEjAKBGtpbmQYAiABKA4yIi5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlSXRlbUtpbmQigQQKC1BhbmVsTGVzc29uEgoKAmlkGAEgASgJEhIKCnNlY3Rpb25faWQYAiABKAkSDQoFdGl0bGUYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSFAoMY29udGVudF9odG1sGAUgASgJEi0KBXZpZGVvGAYgASgLMhkucHVibGljX2FwaS52MS5QYW5lbFZpZGVvSACIAQESMwoLYXR0YWNobWVudHMYByADKAsyHi5wdWJsaWNfYXBpLnYxLlBhbmVsQXR0YWNobWVudBIuCgRwcmV2GAggASgLMhsucHVibGljX2FwaS52MS5QYW5lbEl0ZW1SZWZIAYgBARIuCgRuZXh0GAkgASgLMhsucHVibGljX2FwaS52MS5QYW5lbEl0ZW1SZWZIAogBARIRCgljb21wbGV0ZWQYCiABKAgSGAoQcG9zaXRpb25fc2Vjb25kcxgLIAEoBRIRCglteV9yYXRpbmcYDCABKAUSFgoOYXZlcmFnZV9yYXRpbmcYDSABKAISFAoMcmF0aW5nX2NvdW50GA4gASgFEjcKDnVybHNfZXhwaXJlX2F0GA8gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBQggKBl92aWRlb0IHCgVfcHJldkIHCgVfbmV4dEIRCg9fdXJsc19leHBpcmVfYXQiVwoZVXNlclBhbmVsR2V0TGVzc29uUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhEKCWxlc3Nvbl9pZBgDIAEoCSKLAQoaVXNlclBhbmVsR2V0TGVzc29uUmVzcG9uc2USLQoHc3VjY2VzcxgBIAEoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25IABI0CgdmYWlsdXJlGAIgASgOMiEucHVibGljX2FwaS52MS5QYW5lbENvdXJzZUZhaWx1cmVIAEIICgZyZXN1bHQipwEKIlVzZXJQYW5lbFNhdmVMZXNzb25Qcm9ncmVzc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIRCglsZXNzb25faWQYAyABKAkSEQoJY29tcGxldGVkGAQgASgIEhgKEHBvc2l0aW9uX3NlY29uZHMYBSABKAUSGAoQZHVyYXRpb25fc2Vjb25kcxgGIAEoBSKFAgojVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2USTAoHc3VjY2VzcxgBIAEoCzI5LnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaUAoGUmVzdWx0EhEKCWNvbXBsZXRlZBgBIAEoCBIZChFjb21wbGV0ZWRfbGVzc29ucxgCIAEoBRIYChBwcm9ncmVzc19wZXJjZW50GAMgASgFQggKBnJlc3VsdCIoCgtQYW5lbENob2ljZRIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCSJPCg5QYW5lbE1jcUNvbmZpZxIrCgdjaG9pY2VzGAEgAygLMhoucHVibGljX2FwaS52MS5QYW5lbENob2ljZRIQCghtdWx0aXBsZRgCIAEoCCKCAQoTUGFuZWxUb2RvbGlzdENvbmZpZxI2CgVzdGVwcxgBIAMoCzInLnB1YmxpY19hcGkudjEuUGFuZWxUb2RvbGlzdENvbmZpZy5TdGVwGjMKBFN0ZXASCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSEAoIcmVxdWlyZWQYAyABKAgiNgoSUGFuZWxGaWxsR2FwQ29uZmlnEhAKCHRlbXBsYXRlGAEgASgJEg4KBmJsYW5rcxgCIAMoCSJBChRQYW5lbFNvcnRPcmRlckNvbmZpZxIpCgVpdGVtcxgBIAMoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxDaG9pY2UioQIKEVBhbmVsVGVzdFF1ZXN0aW9uEgoKAmlkGAEgASgJEg4KBnByb21wdBgCIAEoCRIOCgZwb2ludHMYAyABKAUSLAoDbWNxGAogASgLMh0ucHVibGljX2FwaS52MS5QYW5lbE1jcUNvbmZpZ0gAEjYKCHRvZG9saXN0GAsgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRvZG9saXN0Q29uZmlnSAASNQoIZmlsbF9nYXAYDCABKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsRmlsbEdhcENvbmZpZ0gAEjkKCnNvcnRfb3JkZXIYDSABKAsyIy5wdWJsaWNfYXBpLnYxLlBhbmVsU29ydE9yZGVyQ29uZmlnSABCCAoGY29uZmlnIqsCCglQYW5lbFRlc3QSCgoCaWQYASABKAkSDQoFdGl0bGUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDgoGZ2F0aW5nGAQgASgIEh4KFnBhc3NfdGhyZXNob2xkX3BlcmNlbnQYBSABKAUSGAoQYXR0ZW1wdHNfYWxsb3dlZBgGIAEoBRIaCg1hdHRlbXB0c19sZWZ0GAcgASgFSACIAQESFQoNYXR0ZW1wdF9jb3VudBgIIAEoBRIaChJiZXN0X3Njb3JlX3BlcmNlbnQYCSABKAUSDgoGcGFzc2VkGAogASgIEjMKCXF1ZXN0aW9ucxgLIAMoCzIgLnB1YmxpY19hcGkudjEuUGFuZWxUZXN0UXVlc3Rpb25CEAoOX2F0dGVtcHRzX2xlZnQiUwoXVXNlclBhbmVsR2V0VGVzdFJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIPCgd0ZXN0X2lkGAMgASgJIocBChhVc2VyUGFuZWxHZXRUZXN0UmVzcG9uc2USKwoHc3VjY2VzcxgBIAEoCzIYLnB1YmxpY19hcGkudjEuUGFuZWxUZXN0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSABCCAoGcmVzdWx0IiYKDlBhbmVsTWNxQW5zd2VyEhQKDHNlbGVjdGVkX2lkcxgBIAMoCSIqChNQYW5lbFRvZG9saXN0QW5zd2VyEhMKC2NoZWNrZWRfaWRzGAEgAygJIoIBChJQYW5lbEZpbGxHYXBBbnN3ZXISPQoGdmFsdWVzGAEgAygLMi0ucHVibGljX2FwaS52MS5QYW5lbEZpbGxHYXBBbnN3ZXIuVmFsdWVzRW50cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIrChRQYW5lbFNvcnRPcmRlckFuc3dlchITCgtvcmRlcmVkX2lkcxgBIAMoCSKDAgoLUGFuZWxBbnN3ZXISEwoLcXVlc3Rpb25faWQYASABKAkSLAoDbWNxGAogASgLMh0ucHVibGljX2FwaS52MS5QYW5lbE1jcUFuc3dlckgAEjYKCHRvZG9saXN0GAsgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRvZG9saXN0QW5zd2VySAASNQoIZmlsbF9nYXAYDCABKAsyIS5wdWJsaWNfYXBpLnYxLlBhbmVsRmlsbEdhcEFuc3dlckgAEjkKCnNvcnRfb3JkZXIYDSABKAsyIy5wdWJsaWNfYXBpLnYxLlBhbmVsU29ydE9yZGVyQW5zd2VySABCBwoFdmFsdWUijQEKE1BhbmVsVGVzdFN1Ym1pc3Npb24SCgoCaWQYASABKAkSFQoNc2NvcmVfcGVyY2VudBgCIAEoBRIOCgZwYXNzZWQYAyABKAgSEwoLZHVyYXRpb25fbXMYBCABKAMSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAilwEKE1BhbmVsUXVlc3Rpb25SZXN1bHQSEwoLcXVlc3Rpb25faWQYASABKAkSDwoHY29ycmVjdBgCIAEoCBIOCgZwb2ludHMYAyABKAUSNwoOY29ycmVjdF9hbnN3ZXIYBCABKAsyGi5wdWJsaWNfYXBpLnYxLlBhbmVsQW5zd2VySACIAQFCEQoPX2NvcnJlY3RfYW5zd2VyIpgBChpVc2VyUGFuZWxTdWJtaXRUZXN0UmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEg8KB3Rlc3RfaWQYAyABKAkSKwoHYW5zd2VycxgEIAMoCzIaLnB1YmxpY19hcGkudjEuUGFuZWxBbnN3ZXISEwoLZHVyYXRpb25fbXMYBSABKAMiyQIKG1VzZXJQYW5lbFN1Ym1pdFRlc3RSZXNwb25zZRJECgdzdWNjZXNzGAEgASgLMjEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxTdWJtaXRUZXN0UmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaowEKBlJlc3VsdBI2CgpzdWJtaXNzaW9uGAEgASgLMiIucHVibGljX2FwaS52MS5QYW5lbFRlc3RTdWJtaXNzaW9uEjMKB3Jlc3VsdHMYAiADKAsyIi5wdWJsaWNfYXBpLnYxLlBhbmVsUXVlc3Rpb25SZXN1bHQSGgoNYXR0ZW1wdHNfbGVmdBgDIAEoBUgAiAEBQhAKDl9hdHRlbXB0c19sZWZ0QggKBnJlc3VsdCJfCiNVc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEg8KB3Rlc3RfaWQYAyABKAkiqwIKJFVzZXJQYW5lbExpc3RUZXN0U3VibWlzc2lvbnNSZXNwb25zZRJNCgdzdWNjZXNzGAEgASgLMjoucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAadAoGUmVzdWx0EjcKC3N1Ym1pc3Npb25zGAEgAygLMiIucHVibGljX2FwaS52MS5QYW5lbFRlc3RTdWJtaXNzaW9uEhoKEmJlc3Rfc2NvcmVfcGVyY2VudBgCIAEoBRIVCg1hdHRlbXB0X2NvdW50GAMgASgFQggKBnJlc3VsdCJWChNQYW5lbFF1ZXN0aW9uQW5zd2VyEg8KB2NvbnRlbnQYASABKAkSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAizAEKE1BhbmVsTGVzc29uUXVlc3Rpb24SCgoCaWQYASABKAkSDwoHY29udGVudBgCIAEoCRITCgthdXRob3JfbmFtZRgDIAEoCRIPCgdpc19taW5lGAQgASgIEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjcKBmFuc3dlchgGIAEoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxRdWVzdGlvbkFuc3dlckgAiAEBQgkKB19hbnN3ZXIiYQojVXNlclBhbmVsTGlzdExlc3NvblF1ZXN0aW9uc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIRCglsZXNzb25faWQYAyABKAki9gEKJFVzZXJQYW5lbExpc3RMZXNzb25RdWVzdGlvbnNSZXNwb25zZRJNCgdzdWNjZXNzGAEgASgLMjoucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0TGVzc29uUXVlc3Rpb25zUmVzcG9uc2UuUmVzdWx0SAASNAoHZmFpbHVyZRgCIAEoDjIhLnB1YmxpY19hcGkudjEuUGFuZWxDb3Vyc2VGYWlsdXJlSAAaPwoGUmVzdWx0EjUKCXF1ZXN0aW9ucxgBIAMoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25RdWVzdGlvbkIICgZyZXN1bHQicAohVXNlclBhbmVsQXNrTGVzc29uUXVlc3Rpb25SZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIRCglhY2Nlc3NfaWQYAiABKAkSEQoJbGVzc29uX2lkGAMgASgJEg8KB2NvbnRlbnQYBCABKAkimwEKIlVzZXJQYW5lbEFza0xlc3NvblF1ZXN0aW9uUmVzcG9uc2USNQoHc3VjY2VzcxgBIAEoCzIiLnB1YmxpY19hcGkudjEuUGFuZWxMZXNzb25RdWVzdGlvbkgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAQggKBnJlc3VsdCJ4ChpVc2VyUGFuZWxSYXRlTGVzc29uUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhEKCWxlc3Nvbl9pZBgDIAEoCRINCgVzY29yZRgEIAEoBRIPCgdjb21tZW50GAUgASgJIu4BChtVc2VyUGFuZWxSYXRlTGVzc29uUmVzcG9uc2USRAoHc3VjY2VzcxgBIAEoCzIxLnB1YmxpY19hcGkudjEuVXNlclBhbmVsUmF0ZUxlc3NvblJlc3BvbnNlLlJlc3VsdEgAEjQKB2ZhaWx1cmUYAiABKA4yIS5wdWJsaWNfYXBpLnYxLlBhbmVsQ291cnNlRmFpbHVyZUgAGkkKBlJlc3VsdBIRCglteV9yYXRpbmcYASABKAUSFgoOYXZlcmFnZV9yYXRpbmcYAiABKAISFAoMcmF0aW5nX2NvdW50GAMgASgFQggKBnJlc3VsdCr6AgoSUGFuZWxDb3Vyc2VGYWlsdXJlEiAKHFBBTkVMX0NPVVJTRV9GQUlMVVJFX1VOS05PV04QABIlCiFQQU5FTF9DT1VSU0VfRkFJTFVSRV9VTkFVVEhPUklaRUQQARIpCiVQQU5FTF9DT1VSU0VfRkFJTFVSRV9DT1VSU0VfTk9UX0ZPVU5EEAISJwojUEFORUxfQ09VUlNFX0ZBSUxVUkVfSVRFTV9OT1RfRk9VTkQQAxIkCiBQQU5FTF9DT1VSU0VfRkFJTFVSRV9JVEVNX0xPQ0tFRBAEEikKJVBBTkVMX0NPVVJTRV9GQUlMVVJFX05PX0FUVEVNUFRTX0xFRlQQBRIpCiVQQU5FTF9DT1VSU0VfRkFJTFVSRV9JTlZBTElEX0FSR1VNRU5UEAYSJQohUEFORUxfQ09VUlNFX0ZBSUxVUkVfUkFURV9MSU1JVEVEEAcSJAogUEFORUxfQ09VUlNFX0ZBSUxVUkVfVU5BVkFJTEFCTEUQCCptCg9QYW5lbENvdXJzZVR5cGUSHQoZUEFORUxfQ09VUlNFX1RZUEVfVU5LTk9XThAAEh4KGlBBTkVMX0NPVVJTRV9UWVBFX1NUQU5EQVJEEAESGwoXUEFORUxfQ09VUlNFX1RZUEVfVklERU8QAip9ChNQYW5lbENvdXJzZUl0ZW1LaW5kEiIKHlBBTkVMX0NPVVJTRV9JVEVNX0tJTkRfVU5LTk9XThAAEiEKHVBBTkVMX0NPVVJTRV9JVEVNX0tJTkRfTEVTU09OEAESHwobUEFORUxfQ09VUlNFX0lURU1fS0lORF9URVNUEAIy+QcKFlVzZXJQYW5lbENvdXJzZVNlcnZpY2USYAoJR2V0Q291cnNlEigucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRDb3Vyc2VSZXF1ZXN0GikucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRDb3Vyc2VSZXNwb25zZRJgCglHZXRMZXNzb24SKC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldExlc3NvblJlcXVlc3QaKS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldExlc3NvblJlc3BvbnNlEnsKElNhdmVMZXNzb25Qcm9ncmVzcxIxLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVxdWVzdBoyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU2F2ZUxlc3NvblByb2dyZXNzUmVzcG9uc2USWgoHR2V0VGVzdBImLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0VGVzdFJlcXVlc3QaJy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFRlc3RSZXNwb25zZRJjCgpTdWJtaXRUZXN0EikucHVibGljX2FwaS52MS5Vc2VyUGFuZWxTdWJtaXRUZXN0UmVxdWVzdBoqLnB1YmxpY19hcGkudjEuVXNlclBhbmVsU3VibWl0VGVzdFJlc3BvbnNlEn4KE0xpc3RUZXN0U3VibWlzc2lvbnMSMi5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExpc3RUZXN0U3VibWlzc2lvbnNSZXF1ZXN0GjMucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMaXN0VGVzdFN1Ym1pc3Npb25zUmVzcG9uc2USfgoTTGlzdExlc3NvblF1ZXN0aW9ucxIyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTGlzdExlc3NvblF1ZXN0aW9uc1JlcXVlc3QaMy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExpc3RMZXNzb25RdWVzdGlvbnNSZXNwb25zZRJ4ChFBc2tMZXNzb25RdWVzdGlvbhIwLnB1YmxpY19hcGkudjEuVXNlclBhbmVsQXNrTGVzc29uUXVlc3Rpb25SZXF1ZXN0GjEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxBc2tMZXNzb25RdWVzdGlvblJlc3BvbnNlEmMKClJhdGVMZXNzb24SKS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFJhdGVMZXNzb25SZXF1ZXN0GioucHVibGljX2FwaS52MS5Vc2VyUGFuZWxSYXRlTGVzc29uUmVzcG9uc2ViBnByb3RvMw",[_wkt.file_google_protobuf_timestamp]);var Rt=_codegenv2.serviceDesc.call(void 0, ms,0);var B=class extends Error{constructor(t,s){super(_nullishCoalesce(s, () => (t))),this.name="CourseError",this.code=t}};var bs={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 fs(e){return _nullishCoalesce(bs[e], () => ("unknown"))}function xs(e){if(e instanceof B)return e;let t=_connect.ConnectError.from(e);switch(t.code){case _connect.Code.Unauthenticated:case _connect.Code.PermissionDenied:return new B("unauthorized",t.rawMessage);case _connect.Code.NotFound:return new B("course_not_found",t.rawMessage);case _connect.Code.ResourceExhausted:return new B("rate_limited",t.rawMessage);case _connect.Code.Unavailable:case _connect.Code.DeadlineExceeded:return new B("unavailable",t.rawMessage);default:return e}}function K(e){let{result:t}=e;if(t.case==="success")return t.value;throw t.case==="failure"?new B(fs(t.value)):new B("unknown","empty response")}function kt(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 As(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(kt)})),finalItems:e.finalItems.map(kt),resumeItemId:e.resumeItemId}}function Nt(e){return e==null?void 0:{id:e.id,kind:e.kind===2?"test":"lesson"}}function ys(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:Nt(e.prev),next:Nt(e.next),completed:e.completed,positionSeconds:e.positionSeconds,myRating:e.myRating,averageRating:e.averageRating,ratingCount:e.ratingCount,urlsExpireAt:e.urlsExpireAt!=null?_wkt.timestampDate.call(void 0, e.urlsExpireAt):void 0}}function Ss(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 hs(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(Ss).filter(t=>t!=null)}}function Pt(e){return{id:e.id,scorePercent:e.scorePercent,passed:e.passed,durationMs:Number(e.durationMs),createdAt:e.createdAt!=null?_wkt.timestampDate.call(void 0, e.createdAt):void 0}}function vs(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 Cs(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 Vt(e){return{id:e.id,content:e.content,authorName:e.authorName,isMine:e.isMine,createdAt:e.createdAt!=null?_wkt.timestampDate.call(void 0, e.createdAt):void 0,answer:e.answer!=null?{content:e.answer.content,createdAt:e.answer.createdAt!=null?_wkt.timestampDate.call(void 0, e.answer.createdAt):void 0}:void 0}}function Le(e,t){let s=()=>({accessId:t.accessId,accessToken:typeof t.accessToken=="function"?_nullishCoalesce(t.accessToken(), () => ("")):t.accessToken});async function o(n){try{return await n()}catch(a){throw xs(a)}}return{getCourse:()=>o(async()=>As(K(await e.getCourse(s())))),getLesson:n=>o(async()=>ys(K(await e.getLesson({...s(),lessonId:n})))),saveProgress:n=>o(async()=>{let a=K(await e.saveLessonProgress({...s(),...n}));return{completed:a.completed,completedLessons:a.completedLessons,progressPercent:a.progressPercent}}),getTest:n=>o(async()=>hs(K(await e.getTest({...s(),testId:n})))),submitTest:(n,a,r)=>o(async()=>{let i=K(await e.submitTest({...s(),testId:n,durationMs:BigInt(Math.max(0,Math.round(r))),answers:Object.entries(a).map(([u,b])=>Cs(u,b))}));if(i.submission==null)throw new B("unknown","missing submission");return{submission:Pt(i.submission),results:i.results.map(u=>({questionId:u.questionId,correct:u.correct,points:u.points,correctAnswer:u.correctAnswer!=null?vs(u.correctAnswer):void 0})),attemptsLeft:i.attemptsLeft}}),listSubmissions:n=>o(async()=>{let a=K(await e.listTestSubmissions({...s(),testId:n}));return{submissions:a.submissions.map(Pt),bestScorePercent:a.bestScorePercent,attemptCount:a.attemptCount}}),listQuestions:n=>o(async()=>K(await e.listLessonQuestions({...s(),lessonId:n})).questions.map(Vt)),askQuestion:(n,a)=>o(async()=>Vt(K(await e.askLessonQuestion({...s(),lessonId:n,content:a})))),rate:(n,a,r="")=>o(async()=>{let i=K(await e.rateLesson({...s(),lessonId:n,score:a,comment:r}));return{myRating:i.myRating,averageRating:i.averageRating,ratingCount:i.ratingCount}})}}function Be(e){let t=_nullishCoalesce(e.host, () => (_chunkYPA6MMGJjs.h.call(void 0, ))),s=_connect.createClient.call(void 0, Rt,_chunkYPA6MMGJjs.i.call(void 0, t));return Le(s,{accessId:e.accessId,accessToken:_nullishCoalesce(e.accessToken, () => ((()=>{let{projectID:o,host:n}=_chunkMDAFPGPAjs.b.call(void 0, );return _chunkMDAFPGPAjs.i.call(void 0, o,n)})))})}function Tt({value:e,onSelect:t,disabled:s}){let{texts:o}=C(),[n,a]=_react.useState.call(void 0, 0),r=n||e;return _jsxruntime.jsx.call(void 0, "div",{className:"flex items-center gap-1",role:t?"radiogroup":"img","aria-label":I(o.rateStar,{n:Math.round(e)}),children:[1,2,3,4,5].map(i=>{let u=i<=Math.round(r),b=_jsxruntime.jsx.call(void 0, _lucidereact.Star,{className:_chunk4Y233NIIjs.g.call(void 0, "size-5",u?"fill-amber-400 text-amber-400":"text-neutral-300 dark:text-neutral-600"),"aria-hidden":!0});return t?_jsxruntime.jsx.call(void 0, "button",{type:"button",role:"radio","aria-checked":i===e,"aria-label":I(o.rateStar,{n:i}),disabled:s,className:"rounded p-0.5 outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:opacity-50",onMouseEnter:()=>a(i),onMouseLeave:()=>a(0),onClick:()=>t(i),children:b},i):_jsxruntime.jsx.call(void 0, "span",{children:b},i)})})}var wt="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)))]",H=_chunk4Y233NIIjs.g.call(void 0, wt,"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 q(e,t){if(e instanceof B)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 oe({error:e,onRetry:t,className:s}){let{texts:o}=C();return _jsxruntime.jsxs.call(void 0, "div",{role:"alert",className:_chunk4Y233NIIjs.g.call(void 0, "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:[_jsxruntime.jsxs.call(void 0, "p",{className:"flex items-center gap-2 font-medium",children:[_jsxruntime.jsx.call(void 0, _lucidereact.AlertTriangle,{className:"size-4 shrink-0","aria-hidden":!0}),q(e,o)]}),t&&_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{variant:"outline",size:"sm",onClick:t,children:o.retry})]})}function Ae({label:e}){let{texts:t}=C();return _jsxruntime.jsxs.call(void 0, "div",{role:"status","aria-label":_nullishCoalesce(e, () => (t.loading)),className:"space-y-3",children:[_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.o,{className:"aspect-video w-full"}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.o,{className:"h-6 w-2/3"}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.o,{className:"h-4 w-full"}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.o,{className:"h-4 w-5/6"})]})}function It({percent:e,label:t}){let s=Math.max(0,Math.min(100,Math.round(e)));return _jsxruntime.jsx.call(void 0, "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:_jsxruntime.jsx.call(void 0, "div",{className:_chunk4Y233NIIjs.g.call(void 0, "h-full rounded-full transition-all duration-300",wt),style:{width:`${s}%`}})})}function O(e,t,s){let[o,n]=_react.useState.call(void 0, s!==void 0?{status:"success",data:s}:{status:"loading"}),[a,r]=_react.useState.call(void 0, 0),i=_react.useRef.call(void 0, 0),u=_react.useRef.call(void 0, e);u.current=e;let b=_react.useRef.call(void 0, s!==void 0);_react.useEffect.call(void 0, ()=>{if(b.current){b.current=!1;return}let p=++i.current;return n({status:"loading"}),u.current().then(f=>{p===i.current&&n({status:"success",data:f})}).catch(f=>{p===i.current&&n({status:"error",error:f})}),()=>{i.current+=1}},[...t,a]);let A=_react.useCallback.call(void 0, ()=>r(p=>p+1),[]),V=_react.useCallback.call(void 0, ()=>{let p=++i.current;u.current().then(f=>{p===i.current&&n({status:"success",data:f})}).catch(()=>{})},[]),l=_react.useCallback.call(void 0, p=>{n(f=>f.status==="success"?{status:"success",data:p(f.data)}:f)},[]);return{...o,reload:A,refresh:V,mutate:l}}function Ut({lessonId:e,initial:t}){let{dataSource:s,texts:o,preview:n}=C(),a=F(),[r,i]=_react.useState.call(void 0, t),[u,b]=_react.useState.call(void 0, t.myRating),[A,V]=_react.useState.call(void 0, ""),[l,p]=_react.useState.call(void 0, "idle"),[f,d]=_react.useState.call(void 0, );async function N(){if(!(u<1)){p("saving");try{i(await s.rate(e,u,A.trim())),p("saved"),a("lesson_rated",{lesson_id:e,rating:u})}catch(v){d(v),p("error")}}}return _jsxruntime.jsxs.call(void 0, "section",{"aria-labelledby":`rate-${e}`,className:"space-y-3",children:[_jsxruntime.jsx.call(void 0, "h3",{id:`rate-${e}`,className:"text-lg font-semibold",children:o.rateTitle}),_jsxruntime.jsx.call(void 0, Tt,{value:u,onSelect:v=>{b(v),p("idle")},disabled:n||l==="saving"}),r.ratingCount>0&&_jsxruntime.jsx.call(void 0, "p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:I(o.rateAverage,{average:r.averageRating.toFixed(1),count:r.ratingCount})}),!n&&u>0&&_jsxruntime.jsxs.call(void 0, "div",{className:"space-y-2",children:[_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.p,{value:A,maxLength:1e3,placeholder:o.ratePlaceholder,onChange:v=>{V(v.target.value),p("idle")}}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{size:"sm",className:H,disabled:l==="saving",onClick:N,children:o.rateSubmit})]}),l==="saved"&&_jsxruntime.jsx.call(void 0, "p",{role:"status",className:"text-sm text-emerald-700 dark:text-emerald-400",children:o.rateSaved}),l==="error"&&_jsxruntime.jsx.call(void 0, "p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:q(f,o)})]})}function Gt(e){return e==null?"":e.toLocaleDateString()}function Lt({lessonId:e}){let{dataSource:t,texts:s,preview:o}=C(),n=O(()=>t.listQuestions(e),[t,e]),[a,r]=_react.useState.call(void 0, ""),[i,u]=_react.useState.call(void 0, "idle"),[b,A]=_react.useState.call(void 0, );async function V(){let l=a.trim();if(l!==""){u("sending");try{let p=await t.askQuestion(e,l);n.mutate(f=>[p,...f]),r(""),u("sent")}catch(p){A(p),u("error")}}}return _jsxruntime.jsxs.call(void 0, "section",{"aria-labelledby":`qa-${e}`,className:"space-y-4",children:[_jsxruntime.jsx.call(void 0, "h3",{id:`qa-${e}`,className:"text-lg font-semibold",children:s.questionsTitle}),_jsxruntime.jsxs.call(void 0, "form",{className:"space-y-2",onSubmit:l=>{l.preventDefault(),V()},children:[_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.p,{value:a,maxLength:2e3,placeholder:s.questionPlaceholder,"aria-label":s.questionPlaceholder,onChange:l=>{r(l.target.value),u("idle")}}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{type:"submit",size:"sm",className:H,disabled:i==="sending"||a.trim()==="",children:s.questionSubmit}),i==="sent"&&_jsxruntime.jsx.call(void 0, "p",{role:"status",className:"text-sm text-emerald-700 dark:text-emerald-400",children:s.questionSent}),i==="error"&&_jsxruntime.jsx.call(void 0, "p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:q(b,s)})]}),n.status==="loading"&&_jsxruntime.jsx.call(void 0, "p",{role:"status",className:"text-sm text-neutral-500",children:s.loading}),n.status==="error"&&_jsxruntime.jsx.call(void 0, oe,{error:n.error,onRetry:n.reload}),n.status==="success"&&(n.data.length===0?_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:s.questionsEmpty}):_jsxruntime.jsx.call(void 0, "ul",{className:"space-y-3",children:n.data.map(l=>_jsxruntime.jsxs.call(void 0, "li",{className:"rounded-lg bg-neutral-100 p-3 text-sm dark:bg-neutral-800",children:[_jsxruntime.jsxs.call(void 0, "p",{className:"mb-1 text-xs text-neutral-500 dark:text-neutral-400",children:[l.isMine?s.questionMine:l.authorName,l.createdAt&&` \xB7 ${Gt(l.createdAt)}`]}),_jsxruntime.jsx.call(void 0, "p",{className:"break-words whitespace-pre-wrap",children:l.content}),l.answer&&_jsxruntime.jsxs.call(void 0, "div",{className:"mt-2 border-l-2 border-neutral-400 pl-3 dark:border-neutral-500",children:[_jsxruntime.jsxs.call(void 0, "p",{className:"mb-1 text-xs font-medium text-neutral-500 dark:text-neutral-400",children:[s.questionTeamAnswer,l.answer.createdAt&&` \xB7 ${Gt(l.answer.createdAt)}`]}),_jsxruntime.jsx.call(void 0, "p",{className:"break-words whitespace-pre-wrap",children:l.answer.content})]})]},l.id))}))]})}var _dompurify = require('dompurify'); var _dompurify2 = _interopRequireDefault(_dompurify);var ws={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 Is(e){if(e.isSupported===!1||e.sanitize==null)return()=>"";let t=e.sanitize.bind(e);return _optionalChain([e, 'access', _27 => _27.addHook, 'optionalCall', _28 => _28("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,ws))}var Bt;function ze(e){return typeof window>"u"?"":(Bt??=Is(_dompurify2.default),Bt(e))}var _hlsjs = require('hls.js'); var _hlsjs2 = _interopRequireDefault(_hlsjs);function Us(e){return e.canPlayType("application/vnd.apple.mpegurl")!==""}function Mt({src:e,poster:t,startAt:s=0,durationHint:o=0,autoPlay:n=!1,lessonId:a,onReport:r,onEnded:i,onExpired:u,className:b}){let{texts:A}=C(),V=F(),l=_react.useRef.call(void 0, V);l.current=V;let p=_react.useRef.call(void 0, null),[f,d]=_react.useState.call(void 0, !1),[N,v]=_react.useState.call(void 0, 0),x=_react.useRef.call(void 0, {onReport:r,onEnded:i,onExpired:u,durationHint:o});x.current={onReport:r,onEnded:i,onExpired:u,durationHint:o};let W=_react.useRef.call(void 0, void 0),L=_react.useCallback.call(void 0, (c,h=p.current)=>{if(h==null||x.current.onReport==null)return;let P=Math.floor(h.currentTime);if(P<=0&&c!=="ended")return;let Z=Number.isFinite(h.duration)?h.duration:x.current.durationHint;W.current=P,x.current.onReport({positionSeconds:P,durationSeconds:Math.floor(Z||0),reason:c})},[]);return _react.useEffect.call(void 0, ()=>{let c=p.current;if(c==null)return;d(!1);let h,P=!1,Z=!1,k,X=()=>{s>0&&(c.currentTime=s),n&&c.play().catch(()=>{})};Us(c)?(c.src=e,c.addEventListener("loadedmetadata",X,{once:!0})):_hlsjs2.default.isSupported()?(h=new _hlsjs2.default,h.attachMedia(c),h.loadSource(e),h.on(_hlsjs2.default.Events.MANIFEST_PARSED,X),h.on(_hlsjs2.default.Events.ERROR,(_,M)=>{if(!M.fatal)return;let Ce=_optionalChain([M, 'access', _29 => _29.response, 'optionalAccess', _30 => _30.code]);Ce===401||Ce===403?(_optionalChain([x, 'access', _31 => _31.current, 'access', _32 => _32.onExpired, 'optionalCall', _33 => _33()]),d(!0)):M.type===_hlsjs2.default.ErrorTypes.NETWORK_ERROR&&!P?(P=!0,_optionalChain([h, 'optionalAccess', _34 => _34.startLoad, 'call', _35 => _35()])):M.type===_hlsjs2.default.ErrorTypes.MEDIA_ERROR&&!Z?(Z=!0,_optionalChain([h, 'optionalAccess', _36 => _36.recoverMediaError, 'call', _37 => _37()])):d(!0)})):c.src=e;let te=()=>{clearInterval(k),k=setInterval(()=>L("periodic"),15e3)},he=()=>{clearInterval(k),c.ended||L("pause")},j=new Set,re=c.currentTime,ae=0,de=_=>{if(a!=null)for(let M of _chunkIRZJIPUFjs.s.call(void 0, _,j))l.current("video_progress",{lesson_id:a,milestone:M})},ie=()=>{let _=c.currentTime,M=Number.isFinite(c.duration)?c.duration:x.current.durationHint;M>0&&!c.seeking&&_>=re&&_-re<=2&&(ae=Math.max(ae,_),de(ae/M*100)),re=_},pe=()=>{clearInterval(k),a!=null&&!j.has(100)&&(j.add(100),l.current("video_progress",{lesson_id:a,milestone:100})),L("ended"),_optionalChain([x, 'access', _38 => _38.current, 'access', _39 => _39.onEnded, 'optionalCall', _40 => _40()])},ve=()=>{h==null&&d(!0)};return c.addEventListener("play",te),c.addEventListener("pause",he),c.addEventListener("ended",pe),c.addEventListener("error",ve),c.addEventListener("timeupdate",ie),()=>{clearInterval(k),c.removeEventListener("play",te),c.removeEventListener("pause",he),c.removeEventListener("ended",pe),c.removeEventListener("error",ve),c.removeEventListener("timeupdate",ie),c.removeEventListener("loadedmetadata",X),!c.ended&&c.currentTime>0&&L("leave",c),_optionalChain([h, 'optionalAccess', _41 => _41.destroy, 'call', _42 => _42()]),c.removeAttribute("src"),c.load()}},[e,N]),_jsxruntime.jsxs.call(void 0, "div",{className:_chunk4Y233NIIjs.g.call(void 0, "relative overflow-hidden rounded-xl bg-black",b),children:[_jsxruntime.jsx.call(void 0, "video",{ref:p,className:"aspect-video w-full",poster:t,controls:!0,playsInline:!0,preload:"metadata",controlsList:"nodownload"}),f&&_jsxruntime.jsxs.call(void 0, "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:[_jsxruntime.jsx.call(void 0, "p",{children:A.videoError}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{variant:"secondary",size:"sm",onClick:()=>{_optionalChain([x, 'access', _43 => _43.current, 'access', _44 => _44.onExpired, 'optionalCall', _45 => _45()]),v(c=>c+1)},children:A.videoRetry})]})]})}function Qt({lesson:e,mobileOutline:t,nextItem:s,position:o=0,courseType:n,prev:a,next:r,autoplay:i,onAutoplayChange:u,startPlaying:b,onNavigate:A,onProgressSaved:V,onEnded:l,onUrlsExpired:p}){let{dataSource:f,texts:d,preview:N}=C(),v=F(),[x,W]=_react.useState.call(void 0, e.completed),L=_react.useRef.call(void 0, e.completed),c=_react.useRef.call(void 0, void 0),h=_react.useRef.call(void 0, e.positionSeconds),[P,Z]=_react.useState.call(void 0, !1),[k,X]=_react.useState.call(void 0, !1),[te,he]=_react.useState.call(void 0, !1),j=_react.useId.call(void 0, ),[re,ae]=_react.useState.call(void 0, n==="video"?"lessons":"description");_react.useEffect.call(void 0, ()=>{v("lesson_started",{lesson_id:e.id,position:o})},[e.id]);let de=_optionalChain([e, 'access', _46 => _46.urlsExpireAt, 'optionalAccess', _47 => _47.getTime, 'call', _48 => _48()]);_react.useEffect.call(void 0, ()=>{if(de==null)return;let m=de-Date.now()-6e4;if(m<=0||m>2**31-1)return;let ne=setTimeout(p,m);return()=>clearTimeout(ne)},[de]);let ie=_react.useMemo.call(void 0, ()=>ze(e.contentHtml),[e.contentHtml]);async function pe(m,ne,Y){if(N)return;let be=await f.saveProgress({lessonId:e.id,completed:Y,positionSeconds:m,durationSeconds:ne});c.current=m,be.completed&&!L.current&&(L.current=!0,W(!0),he(!0),v("lesson_completed",{lesson_id:e.id,position:o})),V(e.id,be)}function ve(m){if(h.current=m.positionSeconds,N||m.reason==="periodic"&&m.positionSeconds===c.current)return;let ne=m.reason==="ended"||gt(m.positionSeconds,m.durationSeconds);pe(m.positionSeconds,m.durationSeconds,ne&&!L.current).catch(Y=>{console.warn("Saving the progress of the lesson failed",Y)})}async function _(){Z(!0);try{await pe(h.current,_nullishCoalesce(_optionalChain([e, 'access', _49 => _49.video, 'optionalAccess', _50 => _50.durationSeconds]), () => (0)),!0)}catch(m){console.warn("Marking the lesson as completed failed",m)}finally{Z(!1)}}let M=e.description.trim(),Ce=ie!==""||M!=="",se=[...n==="video"&&t?[{id:"lessons",label:_nullishCoalesce(d.lessonsTab, () => (d.contents))}]:[],{id:"description",label:_nullishCoalesce(d.descriptionTab, () => (e.title))},...e.attachments.length?[{id:"files",label:_nullishCoalesce(d.filesTab, () => (d.attachments))}]:[],{id:"questions",label:_nullishCoalesce(d.questionsTab, () => (d.questionsTitle))}],me=se.some(m=>m.id===re)?re:se[0].id,Re=m=>_chunk4Y233NIIjs.g.call(void 0, me!==m&&"hidden","lg:block"),ke=m=>({id:`${j}-panel-${m}`,role:"tabpanel","aria-labelledby":`${j}-tab-${m}`,tabIndex:0}),ge=_nullishCoalesce(_optionalChain([s, 'optionalAccess', _51 => _51.locked]), () => (!1)),Dt=!N&&_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{size:"sm",variant:x?"outline":"default",className:_chunk4Y233NIIjs.g.call(void 0, "min-h-11 h-auto whitespace-normal",!x&&H),disabled:x||P,onClick:_,children:x?d.markedComplete:d.markComplete}),Je=m=>_jsxruntime.jsxs.call(void 0, "nav",{"aria-label":_nullishCoalesce(d.lessonNavigation, () => (d.contents)),"data-lesson-navigation":m?"mobile":"desktop",className:m?"fixed inset-x-0 bottom-[var(--course-mobile-bottom,0px)] z-40 flex items-center justify-between gap-2 border-t border-neutral-200 bg-white px-3 pt-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] dark:border-neutral-700 dark:bg-neutral-900 lg:hidden":"hidden items-center justify-between gap-3 lg:flex",children:[_jsxruntime.jsxs.call(void 0, _chunkYPA6MMGJjs.k,{variant:"outline",size:"sm",className:"min-h-11",disabled:a==null,onClick:()=>a&&A(a),children:[_jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft,{"aria-hidden":!0}),m?_nullishCoalesce(d.mobilePrev, () => (d.prevItem)):d.prevItem]}),Dt,_jsxruntime.jsxs.call(void 0, _chunkYPA6MMGJjs.k,{variant:"outline",size:"sm",className:"min-h-11",disabled:r==null||ge,onClick:()=>r&&!ge&&A(r),children:[m?_nullishCoalesce(d.mobileNext, () => (d.nextItem)):d.nextItem,_jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight,{"aria-hidden":!0})]})]});return _jsxruntime.jsxs.call(void 0, "article",{"data-lesson-id":e.id,className:"min-w-0 space-y-5 pb-[calc(5rem+env(safe-area-inset-bottom)+var(--course-mobile-bottom,0px))] lg:pb-0","aria-labelledby":`lesson-${e.id}`,children:[e.video&&_jsxruntime.jsx.call(void 0, Mt,{src:e.video.hlsUrl,poster:e.video.posterUrl,lessonId:e.id,startAt:bt(h.current,e.video.durationSeconds),durationHint:e.video.durationSeconds,autoPlay:b,onReport:ve,onEnded:()=>{X(!0),l()},onExpired:p}),Je(!1),_jsxruntime.jsx.call(void 0, "div",{className:"lg:hidden",role:"tablist","aria-label":d.contents,children:_jsxruntime.jsx.call(void 0, "div",{className:"flex overflow-x-auto border-b border-neutral-200 dark:border-neutral-700",children:se.map((m,ne)=>_jsxruntime.jsx.call(void 0, "button",{type:"button",role:"tab",id:`${j}-tab-${m.id}`,"aria-selected":me===m.id,"aria-controls":`${j}-panel-${m.id}`,tabIndex:me===m.id?0:-1,className:_chunk4Y233NIIjs.g.call(void 0, "min-h-11 min-w-11 shrink-0 border-b-2 px-4 text-sm font-medium focus-visible:outline focus-visible:outline-2",me===m.id?"border-current":"border-transparent text-neutral-600 dark:text-neutral-300"),onClick:()=>ae(m.id),onKeyDown:Y=>{let be=Y.key==="ArrowRight"?1:Y.key==="ArrowLeft"?-1:0;if(!be&&Y.key!=="Home"&&Y.key!=="End")return;Y.preventDefault();let De=Y.key==="Home"?0:Y.key==="End"?se.length-1:(ne+be+se.length)%se.length;ae(se[De].id),_optionalChain([Y, 'access', _52 => _52.currentTarget, 'access', _53 => _53.parentElement, 'optionalAccess', _54 => _54.querySelectorAll, 'call', _55 => _55('[role="tab"]'), 'access', _56 => _56[De], 'optionalAccess', _57 => _57.focus, 'call', _58 => _58()])},children:m.label},m.id))})}),n==="video"&&t&&_jsxruntime.jsx.call(void 0, "div",{...ke("lessons"),className:_chunk4Y233NIIjs.g.call(void 0, z,me!=="lessons"&&"hidden","lg:hidden"),children:t}),_jsxruntime.jsxs.call(void 0, "div",{className:_chunk4Y233NIIjs.g.call(void 0, z,"space-y-5"),children:[_jsxruntime.jsx.call(void 0, "header",{className:"flex flex-wrap items-start justify-between gap-3",children:_jsxruntime.jsx.call(void 0, "h2",{id:`lesson-${e.id}`,className:"text-2xl font-semibold break-words",children:e.title})}),n==="video"&&e.video&&_jsxruntime.jsxs.call(void 0, "label",{className:"flex min-h-11 w-fit cursor-pointer items-center gap-2 text-sm text-neutral-600 dark:text-neutral-300",children:[_jsxruntime.jsx.call(void 0, "input",{type:"checkbox",checked:i,onChange:m=>u(m.target.checked)}),d.autoplay]}),_jsxruntime.jsxs.call(void 0, "div",{...ke("description"),className:Re("description"),children:[M!==""&&_jsxruntime.jsx.call(void 0, "p",{className:"text-sm break-words whitespace-pre-wrap text-neutral-700 dark:text-neutral-300",children:M}),ie!==""&&_jsxruntime.jsx.call(void 0, "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:ie}}),!Ce&&!e.video&&_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:d.noContent})]}),e.attachments.length>0&&_jsxruntime.jsx.call(void 0, "div",{...ke("files"),className:Re("files"),children:e.attachments.length>0&&_jsxruntime.jsxs.call(void 0, "section",{"aria-labelledby":`files-${e.id}`,className:"space-y-2",children:[_jsxruntime.jsxs.call(void 0, "h3",{id:`files-${e.id}`,className:"flex items-center gap-2 text-lg font-semibold",children:[_jsxruntime.jsx.call(void 0, _lucidereact.Paperclip,{className:"size-4","aria-hidden":!0}),d.attachments]}),_jsxruntime.jsx.call(void 0, "ul",{className:"space-y-2",children:e.attachments.map(m=>_jsxruntime.jsx.call(void 0, "li",{children:_jsxruntime.jsxs.call(void 0, "a",{href:m.url,target:"_blank",rel:"noopener noreferrer",download:m.name,className:"flex min-h-11 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:[_jsxruntime.jsxs.call(void 0, "span",{className:"min-w-0 break-words",children:[m.name,_jsxruntime.jsx.call(void 0, "span",{className:"ml-2 text-xs text-neutral-500 dark:text-neutral-400",children:ft(m.size)})]}),_jsxruntime.jsxs.call(void 0, "span",{className:"flex shrink-0 items-center gap-1 text-xs font-medium",children:[d.download,_jsxruntime.jsx.call(void 0, _lucidereact.Download,{className:"size-3.5","aria-hidden":!0})]})]})},m.id))})]})})]}),_jsxruntime.jsx.call(void 0, "div",{className:_chunk4Y233NIIjs.g.call(void 0, z,Re("description")),children:_jsxruntime.jsx.call(void 0, Ut,{lessonId:e.id,initial:{myRating:e.myRating,averageRating:e.averageRating,ratingCount:e.ratingCount}})}),_jsxruntime.jsx.call(void 0, "div",{...ke("questions"),className:_chunk4Y233NIIjs.g.call(void 0, z,Re("questions")),children:_jsxruntime.jsx.call(void 0, Lt,{lessonId:e.id})}),_jsxruntime.jsx.call(void 0, "p",{role:"status","aria-live":"polite",className:"text-sm text-emerald-700 dark:text-emerald-400",children:te?d.markedComplete:""}),(x||k)&&r&&s&&_jsxruntime.jsxs.call(void 0, "section",{"data-course-up-next":!0,className:_chunk4Y233NIIjs.g.call(void 0, z,"space-y-3"),children:[_jsxruntime.jsx.call(void 0, "h3",{className:"font-semibold break-words",children:I(_nullishCoalesce(d.upNext, () => (`${d.nextItem}: {title}`)),{title:s.title})}),ge&&_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-600 dark:text-neutral-300",children:s.lockReason?I(d.lockedByTest,{test:s.lockReason.gatingTestTitle}):d.locked}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{className:_chunk4Y233NIIjs.g.call(void 0, H,"min-h-11"),disabled:ge,onClick:()=>!ge&&A(r),children:_nullishCoalesce(d.openNext, () => (d.nextItem))})]}),Je(!0)]})}var Wt={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.",lessonsTab:"Lekcje",descriptionTab:"Opis",filesTab:"Pliki",questionsTab:"Pytania",upNext:"Nast\u0119pna lekcja: {title}",openNext:"Przejd\u017A dalej",courseCompleted:"Kurs uko\u0144czony",lessonNavigation:"Nawigacja lekcji",mobilePrev:"Wstecz",mobileNext:"Dalej",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.",lessonsTab:"Lessons",descriptionTab:"Description",filesTab:"Files",questionsTab:"Questions",upNext:"Next lesson: {title}",openNext:"Continue",courseCompleted:"Course completed",lessonNavigation:"Lesson navigation",mobilePrev:"Previous",mobileNext:"Next",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 Ye(e,t=_chunkQ337IQNAjs.f.call(void 0, )){return _chunkQ337IQNAjs.b.call(void 0, Wt,t,e)}function Ys({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=C();if(e.config.type!=="mcq")return null;let{choices:a,multiple:r}=e.config;return _jsxruntime.jsxs.call(void 0, "fieldset",{className:"space-y-2",disabled:s,children:[_jsxruntime.jsx.call(void 0, "legend",{className:"mb-2 text-xs text-neutral-500 dark:text-neutral-400",children:r?n.mcqMultiple:n.mcqSingle}),a.map(i=>{let u=t.selectedIds.includes(i.id);return _jsxruntime.jsxs.call(void 0, "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:[_jsxruntime.jsx.call(void 0, "input",{className:"mt-0.5",type:r?"checkbox":"radio",name:`q-${e.id}`,checked:u,onChange:()=>o({type:"mcq",selectedIds:r?u?t.selectedIds.filter(b=>b!==i.id):[...t.selectedIds,i.id]:[i.id]})}),_jsxruntime.jsx.call(void 0, "span",{className:"break-words",children:i.label})]},i.id)})]})}function Fs({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=C();return e.config.type!=="todolist"?null:_jsxruntime.jsxs.call(void 0, "fieldset",{className:"space-y-2",disabled:s,children:[_jsxruntime.jsx.call(void 0, "legend",{className:"mb-2 text-xs text-neutral-500 dark:text-neutral-400",children:n.todoHint}),e.config.steps.map(a=>{let r=t.checkedIds.includes(a.id);return _jsxruntime.jsxs.call(void 0, "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:[_jsxruntime.jsx.call(void 0, "input",{className:"mt-0.5",type:"checkbox",checked:r,onChange:()=>o({type:"todolist",checkedIds:r?t.checkedIds.filter(i=>i!==a.id):[...t.checkedIds,a.id]})}),_jsxruntime.jsxs.call(void 0, "span",{className:"break-words",children:[a.label,a.required&&_jsxruntime.jsxs.call(void 0, "span",{className:"ml-2 text-xs text-neutral-500 dark:text-neutral-400",children:["(",n.todoRequired,")"]})]})]},a.id)})]})}function _s({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=C();if(e.config.type!=="fill_gap")return null;let a=Ue(e.config.template,e.config.blanks);return _jsxruntime.jsx.call(void 0, "p",{className:"text-sm leading-10 break-words",children:a.map((r,i)=>r.type==="text"?_jsxruntime.jsx.call(void 0, "span",{className:"whitespace-pre-wrap",children:r.text},i):_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.l,{className:"mx-1 inline-block h-8 w-36 align-middle","aria-label":`${n.gapPlaceholder} ${r.id}`,placeholder:n.gapPlaceholder,disabled:s,value:_nullishCoalesce(t.values[r.id], () => ("")),onChange:u=>o({type:"fill_gap",values:{...t.values,[r.id]:u.target.value}})},i))})}function Ks({question:e,answer:t,disabled:s,onChange:o}){let{texts:n}=C();if(e.config.type!=="sort_order")return null;let a=new Map(e.config.items.map(i=>[i.id,i.label])),r=(i,u)=>o({type:"sort_order",orderedIds:yt(t.orderedIds,i,u)});return _jsxruntime.jsxs.call(void 0, "div",{className:"space-y-2",children:[_jsxruntime.jsx.call(void 0, "p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:n.sortHint}),_jsxruntime.jsx.call(void 0, "ol",{className:"space-y-2",children:t.orderedIds.map((i,u)=>_jsxruntime.jsxs.call(void 0, "li",{className:"flex items-center gap-2 rounded-lg bg-neutral-100 px-3 py-2 text-sm dark:bg-neutral-800",children:[_jsxruntime.jsxs.call(void 0, "span",{className:"w-5 text-xs text-neutral-500",children:[u+1,"."]}),_jsxruntime.jsx.call(void 0, "span",{className:"min-w-0 flex-1 break-words",children:_nullishCoalesce(a.get(i), () => (i))}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{type:"button",variant:"ghost",size:"icon-xs","aria-label":n.moveUp,disabled:s||u===0,onClick:()=>r(u,u-1),children:_jsxruntime.jsx.call(void 0, _lucidereact.ArrowUp,{"aria-hidden":!0})}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{type:"button",variant:"ghost",size:"icon-xs","aria-label":n.moveDown,disabled:s||u===t.orderedIds.length-1,onClick:()=>r(u,u+1),children:_jsxruntime.jsx.call(void 0, _lucidereact.ArrowDown,{"aria-hidden":!0})})]},i))})]})}function js({question:e,answer:t,disabled:s,onChange:o}){let n={question:e,disabled:s,onChange:o};switch(t.type){case"mcq":return _jsxruntime.jsx.call(void 0, Ys,{...n,answer:t});case"todolist":return _jsxruntime.jsx.call(void 0, Fs,{...n,answer:t});case"fill_gap":return _jsxruntime.jsx.call(void 0, _s,{...n,answer:t});case"sort_order":return _jsxruntime.jsx.call(void 0, Ks,{...n,answer:t})}}function Js({list:e}){let{texts:t}=C();return e.submissions.length===0?null:_jsxruntime.jsxs.call(void 0, "section",{className:"space-y-2",children:[_jsxruntime.jsx.call(void 0, "h3",{className:"text-sm font-semibold",children:t.testPreviousAttempts}),_jsxruntime.jsx.call(void 0, "ul",{className:"space-y-1 text-sm",children:e.submissions.map(s=>_jsxruntime.jsxs.call(void 0, "li",{className:"flex items-center gap-2 text-neutral-700 dark:text-neutral-300",children:[s.passed?_jsxruntime.jsx.call(void 0, _lucidereact.Check,{className:"size-4 text-emerald-600","aria-hidden":!0}):_jsxruntime.jsx.call(void 0, _lucidereact.X,{className:"size-4 text-red-600","aria-hidden":!0}),I(t.testAttemptRow,{percent:s.scorePercent,date:_nullishCoalesce(_optionalChain([s, 'access', _59 => _59.createdAt, 'optionalAccess', _60 => _60.toLocaleString, 'call', _61 => _61()]), () => (""))})]},s.id))})]})}function Ds({test:e,onSubmitted:t,onTryAgain:s}){let{dataSource:o,texts:n}=C(),[a,r]=_react.useState.call(void 0, {}),[i,u]=_react.useState.call(void 0, ),[b,A]=_react.useState.call(void 0, !1),[V,l]=_react.useState.call(void 0, ),p=_react.useRef.call(void 0, Date.now()),f=_react.useRef.call(void 0, e.questions).current,d=e.attemptsLeft!=null&&e.attemptsLeft<=0,N=i?i.attemptsLeft:e.attemptsLeft,v=At(f,a),x=c=>_nullishCoalesce(a[c.id], () => (xt(c.config)));async function W(){A(!0),l(void 0);try{let c={};for(let P of f)c[P.id]=x(P);let h=await o.submitTest(e.id,c,Date.now()-p.current);u(h),t(h)}catch(c){l(c)}finally{A(!1)}}let L=new Map(_optionalChain([i, 'optionalAccess', _62 => _62.results, 'access', _63 => _63.map, 'call', _64 => _64(c=>[c.questionId,c])]));return f.length===0?_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-500 dark:text-neutral-400",children:n.testNoQuestions}):_jsxruntime.jsxs.call(void 0, "form",{className:"space-y-6",onSubmit:c=>{c.preventDefault(),i==null&&!d&&W()},children:[i&&_jsxruntime.jsxs.call(void 0, "div",{role:"status",className:_chunk4Y233NIIjs.g.call(void 0, "rounded-xl p-4 text-sm",i.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:[_jsxruntime.jsx.call(void 0, "p",{className:"text-base font-semibold",children:i.submission.passed?n.testPassed:n.testFailed}),_jsxruntime.jsx.call(void 0, "p",{children:I(n.testScore,{percent:i.submission.scorePercent})})]}),_jsxruntime.jsx.call(void 0, "ol",{className:"space-y-6",children:f.map((c,h)=>{let P=L.get(c.id),Z=_optionalChain([P, 'optionalAccess', _65 => _65.correctAnswer])!=null?St(c,P.correctAnswer):"";return _jsxruntime.jsxs.call(void 0, "li",{className:"space-y-3","data-question-id":c.id,children:[_jsxruntime.jsxs.call(void 0, "p",{className:"font-medium break-words",children:[h+1,". ",c.prompt]}),_jsxruntime.jsx.call(void 0, js,{question:c,answer:x(c),disabled:i!=null||b||d,onChange:k=>r(X=>({...X,[c.id]:k}))}),P&&_jsxruntime.jsxs.call(void 0, "div",{className:_chunk4Y233NIIjs.g.call(void 0, "flex items-start gap-2 text-sm",P.correct?"text-emerald-700 dark:text-emerald-400":"text-red-700 dark:text-red-400"),children:[P.correct?_jsxruntime.jsx.call(void 0, _lucidereact.Check,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}):_jsxruntime.jsx.call(void 0, _lucidereact.X,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}),_jsxruntime.jsxs.call(void 0, "span",{children:[P.correct?n.testCorrect:n.testIncorrect,Z!==""&&!P.correct&&_jsxruntime.jsxs.call(void 0, "span",{className:"block text-neutral-700 dark:text-neutral-300",children:[n.testCorrectAnswer,": ",Z]})]})]})]},c.id)})}),V!=null&&_jsxruntime.jsx.call(void 0, "p",{role:"alert",className:"text-sm text-red-600 dark:text-red-400",children:q(V,n)}),i==null?_jsxruntime.jsxs.call(void 0, "div",{className:"space-y-2",children:[v>0&&!d&&_jsxruntime.jsx.call(void 0, "p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:I(n.testUnanswered,{count:v})}),_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{type:"submit",className:H,disabled:b||d,children:b?n.testSubmitting:n.testSubmit})]}):N!==0&&!i.submission.passed&&_jsxruntime.jsx.call(void 0, _chunkYPA6MMGJjs.k,{type:"button",variant:"outline",onClick:s,children:n.testTryAgain})]})}function Kt({testId:e,title:t,onSubmitted:s}){let{dataSource:o,texts:n}=C(),a=F(),r=O(()=>o.getTest(e),[o,e]),i=O(()=>o.listSubmissions(e).catch(()=>{}),[o,e]),[u,b]=_react.useState.call(void 0, 0);return _jsxruntime.jsxs.call(void 0, "article",{"data-test-id":e,className:_chunk4Y233NIIjs.g.call(void 0, z,"min-w-0 space-y-5"),children:[_jsxruntime.jsx.call(void 0, "h2",{className:"text-2xl font-semibold break-words",children:r.status==="success"?r.data.title:t}),r.status==="loading"&&_jsxruntime.jsx.call(void 0, Ae,{}),r.status==="error"&&_jsxruntime.jsx.call(void 0, oe,{error:r.error,onRetry:r.reload}),r.status==="success"&&_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[r.data.description.trim()!==""&&_jsxruntime.jsx.call(void 0, "p",{className:"text-sm break-words whitespace-pre-wrap text-neutral-700 dark:text-neutral-300",children:r.data.description}),_jsxruntime.jsxs.call(void 0, "ul",{className:"space-y-1 text-sm text-neutral-600 dark:text-neutral-400",children:[r.data.gating&&_jsxruntime.jsx.call(void 0, "li",{children:n.testGating}),_jsxruntime.jsx.call(void 0, "li",{children:I(n.testPassThreshold,{percent:r.data.passThresholdPercent})}),_jsxruntime.jsx.call(void 0, "li",{children:r.data.attemptsLeft==null?n.testAttemptsUnlimited:I(n.testAttemptsLeft,{count:r.data.attemptsLeft})}),r.data.attemptCount>0&&_jsxruntime.jsx.call(void 0, "li",{children:I(n.testBestScore,{percent:r.data.bestScorePercent})})]}),r.data.attemptsLeft!=null&&r.data.attemptsLeft<=0&&_jsxruntime.jsx.call(void 0, "p",{role:"alert",className:"text-sm font-medium text-red-700 dark:text-red-400",children:n.testNoAttemptsLeft}),_jsxruntime.jsx.call(void 0, Ds,{test:r.data,onSubmitted:A=>{a("test_submitted",{lesson_id:e,score_bucket:_chunkIRZJIPUFjs.r.call(void 0, A.submission.scorePercent)}),s(A),i.refresh(),r.refresh()},onTryAgain:()=>b(A=>A+1)},u),i.status==="success"&&i.data&&_jsxruntime.jsx.call(void 0, Js,{list:i.data})]})]})}var jt="bitsnap-course-autoplay";function tn(){let[e,t]=_react.useState.call(void 0, !1);_react.useEffect.call(void 0, ()=>{try{t(window.localStorage.getItem(jt)==="1")}catch (e2){}},[]);let s=_react.useCallback.call(void 0, o=>{t(o);try{window.localStorage.setItem(jt,o?"1":"0")}catch (e3){}},[]);return[e,s]}function _e(e){return e==null?void 0:{id:e.id,kind:e.kind}}function sn({item:e}){let{texts:t}=C();return _jsxruntime.jsxs.call(void 0, "div",{className:_chunk4Y233NIIjs.g.call(void 0, z,"space-y-2"),role:"status",children:[_jsxruntime.jsx.call(void 0, "h2",{className:"text-2xl font-semibold break-words",children:e.title}),_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-600 dark:text-neutral-300",children:e.lockReason?I(t.lockedPage,{test:e.lockReason.gatingTestTitle}):t.locked})]})}function nn({course:e,item:t,autoplay:s,onAutoplayChange:o,startPlaying:n,onNavigate:a,onProgressSaved:r,onEnded:i,onLocked:u,mobileOutline:b}){let{dataSource:A,texts:V}=C(),l=O(()=>A.getLesson(t.id),[A,t.id]),p=l.status==="error"&&l.error instanceof B&&l.error.code==="item_locked";if(_react.useEffect.call(void 0, ()=>{p&&u()},[p]),l.status==="loading")return _jsxruntime.jsx.call(void 0, Ae,{});if(l.status==="error")return p?_jsxruntime.jsxs.call(void 0, "div",{className:_chunk4Y233NIIjs.g.call(void 0, z,"space-y-2"),role:"alert",children:[_jsxruntime.jsx.call(void 0, "h2",{className:"text-2xl font-semibold break-words",children:t.title}),_jsxruntime.jsx.call(void 0, "p",{className:"text-sm",children:q(l.error,V)})]}):_jsxruntime.jsx.call(void 0, oe,{error:l.error,onRetry:l.reload});let f=Ee(e,t.id),d=xe(e).filter(N=>N.kind!=="test").findIndex(N=>N.id===t.id)+1;return _jsxruntime.jsx.call(void 0, Qt,{lesson:l.data,position:d,mobileOutline:b,nextItem:le(e,_optionalChain([(_nullishCoalesce(l.data.next, () => (_e(f.next)))), 'optionalAccess', _66 => _66.id])),courseType:e.type,prev:_nullishCoalesce(l.data.prev, () => (_e(f.prev))),next:_nullishCoalesce(l.data.next, () => (_e(f.next))),autoplay:s,onAutoplayChange:o,startPlaying:n,onNavigate:a,onProgressSaved:r,onEnded:i,onUrlsExpired:l.refresh},l.data.id)}function on({course:e,selectedId:t,onSelect:s,onBack:o,onCourseChange:n,onCourseRefresh:a}){let{texts:r,preview:i}=C(),u=F(),b=_react.useRef.call(void 0, null),A=_react.useId.call(void 0, ),[V,l]=_react.useState.call(void 0, !1),[p,f]=tn(),[d,N]=_react.useState.call(void 0, ),v=mt(e,t),x=le(e,v);_react.useEffect.call(void 0, ()=>{u("course_opened",{})},[e.id]);let W=(k,X=!1)=>{N(X?k:void 0),l(!1),s(k),_optionalChain([b, 'access', _67 => _67.current, 'optionalAccess', _68 => _68.scrollIntoView, 'call', _69 => _69({block:"start",behavior:"smooth"})])},L=_jsxruntime.jsx.call(void 0, Ct,{course:e,selectedId:v,variant:e.type==="video"?"playlist":"modules",onSelect:k=>W(k.id)}),c;x==null?c=_jsxruntime.jsx.call(void 0, "p",{className:"text-sm text-neutral-500",children:r.noItem}):x.locked?c=_jsxruntime.jsx.call(void 0, sn,{item:x}):x.kind==="test"?c=_jsxruntime.jsx.call(void 0, Kt,{testId:x.id,title:x.title,onSubmitted:()=>a()},x.id):c=_jsxruntime.jsx.call(void 0, nn,{course:e,item:x,autoplay:p,onAutoplayChange:f,startPlaying:d===x.id,onNavigate:k=>W(k.id),onProgressSaved:(k,X)=>n(te=>({...X.completed?pt(te,k):te,completedLessons:X.completedLessons,progressPercent:X.progressPercent})),onEnded:()=>{if(!p)return;let k=dt(e,x.id);k&&W(k.id,!0)},onLocked:a,mobileOutline:L},x.id);let h=e.type==="video",P=!h||x==null||x.locked||x.kind==="test",Z=e.resumeItemId!==""&&e.resumeItemId!==v&&_optionalChain([le, 'call', _70 => _70(e,e.resumeItemId), 'optionalAccess', _71 => _71.locked])===!1;return _jsxruntime.jsxs.call(void 0, "div",{ref:b,className:"space-y-4 scroll-mt-4",children:[_jsxruntime.jsxs.call(void 0, "header",{className:"space-y-3",children:[_jsxruntime.jsxs.call(void 0, "div",{className:"flex flex-wrap items-center gap-2",children:[o&&_jsxruntime.jsxs.call(void 0, _chunkYPA6MMGJjs.k,{variant:"ghost",size:"sm",onClick:o,children:[_jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft,{"aria-hidden":!0}),r.back]}),i&&_jsxruntime.jsx.call(void 0, "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:r.previewBadge})]}),_jsxruntime.jsxs.call(void 0, "div",{className:"flex flex-wrap items-end justify-between gap-4",children:[_jsxruntime.jsx.call(void 0, "div",{className:"min-w-0 space-y-1",children:_jsxruntime.jsx.call(void 0, "h1",{className:"text-2xl font-semibold break-words sm:text-3xl",children:e.title})}),Z&&_jsxruntime.jsxs.call(void 0, _chunkYPA6MMGJjs.k,{size:"sm",variant:"outline",onClick:()=>W(e.resumeItemId),children:[_jsxruntime.jsx.call(void 0, _lucidereact.Play,{"aria-hidden":!0}),r.continueCourse]})]}),_jsxruntime.jsxs.call(void 0, "div",{className:"max-w-xl space-y-1 md:max-w-none",children:[e.progressPercent>=100&&_jsxruntime.jsx.call(void 0, "p",{role:"status",className:"font-semibold text-emerald-700 dark:text-emerald-400",children:_nullishCoalesce(r.courseCompleted, () => (r.completed))}),_jsxruntime.jsx.call(void 0, It,{percent:e.progressPercent,label:I(r.progressPercent,{percent:e.progressPercent})}),_jsxruntime.jsxs.call(void 0, "p",{className:"text-xs text-neutral-500 dark:text-neutral-400",children:[I(r.progressLessons,{done:e.completedLessons,total:e.totalLessons})," \xB7 ",I(r.progressPercent,{percent:e.progressPercent})]})]})]}),_jsxruntime.jsxs.call(void 0, "div",{className:_chunk4Y233NIIjs.g.call(void 0, "grid gap-6",h?"lg:grid-cols-[minmax(0,1fr)_380px]":"lg:grid-cols-[320px_minmax(0,1fr)]"),children:[P&&_jsxruntime.jsx.call(void 0, "div",{className:"lg:hidden",children:_jsxruntime.jsxs.call(void 0, _chunkYPA6MMGJjs.k,{variant:"outline",size:"sm",className:"min-h-11","aria-controls":A,"aria-expanded":V,onClick:()=>l(k=>!k),children:[_jsxruntime.jsx.call(void 0, _lucidereact.List,{"aria-hidden":!0}),r.contents]})}),P&&_jsxruntime.jsx.call(void 0, "aside",{id:A,className:_chunk4Y233NIIjs.g.call(void 0, z,h&&"lg:hidden","p-3 sm:p-3 lg:sticky lg:top-4 lg:max-h-[calc(100vh-2rem)] lg:self-start lg:overflow-y-auto",V?"block":"hidden",!h&&"lg:block"),children:L}),_jsxruntime.jsx.call(void 0, "div",{className:"min-w-0","data-course-content":!0,children:c}),h&&_jsxruntime.jsx.call(void 0, "aside",{className:_chunk4Y233NIIjs.g.call(void 0, z,"hidden p-3 sm:p-3 lg:block lg:sticky lg:top-4 lg:max-h-[calc(100vh-2rem)] lg:self-start lg:overflow-y-auto"),children:L})]})]})}function rn({accessId:e,accessToken:t,dataSource:s,preview:o=!1,itemId:n,onItemChange:a,onBack:r,initialCourse:i,texts:u,locale:b,theme:A,className:V,analytics:l}){let p=_chunkKDL35KEIjs.b.call(void 0, ),f=_chunkIRZJIPUFjs.n.call(void 0, p.projectID,o?!1:l,"course"),d=_react.useMemo.call(void 0, ()=>Ye(u,b),[u,b]),N=_react.useMemo.call(void 0, ()=>{if(s)return s;if(e==null||e==="")throw new Error("PanelCourse needs an accessId or a dataSource");return Be({accessId:e,accessToken:t})},[s,e,t]),v=O(()=>N.getCourse(),[N],i),[x,W]=_react.useState.call(void 0, ),L=a?n:_nullishCoalesce(n, () => (x)),c=_react.useCallback.call(void 0, k=>{W(k),_optionalChain([a, 'optionalCall', _72 => _72(k)])},[a]),h=lt(_nullishCoalesce(_optionalChain([A, 'optionalAccess', _73 => _73.colors]), () => (_optionalChain([p, 'access', _74 => _74.theme, 'optionalAccess', _75 => _75.colors])))),P=v.status==="success"?v.data.id:void 0,Z=_react.useMemo.call(void 0, ()=>({dataSource:N,texts:d,preview:o,analytics:{courseId:P,instrument:f}}),[N,d,o,P,f]);return _jsxruntime.jsx.call(void 0, _chunkIRZJIPUFjs.l,{value:f,children:_jsxruntime.jsx.call(void 0, ut,{value:Z,children:_jsxruntime.jsxs.call(void 0, "div",{"data-bitsnap-course":!0,"data-course-type":v.status==="success"?v.data.type:void 0,style:h,className:_chunk4Y233NIIjs.g.call(void 0, "font-inter w-full max-w-7xl",V),children:[v.status==="loading"&&_jsxruntime.jsxs.call(void 0, "div",{className:"space-y-4",children:[r&&_jsxruntime.jsxs.call(void 0, _chunkYPA6MMGJjs.k,{variant:"ghost",size:"sm",onClick:r,children:[_jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft,{"aria-hidden":!0}),d.back]}),_jsxruntime.jsx.call(void 0, "p",{className:"sr-only",role:"status",children:d.loading}),_jsxruntime.jsx.call(void 0, Ae,{})]}),v.status==="error"&&_jsxruntime.jsxs.call(void 0, "div",{className:"space-y-4",children:[r&&_jsxruntime.jsxs.call(void 0, _chunkYPA6MMGJjs.k,{variant:"ghost",size:"sm",onClick:r,children:[_jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft,{"aria-hidden":!0}),d.back]}),_jsxruntime.jsx.call(void 0, oe,{error:v.error,onRetry:v.reload})]}),v.status==="success"&&_jsxruntime.jsx.call(void 0, on,{course:v.data,selectedId:L,onSelect:c,onBack:r,onCourseChange:v.mutate,onCourseRefresh:v.refresh})]})})})}exports.COURSE_TEXT_TABLES = Wt; exports.CourseError = B; exports.PanelCourse = rn; exports.createCourseDataSource = Le; exports.createRpcCourseDataSource = Be; exports.getCourseTexts = Ye; exports.sanitizeLessonHtml = ze;
|
|
2
2
|
//# sourceMappingURL=course.js.map
|