/*
 * ATTENTION: An "eval-source-map" devtool has been used.
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/app/session/page"],{

/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5CUsers%5C%5CRaymondVerhoef%5C%5CGitea%5C%5Clearning-platform%5C%5Capp%5C%5Cfrontend%5C%5Csrc%5C%5Capp%5C%5Capp%5C%5Csession%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5CUsers%5C%5CRaymondVerhoef%5C%5CGitea%5C%5Clearning-platform%5C%5Capp%5C%5Cfrontend%5C%5Csrc%5C%5Capp%5C%5Capp%5C%5Csession%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false! ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./src/app/app/session/page.tsx */ \"(app-pages-browser)/./src/app/app/session/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyQyUzQSU1QyU1Q1VzZXJzJTVDJTVDUmF5bW9uZFZlcmhvZWYlNUMlNUNHaXRlYSU1QyU1Q2xlYXJuaW5nLXBsYXRmb3JtJTVDJTVDYXBwJTVDJTVDZnJvbnRlbmQlNUMlNUNzcmMlNUMlNUNhcHAlNUMlNUNhcHAlNUMlNUNzZXNzaW9uJTVDJTVDcGFnZS50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0Qmc2VydmVyPWZhbHNlISIsIm1hcHBpbmdzIjoiQUFBQSxzTEFBeUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz85ZjEzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcUmF5bW9uZFZlcmhvZWZcXFxcR2l0ZWFcXFxcbGVhcm5pbmctcGxhdGZvcm1cXFxcYXBwXFxcXGZyb250ZW5kXFxcXHNyY1xcXFxhcHBcXFxcYXBwXFxcXHNlc3Npb25cXFxccGFnZS50c3hcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5CUsers%5C%5CRaymondVerhoef%5C%5CGitea%5C%5Clearning-platform%5C%5Capp%5C%5Cfrontend%5C%5Csrc%5C%5Capp%5C%5Capp%5C%5Csession%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/app/app/session/page.tsx":
/*!**************************************!*\
  !*** ./src/app/app/session/page.tsx ***!
  \**************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ SessionPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_pocketbase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/pocketbase */ \"(app-pages-browser)/./src/lib/pocketbase.ts\");\n/* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/auth */ \"(app-pages-browser)/./src/lib/auth.ts\");\n/* harmony import */ var _components_employee_WeekHeader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/employee/WeekHeader */ \"(app-pages-browser)/./src/components/employee/WeekHeader.tsx\");\n/* harmony import */ var _components_employee_TopicCard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/employee/TopicCard */ \"(app-pages-browser)/./src/components/employee/TopicCard.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nfunction SessionPage() {\n    _s();\n    const user = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_3__.getAuthUser)();\n    const [curriculumState, setCurriculumState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n    const [week, setWeek] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n    const [topics, setTopics] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n    const [completions, setCompletions] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n    const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n    const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n    async function load() {\n        if (!user) return;\n        setLoading(true);\n        try {\n            var _currentWeek_expand;\n            let state;\n            try {\n                const results = await _lib_pocketbase__WEBPACK_IMPORTED_MODULE_2__.pb.collection(\"employee_curriculum_state\").getFullList({\n                    filter: 'user=\"'.concat(user.id, '\"')\n                });\n                if (results.length > 0 && results[0]) {\n                    state = results[0];\n                } else {\n                    state = await _lib_pocketbase__WEBPACK_IMPORTED_MODULE_2__.pb.collection(\"employee_curriculum_state\").create({\n                        user: user.id,\n                        current_cycle: 1,\n                        current_week: 1,\n                        start_date: new Date().toISOString()\n                    });\n                }\n            } catch (e) {\n                setLoading(false);\n                return;\n            }\n            setCurriculumState(state);\n            const weekResult = await _lib_pocketbase__WEBPACK_IMPORTED_MODULE_2__.pb.collection(\"curriculum_weeks\").getFullList({\n                filter: \"week_number=\".concat(state.current_week),\n                expand: \"theme,topics\"\n            });\n            const currentWeek = weekResult[0];\n            if (!currentWeek) {\n                setLoading(false);\n                return;\n            }\n            setWeek(currentWeek);\n            if (((_currentWeek_expand = currentWeek.expand) === null || _currentWeek_expand === void 0 ? void 0 : _currentWeek_expand.topics) && currentWeek.expand.topics.length > 0) {\n                setTopics(currentWeek.expand.topics);\n            } else if (currentWeek.topics.length > 0) {\n                const topicList = await _lib_pocketbase__WEBPACK_IMPORTED_MODULE_2__.pb.collection(\"topics\").getFullList({\n                    filter: currentWeek.topics.map((id)=>'id=\"'.concat(id, '\"')).join(\"||\")\n                });\n                setTopics(topicList);\n            }\n            const compList = await _lib_pocketbase__WEBPACK_IMPORTED_MODULE_2__.pb.collection(\"session_completions\").getFullList({\n                filter: 'user=\"'.concat(user.id, '\" && week_number=').concat(state.current_week, \" && cycle=\").concat(state.current_cycle)\n            });\n            setCompletions(compList);\n            setError(null);\n        } catch (err) {\n            setError(err instanceof Error ? err.message : \"Failed to load session\");\n        } finally{\n            setLoading(false);\n        }\n    }\n    (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n        void load();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        user === null || user === void 0 ? void 0 : user.id\n    ]);\n    function handleTopicComplete(topicId) {\n        setCompletions((prev)=>{\n            var _user_id, _curriculumState_current_week, _curriculumState_current_cycle;\n            return [\n                ...prev,\n                {\n                    id: \"temp-\".concat(topicId),\n                    user: (_user_id = user === null || user === void 0 ? void 0 : user.id) !== null && _user_id !== void 0 ? _user_id : \"\",\n                    topic: topicId,\n                    micro_learning: \"\",\n                    week_number: (_curriculumState_current_week = curriculumState === null || curriculumState === void 0 ? void 0 : curriculumState.current_week) !== null && _curriculumState_current_week !== void 0 ? _curriculumState_current_week : 1,\n                    cycle: (_curriculumState_current_cycle = curriculumState === null || curriculumState === void 0 ? void 0 : curriculumState.current_cycle) !== null && _curriculumState_current_cycle !== void 0 ? _curriculumState_current_cycle : 1,\n                    completed_at: new Date().toISOString()\n                }\n            ];\n        });\n    }\n    const completedTopicIds = new Set(completions.map((c)=>c.topic));\n    if (!user) {\n        return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n            style: {\n                color: \"var(--fg-muted)\",\n                padding: \"var(--s-6)\",\n                textAlign: \"center\"\n            },\n            children: \"Not logged in.\"\n        }, void 0, false, {\n            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n            lineNumber: 116,\n            columnNumber: 7\n        }, this);\n    }\n    if (loading) {\n        return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n            style: {\n                color: \"var(--fg-muted)\",\n                padding: \"var(--s-6)\"\n            },\n            children: \"Loading your session…\"\n        }, void 0, false, {\n            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n            lineNumber: 124,\n            columnNumber: 7\n        }, this);\n    }\n    if (error) {\n        return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n            style: {\n                background: \"#f8d7da\",\n                color: \"#c0392b\",\n                borderRadius: \"var(--r-sm)\",\n                padding: \"var(--s-4)\",\n                margin: \"var(--s-4)\"\n            },\n            children: error\n        }, void 0, false, {\n            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n            lineNumber: 132,\n            columnNumber: 7\n        }, this);\n    }\n    if (!curriculumState || !week) {\n        return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n            style: {\n                textAlign: \"center\",\n                padding: \"var(--s-8) var(--s-5)\",\n                display: \"flex\",\n                flexDirection: \"column\",\n                gap: \"var(--s-4)\",\n                alignItems: \"center\"\n            },\n            children: [\n                /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n                    style: {\n                        margin: 0,\n                        fontSize: \"var(--t-h3)\",\n                        color: \"var(--fg)\"\n                    },\n                    children: \"No curriculum yet\"\n                }, void 0, false, {\n                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n                    lineNumber: 158,\n                    columnNumber: 9\n                }, this),\n                /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                    style: {\n                        margin: 0,\n                        fontSize: \"var(--t-body)\",\n                        color: \"var(--fg-muted)\"\n                    },\n                    children: \"Ask your admin to generate and activate a curriculum.\"\n                }, void 0, false, {\n                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n                    lineNumber: 161,\n                    columnNumber: 9\n                }, this)\n            ]\n        }, void 0, true, {\n            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n            lineNumber: 148,\n            columnNumber: 7\n        }, this);\n    }\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_employee_WeekHeader__WEBPACK_IMPORTED_MODULE_4__.WeekHeader, {\n                curriculumState: curriculumState,\n                week: week,\n                completedCount: completedTopicIds.size,\n                totalCount: topics.length\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n                lineNumber: 170,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: \"var(--s-3)\"\n                },\n                children: topics.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                    style: {\n                        color: \"var(--fg-muted)\",\n                        fontSize: \"var(--t-body)\",\n                        textAlign: \"center\",\n                        padding: \"var(--s-6)\"\n                    },\n                    children: \"No topics this week.\"\n                }, void 0, false, {\n                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n                    lineNumber: 179,\n                    columnNumber: 11\n                }, this) : topics.map((topic)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_employee_TopicCard__WEBPACK_IMPORTED_MODULE_5__.TopicCard, {\n                        topic: topic,\n                        weekNumber: curriculumState.current_week,\n                        userId: user.id,\n                        isCompleted: completedTopicIds.has(topic.id),\n                        onComplete: handleTopicComplete\n                    }, topic.id, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n                        lineNumber: 184,\n                        columnNumber: 13\n                    }, this))\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n                lineNumber: 177,\n                columnNumber: 7\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\app\\\\app\\\\session\\\\page.tsx\",\n        lineNumber: 169,\n        columnNumber: 5\n    }, this);\n}\n_s(SessionPage, \"r4/GDqAQzoCSXCg0br4zVJznVMM=\");\n_c = SessionPage;\nvar _c;\n$RefreshReg$(_c, \"SessionPage\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/app/session/page.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/employee/TopicCard.tsx":
/*!***********************************************!*\
  !*** ./src/components/employee/TopicCard.tsx ***!
  \***********************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   TopicCard: function() { return /* binding */ TopicCard; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_micro_learnings_MicroLearningRenderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/micro-learnings/MicroLearningRenderer */ \"(app-pages-browser)/./src/components/micro-learnings/MicroLearningRenderer.tsx\");\n/* harmony import */ var _components_ui_StatusBadge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/StatusBadge */ \"(app-pages-browser)/./src/components/ui/StatusBadge.tsx\");\n/* harmony import */ var _lib_services__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/services */ \"(app-pages-browser)/./src/lib/services.ts\");\n/* harmony import */ var _lib_hooks_usePBCollection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/hooks/usePBCollection */ \"(app-pages-browser)/./src/lib/hooks/usePBCollection.ts\");\n/* __next_internal_client_entry_do_not_use__ TopicCard auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nconst TYPE_LABELS = {\n    concept_explainer: \"Explainer\",\n    scenario_quiz: \"Quiz\",\n    misconceptions: \"Myths\",\n    how_to: \"How-to\",\n    comparison_card: \"Compare\",\n    reflection_prompt: \"Reflect\",\n    flashcard_set: \"Flashcards\",\n    case_study: \"Case study\",\n    glossary_anchor: \"Glossary\",\n    myth_vs_evidence: \"Evidence\"\n};\nfunction TopicCard(param) {\n    let { topic, weekNumber, userId, isCompleted, onComplete } = param;\n    _s();\n    const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n    const [selectedMlId, setSelectedMlId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n    const [completing, setCompleting] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n    const { items: microLearnings } = (0,_lib_hooks_usePBCollection__WEBPACK_IMPORTED_MODULE_5__.usePBCollection)(\"micro_learnings\", {\n        filter: 'topic=\"'.concat(topic.id, '\" && status=\"published\"')\n    });\n    const selectedMl = microLearnings.find((ml)=>ml.id === selectedMlId);\n    async function handleComplete() {\n        if (!selectedMl) return;\n        setCompleting(true);\n        try {\n            const payload = {\n                userId,\n                topicId: topic.id,\n                microLearningId: selectedMl.id,\n                weekNumber\n            };\n            await (0,_lib_services__WEBPACK_IMPORTED_MODULE_4__.postComplete)(payload);\n            onComplete(topic.id);\n        } catch (e) {\n        // user can retry\n        } finally{\n            setCompleting(false);\n        }\n    }\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            background: isCompleted ? \"var(--bg-warm)\" : \"var(--bg)\",\n            border: \"1.5px solid \".concat(isCompleted ? \"var(--success)\" : \"var(--cream)\"),\n            borderRadius: \"var(--r-md)\",\n            overflow: \"hidden\",\n            transition: \"border-color 200ms\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n                onClick: ()=>setExpanded((e)=>!e),\n                style: {\n                    width: \"100%\",\n                    background: \"none\",\n                    border: \"none\",\n                    padding: \"var(--s-4)\",\n                    textAlign: \"left\",\n                    cursor: \"pointer\",\n                    display: \"flex\",\n                    gap: \"var(--s-3)\",\n                    alignItems: \"flex-start\",\n                    minHeight: \"44px\",\n                    fontFamily: \"var(--font-sans)\"\n                },\n                \"aria-expanded\": expanded,\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                        style: {\n                            width: \"24px\",\n                            height: \"24px\",\n                            borderRadius: \"50%\",\n                            background: isCompleted ? \"var(--success)\" : \"var(--bg-warm)\",\n                            color: isCompleted ? \"var(--teal-900)\" : \"var(--fg-muted)\",\n                            display: \"flex\",\n                            alignItems: \"center\",\n                            justifyContent: \"center\",\n                            fontSize: \"14px\",\n                            fontWeight: 700,\n                            flexShrink: 0,\n                            marginTop: \"2px\"\n                        },\n                        children: isCompleted ? \"✓\" : \"○\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                        lineNumber: 88,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        style: {\n                            flex: 1,\n                            minWidth: 0\n                        },\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n                                style: {\n                                    margin: \"0 0 var(--s-1)\",\n                                    fontSize: \"var(--t-body)\",\n                                    fontWeight: 600,\n                                    color: isCompleted ? \"var(--fg-muted)\" : \"var(--fg)\",\n                                    textDecoration: isCompleted ? \"line-through\" : \"none\"\n                                },\n                                children: topic.title\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                                lineNumber: 107,\n                                columnNumber: 11\n                            }, this),\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                                style: {\n                                    display: \"flex\",\n                                    gap: \"var(--s-2)\",\n                                    flexWrap: \"wrap\",\n                                    alignItems: \"center\"\n                                },\n                                children: [\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_StatusBadge__WEBPACK_IMPORTED_MODULE_3__.StatusBadge, {\n                                        status: topic.difficulty\n                                    }, void 0, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                                        lineNumber: 119,\n                                        columnNumber: 13\n                                    }, this),\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                        style: {\n                                            fontSize: \"var(--t-label)\",\n                                            fontFamily: \"var(--font-mono)\",\n                                            color: \"var(--fg-subtle)\",\n                                            textTransform: \"uppercase\",\n                                            letterSpacing: \"var(--label-ls)\"\n                                        },\n                                        children: [\n                                            microLearnings.length,\n                                            \" activities\"\n                                        ]\n                                    }, void 0, true, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                                        lineNumber: 120,\n                                        columnNumber: 13\n                                    }, this)\n                                ]\n                            }, void 0, true, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                                lineNumber: 118,\n                                columnNumber: 11\n                            }, this)\n                        ]\n                    }, void 0, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                        lineNumber: 106,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                        style: {\n                            color: \"var(--fg-muted)\",\n                            fontSize: \"18px\",\n                            flexShrink: 0\n                        },\n                        children: expanded ? \"−\" : \"+\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                        lineNumber: 133,\n                        columnNumber: 9\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                lineNumber: 71,\n                columnNumber: 7\n            }, this),\n            expanded && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    padding: \"var(--s-4)\",\n                    borderTop: \"1px solid var(--cream)\",\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: \"var(--s-4)\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: 0,\n                            fontSize: \"var(--t-body)\",\n                            lineHeight: 1.65,\n                            color: \"var(--fg)\"\n                        },\n                        children: topic.body\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                        lineNumber: 149,\n                        columnNumber: 11\n                    }, this),\n                    microLearnings.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                                style: {\n                                    margin: \"0 0 var(--s-2)\",\n                                    fontSize: \"var(--t-label)\",\n                                    fontFamily: \"var(--font-mono)\",\n                                    textTransform: \"uppercase\",\n                                    letterSpacing: \"var(--label-ls)\",\n                                    color: \"var(--fg-muted)\"\n                                },\n                                children: \"Choose an activity\"\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                                lineNumber: 156,\n                                columnNumber: 15\n                            }, this),\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                                style: {\n                                    display: \"flex\",\n                                    flexWrap: \"wrap\",\n                                    gap: \"var(--s-2)\"\n                                },\n                                children: microLearnings.map((ml)=>/*#__PURE__*/ {\n                                    var _TYPE_LABELS_ml_type;\n                                    return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n                                        onClick: ()=>setSelectedMlId(ml.id === selectedMlId ? null : ml.id),\n                                        style: {\n                                            background: selectedMlId === ml.id ? \"var(--accent)\" : \"var(--bg-warm)\",\n                                            color: selectedMlId === ml.id ? \"var(--paper)\" : \"var(--fg)\",\n                                            border: \"1.5px solid \".concat(selectedMlId === ml.id ? \"var(--accent)\" : \"var(--cream)\"),\n                                            borderRadius: \"var(--r-pill)\",\n                                            padding: \"var(--s-1) var(--s-3)\",\n                                            fontSize: \"var(--t-small)\",\n                                            fontFamily: \"var(--font-sans)\",\n                                            fontWeight: 500,\n                                            cursor: \"pointer\",\n                                            minHeight: \"36px\",\n                                            transition: \"background 150ms, color 150ms\"\n                                        },\n                                        children: (_TYPE_LABELS_ml_type = TYPE_LABELS[ml.type]) !== null && _TYPE_LABELS_ml_type !== void 0 ? _TYPE_LABELS_ml_type : ml.type\n                                    }, ml.id, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                                        lineNumber: 170,\n                                        columnNumber: 19\n                                    }, this);\n                                })\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                                lineNumber: 168,\n                                columnNumber: 15\n                            }, this)\n                        ]\n                    }, void 0, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                        lineNumber: 155,\n                        columnNumber: 13\n                    }, this),\n                    selectedMl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        style: {\n                            background: \"var(--bg-warm)\",\n                            borderRadius: \"var(--r-md)\",\n                            padding: \"var(--s-4)\"\n                        },\n                        children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_micro_learnings_MicroLearningRenderer__WEBPACK_IMPORTED_MODULE_2__.MicroLearningRenderer, {\n                            content: selectedMl.content,\n                            onComplete: ()=>void handleComplete()\n                        }, void 0, false, {\n                            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                            lineNumber: 204,\n                            columnNumber: 15\n                        }, this)\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                        lineNumber: 197,\n                        columnNumber: 13\n                    }, this),\n                    isCompleted && !selectedMl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        style: {\n                            textAlign: \"center\",\n                            color: \"var(--teal-700)\",\n                            fontSize: \"var(--t-small)\",\n                            fontWeight: 500\n                        },\n                        children: \"Completed — well done!\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                        lineNumber: 212,\n                        columnNumber: 13\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n                lineNumber: 139,\n                columnNumber: 9\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\TopicCard.tsx\",\n        lineNumber: 62,\n        columnNumber: 5\n    }, this);\n}\n_s(TopicCard, \"42EV9BWcX1nWdJDTPDyla3rJAMs=\", false, function() {\n    return [\n        _lib_hooks_usePBCollection__WEBPACK_IMPORTED_MODULE_5__.usePBCollection\n    ];\n});\n_c = TopicCard;\nvar _c;\n$RefreshReg$(_c, \"TopicCard\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/employee/TopicCard.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/employee/WeekHeader.tsx":
/*!************************************************!*\
  !*** ./src/components/employee/WeekHeader.tsx ***!
  \************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   WeekHeader: function() { return /* binding */ WeekHeader; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ WeekHeader auto */ \n\nfunction WeekHeader(param) {\n    let { curriculumState, week, completedCount, totalCount } = param;\n    var _week_expand_theme, _week_expand;\n    var _week_expand_theme_title;\n    const themeName = (_week_expand_theme_title = (_week_expand = week.expand) === null || _week_expand === void 0 ? void 0 : (_week_expand_theme = _week_expand.theme) === null || _week_expand_theme === void 0 ? void 0 : _week_expand_theme.title) !== null && _week_expand_theme_title !== void 0 ? _week_expand_theme_title : \"—\";\n    const pct = totalCount > 0 ? Math.round(completedCount / totalCount * 100) : 0;\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            background: \"var(--bg-dark)\",\n            color: \"var(--paper)\",\n            borderRadius: \"var(--r-lg)\",\n            padding: \"var(--s-5)\",\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-3)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    justifyContent: \"space-between\",\n                    alignItems: \"flex-start\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                                style: {\n                                    margin: \"0 0 var(--s-1)\",\n                                    fontSize: \"var(--t-label)\",\n                                    fontFamily: \"var(--font-mono)\",\n                                    textTransform: \"uppercase\",\n                                    letterSpacing: \"var(--label-ls)\",\n                                    opacity: 0.65\n                                },\n                                children: [\n                                    \"Cycle \",\n                                    curriculumState.current_cycle,\n                                    \" \\xb7 Week \",\n                                    curriculumState.current_week\n                                ]\n                            }, void 0, true, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                                lineNumber: 30,\n                                columnNumber: 11\n                            }, this),\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n                                style: {\n                                    margin: 0,\n                                    fontSize: \"var(--t-h3)\",\n                                    fontWeight: 700,\n                                    lineHeight: 1.25\n                                },\n                                children: themeName\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                                lineNumber: 42,\n                                columnNumber: 11\n                            }, this)\n                        ]\n                    }, void 0, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                        lineNumber: 29,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        style: {\n                            textAlign: \"right\",\n                            flexShrink: 0\n                        },\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                                style: {\n                                    margin: 0,\n                                    fontSize: \"var(--t-h3)\",\n                                    fontWeight: 700\n                                },\n                                children: [\n                                    completedCount,\n                                    \"/\",\n                                    totalCount\n                                ]\n                            }, void 0, true, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                                lineNumber: 54,\n                                columnNumber: 11\n                            }, this),\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                                style: {\n                                    margin: 0,\n                                    fontSize: \"var(--t-small)\",\n                                    opacity: 0.7\n                                },\n                                children: \"topics\"\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                                lineNumber: 57,\n                                columnNumber: 11\n                            }, this)\n                        ]\n                    }, void 0, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                        lineNumber: 53,\n                        columnNumber: 9\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                lineNumber: 28,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    width: \"100%\",\n                    height: \"6px\",\n                    background: \"rgba(255,255,255,0.2)\",\n                    borderRadius: \"var(--r-pill)\",\n                    overflow: \"hidden\"\n                },\n                children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                    style: {\n                        width: \"\".concat(pct, \"%\"),\n                        height: \"100%\",\n                        background: \"var(--paper)\",\n                        borderRadius: \"var(--r-pill)\",\n                        transition: \"width 400ms ease\"\n                    }\n                }, void 0, false, {\n                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                    lineNumber: 79,\n                    columnNumber: 9\n                }, this)\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                lineNumber: 70,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    gap: \"var(--s-4)\",\n                    flexWrap: \"wrap\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                        style: {\n                            fontSize: \"var(--t-small)\",\n                            opacity: 0.75\n                        },\n                        children: [\n                            week.estimated_duration_minutes,\n                            \" min estimated\"\n                        ]\n                    }, void 0, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                        lineNumber: 91,\n                        columnNumber: 9\n                    }, this),\n                    pct === 100 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                        style: {\n                            fontSize: \"var(--t-small)\",\n                            fontWeight: 600\n                        },\n                        children: \"Week complete!\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                        lineNumber: 95,\n                        columnNumber: 11\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n                lineNumber: 90,\n                columnNumber: 7\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\employee\\\\WeekHeader.tsx\",\n        lineNumber: 17,\n        columnNumber: 5\n    }, this);\n}\n_c = WeekHeader;\nvar _c;\n$RefreshReg$(_c, \"WeekHeader\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/employee/WeekHeader.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/CaseStudy.tsx":
/*!******************************************************!*\
  !*** ./src/components/micro-learnings/CaseStudy.tsx ***!
  \******************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   CaseStudy: function() { return /* binding */ CaseStudy; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ CaseStudy auto */ \nvar _s = $RefreshSig$();\n\n\nfunction CaseStudy(param) {\n    let { content, onComplete } = param;\n    _s();\n    const [answers, setAnswers] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n    const allAnswered = content.questions.every((_, i)=>{\n        var _answers_i;\n        return ((_answers_i = answers[i]) !== null && _answers_i !== void 0 ? _answers_i : \"\").trim().length > 10;\n    });\n    function setAnswer(idx, val) {\n        setAnswers((prev)=>({\n                ...prev,\n                [idx]: val\n            }));\n    }\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-5)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    background: \"var(--bg-warm)\",\n                    borderRadius: \"var(--r-md)\",\n                    padding: \"var(--s-5)\",\n                    fontSize: \"var(--t-body)\",\n                    lineHeight: 1.7,\n                    color: \"var(--fg)\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: \"0 0 var(--s-3)\",\n                            fontSize: \"var(--t-label)\",\n                            fontFamily: \"var(--font-mono)\",\n                            textTransform: \"uppercase\",\n                            letterSpacing: \"var(--label-ls)\",\n                            color: \"var(--fg-muted)\"\n                        },\n                        children: \"Scenario\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\CaseStudy.tsx\",\n                        lineNumber: 36,\n                        columnNumber: 9\n                    }, this),\n                    content.scenario\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\CaseStudy.tsx\",\n                lineNumber: 26,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: \"var(--s-4)\"\n                },\n                children: content.questions.map((q, idx)=>/*#__PURE__*/ {\n                    var _answers_idx;\n                    return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        style: {\n                            display: \"flex\",\n                            flexDirection: \"column\",\n                            gap: \"var(--s-2)\"\n                        },\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n                                style: {\n                                    fontSize: \"var(--t-body)\",\n                                    fontWeight: 600,\n                                    color: \"var(--fg)\",\n                                    lineHeight: 1.5\n                                },\n                                children: [\n                                    idx + 1,\n                                    \". \",\n                                    q\n                                ]\n                            }, void 0, true, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\CaseStudy.tsx\",\n                                lineNumber: 54,\n                                columnNumber: 13\n                            }, this),\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n                                value: (_answers_idx = answers[idx]) !== null && _answers_idx !== void 0 ? _answers_idx : \"\",\n                                onChange: (e)=>setAnswer(idx, e.target.value),\n                                placeholder: \"Your answer…\",\n                                rows: 3,\n                                style: {\n                                    width: \"100%\",\n                                    borderRadius: \"var(--r-sm)\",\n                                    border: \"1.5px solid var(--cream)\",\n                                    padding: \"var(--s-3)\",\n                                    fontSize: \"var(--t-body)\",\n                                    fontFamily: \"var(--font-sans)\",\n                                    color: \"var(--fg)\",\n                                    background: \"var(--bg)\",\n                                    resize: \"vertical\",\n                                    outline: \"none\",\n                                    lineHeight: 1.5\n                                }\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\CaseStudy.tsx\",\n                                lineNumber: 64,\n                                columnNumber: 13\n                            }, this)\n                        ]\n                    }, idx, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\CaseStudy.tsx\",\n                        lineNumber: 53,\n                        columnNumber: 11\n                    }, this);\n                })\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\CaseStudy.tsx\",\n                lineNumber: 51,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                disabled: !allAnswered,\n                style: {\n                    alignSelf: \"flex-end\"\n                },\n                children: \"Submit reflections\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\CaseStudy.tsx\",\n                lineNumber: 87,\n                columnNumber: 7\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\CaseStudy.tsx\",\n        lineNumber: 25,\n        columnNumber: 5\n    }, this);\n}\n_s(CaseStudy, \"SlLgiTL1v/ZMs8/MrcyjPCigSRg=\");\n_c = CaseStudy;\nvar _c;\n$RefreshReg$(_c, \"CaseStudy\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/CaseStudy.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/ComparisonCard.tsx":
/*!***********************************************************!*\
  !*** ./src/components/micro-learnings/ComparisonCard.tsx ***!
  \***********************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ComparisonCard: function() { return /* binding */ ComparisonCard; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ ComparisonCard auto */ \n\n\nfunction ComparisonCard(param) {\n    let { content, onComplete } = param;\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    overflowX: \"auto\",\n                    WebkitOverflowScrolling: \"touch\"\n                },\n                children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n                    style: {\n                        width: \"100%\",\n                        borderCollapse: \"collapse\",\n                        fontSize: \"var(--t-body)\",\n                        minWidth: \"320px\"\n                    },\n                    children: [\n                        /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n                            children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n                                children: [\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n                                        style: {\n                                            width: \"28%\",\n                                            padding: \"var(--s-2) var(--s-3)\",\n                                            textAlign: \"left\",\n                                            fontSize: \"var(--t-label)\",\n                                            fontFamily: \"var(--font-mono)\",\n                                            textTransform: \"uppercase\",\n                                            letterSpacing: \"var(--label-ls)\",\n                                            color: \"var(--fg-muted)\",\n                                            border: \"1px solid var(--cream)\",\n                                            background: \"var(--bg-warm)\"\n                                        },\n                                        children: \"Dimension\"\n                                    }, void 0, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                                        lineNumber: 37,\n                                        columnNumber: 15\n                                    }, this),\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n                                        style: {\n                                            width: \"36%\",\n                                            padding: \"var(--s-2) var(--s-3)\",\n                                            textAlign: \"left\",\n                                            fontWeight: 700,\n                                            color: \"var(--teal)\",\n                                            border: \"1px solid var(--cream)\",\n                                            background: \"var(--bg-warm)\"\n                                        },\n                                        children: content.subject_a\n                                    }, void 0, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                                        lineNumber: 53,\n                                        columnNumber: 15\n                                    }, this),\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n                                        style: {\n                                            width: \"36%\",\n                                            padding: \"var(--s-2) var(--s-3)\",\n                                            textAlign: \"left\",\n                                            fontWeight: 700,\n                                            color: \"var(--accent)\",\n                                            border: \"1px solid var(--cream)\",\n                                            background: \"var(--bg-warm)\"\n                                        },\n                                        children: content.subject_b\n                                    }, void 0, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                                        lineNumber: 66,\n                                        columnNumber: 15\n                                    }, this)\n                                ]\n                            }, void 0, true, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                                lineNumber: 36,\n                                columnNumber: 13\n                            }, this)\n                        }, void 0, false, {\n                            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                            lineNumber: 35,\n                            columnNumber: 11\n                        }, this),\n                        /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n                            children: content.dimensions.map((dim, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n                                    style: {\n                                        background: idx % 2 === 0 ? \"var(--bg)\" : \"var(--bg-warm)\"\n                                    },\n                                    children: [\n                                        /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n                                            style: {\n                                                padding: \"var(--s-2) var(--s-3)\",\n                                                fontWeight: 600,\n                                                fontSize: \"var(--t-small)\",\n                                                color: \"var(--fg-muted)\",\n                                                border: \"1px solid var(--cream)\",\n                                                verticalAlign: \"top\"\n                                            },\n                                            children: dim.label\n                                        }, void 0, false, {\n                                            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                                            lineNumber: 84,\n                                            columnNumber: 17\n                                        }, this),\n                                        /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n                                            style: {\n                                                padding: \"var(--s-2) var(--s-3)\",\n                                                border: \"1px solid var(--cream)\",\n                                                verticalAlign: \"top\",\n                                                lineHeight: 1.5\n                                            },\n                                            children: dim.a\n                                        }, void 0, false, {\n                                            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                                            lineNumber: 96,\n                                            columnNumber: 17\n                                        }, this),\n                                        /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n                                            style: {\n                                                padding: \"var(--s-2) var(--s-3)\",\n                                                border: \"1px solid var(--cream)\",\n                                                verticalAlign: \"top\",\n                                                lineHeight: 1.5\n                                            },\n                                            children: dim.b\n                                        }, void 0, false, {\n                                            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                                            lineNumber: 106,\n                                            columnNumber: 17\n                                        }, this)\n                                    ]\n                                }, idx, true, {\n                                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                                    lineNumber: 83,\n                                    columnNumber: 15\n                                }, this))\n                        }, void 0, false, {\n                            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                            lineNumber: 81,\n                            columnNumber: 11\n                        }, this)\n                    ]\n                }, void 0, true, {\n                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                    lineNumber: 27,\n                    columnNumber: 9\n                }, this)\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                lineNumber: 26,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                style: {\n                    alignSelf: \"flex-end\"\n                },\n                children: \"Mark complete\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n                lineNumber: 122,\n                columnNumber: 7\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ComparisonCard.tsx\",\n        lineNumber: 25,\n        columnNumber: 5\n    }, this);\n}\n_c = ComparisonCard;\nvar _c;\n$RefreshReg$(_c, \"ComparisonCard\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/ComparisonCard.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/ConceptExplainer.tsx":
/*!*************************************************************!*\
  !*** ./src/components/micro-learnings/ConceptExplainer.tsx ***!
  \*************************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ConceptExplainer: function() { return /* binding */ ConceptExplainer; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ ConceptExplainer auto */ \n\n\nfunction ConceptExplainer(param) {\n    let { content, onComplete } = param;\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: \"var(--s-3)\"\n                },\n                children: content.paragraphs.map((para, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: 0,\n                            fontSize: \"var(--t-body)\",\n                            lineHeight: 1.65,\n                            color: \"var(--fg)\"\n                        },\n                        children: para\n                    }, i, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ConceptExplainer.tsx\",\n                        lineNumber: 21,\n                        columnNumber: 11\n                    }, this))\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ConceptExplainer.tsx\",\n                lineNumber: 19,\n                columnNumber: 7\n            }, this),\n            content.example && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    background: \"var(--bg-warm)\",\n                    borderLeft: \"4px solid var(--accent)\",\n                    borderRadius: \"var(--r-sm)\",\n                    padding: \"var(--s-4)\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: \"0 0 var(--s-2)\",\n                            fontSize: \"var(--t-label)\",\n                            fontFamily: \"var(--font-mono)\",\n                            textTransform: \"uppercase\",\n                            letterSpacing: \"var(--label-ls)\",\n                            color: \"var(--fg-muted)\"\n                        },\n                        children: \"Example\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ConceptExplainer.tsx\",\n                        lineNumber: 44,\n                        columnNumber: 11\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: 0,\n                            fontSize: \"var(--t-body)\",\n                            lineHeight: 1.6\n                        },\n                        children: content.example\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ConceptExplainer.tsx\",\n                        lineNumber: 56,\n                        columnNumber: 11\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ConceptExplainer.tsx\",\n                lineNumber: 36,\n                columnNumber: 9\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                style: {\n                    alignSelf: \"flex-end\"\n                },\n                children: \"Mark complete\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ConceptExplainer.tsx\",\n                lineNumber: 62,\n                columnNumber: 7\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ConceptExplainer.tsx\",\n        lineNumber: 18,\n        columnNumber: 5\n    }, this);\n}\n_c = ConceptExplainer;\nvar _c;\n$RefreshReg$(_c, \"ConceptExplainer\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/ConceptExplainer.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/FlashcardSet.tsx":
/*!*********************************************************!*\
  !*** ./src/components/micro-learnings/FlashcardSet.tsx ***!
  \*********************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   FlashcardSet: function() { return /* binding */ FlashcardSet; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ FlashcardSet auto */ \nvar _s = $RefreshSig$();\n\n\nfunction FlashcardSet(param) {\n    let { content, onComplete } = param;\n    _s();\n    const [currentIdx, setCurrentIdx] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n    const [flipped, setFlipped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n    const [done, setDone] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n    const card = content.cards[currentIdx];\n    const isLast = currentIdx === content.cards.length - 1;\n    function handleNext() {\n        if (isLast) {\n            setDone(true);\n        } else {\n            setCurrentIdx((i)=>i + 1);\n            setFlipped(false);\n        }\n    }\n    function handlePrev() {\n        if (currentIdx > 0) {\n            setCurrentIdx((i)=>i - 1);\n            setFlipped(false);\n        }\n    }\n    if (!card) return null;\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\",\n            alignItems: \"center\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    fontSize: \"var(--t-small)\",\n                    color: \"var(--fg-muted)\",\n                    alignSelf: \"flex-end\"\n                },\n                children: [\n                    currentIdx + 1,\n                    \" / \",\n                    content.cards.length\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                lineNumber: 48,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n                onClick: ()=>setFlipped((f)=>!f),\n                style: {\n                    width: \"100%\",\n                    minHeight: \"200px\",\n                    borderRadius: \"var(--r-lg)\",\n                    border: \"1.5px solid var(--cream)\",\n                    background: flipped ? \"var(--bg-dark)\" : \"var(--bg)\",\n                    color: flipped ? \"var(--paper)\" : \"var(--fg)\",\n                    padding: \"var(--s-6)\",\n                    fontSize: \"var(--t-lead)\",\n                    lineHeight: 1.6,\n                    cursor: \"pointer\",\n                    textAlign: \"center\",\n                    fontFamily: \"var(--font-sans)\",\n                    transition: \"background 250ms, color 250ms\",\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    alignItems: \"center\",\n                    justifyContent: \"center\",\n                    gap: \"var(--s-3)\",\n                    boxShadow: \"var(--shadow-soft)\"\n                },\n                \"aria-label\": flipped ? \"Answer — tap to see question\" : \"Question — tap to reveal answer\",\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                        style: {\n                            fontSize: \"var(--t-label)\",\n                            fontFamily: \"var(--font-mono)\",\n                            textTransform: \"uppercase\",\n                            letterSpacing: \"var(--label-ls)\",\n                            opacity: 0.65\n                        },\n                        children: flipped ? \"Answer\" : \"Question\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                        lineNumber: 77,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                        children: flipped ? card.answer : card.question\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                        lineNumber: 88,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                        style: {\n                            fontSize: \"var(--t-small)\",\n                            opacity: 0.5,\n                            marginTop: \"var(--s-2)\"\n                        },\n                        children: \"Tap to flip\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                        lineNumber: 89,\n                        columnNumber: 9\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                lineNumber: 52,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    gap: \"var(--s-3)\",\n                    width: \"100%\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                        variant: \"secondary\",\n                        onClick: handlePrev,\n                        disabled: currentIdx === 0,\n                        style: {\n                            flex: 1\n                        },\n                        children: \"Previous\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                        lineNumber: 95,\n                        columnNumber: 9\n                    }, this),\n                    flipped ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                        variant: \"primary\",\n                        onClick: handleNext,\n                        style: {\n                            flex: 1\n                        },\n                        children: isLast ? \"Finish\" : \"Next\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                        lineNumber: 104,\n                        columnNumber: 11\n                    }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                        variant: \"ghost\",\n                        onClick: ()=>setFlipped(true),\n                        style: {\n                            flex: 1\n                        },\n                        children: \"Reveal\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                        lineNumber: 108,\n                        columnNumber: 11\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                lineNumber: 94,\n                columnNumber: 7\n            }, this),\n            done && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                style: {\n                    width: \"100%\"\n                },\n                children: \"All cards done — mark complete\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n                lineNumber: 115,\n                columnNumber: 9\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\FlashcardSet.tsx\",\n        lineNumber: 47,\n        columnNumber: 5\n    }, this);\n}\n_s(FlashcardSet, \"d4IUyj9A8D2zj5rYLY1utYgGt3g=\");\n_c = FlashcardSet;\nvar _c;\n$RefreshReg$(_c, \"FlashcardSet\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/FlashcardSet.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/GlossaryAnchor.tsx":
/*!***********************************************************!*\
  !*** ./src/components/micro-learnings/GlossaryAnchor.tsx ***!
  \***********************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   GlossaryAnchor: function() { return /* binding */ GlossaryAnchor; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ GlossaryAnchor auto */ \n\n\nfunction GlossaryAnchor(param) {\n    let { content, onComplete } = param;\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    background: \"var(--bg-dark)\",\n                    color: \"var(--paper)\",\n                    borderRadius: \"var(--r-lg)\",\n                    padding: \"var(--s-5)\",\n                    textAlign: \"center\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: \"0 0 var(--s-2)\",\n                            fontSize: \"var(--t-label)\",\n                            fontFamily: \"var(--font-mono)\",\n                            textTransform: \"uppercase\",\n                            letterSpacing: \"var(--label-ls)\",\n                            opacity: 0.65\n                        },\n                        children: \"Term\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                        lineNumber: 30,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n                        style: {\n                            margin: \"0 0 var(--s-4)\",\n                            fontSize: \"var(--t-h3)\",\n                            fontWeight: 700,\n                            fontFamily: \"var(--font-sans)\"\n                        },\n                        children: content.term\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                        lineNumber: 42,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: 0,\n                            fontSize: \"var(--t-body)\",\n                            lineHeight: 1.65,\n                            opacity: 0.9\n                        },\n                        children: content.definition\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                        lineNumber: 52,\n                        columnNumber: 9\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                lineNumber: 21,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: \"var(--s-3)\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Section, {\n                        label: \"Correct use\",\n                        text: content.correct_use,\n                        borderColor: \"var(--success)\",\n                        labelColor: \"var(--teal-700)\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                        lineNumber: 58,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Section, {\n                        label: \"Common misuse\",\n                        text: content.misuse,\n                        borderColor: \"#f5c6cb\",\n                        labelColor: \"#c0392b\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                        lineNumber: 64,\n                        columnNumber: 9\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                lineNumber: 57,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                style: {\n                    alignSelf: \"flex-end\"\n                },\n                children: \"Got it\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                lineNumber: 72,\n                columnNumber: 7\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n        lineNumber: 20,\n        columnNumber: 5\n    }, this);\n}\n_c = GlossaryAnchor;\nfunction Section(param) {\n    let { label, text, borderColor, labelColor } = param;\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            borderLeft: \"4px solid \".concat(borderColor),\n            background: \"var(--bg-warm)\",\n            borderRadius: \"var(--r-sm)\",\n            padding: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                style: {\n                    margin: \"0 0 var(--s-2)\",\n                    fontSize: \"var(--t-label)\",\n                    fontFamily: \"var(--font-mono)\",\n                    textTransform: \"uppercase\",\n                    letterSpacing: \"var(--label-ls)\",\n                    color: labelColor\n                },\n                children: label\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                lineNumber: 99,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                style: {\n                    margin: 0,\n                    fontSize: \"var(--t-body)\",\n                    lineHeight: 1.6,\n                    color: \"var(--fg)\"\n                },\n                children: text\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n                lineNumber: 111,\n                columnNumber: 7\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\GlossaryAnchor.tsx\",\n        lineNumber: 91,\n        columnNumber: 5\n    }, this);\n}\n_c1 = Section;\nvar _c, _c1;\n$RefreshReg$(_c, \"GlossaryAnchor\");\n$RefreshReg$(_c1, \"Section\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/GlossaryAnchor.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/HowTo.tsx":
/*!**************************************************!*\
  !*** ./src/components/micro-learnings/HowTo.tsx ***!
  \**************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   HowTo: function() { return /* binding */ HowTo; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ HowTo auto */ \nvar _s = $RefreshSig$();\n\n\nfunction HowTo(param) {\n    let { content, onComplete } = param;\n    _s();\n    const [checked, setChecked] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(new Set());\n    const allDone = checked.size === content.steps.length;\n    function toggle(num) {\n        setChecked((prev)=>{\n            const next = new Set(prev);\n            if (next.has(num)) {\n                next.delete(num);\n            } else {\n                next.add(num);\n            }\n            return next;\n        });\n    }\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ol\", {\n                style: {\n                    margin: 0,\n                    padding: 0,\n                    listStyle: \"none\",\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: \"var(--s-2)\"\n                },\n                children: content.steps.map((step)=>{\n                    const done = checked.has(step.number);\n                    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n                        children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n                            onClick: ()=>toggle(step.number),\n                            style: {\n                                width: \"100%\",\n                                background: done ? \"var(--bg-warm)\" : \"var(--bg)\",\n                                border: \"1.5px solid var(--cream)\",\n                                borderRadius: \"var(--r-sm)\",\n                                padding: \"var(--s-3) var(--s-4)\",\n                                textAlign: \"left\",\n                                fontSize: \"var(--t-body)\",\n                                color: done ? \"var(--fg-muted)\" : \"var(--fg)\",\n                                fontFamily: \"var(--font-sans)\",\n                                cursor: \"pointer\",\n                                minHeight: \"44px\",\n                                display: \"flex\",\n                                gap: \"var(--s-3)\",\n                                alignItems: \"flex-start\",\n                                transition: \"background 150ms\"\n                            },\n                            children: [\n                                /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                    style: {\n                                        width: \"28px\",\n                                        height: \"28px\",\n                                        borderRadius: \"50%\",\n                                        background: done ? \"var(--success)\" : \"var(--cream)\",\n                                        color: done ? \"var(--teal-900)\" : \"var(--fg-muted)\",\n                                        display: \"flex\",\n                                        alignItems: \"center\",\n                                        justifyContent: \"center\",\n                                        fontSize: \"var(--t-small)\",\n                                        fontWeight: 700,\n                                        flexShrink: 0\n                                    },\n                                    children: done ? \"✓\" : step.number\n                                }, void 0, false, {\n                                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\HowTo.tsx\",\n                                    lineNumber: 63,\n                                    columnNumber: 17\n                                }, this),\n                                /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                    style: {\n                                        textDecoration: done ? \"line-through\" : \"none\",\n                                        lineHeight: 1.6\n                                    },\n                                    children: step.instruction\n                                }, void 0, false, {\n                                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\HowTo.tsx\",\n                                    lineNumber: 80,\n                                    columnNumber: 17\n                                }, this)\n                            ]\n                        }, void 0, true, {\n                            fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\HowTo.tsx\",\n                            lineNumber: 43,\n                            columnNumber: 15\n                        }, this)\n                    }, step.number, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\HowTo.tsx\",\n                        lineNumber: 42,\n                        columnNumber: 13\n                    }, this);\n                })\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\HowTo.tsx\",\n                lineNumber: 38,\n                columnNumber: 7\n            }, this),\n            allDone && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                style: {\n                    alignSelf: \"flex-end\"\n                },\n                children: \"All done — continue\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\HowTo.tsx\",\n                lineNumber: 90,\n                columnNumber: 9\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\HowTo.tsx\",\n        lineNumber: 37,\n        columnNumber: 5\n    }, this);\n}\n_s(HowTo, \"AD7St2U9a/tmdDB34+9yl3/IsaY=\");\n_c = HowTo;\nvar _c;\n$RefreshReg$(_c, \"HowTo\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/HowTo.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/MicroLearningRenderer.tsx":
/*!******************************************************************!*\
  !*** ./src/components/micro-learnings/MicroLearningRenderer.tsx ***!
  \******************************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   MicroLearningRenderer: function() { return /* binding */ MicroLearningRenderer; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _ConceptExplainer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ConceptExplainer */ \"(app-pages-browser)/./src/components/micro-learnings/ConceptExplainer.tsx\");\n/* harmony import */ var _ScenarioQuiz__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ScenarioQuiz */ \"(app-pages-browser)/./src/components/micro-learnings/ScenarioQuiz.tsx\");\n/* harmony import */ var _Misconceptions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Misconceptions */ \"(app-pages-browser)/./src/components/micro-learnings/Misconceptions.tsx\");\n/* harmony import */ var _HowTo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./HowTo */ \"(app-pages-browser)/./src/components/micro-learnings/HowTo.tsx\");\n/* harmony import */ var _ComparisonCard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ComparisonCard */ \"(app-pages-browser)/./src/components/micro-learnings/ComparisonCard.tsx\");\n/* harmony import */ var _ReflectionPrompt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ReflectionPrompt */ \"(app-pages-browser)/./src/components/micro-learnings/ReflectionPrompt.tsx\");\n/* harmony import */ var _FlashcardSet__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./FlashcardSet */ \"(app-pages-browser)/./src/components/micro-learnings/FlashcardSet.tsx\");\n/* harmony import */ var _CaseStudy__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./CaseStudy */ \"(app-pages-browser)/./src/components/micro-learnings/CaseStudy.tsx\");\n/* harmony import */ var _GlossaryAnchor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./GlossaryAnchor */ \"(app-pages-browser)/./src/components/micro-learnings/GlossaryAnchor.tsx\");\n/* harmony import */ var _MythVsEvidence__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./MythVsEvidence */ \"(app-pages-browser)/./src/components/micro-learnings/MythVsEvidence.tsx\");\n/* __next_internal_client_entry_do_not_use__ MicroLearningRenderer auto */ \n\n\n\n\n\n\n\n\n\n\n\nfunction MicroLearningRenderer(param) {\n    let { content, onComplete } = param;\n    switch(content.type){\n        case \"concept_explainer\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_ConceptExplainer__WEBPACK_IMPORTED_MODULE_2__.ConceptExplainer, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 23,\n                columnNumber: 14\n            }, this);\n        case \"scenario_quiz\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_ScenarioQuiz__WEBPACK_IMPORTED_MODULE_3__.ScenarioQuiz, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 25,\n                columnNumber: 14\n            }, this);\n        case \"misconceptions\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_Misconceptions__WEBPACK_IMPORTED_MODULE_4__.Misconceptions, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 27,\n                columnNumber: 14\n            }, this);\n        case \"how_to\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_HowTo__WEBPACK_IMPORTED_MODULE_5__.HowTo, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 29,\n                columnNumber: 14\n            }, this);\n        case \"comparison_card\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_ComparisonCard__WEBPACK_IMPORTED_MODULE_6__.ComparisonCard, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 31,\n                columnNumber: 14\n            }, this);\n        case \"reflection_prompt\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_ReflectionPrompt__WEBPACK_IMPORTED_MODULE_7__.ReflectionPrompt, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 33,\n                columnNumber: 14\n            }, this);\n        case \"flashcard_set\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_FlashcardSet__WEBPACK_IMPORTED_MODULE_8__.FlashcardSet, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 35,\n                columnNumber: 14\n            }, this);\n        case \"case_study\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_CaseStudy__WEBPACK_IMPORTED_MODULE_9__.CaseStudy, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 37,\n                columnNumber: 14\n            }, this);\n        case \"glossary_anchor\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_GlossaryAnchor__WEBPACK_IMPORTED_MODULE_10__.GlossaryAnchor, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 39,\n                columnNumber: 14\n            }, this);\n        case \"myth_vs_evidence\":\n            return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_MythVsEvidence__WEBPACK_IMPORTED_MODULE_11__.MythVsEvidence, {\n                content: content,\n                onComplete: onComplete\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                lineNumber: 41,\n                columnNumber: 14\n            }, this);\n        default:\n            {\n                const _exhaustive = content;\n                return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                    style: {\n                        color: \"var(--fg-muted)\",\n                        fontSize: \"var(--t-body)\"\n                    },\n                    children: \"Unknown content type.\"\n                }, void 0, false, {\n                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MicroLearningRenderer.tsx\",\n                    lineNumber: 45,\n                    columnNumber: 9\n                }, this);\n            }\n    }\n}\n_c = MicroLearningRenderer;\nvar _c;\n$RefreshReg$(_c, \"MicroLearningRenderer\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/MicroLearningRenderer.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/Misconceptions.tsx":
/*!***********************************************************!*\
  !*** ./src/components/micro-learnings/Misconceptions.tsx ***!
  \***********************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Misconceptions: function() { return /* binding */ Misconceptions; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ Misconceptions auto */ \nvar _s = $RefreshSig$();\n\n\nfunction Misconceptions(param) {\n    let { content, onComplete } = param;\n    _s();\n    const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(new Set());\n    function toggle(idx) {\n        setExpanded((prev)=>{\n            const next = new Set(prev);\n            if (next.has(idx)) {\n                next.delete(idx);\n            } else {\n                next.add(idx);\n            }\n            return next;\n        });\n    }\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: \"var(--s-2)\"\n                },\n                children: content.items.map((item, idx)=>{\n                    const open = expanded.has(idx);\n                    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        style: {\n                            border: \"1.5px solid var(--cream)\",\n                            borderRadius: \"var(--r-sm)\",\n                            overflow: \"hidden\"\n                        },\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n                                onClick: ()=>toggle(idx),\n                                style: {\n                                    width: \"100%\",\n                                    background: open ? \"var(--bg-warm)\" : \"var(--bg)\",\n                                    border: \"none\",\n                                    padding: \"var(--s-3) var(--s-4)\",\n                                    textAlign: \"left\",\n                                    fontSize: \"var(--t-body)\",\n                                    color: \"var(--fg)\",\n                                    fontFamily: \"var(--font-sans)\",\n                                    cursor: \"pointer\",\n                                    minHeight: \"44px\",\n                                    display: \"flex\",\n                                    alignItems: \"center\",\n                                    justifyContent: \"space-between\",\n                                    gap: \"var(--s-3)\",\n                                    fontWeight: 500\n                                },\n                                \"aria-expanded\": open,\n                                children: [\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                        children: [\n                                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                                style: {\n                                                    fontSize: \"var(--t-label)\",\n                                                    fontFamily: \"var(--font-mono)\",\n                                                    textTransform: \"uppercase\",\n                                                    letterSpacing: \"var(--label-ls)\",\n                                                    color: \"#c0392b\",\n                                                    marginRight: \"var(--s-2)\"\n                                                },\n                                                children: \"Myth\"\n                                            }, void 0, false, {\n                                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                                                lineNumber: 71,\n                                                columnNumber: 19\n                                            }, this),\n                                            item.misconception\n                                        ]\n                                    }, void 0, true, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                                        lineNumber: 70,\n                                        columnNumber: 17\n                                    }, this),\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                        style: {\n                                            flexShrink: 0,\n                                            fontSize: \"18px\",\n                                            color: \"var(--fg-muted)\"\n                                        },\n                                        children: open ? \"−\" : \"+\"\n                                    }, void 0, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                                        lineNumber: 85,\n                                        columnNumber: 17\n                                    }, this)\n                                ]\n                            }, void 0, true, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                                lineNumber: 49,\n                                columnNumber: 15\n                            }, this),\n                            open && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                                style: {\n                                    padding: \"var(--s-3) var(--s-4)\",\n                                    background: \"var(--bg)\",\n                                    borderTop: \"1px solid var(--cream)\",\n                                    fontSize: \"var(--t-body)\",\n                                    lineHeight: 1.6,\n                                    color: \"var(--fg)\"\n                                },\n                                children: [\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                        style: {\n                                            fontSize: \"var(--t-label)\",\n                                            fontFamily: \"var(--font-mono)\",\n                                            textTransform: \"uppercase\",\n                                            letterSpacing: \"var(--label-ls)\",\n                                            color: \"var(--teal-700)\",\n                                            marginRight: \"var(--s-2)\"\n                                        },\n                                        children: \"Correction\"\n                                    }, void 0, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                                        lineNumber: 100,\n                                        columnNumber: 19\n                                    }, this),\n                                    item.correction\n                                ]\n                            }, void 0, true, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                                lineNumber: 90,\n                                columnNumber: 17\n                            }, this)\n                        ]\n                    }, idx, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                        lineNumber: 41,\n                        columnNumber: 13\n                    }, this);\n                })\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                lineNumber: 37,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                style: {\n                    alignSelf: \"flex-end\"\n                },\n                children: \"Mark complete\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n                lineNumber: 120,\n                columnNumber: 7\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\Misconceptions.tsx\",\n        lineNumber: 36,\n        columnNumber: 5\n    }, this);\n}\n_s(Misconceptions, \"4ho8Kr9k+pdp5cMvSxagaqUz+2k=\");\n_c = Misconceptions;\nvar _c;\n$RefreshReg$(_c, \"Misconceptions\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/Misconceptions.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/MythVsEvidence.tsx":
/*!***********************************************************!*\
  !*** ./src/components/micro-learnings/MythVsEvidence.tsx ***!
  \***********************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   MythVsEvidence: function() { return /* binding */ MythVsEvidence; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ MythVsEvidence auto */ \nvar _s = $RefreshSig$();\n\n\nfunction MythVsEvidence(param) {\n    let { content, onComplete } = param;\n    _s();\n    const [revealed, setRevealed] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    background: \"#f8d7da\",\n                    borderRadius: \"var(--r-md)\",\n                    padding: \"var(--s-5)\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: \"0 0 var(--s-2)\",\n                            fontSize: \"var(--t-label)\",\n                            fontFamily: \"var(--font-mono)\",\n                            textTransform: \"uppercase\",\n                            letterSpacing: \"var(--label-ls)\",\n                            color: \"#c0392b\"\n                        },\n                        children: \"Myth\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                        lineNumber: 29,\n                        columnNumber: 9\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: 0,\n                            fontSize: \"var(--t-body)\",\n                            lineHeight: 1.65,\n                            color: \"var(--fg)\"\n                        },\n                        children: content.myth\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                        lineNumber: 41,\n                        columnNumber: 9\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                lineNumber: 22,\n                columnNumber: 7\n            }, this),\n            !revealed ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"secondary\",\n                onClick: ()=>setRevealed(true),\n                children: \"Reveal the evidence\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                lineNumber: 47,\n                columnNumber: 9\n            }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        style: {\n                            background: \"var(--bg-warm)\",\n                            borderLeft: \"4px solid var(--success)\",\n                            borderRadius: \"var(--r-sm)\",\n                            padding: \"var(--s-5)\",\n                            animation: \"fadeIn 300ms ease\"\n                        },\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                                style: {\n                                    margin: \"0 0 var(--s-2)\",\n                                    fontSize: \"var(--t-label)\",\n                                    fontFamily: \"var(--font-mono)\",\n                                    textTransform: \"uppercase\",\n                                    letterSpacing: \"var(--label-ls)\",\n                                    color: \"var(--teal-700)\"\n                                },\n                                children: \"Evidence\"\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                                lineNumber: 61,\n                                columnNumber: 13\n                            }, this),\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                                style: {\n                                    margin: 0,\n                                    fontSize: \"var(--t-body)\",\n                                    lineHeight: 1.65,\n                                    color: \"var(--fg)\"\n                                },\n                                children: content.evidence\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                                lineNumber: 73,\n                                columnNumber: 13\n                            }, this)\n                        ]\n                    }, void 0, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                        lineNumber: 52,\n                        columnNumber: 11\n                    }, this),\n                    content.sources.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                                style: {\n                                    margin: \"0 0 var(--s-2)\",\n                                    fontSize: \"var(--t-label)\",\n                                    fontFamily: \"var(--font-mono)\",\n                                    textTransform: \"uppercase\",\n                                    letterSpacing: \"var(--label-ls)\",\n                                    color: \"var(--fg-subtle)\"\n                                },\n                                children: \"Sources\"\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                                lineNumber: 80,\n                                columnNumber: 15\n                            }, this),\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n                                style: {\n                                    margin: 0,\n                                    padding: \"0 0 0 var(--s-4)\"\n                                },\n                                children: content.sources.map((src, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n                                        style: {\n                                            fontSize: \"var(--t-small)\",\n                                            color: \"var(--fg-muted)\",\n                                            lineHeight: 1.6\n                                        },\n                                        children: src\n                                    }, i, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                                        lineNumber: 94,\n                                        columnNumber: 19\n                                    }, this))\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                                lineNumber: 92,\n                                columnNumber: 15\n                            }, this)\n                        ]\n                    }, void 0, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                        lineNumber: 79,\n                        columnNumber: 13\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                        variant: \"primary\",\n                        onClick: onComplete,\n                        style: {\n                            alignSelf: \"flex-end\"\n                        },\n                        children: \"Mark complete\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n                        lineNumber: 105,\n                        columnNumber: 11\n                    }, this)\n                ]\n            }, void 0, true)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\MythVsEvidence.tsx\",\n        lineNumber: 21,\n        columnNumber: 5\n    }, this);\n}\n_s(MythVsEvidence, \"KtulkxOojQCTASfIDJjeF1Rg0Bo=\");\n_c = MythVsEvidence;\nvar _c;\n$RefreshReg$(_c, \"MythVsEvidence\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/MythVsEvidence.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/ReflectionPrompt.tsx":
/*!*************************************************************!*\
  !*** ./src/components/micro-learnings/ReflectionPrompt.tsx ***!
  \*************************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ReflectionPrompt: function() { return /* binding */ ReflectionPrompt; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ ReflectionPrompt auto */ \nvar _s = $RefreshSig$();\n\n\nfunction ReflectionPrompt(param) {\n    let { content, onComplete } = param;\n    _s();\n    const [answer, setAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n    const [showModel, setShowModel] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    background: \"var(--bg-dark)\",\n                    color: \"var(--paper)\",\n                    borderRadius: \"var(--r-md)\",\n                    padding: \"var(--s-5)\",\n                    fontSize: \"var(--t-lead)\",\n                    lineHeight: 1.6,\n                    fontWeight: 500\n                },\n                children: content.prompt\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ReflectionPrompt.tsx\",\n                lineNumber: 22,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n                value: answer,\n                onChange: (e)=>setAnswer(e.target.value),\n                placeholder: \"Write your reflection here…\",\n                rows: 5,\n                style: {\n                    width: \"100%\",\n                    borderRadius: \"var(--r-sm)\",\n                    border: \"1.5px solid var(--cream)\",\n                    padding: \"var(--s-3) var(--s-4)\",\n                    fontSize: \"var(--t-body)\",\n                    fontFamily: \"var(--font-sans)\",\n                    color: \"var(--fg)\",\n                    background: \"var(--bg)\",\n                    resize: \"vertical\",\n                    outline: \"none\",\n                    lineHeight: 1.6\n                }\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ReflectionPrompt.tsx\",\n                lineNumber: 36,\n                columnNumber: 7\n            }, this),\n            answer.trim().length > 20 && !showModel && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"secondary\",\n                onClick: ()=>setShowModel(true),\n                children: \"Show model answer\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ReflectionPrompt.tsx\",\n                lineNumber: 57,\n                columnNumber: 9\n            }, this),\n            showModel && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    background: \"var(--bg-warm)\",\n                    borderRadius: \"var(--r-sm)\",\n                    padding: \"var(--s-4)\",\n                    borderLeft: \"4px solid var(--success)\"\n                },\n                children: [\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: \"0 0 var(--s-2)\",\n                            fontSize: \"var(--t-label)\",\n                            fontFamily: \"var(--font-mono)\",\n                            textTransform: \"uppercase\",\n                            letterSpacing: \"var(--label-ls)\",\n                            color: \"var(--teal-700)\"\n                        },\n                        children: \"Model answer\"\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ReflectionPrompt.tsx\",\n                        lineNumber: 71,\n                        columnNumber: 11\n                    }, this),\n                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n                        style: {\n                            margin: 0,\n                            fontSize: \"var(--t-body)\",\n                            lineHeight: 1.65\n                        },\n                        children: content.model_answer\n                    }, void 0, false, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ReflectionPrompt.tsx\",\n                        lineNumber: 83,\n                        columnNumber: 11\n                    }, this)\n                ]\n            }, void 0, true, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ReflectionPrompt.tsx\",\n                lineNumber: 63,\n                columnNumber: 9\n            }, this),\n            showModel && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                style: {\n                    alignSelf: \"flex-end\"\n                },\n                children: \"Continue\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ReflectionPrompt.tsx\",\n                lineNumber: 90,\n                columnNumber: 9\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ReflectionPrompt.tsx\",\n        lineNumber: 21,\n        columnNumber: 5\n    }, this);\n}\n_s(ReflectionPrompt, \"9vvDtrYUAwN/3BWiP22gK9XbD18=\");\n_c = ReflectionPrompt;\nvar _c;\n$RefreshReg$(_c, \"ReflectionPrompt\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/ReflectionPrompt.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/micro-learnings/ScenarioQuiz.tsx":
/*!*********************************************************!*\
  !*** ./src/components/micro-learnings/ScenarioQuiz.tsx ***!
  \*********************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ScenarioQuiz: function() { return /* binding */ ScenarioQuiz; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/Button */ \"(app-pages-browser)/./src/components/ui/Button.tsx\");\n/* __next_internal_client_entry_do_not_use__ ScenarioQuiz auto */ \nvar _s = $RefreshSig$();\n\n\nfunction ScenarioQuiz(param) {\n    let { content, onComplete } = param;\n    var _content_options_selected;\n    _s();\n    const [selected, setSelected] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n    const [revealed, setRevealed] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n    function handleSelect(idx) {\n        if (revealed) return;\n        setSelected(idx);\n        setRevealed(true);\n    }\n    const isCorrect = selected !== null && ((_content_options_selected = content.options[selected]) === null || _content_options_selected === void 0 ? void 0 : _content_options_selected.correct);\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n        style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: \"var(--s-4)\"\n        },\n        children: [\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    background: \"var(--bg-warm)\",\n                    borderRadius: \"var(--r-md)\",\n                    padding: \"var(--s-4)\",\n                    fontSize: \"var(--t-body)\",\n                    lineHeight: 1.65,\n                    color: \"var(--fg)\"\n                },\n                children: content.scenario\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                lineNumber: 37,\n                columnNumber: 7\n            }, this),\n            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: \"var(--s-2)\"\n                },\n                children: content.options.map((opt, idx)=>{\n                    let bg = \"var(--bg-warm)\";\n                    let border = \"1.5px solid var(--cream)\";\n                    let color = \"var(--fg)\";\n                    if (revealed && selected === idx) {\n                        if (opt.correct) {\n                            bg = \"var(--success)\";\n                            border = \"1.5px solid var(--teal-700)\";\n                            color = \"var(--teal-900)\";\n                        } else {\n                            bg = \"#f8d7da\";\n                            border = \"1.5px solid #f5c6cb\";\n                            color = \"#c0392b\";\n                        }\n                    } else if (revealed && opt.correct) {\n                        bg = \"var(--success)\";\n                        border = \"1.5px solid var(--teal-700)\";\n                        color = \"var(--teal-900)\";\n                    }\n                    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                        style: {\n                            display: \"flex\",\n                            flexDirection: \"column\",\n                            gap: \"var(--s-2)\"\n                        },\n                        children: [\n                            /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n                                onClick: ()=>handleSelect(idx),\n                                disabled: revealed,\n                                style: {\n                                    background: bg,\n                                    border,\n                                    borderRadius: \"var(--r-sm)\",\n                                    padding: \"var(--s-3) var(--s-4)\",\n                                    fontSize: \"var(--t-body)\",\n                                    color,\n                                    textAlign: \"left\",\n                                    cursor: revealed ? \"default\" : \"pointer\",\n                                    minHeight: \"44px\",\n                                    transition: \"background 200ms, border-color 200ms\",\n                                    display: \"flex\",\n                                    gap: \"var(--s-3)\",\n                                    alignItems: \"flex-start\",\n                                    fontFamily: \"var(--font-sans)\"\n                                },\n                                children: [\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                        style: {\n                                            fontSize: \"var(--t-label)\",\n                                            fontFamily: \"var(--font-mono)\",\n                                            fontWeight: 700,\n                                            textTransform: \"uppercase\",\n                                            flexShrink: 0,\n                                            paddingTop: \"2px\"\n                                        },\n                                        children: opt.label\n                                    }, void 0, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                                        lineNumber: 94,\n                                        columnNumber: 17\n                                    }, this),\n                                    /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n                                        children: opt.text\n                                    }, void 0, false, {\n                                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                                        lineNumber: 106,\n                                        columnNumber: 17\n                                    }, this)\n                                ]\n                            }, void 0, true, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                                lineNumber: 74,\n                                columnNumber: 15\n                            }, this),\n                            revealed && selected === idx && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                                style: {\n                                    fontSize: \"var(--t-small)\",\n                                    color: \"var(--fg-muted)\",\n                                    padding: \"0 var(--s-4)\",\n                                    lineHeight: 1.5\n                                },\n                                children: opt.explanation\n                            }, void 0, false, {\n                                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                                lineNumber: 109,\n                                columnNumber: 17\n                            }, this)\n                        ]\n                    }, idx, true, {\n                        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                        lineNumber: 73,\n                        columnNumber: 13\n                    }, this);\n                })\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                lineNumber: 50,\n                columnNumber: 7\n            }, this),\n            revealed && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n                style: {\n                    padding: \"var(--s-3) var(--s-4)\",\n                    borderRadius: \"var(--r-sm)\",\n                    background: isCorrect ? \"var(--success)\" : \"#f8d7da\",\n                    color: isCorrect ? \"var(--teal-900)\" : \"#c0392b\",\n                    fontSize: \"var(--t-body)\",\n                    fontWeight: 500\n                },\n                children: isCorrect ? \"Correct!\" : \"Not quite — see the highlighted answer above.\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                lineNumber: 126,\n                columnNumber: 9\n            }, this),\n            revealed && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_Button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n                variant: \"primary\",\n                onClick: onComplete,\n                style: {\n                    alignSelf: \"flex-end\"\n                },\n                children: \"Continue\"\n            }, void 0, false, {\n                fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n                lineNumber: 141,\n                columnNumber: 9\n            }, this)\n        ]\n    }, void 0, true, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\micro-learnings\\\\ScenarioQuiz.tsx\",\n        lineNumber: 36,\n        columnNumber: 5\n    }, this);\n}\n_s(ScenarioQuiz, \"lINinVXzxoQfP+HZVO4TZheToJA=\");\n_c = ScenarioQuiz;\nvar _c;\n$RefreshReg$(_c, \"ScenarioQuiz\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/micro-learnings/ScenarioQuiz.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/ui/Button.tsx":
/*!**************************************!*\
  !*** ./src/components/ui/Button.tsx ***!
  \**************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Button: function() { return /* binding */ Button; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ Button auto */ \n\nconst variantStyles = {\n    primary: {\n        background: \"var(--accent)\",\n        color: \"var(--paper)\",\n        border: \"none\"\n    },\n    secondary: {\n        background: \"var(--bg-warm)\",\n        color: \"var(--fg)\",\n        border: \"1.5px solid var(--cream)\"\n    },\n    danger: {\n        background: \"#c0392b\",\n        color: \"var(--paper)\",\n        border: \"none\"\n    },\n    ghost: {\n        background: \"transparent\",\n        color: \"var(--fg)\",\n        border: \"1.5px solid var(--cream)\"\n    }\n};\nconst sizeStyles = {\n    sm: {\n        fontSize: \"var(--t-small)\",\n        padding: \"var(--s-2) var(--s-3)\",\n        minHeight: \"36px\",\n        borderRadius: \"var(--r-sm)\"\n    },\n    md: {\n        fontSize: \"var(--t-body)\",\n        padding: \"var(--s-2) var(--s-5)\",\n        minHeight: \"44px\",\n        borderRadius: \"var(--r-md)\"\n    },\n    lg: {\n        fontSize: \"var(--t-lead)\",\n        padding: \"var(--s-3) var(--s-6)\",\n        minHeight: \"52px\",\n        borderRadius: \"var(--r-lg)\"\n    }\n};\nfunction Button(param) {\n    let { variant = \"primary\", size = \"md\", loading = false, disabled, children, style, ...rest } = param;\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n        disabled: disabled !== null && disabled !== void 0 ? disabled : loading,\n        style: {\n            display: \"inline-flex\",\n            alignItems: \"center\",\n            justifyContent: \"center\",\n            gap: \"var(--s-2)\",\n            fontFamily: \"var(--font-sans)\",\n            fontWeight: 500,\n            cursor: (disabled !== null && disabled !== void 0 ? disabled : loading) ? \"not-allowed\" : \"pointer\",\n            opacity: (disabled !== null && disabled !== void 0 ? disabled : loading) ? 0.6 : 1,\n            transition: \"opacity 150ms, transform 100ms\",\n            ...variantStyles[variant],\n            ...sizeStyles[size],\n            ...style\n        },\n        ...rest,\n        children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n            children: [\n                /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Spinner, {}, void 0, false, {\n                    fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\ui\\\\Button.tsx\",\n                    lineNumber: 88,\n                    columnNumber: 11\n                }, this),\n                children\n            ]\n        }, void 0, true) : children\n    }, void 0, false, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\ui\\\\Button.tsx\",\n        lineNumber: 68,\n        columnNumber: 5\n    }, this);\n}\n_c = Button;\nfunction Spinner() {\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n        style: {\n            width: \"16px\",\n            height: \"16px\",\n            border: \"2px solid currentColor\",\n            borderTopColor: \"transparent\",\n            borderRadius: \"50%\",\n            display: \"inline-block\",\n            animation: \"spin 0.7s linear infinite\"\n        }\n    }, void 0, false, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\ui\\\\Button.tsx\",\n        lineNumber: 100,\n        columnNumber: 5\n    }, this);\n}\n_c1 = Spinner;\nvar _c, _c1;\n$RefreshReg$(_c, \"Button\");\n$RefreshReg$(_c1, \"Spinner\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ui/Button.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/components/ui/StatusBadge.tsx":
/*!*******************************************!*\
  !*** ./src/components/ui/StatusBadge.tsx ***!
  \*******************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   StatusBadge: function() { return /* binding */ StatusBadge; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ StatusBadge auto */ \n\nconst STATUS_CONFIG = {\n    queued: {\n        label: \"Queued\",\n        background: \"var(--cream)\",\n        color: \"var(--fg-muted)\"\n    },\n    extracting: {\n        label: \"Extracting\",\n        background: \"#fff3cd\",\n        color: \"#856404\"\n    },\n    chunking: {\n        label: \"Chunking\",\n        background: \"#fff3cd\",\n        color: \"#856404\"\n    },\n    structuring: {\n        label: \"Structuring\",\n        background: \"#cce5ff\",\n        color: \"#004085\"\n    },\n    writing: {\n        label: \"Writing\",\n        background: \"#cce5ff\",\n        color: \"#004085\"\n    },\n    embedding: {\n        label: \"Embedding\",\n        background: \"#d4edda\",\n        color: \"#155724\"\n    },\n    done: {\n        label: \"Done\",\n        background: \"var(--success)\",\n        color: \"var(--teal-900)\"\n    },\n    failed: {\n        label: \"Failed\",\n        background: \"#f8d7da\",\n        color: \"#c0392b\"\n    },\n    processing: {\n        label: \"Processing\",\n        background: \"#fff3cd\",\n        color: \"#856404\"\n    },\n    processed: {\n        label: \"Processed\",\n        background: \"var(--success)\",\n        color: \"var(--teal-900)\"\n    },\n    draft: {\n        label: \"Draft\",\n        background: \"var(--cream)\",\n        color: \"var(--fg-muted)\"\n    },\n    published: {\n        label: \"Published\",\n        background: \"var(--success)\",\n        color: \"var(--teal-900)\"\n    },\n    rejected: {\n        label: \"Rejected\",\n        background: \"#f8d7da\",\n        color: \"#c0392b\"\n    },\n    generated: {\n        label: \"Generated\",\n        background: \"#cce5ff\",\n        color: \"#004085\"\n    },\n    active: {\n        label: \"Active\",\n        background: \"var(--success)\",\n        color: \"var(--teal-900)\"\n    },\n    superseded: {\n        label: \"Superseded\",\n        background: \"var(--cream)\",\n        color: \"var(--fg-muted)\"\n    },\n    introductory: {\n        label: \"Introductory\",\n        background: \"var(--accent-soft)\",\n        color: \"var(--teal-900)\"\n    },\n    intermediate: {\n        label: \"Intermediate\",\n        background: \"#fff3cd\",\n        color: \"#856404\"\n    },\n    advanced: {\n        label: \"Advanced\",\n        background: \"var(--peri)\",\n        color: \"var(--teal-900)\"\n    }\n};\nfunction StatusBadge(param) {\n    let { status } = param;\n    var _STATUS_CONFIG_status;\n    const config = (_STATUS_CONFIG_status = STATUS_CONFIG[status]) !== null && _STATUS_CONFIG_status !== void 0 ? _STATUS_CONFIG_status : {\n        label: status,\n        background: \"var(--cream)\",\n        color: \"var(--fg-muted)\"\n    };\n    return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n        style: {\n            display: \"inline-block\",\n            padding: \"2px var(--s-2)\",\n            borderRadius: \"var(--r-pill)\",\n            fontSize: \"var(--t-label)\",\n            fontFamily: \"var(--font-mono)\",\n            fontWeight: 500,\n            textTransform: \"uppercase\",\n            letterSpacing: \"var(--label-ls)\",\n            background: config.background,\n            color: config.color\n        },\n        children: config.label\n    }, void 0, false, {\n        fileName: \"C:\\\\Users\\\\RaymondVerhoef\\\\Gitea\\\\learning-platform\\\\app\\\\frontend\\\\src\\\\components\\\\ui\\\\StatusBadge.tsx\",\n        lineNumber: 58,\n        columnNumber: 5\n    }, this);\n}\n_c = StatusBadge;\nvar _c;\n$RefreshReg$(_c, \"StatusBadge\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ui/StatusBadge.tsx\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/lib/auth.ts":
/*!*************************!*\
  !*** ./src/lib/auth.ts ***!
  \*************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   clearAuthCookies: function() { return /* binding */ clearAuthCookies; },\n/* harmony export */   getAuthUser: function() { return /* binding */ getAuthUser; },\n/* harmony export */   logout: function() { return /* binding */ logout; },\n/* harmony export */   syncAuthCookies: function() { return /* binding */ syncAuthCookies; }\n/* harmony export */ });\n/* harmony import */ var _pocketbase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pocketbase */ \"(app-pages-browser)/./src/lib/pocketbase.ts\");\n/* __next_internal_client_entry_do_not_use__ getAuthUser,syncAuthCookies,clearAuthCookies,logout auto */ \nconst COOKIE_TOKEN = \"pb_token\";\nconst COOKIE_ROLE = \"pb_role\";\nconst COOKIE_MAX_AGE = 60 * 60 * 24 * 14 // 14 days\n;\nfunction getAuthUser() {\n    if (!_pocketbase__WEBPACK_IMPORTED_MODULE_0__.pb.authStore.isValid) return null;\n    return _pocketbase__WEBPACK_IMPORTED_MODULE_0__.pb.authStore.model;\n}\nfunction syncAuthCookies() {\n    if (_pocketbase__WEBPACK_IMPORTED_MODULE_0__.pb.authStore.isValid && _pocketbase__WEBPACK_IMPORTED_MODULE_0__.pb.authStore.token) {\n        const user = _pocketbase__WEBPACK_IMPORTED_MODULE_0__.pb.authStore.model;\n        var _user_role;\n        const role = (_user_role = user === null || user === void 0 ? void 0 : user.role) !== null && _user_role !== void 0 ? _user_role : \"\";\n        document.cookie = \"\".concat(COOKIE_TOKEN, \"=\").concat(_pocketbase__WEBPACK_IMPORTED_MODULE_0__.pb.authStore.token, \"; path=/; max-age=\").concat(COOKIE_MAX_AGE, \"; SameSite=Lax\");\n        document.cookie = \"\".concat(COOKIE_ROLE, \"=\").concat(role, \"; path=/; max-age=\").concat(COOKIE_MAX_AGE, \"; SameSite=Lax\");\n    } else {\n        clearAuthCookies();\n    }\n}\nfunction clearAuthCookies() {\n    document.cookie = \"\".concat(COOKIE_TOKEN, \"=; path=/; max-age=0\");\n    document.cookie = \"\".concat(COOKIE_ROLE, \"=; path=/; max-age=0\");\n}\nfunction logout() {\n    _pocketbase__WEBPACK_IMPORTED_MODULE_0__.pb.authStore.clear();\n    clearAuthCookies();\n    window.location.href = \"/auth\";\n}\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9saWIvYXV0aC50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozt5R0FDaUM7QUFHakMsTUFBTUMsZUFBZTtBQUNyQixNQUFNQyxjQUFjO0FBQ3BCLE1BQU1DLGlCQUFpQixLQUFLLEtBQUssS0FBSyxHQUFHLFVBQVU7O0FBRTVDLFNBQVNDO0lBQ2QsSUFBSSxDQUFDSiwyQ0FBRUEsQ0FBQ0ssU0FBUyxDQUFDQyxPQUFPLEVBQUUsT0FBTztJQUNsQyxPQUFPTiwyQ0FBRUEsQ0FBQ0ssU0FBUyxDQUFDRSxLQUFLO0FBQzNCO0FBRU8sU0FBU0M7SUFDZCxJQUFJUiwyQ0FBRUEsQ0FBQ0ssU0FBUyxDQUFDQyxPQUFPLElBQUlOLDJDQUFFQSxDQUFDSyxTQUFTLENBQUNJLEtBQUssRUFBRTtRQUM5QyxNQUFNQyxPQUFPViwyQ0FBRUEsQ0FBQ0ssU0FBUyxDQUFDRSxLQUFLO1lBQ2xCRztRQUFiLE1BQU1DLE9BQU9ELENBQUFBLGFBQUFBLGlCQUFBQSwyQkFBQUEsS0FBTUMsSUFBSSxjQUFWRCx3QkFBQUEsYUFBYztRQUMzQkUsU0FBU0MsTUFBTSxHQUFHLEdBQW1CYixPQUFoQkMsY0FBYSxLQUEwQ0UsT0FBdkNILDJDQUFFQSxDQUFDSyxTQUFTLENBQUNJLEtBQUssRUFBQyxzQkFBbUMsT0FBZk4sZ0JBQWU7UUFDM0ZTLFNBQVNDLE1BQU0sR0FBRyxHQUFrQkYsT0FBZlQsYUFBWSxLQUE0QkMsT0FBekJRLE1BQUssc0JBQW1DLE9BQWZSLGdCQUFlO0lBQzlFLE9BQU87UUFDTFc7SUFDRjtBQUNGO0FBRU8sU0FBU0E7SUFDZEYsU0FBU0MsTUFBTSxHQUFHLEdBQWdCLE9BQWJaLGNBQWE7SUFDbENXLFNBQVNDLE1BQU0sR0FBRyxHQUFlLE9BQVpYLGFBQVk7QUFDbkM7QUFFTyxTQUFTYTtJQUNkZiwyQ0FBRUEsQ0FBQ0ssU0FBUyxDQUFDVyxLQUFLO0lBQ2xCRjtJQUNBRyxPQUFPQyxRQUFRLENBQUNDLElBQUksR0FBRztBQUN6QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9zcmMvbGliL2F1dGgudHM/NjY5MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB7IHBiIH0gZnJvbSAnLi9wb2NrZXRiYXNlJ1xuaW1wb3J0IHR5cGUgeyBQQlVzZXIgfSBmcm9tICdAL3R5cGVzJ1xuXG5jb25zdCBDT09LSUVfVE9LRU4gPSAncGJfdG9rZW4nXG5jb25zdCBDT09LSUVfUk9MRSA9ICdwYl9yb2xlJ1xuY29uc3QgQ09PS0lFX01BWF9BR0UgPSA2MCAqIDYwICogMjQgKiAxNCAvLyAxNCBkYXlzXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXRoVXNlcigpOiBQQlVzZXIgfCBudWxsIHtcbiAgaWYgKCFwYi5hdXRoU3RvcmUuaXNWYWxpZCkgcmV0dXJuIG51bGxcbiAgcmV0dXJuIHBiLmF1dGhTdG9yZS5tb2RlbCBhcyBQQlVzZXIgfCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzeW5jQXV0aENvb2tpZXMoKTogdm9pZCB7XG4gIGlmIChwYi5hdXRoU3RvcmUuaXNWYWxpZCAmJiBwYi5hdXRoU3RvcmUudG9rZW4pIHtcbiAgICBjb25zdCB1c2VyID0gcGIuYXV0aFN0b3JlLm1vZGVsIGFzIFBCVXNlciB8IG51bGxcbiAgICBjb25zdCByb2xlID0gdXNlcj8ucm9sZSA/PyAnJ1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke0NPT0tJRV9UT0tFTn09JHtwYi5hdXRoU3RvcmUudG9rZW59OyBwYXRoPS87IG1heC1hZ2U9JHtDT09LSUVfTUFYX0FHRX07IFNhbWVTaXRlPUxheGBcbiAgICBkb2N1bWVudC5jb29raWUgPSBgJHtDT09LSUVfUk9MRX09JHtyb2xlfTsgcGF0aD0vOyBtYXgtYWdlPSR7Q09PS0lFX01BWF9BR0V9OyBTYW1lU2l0ZT1MYXhgXG4gIH0gZWxzZSB7XG4gICAgY2xlYXJBdXRoQ29va2llcygpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQXV0aENvb2tpZXMoKTogdm9pZCB7XG4gIGRvY3VtZW50LmNvb2tpZSA9IGAke0NPT0tJRV9UT0tFTn09OyBwYXRoPS87IG1heC1hZ2U9MGBcbiAgZG9jdW1lbnQuY29va2llID0gYCR7Q09PS0lFX1JPTEV9PTsgcGF0aD0vOyBtYXgtYWdlPTBgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dvdXQoKTogdm9pZCB7XG4gIHBiLmF1dGhTdG9yZS5jbGVhcigpXG4gIGNsZWFyQXV0aENvb2tpZXMoKVxuICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYXV0aCdcbn1cbiJdLCJuYW1lcyI6WyJwYiIsIkNPT0tJRV9UT0tFTiIsIkNPT0tJRV9ST0xFIiwiQ09PS0lFX01BWF9BR0UiLCJnZXRBdXRoVXNlciIsImF1dGhTdG9yZSIsImlzVmFsaWQiLCJtb2RlbCIsInN5bmNBdXRoQ29va2llcyIsInRva2VuIiwidXNlciIsInJvbGUiLCJkb2N1bWVudCIsImNvb2tpZSIsImNsZWFyQXV0aENvb2tpZXMiLCJsb2dvdXQiLCJjbGVhciIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/auth.ts\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/lib/hooks/usePBCollection.ts":
/*!******************************************!*\
  !*** ./src/lib/hooks/usePBCollection.ts ***!
  \******************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   usePBCollection: function() { return /* binding */ usePBCollection; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_pocketbase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/pocketbase */ \"(app-pages-browser)/./src/lib/pocketbase.ts\");\n/* __next_internal_client_entry_do_not_use__ usePBCollection auto */ \n\nfunction usePBCollection(collection, options) {\n    const [items, setItems] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n    const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n    const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n    const [tick, setTick] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n    const refresh = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n        setTick((t)=>t + 1);\n    }, []);\n    (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n        let cancelled = false;\n        async function load() {\n            setLoading(true);\n            setError(null);\n            try {\n                const result = await _lib_pocketbase__WEBPACK_IMPORTED_MODULE_1__.pb.collection(collection).getFullList({\n                    ...options !== null && options !== void 0 ? options : {}\n                });\n                if (!cancelled) {\n                    setItems(result);\n                }\n            } catch (err) {\n                if (!cancelled) {\n                    setError(err instanceof Error ? err.message : \"Failed to load\");\n                }\n            } finally{\n                if (!cancelled) {\n                    setLoading(false);\n                }\n            }\n        }\n        void load();\n        return ()=>{\n            cancelled = true;\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        collection,\n        tick\n    ]);\n    return {\n        items,\n        loading,\n        error,\n        refresh\n    };\n}\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9saWIvaG9va3MvdXNlUEJDb2xsZWN0aW9uLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7cUVBQ3dEO0FBQ25CO0FBUzlCLFNBQVNJLGdCQUNkQyxVQUFrQixFQUNsQkMsT0FBaUM7SUFFakMsTUFBTSxDQUFDQyxPQUFPQyxTQUFTLEdBQUdSLCtDQUFRQSxDQUFNLEVBQUU7SUFDMUMsTUFBTSxDQUFDUyxTQUFTQyxXQUFXLEdBQUdWLCtDQUFRQSxDQUFVO0lBQ2hELE1BQU0sQ0FBQ1csT0FBT0MsU0FBUyxHQUFHWiwrQ0FBUUEsQ0FBZ0I7SUFDbEQsTUFBTSxDQUFDYSxNQUFNQyxRQUFRLEdBQUdkLCtDQUFRQSxDQUFTO0lBRXpDLE1BQU1lLFVBQVViLGtEQUFXQSxDQUFDO1FBQzFCWSxRQUFRLENBQUNFLElBQU1BLElBQUk7SUFDckIsR0FBRyxFQUFFO0lBRUxmLGdEQUFTQSxDQUFDO1FBQ1IsSUFBSWdCLFlBQVk7UUFFaEIsZUFBZUM7WUFDYlIsV0FBVztZQUNYRSxTQUFTO1lBQ1QsSUFBSTtnQkFDRixNQUFNTyxTQUFTLE1BQU1oQiwrQ0FBRUEsQ0FBQ0UsVUFBVSxDQUFDQSxZQUFZZSxXQUFXLENBQUk7b0JBQzVELEdBQUlkLG9CQUFBQSxxQkFBQUEsVUFBVyxDQUFDLENBQUM7Z0JBQ25CO2dCQUNBLElBQUksQ0FBQ1csV0FBVztvQkFDZFQsU0FBU1c7Z0JBQ1g7WUFDRixFQUFFLE9BQU9FLEtBQUs7Z0JBQ1osSUFBSSxDQUFDSixXQUFXO29CQUNkTCxTQUFTUyxlQUFlQyxRQUFRRCxJQUFJRSxPQUFPLEdBQUc7Z0JBQ2hEO1lBQ0YsU0FBVTtnQkFDUixJQUFJLENBQUNOLFdBQVc7b0JBQ2RQLFdBQVc7Z0JBQ2I7WUFDRjtRQUNGO1FBRUEsS0FBS1E7UUFDTCxPQUFPO1lBQ0xELFlBQVk7UUFDZDtJQUNBLHVEQUF1RDtJQUN6RCxHQUFHO1FBQUNaO1FBQVlRO0tBQUs7SUFFckIsT0FBTztRQUFFTjtRQUFPRTtRQUFTRTtRQUFPSTtJQUFRO0FBQzFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL3NyYy9saWIvaG9va3MvdXNlUEJDb2xsZWN0aW9uLnRzPzA2N2YiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgcGIgfSBmcm9tICdAL2xpYi9wb2NrZXRiYXNlJ1xuXG5pbnRlcmZhY2UgVXNlUEJDb2xsZWN0aW9uUmVzdWx0PFQ+IHtcbiAgaXRlbXM6IFRbXVxuICBsb2FkaW5nOiBib29sZWFuXG4gIGVycm9yOiBzdHJpbmcgfCBudWxsXG4gIHJlZnJlc2g6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVBCQ29sbGVjdGlvbjxUPihcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBVc2VQQkNvbGxlY3Rpb25SZXN1bHQ8VD4ge1xuICBjb25zdCBbaXRlbXMsIHNldEl0ZW1zXSA9IHVzZVN0YXRlPFRbXT4oW10pXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KHRydWUpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3RpY2ssIHNldFRpY2tdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuXG4gIGNvbnN0IHJlZnJlc2ggPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VGljaygodCkgPT4gdCArIDEpXG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlXG5cbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0RXJyb3IobnVsbClcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBiLmNvbGxlY3Rpb24oY29sbGVjdGlvbikuZ2V0RnVsbExpc3Q8VD4oe1xuICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICBzZXRJdGVtcyhyZXN1bHQpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGxvYWQnKVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2b2lkIGxvYWQoKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2NvbGxlY3Rpb24sIHRpY2tdKVxuXG4gIHJldHVybiB7IGl0ZW1zLCBsb2FkaW5nLCBlcnJvciwgcmVmcmVzaCB9XG59XG4iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJ1c2VDYWxsYmFjayIsInBiIiwidXNlUEJDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsIm9wdGlvbnMiLCJpdGVtcyIsInNldEl0ZW1zIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwidGljayIsInNldFRpY2siLCJyZWZyZXNoIiwidCIsImNhbmNlbGxlZCIsImxvYWQiLCJyZXN1bHQiLCJnZXRGdWxsTGlzdCIsImVyciIsIkVycm9yIiwibWVzc2FnZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/hooks/usePBCollection.ts\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/lib/pocketbase.ts":
/*!*******************************!*\
  !*** ./src/lib/pocketbase.ts ***!
  \*******************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   pb: function() { return /* binding */ pb; }\n/* harmony export */ });\n/* harmony import */ var pocketbase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! pocketbase */ \"(app-pages-browser)/./node_modules/pocketbase/dist/pocketbase.es.mjs\");\n/* __next_internal_client_entry_do_not_use__ pb auto */ \nvar _process_env_NEXT_PUBLIC_POCKETBASE_URL;\nconst pb = new pocketbase__WEBPACK_IMPORTED_MODULE_0__[\"default\"]((_process_env_NEXT_PUBLIC_POCKETBASE_URL = \"http://localhost:8090\") !== null && _process_env_NEXT_PUBLIC_POCKETBASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_POCKETBASE_URL : \"http://localhost:8090\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9saWIvcG9ja2V0YmFzZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozt3REFDbUM7SUFFRkM7QUFBMUIsTUFBTUMsS0FBSyxJQUFJRixrREFBVUEsQ0FBQ0MsQ0FBQUEsMENBQUFBLHVCQUFzQyxjQUF0Q0EscURBQUFBLDBDQUEwQyx5QkFBd0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3JjL2xpYi9wb2NrZXRiYXNlLnRzP2U2NTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUG9ja2V0QmFzZSBmcm9tICdwb2NrZXRiYXNlJ1xuXG5leHBvcnQgY29uc3QgcGIgPSBuZXcgUG9ja2V0QmFzZShwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19QT0NLRVRCQVNFX1VSTCA/PyAnaHR0cDovL2xvY2FsaG9zdDo4MDkwJylcbiJdLCJuYW1lcyI6WyJQb2NrZXRCYXNlIiwicHJvY2VzcyIsInBiIiwiZW52IiwiTkVYVF9QVUJMSUNfUE9DS0VUQkFTRV9VUkwiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/pocketbase.ts\n"));

/***/ }),

/***/ "(app-pages-browser)/./src/lib/services.ts":
/*!*****************************!*\
  !*** ./src/lib/services.ts ***!
  \*****************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getFeed: function() { return /* binding */ getFeed; },\n/* harmony export */   getIngestionStatus: function() { return /* binding */ getIngestionStatus; },\n/* harmony export */   getLeaderboard: function() { return /* binding */ getLeaderboard; },\n/* harmony export */   patchCurriculumWeekOrder: function() { return /* binding */ patchCurriculumWeekOrder; },\n/* harmony export */   postComplete: function() { return /* binding */ postComplete; },\n/* harmony export */   postCurriculumConfirm: function() { return /* binding */ postCurriculumConfirm; },\n/* harmony export */   postGenerateAll: function() { return /* binding */ postGenerateAll; },\n/* harmony export */   postIngest: function() { return /* binding */ postIngest; }\n/* harmony export */ });\nvar _process_env_NEXT_PUBLIC_INGESTION_URL;\nconst INGESTION_URL = (_process_env_NEXT_PUBLIC_INGESTION_URL = \"http://localhost:3001\") !== null && _process_env_NEXT_PUBLIC_INGESTION_URL !== void 0 ? _process_env_NEXT_PUBLIC_INGESTION_URL : \"http://localhost:3001\";\nvar _process_env_NEXT_PUBLIC_GENERATION_URL;\nconst GENERATION_URL = (_process_env_NEXT_PUBLIC_GENERATION_URL = \"http://localhost:3002\") !== null && _process_env_NEXT_PUBLIC_GENERATION_URL !== void 0 ? _process_env_NEXT_PUBLIC_GENERATION_URL : \"http://localhost:3002\";\nvar _process_env_NEXT_PUBLIC_CURRICULUM_URL;\nconst CURRICULUM_URL = (_process_env_NEXT_PUBLIC_CURRICULUM_URL = \"http://localhost:3003\") !== null && _process_env_NEXT_PUBLIC_CURRICULUM_URL !== void 0 ? _process_env_NEXT_PUBLIC_CURRICULUM_URL : \"http://localhost:3003\";\nvar _process_env_NEXT_PUBLIC_PROGRESS_URL;\nconst PROGRESS_URL = (_process_env_NEXT_PUBLIC_PROGRESS_URL = \"http://localhost:3005\") !== null && _process_env_NEXT_PUBLIC_PROGRESS_URL !== void 0 ? _process_env_NEXT_PUBLIC_PROGRESS_URL : \"http://localhost:3005\";\nasync function handleResponse(res) {\n    if (!res.ok) {\n        const text = await res.text().catch(()=>res.statusText);\n        throw new Error(\"HTTP \".concat(res.status, \": \").concat(text));\n    }\n    return res.json();\n}\nasync function postIngest(payload) {\n    const res = await fetch(\"\".concat(INGESTION_URL, \"/ingest\"), {\n        method: \"POST\",\n        headers: {\n            \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify(payload)\n    });\n    return handleResponse(res);\n}\nasync function getIngestionStatus(jobId) {\n    const res = await fetch(\"\".concat(INGESTION_URL, \"/ingest/status/\").concat(encodeURIComponent(jobId)));\n    return handleResponse(res);\n}\nasync function postGenerateAll(themeId) {\n    const res = await fetch(\"\".concat(GENERATION_URL, \"/generate\"), {\n        method: \"POST\",\n        headers: {\n            \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify({\n            themeId\n        })\n    });\n    const data = await handleResponse(res);\n    return {\n        queued: data.totalItems\n    };\n}\nasync function postComplete(payload) {\n    const res = await fetch(\"\".concat(PROGRESS_URL, \"/complete\"), {\n        method: \"POST\",\n        headers: {\n            \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify(payload)\n    });\n    return handleResponse(res);\n}\nasync function getLeaderboard() {\n    const res = await fetch(\"\".concat(PROGRESS_URL, \"/leaderboard\"));\n    return handleResponse(res);\n}\nasync function getFeed() {\n    const res = await fetch(\"\".concat(PROGRESS_URL, \"/feed\"));\n    return handleResponse(res);\n}\nasync function postCurriculumConfirm(versionId) {\n    const res = await fetch(\"\".concat(CURRICULUM_URL, \"/curriculum/versions/\").concat(encodeURIComponent(versionId), \"/confirm\"), {\n        method: \"POST\",\n        headers: {\n            \"Content-Type\": \"application/json\"\n        }\n    });\n    if (!res.ok) {\n        const text = await res.text().catch(()=>res.statusText);\n        throw new Error(\"HTTP \".concat(res.status, \": \").concat(text));\n    }\n}\nasync function patchCurriculumWeekOrder(weekId, position) {\n    const res = await fetch(\"\".concat(CURRICULUM_URL, \"/curriculum/weeks/\").concat(encodeURIComponent(weekId), \"/order\"), {\n        method: \"PATCH\",\n        headers: {\n            \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify({\n            position\n        })\n    });\n    if (!res.ok) {\n        const text = await res.text().catch(()=>res.statusText);\n        throw new Error(\"HTTP \".concat(res.status, \": \").concat(text));\n    }\n}\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/services.ts\n"));

/***/ }),

/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***!
  \****************************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider'); // TODO: Delete with enableRenderableContext\n\nvar REACT_CONSUMER_TYPE = Symbol.for('react.consumer');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\nvar enableRenderableContext = false;\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  if (typeof type === 'function') {\n    if (type.$$typeof === REACT_CLIENT_REFERENCE$2) {\n      // TODO: Create a convention for naming client references with debug info.\n      return null;\n    }\n\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n    case REACT_CACHE_TYPE:\n      {\n        return 'Cache';\n      }\n\n  }\n\n  if (typeof type === 'object') {\n    {\n      if (typeof type.tag === 'number') {\n        error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n      }\n    }\n\n    switch (type.$$typeof) {\n      case REACT_PROVIDER_TYPE:\n        {\n          var provider = type;\n          return getContextName(provider._context) + '.Provider';\n        }\n\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n\n        {\n          return getContextName(context) + '.Consumer';\n        }\n\n      case REACT_CONSUMER_TYPE:\n        {\n          return null;\n        }\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n    }\n  }\n\n  return null;\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar assign = Object.assign;\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n    return type;\n  }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || enableRenderableContext  || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n *   (1) throwing and catching an error in the function - this will be our\n *       control error.\n *   (2) calling the component which will eventually throw an error that we'll\n *       catch - this will be our sample error.\n *   (3) diffing the control and sample error stacks to find the stack frame\n *       which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if (!fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n  /**\n   * Finding a common stack frame between sample and control errors can be\n   * tricky given the different types and levels of stack trace truncation from\n   * different JS VMs. So instead we'll attempt to control what that common\n   * frame should be through this object method:\n   * Having both the sample and control errors be in the function under the\n   * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n   * `displayName` properties of the function ensures that a stack\n   * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n   * it for both control and sample stacks.\n   */\n\n\n  var RunInRootFrame = {\n    DetermineComponentFrameRoot: function () {\n      var control;\n\n      try {\n        // This should throw.\n        if (construct) {\n          // Something should be setting the props in the constructor.\n          var Fake = function () {\n            throw Error();\n          }; // $FlowFixMe[prop-missing]\n\n\n          Object.defineProperty(Fake.prototype, 'props', {\n            set: function () {\n              // We use a throwing setter instead of frozen or non-writable props\n              // because that won't throw in a non-strict mode function.\n              throw Error();\n            }\n          });\n\n          if (typeof Reflect === 'object' && Reflect.construct) {\n            // We construct a different control for this case to include any extra\n            // frames added by the construct call.\n            try {\n              Reflect.construct(Fake, []);\n            } catch (x) {\n              control = x;\n            }\n\n            Reflect.construct(fn, [], Fake);\n          } else {\n            try {\n              Fake.call();\n            } catch (x) {\n              control = x;\n            } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n            fn.call(Fake.prototype);\n          }\n        } else {\n          try {\n            throw Error();\n          } catch (x) {\n            control = x;\n          } // TODO(luna): This will currently only throw if the function component\n          // tries to access React/ReactDOM/props. We should probably make this throw\n          // in simple components too\n\n\n          var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n          // component, which we don't yet support. Attach a noop catch handler to\n          // silence the error.\n          // TODO: Implement component stacks for async client components?\n\n          if (maybePromise && typeof maybePromise.catch === 'function') {\n            maybePromise.catch(function () {});\n          }\n        }\n      } catch (sample) {\n        // This is inlined manually because closure doesn't do it for us.\n        if (sample && control && typeof sample.stack === 'string') {\n          return [sample.stack, control.stack];\n        }\n      }\n\n      return [null, null];\n    }\n  }; // $FlowFixMe[prop-missing]\n\n  RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n  var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n  if (namePropDescriptor && namePropDescriptor.configurable) {\n    // V8 utilizes a function's `name` property when generating a stack trace.\n    Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n    // is set to `false`.\n    // $FlowFixMe[cannot-write]\n    'name', {\n      value: 'DetermineComponentFrameRoot'\n    });\n  }\n\n  try {\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n        sampleStack = _RunInRootFrame$Deter[0],\n        controlStack = _RunInRootFrame$Deter[1];\n\n    if (sampleStack && controlStack) {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sampleStack.split('\\n');\n      var controlLines = controlStack.split('\\n');\n      var s = 0;\n      var c = 0;\n\n      while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n        s++;\n      }\n\n      while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n        c++;\n      } // We couldn't find our intentionally injected common root frame, attempt\n      // to find another common root frame by search from the bottom of the\n      // control stack...\n\n\n      if (s === sampleLines.length || c === controlLines.length) {\n        s = sampleLines.length - 1;\n        c = controlLines.length - 1;\n\n        while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n          // We expect at least one stack frame to be shared.\n          // Typically this will be the root most one. However, stack frames may be\n          // cut off due to maximum stack limits. In this case, one maybe cut off\n          // earlier than the other. We assume that the sample is longer or the same\n          // and there for cut off earlier. So we should find the root most frame in\n          // the sample somewhere in the control.\n          c--;\n        }\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                if (true) {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingKey.isReactWarning = true;\n    Object.defineProperty(props, 'key', {\n      get: warnAboutAccessingKey,\n      configurable: true\n    });\n  }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  {\n    {\n      var warnAboutAccessingRef = function () {\n        if (!specialPropRefWarningShown) {\n          specialPropRefWarningShown = true;\n\n          error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n        }\n      };\n\n      warnAboutAccessingRef.isReactWarning = true;\n      Object.defineProperty(props, 'ref', {\n        get: warnAboutAccessingRef,\n        configurable: true\n      });\n    }\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, _ref, self, source, owner, props) {\n  var ref;\n\n  {\n    ref = _ref;\n  }\n\n  var element;\n\n  {\n    // In prod, `ref` is a regular property. It will be removed in a\n    // future release.\n    element = {\n      // This tag allows us to uniquely identify this as a React Element\n      $$typeof: REACT_ELEMENT_TYPE,\n      // Built-in properties that belong on the element\n      type: type,\n      key: key,\n      ref: ref,\n      props: props,\n      // Record the component responsible for creating this element.\n      _owner: owner\n    };\n  }\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // debugInfo contains Server Component debug information.\n\n    Object.defineProperty(element, '_debugInfo', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: null\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n}\nvar didWarnAboutKeySpread = {};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) {\n  {\n    if (!isValidElementType(type)) {\n      // This is an invalid element type.\n      //\n      // We warn in this case but don't throw. We expect the element creation to\n      // succeed and there will likely be errors in render.\n      var info = '';\n\n      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n        info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n      }\n\n      var typeString;\n\n      if (type === null) {\n        typeString = 'null';\n      } else if (isArray(type)) {\n        typeString = 'array';\n      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n        typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n        info = ' Did you accidentally export a JSX literal instead of a component?';\n      } else {\n        typeString = typeof type;\n      }\n\n      error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    } else {\n      // This is a valid element type.\n      // Skip key warning if the type isn't valid since our key validation logic\n      // doesn't expect a non-string/function type and can throw confusing\n      // errors. We don't want exception behavior to differ between dev and\n      // prod. (Rendering will throw with a helpful message and as soon as the\n      // type is fixed, the key warnings will appear.)\n      var children = config.children;\n\n      if (children !== undefined) {\n        if (isStaticChildren) {\n          if (isArray(children)) {\n            for (var i = 0; i < children.length; i++) {\n              validateChildKeys(children[i], type);\n            }\n\n            if (Object.freeze) {\n              Object.freeze(children);\n            }\n          } else {\n            error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n          }\n        } else {\n          validateChildKeys(children, type);\n        }\n      }\n    } // Warn about key spread regardless of whether the type is valid.\n\n\n    if (hasOwnProperty.call(config, 'key')) {\n      var componentName = getComponentNameFromType(type);\n      var keys = Object.keys(config).filter(function (k) {\n        return k !== 'key';\n      });\n      var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n      if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n        var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n        error('A props object containing a \"key\" prop is being spread into JSX:\\n' + '  let props = %s;\\n' + '  <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + '  let props = %s;\\n' + '  <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n        didWarnAboutKeySpread[componentName + beforeExample] = true;\n      }\n    }\n\n    var propName; // Reserved names are extracted\n\n    var props = {};\n    var key = null;\n    var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n    // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n    // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n    // but as an intermediary step, we will use jsxDEV for everything except\n    // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n    // key is explicitly declared to be undefined or not.\n\n    if (maybeKey !== undefined) {\n      {\n        checkKeyStringCoercion(maybeKey);\n      }\n\n      key = '' + maybeKey;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    if (hasValidRef(config)) {\n      {\n        ref = config.ref;\n      }\n\n      warnIfStringRefCannotBeAutoConverted(config, self);\n    } // Remaining properties are added to a new props object\n\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names\n      propName !== 'key' && (propName !== 'ref')) {\n        props[propName] = config[propName];\n      }\n    } // Resolve default props\n\n\n    if (type && type.defaultProps) {\n      var defaultProps = type.defaultProps;\n\n      for (propName in defaultProps) {\n        if (props[propName] === undefined) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    }\n\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n\n    var element = ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n\n    if (type === REACT_FRAGMENT_TYPE) {\n      validateFragmentProps(element);\n    }\n\n    return element;\n  }\n}\n\nfunction getDeclarationErrorAddendum() {\n  {\n    if (ReactCurrentOwner.current) {\n      var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (name) {\n        return '\\n\\nCheck the render method of `' + name + '`.';\n      }\n    }\n\n    return '';\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  {\n    if (typeof node !== 'object' || !node) {\n      return;\n    }\n\n    if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n      for (var i = 0; i < node.length; i++) {\n        var child = node[i];\n\n        if (isValidElement(child)) {\n          validateExplicitKey(child, parentType);\n        }\n      }\n    } else if (isValidElement(node)) {\n      // This element was passed in a valid location.\n      if (node._store) {\n        node._store.validated = true;\n      }\n    } else {\n      var iteratorFn = getIteratorFn(node);\n\n      if (typeof iteratorFn === 'function') {\n        // Entry iterators used to provide implicit keys,\n        // but now we print a separate warning for them later.\n        if (iteratorFn !== node.entries) {\n          var iterator = iteratorFn.call(node);\n          var step;\n\n          while (!(step = iterator.next()).done) {\n            if (isValidElement(step.value)) {\n              validateExplicitKey(step.value, parentType);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nvar ownerHasKeyUseWarning = {};\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\nfunction validateExplicitKey(element, parentType) {\n  {\n    if (!element._store || element._store.validated || element.key != null) {\n      return;\n    }\n\n    element._store.validated = true;\n    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n    // property, it may be the creator of the child that's responsible for\n    // assigning it a key.\n\n    var childOwner = '';\n\n    if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n      // Give the component that originally created this child.\n      childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n    }\n\n    setCurrentlyValidatingElement(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement(null);\n  }\n}\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  {\n    var info = getDeclarationErrorAddendum();\n\n    if (!info) {\n      var parentName = getComponentNameFromType(parentType);\n\n      if (parentName) {\n        info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n      }\n    }\n\n    return info;\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  // TODO: Move this to render phase instead of at element creation.\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement(null);\n    }\n  }\n}\n\nvar jsxDEV = jsxDEV$1 ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n  })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n"));

/***/ }),

/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js":
/*!******************************************************************!*\
  !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***!
  \******************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/OTU0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n"));

/***/ }),

/***/ "(app-pages-browser)/./node_modules/pocketbase/dist/pocketbase.es.mjs":
/*!********************************************************!*\
  !*** ./node_modules/pocketbase/dist/pocketbase.es.mjs ***!
  \********************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   AdminService: function() { return /* binding */ AdminService; },\n/* harmony export */   AsyncAuthStore: function() { return /* binding */ AsyncAuthStore; },\n/* harmony export */   BaseAuthStore: function() { return /* binding */ BaseAuthStore; },\n/* harmony export */   ClientResponseError: function() { return /* binding */ ClientResponseError; },\n/* harmony export */   CollectionService: function() { return /* binding */ CollectionService; },\n/* harmony export */   CrudService: function() { return /* binding */ CrudService; },\n/* harmony export */   HealthService: function() { return /* binding */ HealthService; },\n/* harmony export */   LocalAuthStore: function() { return /* binding */ LocalAuthStore; },\n/* harmony export */   LogService: function() { return /* binding */ LogService; },\n/* harmony export */   RealtimeService: function() { return /* binding */ RealtimeService; },\n/* harmony export */   RecordService: function() { return /* binding */ RecordService; },\n/* harmony export */   cookieParse: function() { return /* binding */ cookieParse; },\n/* harmony export */   cookieSerialize: function() { return /* binding */ cookieSerialize; },\n/* harmony export */   \"default\": function() { return /* binding */ Client; },\n/* harmony export */   getTokenPayload: function() { return /* binding */ getTokenPayload; },\n/* harmony export */   isTokenExpired: function() { return /* binding */ isTokenExpired; },\n/* harmony export */   normalizeUnknownQueryParams: function() { return /* binding */ normalizeUnknownQueryParams; }\n/* harmony export */ });\nclass ClientResponseError extends Error{constructor(e){super(\"ClientResponseError\"),this.url=\"\",this.status=0,this.response={},this.isAbort=!1,this.originalError=null,Object.setPrototypeOf(this,ClientResponseError.prototype),null!==e&&\"object\"==typeof e&&(this.url=\"string\"==typeof e.url?e.url:\"\",this.status=\"number\"==typeof e.status?e.status:0,this.isAbort=!!e.isAbort,this.originalError=e.originalError,null!==e.response&&\"object\"==typeof e.response?this.response=e.response:null!==e.data&&\"object\"==typeof e.data?this.response=e.data:this.response={}),this.originalError||e instanceof ClientResponseError||(this.originalError=e),\"undefined\"!=typeof DOMException&&e instanceof DOMException&&(this.isAbort=!0),this.name=\"ClientResponseError \"+this.status,this.message=this.response?.message,this.message||(this.isAbort?this.message=\"The request was autocancelled. You can find more info in https://github.com/pocketbase/js-sdk#auto-cancellation.\":this.originalError?.cause?.message?.includes(\"ECONNREFUSED ::1\")?this.message=\"Failed to connect to the PocketBase server. Try changing the SDK URL from localhost to 127.0.0.1 (https://github.com/pocketbase/js-sdk/issues/21).\":this.message=\"Something went wrong while processing your request.\")}get data(){return this.response}toJSON(){return{...this}}}const e=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function cookieParse(e,t){const s={};if(\"string\"!=typeof e)return s;const i=Object.assign({},t||{}).decode||defaultDecode;let n=0;for(;n<e.length;){const t=e.indexOf(\"=\",n);if(-1===t)break;let r=e.indexOf(\";\",n);if(-1===r)r=e.length;else if(r<t){n=e.lastIndexOf(\";\",t-1)+1;continue}const o=e.slice(n,t).trim();if(void 0===s[o]){let n=e.slice(t+1,r).trim();34===n.charCodeAt(0)&&(n=n.slice(1,-1));try{s[o]=i(n)}catch(e){s[o]=n}}n=r+1}return s}function cookieSerialize(t,s,i){const n=Object.assign({},i||{}),r=n.encode||defaultEncode;if(!e.test(t))throw new TypeError(\"argument name is invalid\");const o=r(s);if(o&&!e.test(o))throw new TypeError(\"argument val is invalid\");let a=t+\"=\"+o;if(null!=n.maxAge){const e=n.maxAge-0;if(isNaN(e)||!isFinite(e))throw new TypeError(\"option maxAge is invalid\");a+=\"; Max-Age=\"+Math.floor(e)}if(n.domain){if(!e.test(n.domain))throw new TypeError(\"option domain is invalid\");a+=\"; Domain=\"+n.domain}if(n.path){if(!e.test(n.path))throw new TypeError(\"option path is invalid\");a+=\"; Path=\"+n.path}if(n.expires){if(!function isDate(e){return\"[object Date]\"===Object.prototype.toString.call(e)||e instanceof Date}(n.expires)||isNaN(n.expires.valueOf()))throw new TypeError(\"option expires is invalid\");a+=\"; Expires=\"+n.expires.toUTCString()}if(n.httpOnly&&(a+=\"; HttpOnly\"),n.secure&&(a+=\"; Secure\"),n.priority){switch(\"string\"==typeof n.priority?n.priority.toLowerCase():n.priority){case\"low\":a+=\"; Priority=Low\";break;case\"medium\":a+=\"; Priority=Medium\";break;case\"high\":a+=\"; Priority=High\";break;default:throw new TypeError(\"option priority is invalid\")}}if(n.sameSite){switch(\"string\"==typeof n.sameSite?n.sameSite.toLowerCase():n.sameSite){case!0:a+=\"; SameSite=Strict\";break;case\"lax\":a+=\"; SameSite=Lax\";break;case\"strict\":a+=\"; SameSite=Strict\";break;case\"none\":a+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return a}function defaultDecode(e){return-1!==e.indexOf(\"%\")?decodeURIComponent(e):e}function defaultEncode(e){return encodeURIComponent(e)}const t=\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product||\"undefined\"!=typeof global&&global.HermesInternal;let s;function getTokenPayload(e){if(e)try{const t=decodeURIComponent(s(e.split(\".\")[1]).split(\"\").map((function(e){return\"%\"+(\"00\"+e.charCodeAt(0).toString(16)).slice(-2)})).join(\"\"));return JSON.parse(t)||{}}catch(e){}return{}}function isTokenExpired(e,t=0){let s=getTokenPayload(e);return!(Object.keys(s).length>0&&(!s.exp||s.exp-t>Date.now()/1e3))}s=\"function\"!=typeof atob||t?e=>{let t=String(e).replace(/=+$/,\"\");if(t.length%4==1)throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");for(var s,i,n=0,r=0,o=\"\";i=t.charAt(r++);~i&&(s=n%4?64*s+i:i,n++%4)?o+=String.fromCharCode(255&s>>(-2*n&6)):0)i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(i);return o}:atob;const i=\"pb_auth\";class BaseAuthStore{constructor(){this.baseToken=\"\",this.baseModel=null,this._onChangeCallbacks=[]}get token(){return this.baseToken}get model(){return this.baseModel}get isValid(){return!isTokenExpired(this.token)}get isAdmin(){return\"admin\"===getTokenPayload(this.token).type}get isAuthRecord(){return\"authRecord\"===getTokenPayload(this.token).type}save(e,t){this.baseToken=e||\"\",this.baseModel=t||null,this.triggerChange()}clear(){this.baseToken=\"\",this.baseModel=null,this.triggerChange()}loadFromCookie(e,t=i){const s=cookieParse(e||\"\")[t]||\"\";let n={};try{n=JSON.parse(s),(null===typeof n||\"object\"!=typeof n||Array.isArray(n))&&(n={})}catch(e){}this.save(n.token||\"\",n.model||null)}exportToCookie(e,t=i){const s={secure:!0,sameSite:!0,httpOnly:!0,path:\"/\"},n=getTokenPayload(this.token);s.expires=n?.exp?new Date(1e3*n.exp):new Date(\"1970-01-01\"),e=Object.assign({},s,e);const r={token:this.token,model:this.model?JSON.parse(JSON.stringify(this.model)):null};let o=cookieSerialize(t,JSON.stringify(r),e);const a=\"undefined\"!=typeof Blob?new Blob([o]).size:o.length;if(r.model&&a>4096){r.model={id:r?.model?.id,email:r?.model?.email};const s=[\"collectionId\",\"username\",\"verified\"];for(const e in this.model)s.includes(e)&&(r.model[e]=this.model[e]);o=cookieSerialize(t,JSON.stringify(r),e)}return o}onChange(e,t=!1){return this._onChangeCallbacks.push(e),t&&e(this.token,this.model),()=>{for(let t=this._onChangeCallbacks.length-1;t>=0;t--)if(this._onChangeCallbacks[t]==e)return delete this._onChangeCallbacks[t],void this._onChangeCallbacks.splice(t,1)}}triggerChange(){for(const e of this._onChangeCallbacks)e&&e(this.token,this.model)}}class LocalAuthStore extends BaseAuthStore{constructor(e=\"pocketbase_auth\"){super(),this.storageFallback={},this.storageKey=e,this._bindStorageEvent()}get token(){return(this._storageGet(this.storageKey)||{}).token||\"\"}get model(){return(this._storageGet(this.storageKey)||{}).model||null}save(e,t){this._storageSet(this.storageKey,{token:e,model:t}),super.save(e,t)}clear(){this._storageRemove(this.storageKey),super.clear()}_storageGet(e){if(\"undefined\"!=typeof window&&window?.localStorage){const t=window.localStorage.getItem(e)||\"\";try{return JSON.parse(t)}catch(e){return t}}return this.storageFallback[e]}_storageSet(e,t){if(\"undefined\"!=typeof window&&window?.localStorage){let s=t;\"string\"!=typeof t&&(s=JSON.stringify(t)),window.localStorage.setItem(e,s)}else this.storageFallback[e]=t}_storageRemove(e){\"undefined\"!=typeof window&&window?.localStorage&&window.localStorage?.removeItem(e),delete this.storageFallback[e]}_bindStorageEvent(){\"undefined\"!=typeof window&&window?.localStorage&&window.addEventListener&&window.addEventListener(\"storage\",(e=>{if(e.key!=this.storageKey)return;const t=this._storageGet(this.storageKey)||{};super.save(t.token||\"\",t.model||null)}))}}class BaseService{constructor(e){this.client=e}}class SettingsService extends BaseService{async getAll(e){return e=Object.assign({method:\"GET\"},e),this.client.send(\"/api/settings\",e)}async update(e,t){return t=Object.assign({method:\"PATCH\",body:e},t),this.client.send(\"/api/settings\",t)}async testS3(e=\"storage\",t){return t=Object.assign({method:\"POST\",body:{filesystem:e}},t),this.client.send(\"/api/settings/test/s3\",t).then((()=>!0))}async testEmail(e,t,s){return s=Object.assign({method:\"POST\",body:{email:e,template:t}},s),this.client.send(\"/api/settings/test/email\",s).then((()=>!0))}async generateAppleClientSecret(e,t,s,i,n,r){return r=Object.assign({method:\"POST\",body:{clientId:e,teamId:t,keyId:s,privateKey:i,duration:n}},r),this.client.send(\"/api/settings/apple/generate-client-secret\",r)}}class CrudService extends BaseService{decode(e){return e}async getFullList(e,t){if(\"number\"==typeof e)return this._getFullList(e,t);let s=500;return(t=Object.assign({},e,t)).batch&&(s=t.batch,delete t.batch),this._getFullList(s,t)}async getList(e=1,t=30,s){return(s=Object.assign({method:\"GET\"},s)).query=Object.assign({page:e,perPage:t},s.query),this.client.send(this.baseCrudPath,s).then((e=>(e.items=e.items?.map((e=>this.decode(e)))||[],e)))}async getFirstListItem(e,t){return(t=Object.assign({requestKey:\"one_by_filter_\"+this.baseCrudPath+\"_\"+e},t)).query=Object.assign({filter:e,skipTotal:1},t.query),this.getList(1,1,t).then((e=>{if(!e?.items?.length)throw new ClientResponseError({status:404,response:{code:404,message:\"The requested resource wasn't found.\",data:{}}});return e.items[0]}))}async getOne(e,t){if(!e)throw new ClientResponseError({url:this.client.buildUrl(this.baseCrudPath+\"/\"),status:404,response:{code:404,message:\"Missing required record id.\",data:{}}});return t=Object.assign({method:\"GET\"},t),this.client.send(this.baseCrudPath+\"/\"+encodeURIComponent(e),t).then((e=>this.decode(e)))}async create(e,t){return t=Object.assign({method:\"POST\",body:e},t),this.client.send(this.baseCrudPath,t).then((e=>this.decode(e)))}async update(e,t,s){return s=Object.assign({method:\"PATCH\",body:t},s),this.client.send(this.baseCrudPath+\"/\"+encodeURIComponent(e),s).then((e=>this.decode(e)))}async delete(e,t){return t=Object.assign({method:\"DELETE\"},t),this.client.send(this.baseCrudPath+\"/\"+encodeURIComponent(e),t).then((()=>!0))}_getFullList(e=500,t){(t=t||{}).query=Object.assign({skipTotal:1},t.query);let s=[],request=async i=>this.getList(i,e||500,t).then((e=>{const t=e.items;return s=s.concat(t),t.length==e.perPage?request(i+1):s}));return request(1)}}function normalizeLegacyOptionsArgs(e,t,s,i){const n=void 0!==i;return n||void 0!==s?n?(console.warn(e),t.body=Object.assign({},t.body,s),t.query=Object.assign({},t.query,i),t):Object.assign(t,s):t}function resetAutoRefresh(e){e._resetAutoRefresh?.()}class AdminService extends CrudService{get baseCrudPath(){return\"/api/admins\"}async update(e,t,s){return super.update(e,t,s).then((e=>(this.client.authStore.model?.id===e.id&&void 0===this.client.authStore.model?.collectionId&&this.client.authStore.save(this.client.authStore.token,e),e)))}async delete(e,t){return super.delete(e,t).then((t=>(t&&this.client.authStore.model?.id===e&&void 0===this.client.authStore.model?.collectionId&&this.client.authStore.clear(),t)))}authResponse(e){const t=this.decode(e?.admin||{});return e?.token&&e?.admin&&this.client.authStore.save(e.token,t),Object.assign({},e,{token:e?.token||\"\",admin:t})}async authWithPassword(e,t,s,i){let n={method:\"POST\",body:{identity:e,password:t}};n=normalizeLegacyOptionsArgs(\"This form of authWithPassword(email, pass, body?, query?) is deprecated. Consider replacing it with authWithPassword(email, pass, options?).\",n,s,i);const r=n.autoRefreshThreshold;delete n.autoRefreshThreshold,n.autoRefresh||resetAutoRefresh(this.client);let o=await this.client.send(this.baseCrudPath+\"/auth-with-password\",n);return o=this.authResponse(o),r&&function registerAutoRefresh(e,t,s,i){resetAutoRefresh(e);const n=e.beforeSend,r=e.authStore.model,o=e.authStore.onChange(((t,s)=>{(!t||s?.id!=r?.id||(s?.collectionId||r?.collectionId)&&s?.collectionId!=r?.collectionId)&&resetAutoRefresh(e)}));e._resetAutoRefresh=function(){o(),e.beforeSend=n,delete e._resetAutoRefresh},e.beforeSend=async(r,o)=>{const a=e.authStore.token;if(o.query?.autoRefresh)return n?n(r,o):{url:r,sendOptions:o};let c=e.authStore.isValid;if(c&&isTokenExpired(e.authStore.token,t))try{await s()}catch(e){c=!1}c||await i();const l=o.headers||{};for(let t in l)if(\"authorization\"==t.toLowerCase()&&a==l[t]&&e.authStore.token){l[t]=e.authStore.token;break}return o.headers=l,n?n(r,o):{url:r,sendOptions:o}}}(this.client,r,(()=>this.authRefresh({autoRefresh:!0})),(()=>this.authWithPassword(e,t,Object.assign({autoRefresh:!0},n)))),o}async authRefresh(e,t){let s={method:\"POST\"};return s=normalizeLegacyOptionsArgs(\"This form of authRefresh(body?, query?) is deprecated. Consider replacing it with authRefresh(options?).\",s,e,t),this.client.send(this.baseCrudPath+\"/auth-refresh\",s).then(this.authResponse.bind(this))}async requestPasswordReset(e,t,s){let i={method:\"POST\",body:{email:e}};return i=normalizeLegacyOptionsArgs(\"This form of requestPasswordReset(email, body?, query?) is deprecated. Consider replacing it with requestPasswordReset(email, options?).\",i,t,s),this.client.send(this.baseCrudPath+\"/request-password-reset\",i).then((()=>!0))}async confirmPasswordReset(e,t,s,i,n){let r={method:\"POST\",body:{token:e,password:t,passwordConfirm:s}};return r=normalizeLegacyOptionsArgs(\"This form of confirmPasswordReset(resetToken, password, passwordConfirm, body?, query?) is deprecated. Consider replacing it with confirmPasswordReset(resetToken, password, passwordConfirm, options?).\",r,i,n),this.client.send(this.baseCrudPath+\"/confirm-password-reset\",r).then((()=>!0))}}const n=[\"requestKey\",\"$cancelKey\",\"$autoCancel\",\"fetch\",\"headers\",\"body\",\"query\",\"params\",\"cache\",\"credentials\",\"headers\",\"integrity\",\"keepalive\",\"method\",\"mode\",\"redirect\",\"referrer\",\"referrerPolicy\",\"signal\",\"window\"];function normalizeUnknownQueryParams(e){if(e){e.query=e.query||{};for(let t in e)n.includes(t)||(e.query[t]=e[t],delete e[t])}}class RealtimeService extends BaseService{constructor(){super(...arguments),this.clientId=\"\",this.eventSource=null,this.subscriptions={},this.lastSentSubscriptions=[],this.maxConnectTimeout=15e3,this.reconnectAttempts=0,this.maxReconnectAttempts=1/0,this.predefinedReconnectIntervals=[200,300,500,1e3,1200,1500,2e3],this.pendingConnects=[]}get isConnected(){return!!this.eventSource&&!!this.clientId&&!this.pendingConnects.length}async subscribe(e,t,s){if(!e)throw new Error(\"topic must be set.\");let i=e;if(s){normalizeUnknownQueryParams(s=Object.assign({},s));const e=\"options=\"+encodeURIComponent(JSON.stringify({query:s.query,headers:s.headers}));i+=(i.includes(\"?\")?\"&\":\"?\")+e}const listener=function(e){const s=e;let i;try{i=JSON.parse(s?.data)}catch{}t(i||{})};return this.subscriptions[i]||(this.subscriptions[i]=[]),this.subscriptions[i].push(listener),this.isConnected?1===this.subscriptions[i].length?await this.submitSubscriptions():this.eventSource?.addEventListener(i,listener):await this.connect(),async()=>this.unsubscribeByTopicAndListener(e,listener)}async unsubscribe(e){let t=!1;if(e){const s=this.getSubscriptionsByTopic(e);for(let e in s)if(this.hasSubscriptionListeners(e)){for(let t of this.subscriptions[e])this.eventSource?.removeEventListener(e,t);delete this.subscriptions[e],t||(t=!0)}}else this.subscriptions={};this.hasSubscriptionListeners()?t&&await this.submitSubscriptions():this.disconnect()}async unsubscribeByPrefix(e){let t=!1;for(let s in this.subscriptions)if((s+\"?\").startsWith(e)){t=!0;for(let e of this.subscriptions[s])this.eventSource?.removeEventListener(s,e);delete this.subscriptions[s]}t&&(this.hasSubscriptionListeners()?await this.submitSubscriptions():this.disconnect())}async unsubscribeByTopicAndListener(e,t){let s=!1;const i=this.getSubscriptionsByTopic(e);for(let e in i){if(!Array.isArray(this.subscriptions[e])||!this.subscriptions[e].length)continue;let i=!1;for(let s=this.subscriptions[e].length-1;s>=0;s--)this.subscriptions[e][s]===t&&(i=!0,delete this.subscriptions[e][s],this.subscriptions[e].splice(s,1),this.eventSource?.removeEventListener(e,t));i&&(this.subscriptions[e].length||delete this.subscriptions[e],s||this.hasSubscriptionListeners(e)||(s=!0))}this.hasSubscriptionListeners()?s&&await this.submitSubscriptions():this.disconnect()}hasSubscriptionListeners(e){if(this.subscriptions=this.subscriptions||{},e)return!!this.subscriptions[e]?.length;for(let e in this.subscriptions)if(this.subscriptions[e]?.length)return!0;return!1}async submitSubscriptions(){if(this.clientId)return this.addAllSubscriptionListeners(),this.lastSentSubscriptions=this.getNonEmptySubscriptionKeys(),this.client.send(\"/api/realtime\",{method:\"POST\",body:{clientId:this.clientId,subscriptions:this.lastSentSubscriptions},requestKey:this.getSubscriptionsCancelKey()}).catch((e=>{if(!e?.isAbort)throw e}))}getSubscriptionsCancelKey(){return\"realtime_\"+this.clientId}getSubscriptionsByTopic(e){const t={};e=e.includes(\"?\")?e:e+\"?\";for(let s in this.subscriptions)(s+\"?\").startsWith(e)&&(t[s]=this.subscriptions[s]);return t}getNonEmptySubscriptionKeys(){const e=[];for(let t in this.subscriptions)this.subscriptions[t].length&&e.push(t);return e}addAllSubscriptionListeners(){if(this.eventSource){this.removeAllSubscriptionListeners();for(let e in this.subscriptions)for(let t of this.subscriptions[e])this.eventSource.addEventListener(e,t)}}removeAllSubscriptionListeners(){if(this.eventSource)for(let e in this.subscriptions)for(let t of this.subscriptions[e])this.eventSource.removeEventListener(e,t)}async connect(){if(!(this.reconnectAttempts>0))return new Promise(((e,t)=>{this.pendingConnects.push({resolve:e,reject:t}),this.pendingConnects.length>1||this.initConnect()}))}initConnect(){this.disconnect(!0),clearTimeout(this.connectTimeoutId),this.connectTimeoutId=setTimeout((()=>{this.connectErrorHandler(new Error(\"EventSource connect took too long.\"))}),this.maxConnectTimeout),this.eventSource=new EventSource(this.client.buildUrl(\"/api/realtime\")),this.eventSource.onerror=e=>{this.connectErrorHandler(new Error(\"Failed to establish realtime connection.\"))},this.eventSource.addEventListener(\"PB_CONNECT\",(e=>{const t=e;this.clientId=t?.lastEventId,this.submitSubscriptions().then((async()=>{let e=3;for(;this.hasUnsentSubscriptions()&&e>0;)e--,await this.submitSubscriptions()})).then((()=>{for(let e of this.pendingConnects)e.resolve();this.pendingConnects=[],this.reconnectAttempts=0,clearTimeout(this.reconnectTimeoutId),clearTimeout(this.connectTimeoutId);const t=this.getSubscriptionsByTopic(\"PB_CONNECT\");for(let s in t)for(let i of t[s])i(e)})).catch((e=>{this.clientId=\"\",this.connectErrorHandler(e)}))}))}hasUnsentSubscriptions(){const e=this.getNonEmptySubscriptionKeys();if(e.length!=this.lastSentSubscriptions.length)return!0;for(const t of e)if(!this.lastSentSubscriptions.includes(t))return!0;return!1}connectErrorHandler(e){if(clearTimeout(this.connectTimeoutId),clearTimeout(this.reconnectTimeoutId),!this.clientId&&!this.reconnectAttempts||this.reconnectAttempts>this.maxReconnectAttempts){for(let t of this.pendingConnects)t.reject(new ClientResponseError(e));return this.pendingConnects=[],void this.disconnect()}this.disconnect(!0);const t=this.predefinedReconnectIntervals[this.reconnectAttempts]||this.predefinedReconnectIntervals[this.predefinedReconnectIntervals.length-1];this.reconnectAttempts++,this.reconnectTimeoutId=setTimeout((()=>{this.initConnect()}),t)}disconnect(e=!1){if(clearTimeout(this.connectTimeoutId),clearTimeout(this.reconnectTimeoutId),this.removeAllSubscriptionListeners(),this.client.cancelRequest(this.getSubscriptionsCancelKey()),this.eventSource?.close(),this.eventSource=null,this.clientId=\"\",!e){this.reconnectAttempts=0;for(let e of this.pendingConnects)e.resolve();this.pendingConnects=[]}}}class RecordService extends CrudService{constructor(e,t){super(e),this.collectionIdOrName=t}get baseCrudPath(){return this.baseCollectionPath+\"/records\"}get baseCollectionPath(){return\"/api/collections/\"+encodeURIComponent(this.collectionIdOrName)}async subscribe(e,t,s){if(!e)throw new Error(\"Missing topic.\");if(!t)throw new Error(\"Missing subscription callback.\");return this.client.realtime.subscribe(this.collectionIdOrName+\"/\"+e,t,s)}async unsubscribe(e){return e?this.client.realtime.unsubscribe(this.collectionIdOrName+\"/\"+e):this.client.realtime.unsubscribeByPrefix(this.collectionIdOrName)}async getFullList(e,t){if(\"number\"==typeof e)return super.getFullList(e,t);const s=Object.assign({},e,t);return super.getFullList(s)}async getList(e=1,t=30,s){return super.getList(e,t,s)}async getFirstListItem(e,t){return super.getFirstListItem(e,t)}async getOne(e,t){return super.getOne(e,t)}async create(e,t){return super.create(e,t)}async update(e,t,s){return super.update(e,t,s).then((e=>(this.client.authStore.model?.id!==e?.id||this.client.authStore.model?.collectionId!==this.collectionIdOrName&&this.client.authStore.model?.collectionName!==this.collectionIdOrName||this.client.authStore.save(this.client.authStore.token,e),e)))}async delete(e,t){return super.delete(e,t).then((t=>(!t||this.client.authStore.model?.id!==e||this.client.authStore.model?.collectionId!==this.collectionIdOrName&&this.client.authStore.model?.collectionName!==this.collectionIdOrName||this.client.authStore.clear(),t)))}authResponse(e){const t=this.decode(e?.record||{});return this.client.authStore.save(e?.token,t),Object.assign({},e,{token:e?.token||\"\",record:t})}async listAuthMethods(e){return e=Object.assign({method:\"GET\"},e),this.client.send(this.baseCollectionPath+\"/auth-methods\",e).then((e=>Object.assign({},e,{usernamePassword:!!e?.usernamePassword,emailPassword:!!e?.emailPassword,authProviders:Array.isArray(e?.authProviders)?e?.authProviders:[]})))}async authWithPassword(e,t,s,i){let n={method:\"POST\",body:{identity:e,password:t}};return n=normalizeLegacyOptionsArgs(\"This form of authWithPassword(usernameOrEmail, pass, body?, query?) is deprecated. Consider replacing it with authWithPassword(usernameOrEmail, pass, options?).\",n,s,i),this.client.send(this.baseCollectionPath+\"/auth-with-password\",n).then((e=>this.authResponse(e)))}async authWithOAuth2Code(e,t,s,i,n,r,o){let a={method:\"POST\",body:{provider:e,code:t,codeVerifier:s,redirectUrl:i,createData:n}};return a=normalizeLegacyOptionsArgs(\"This form of authWithOAuth2Code(provider, code, codeVerifier, redirectUrl, createData?, body?, query?) is deprecated. Consider replacing it with authWithOAuth2Code(provider, code, codeVerifier, redirectUrl, createData?, options?).\",a,r,o),this.client.send(this.baseCollectionPath+\"/auth-with-oauth2\",a).then((e=>this.authResponse(e)))}authWithOAuth2(...e){if(e.length>1||\"string\"==typeof e?.[0])return console.warn(\"PocketBase: This form of authWithOAuth2() is deprecated and may get removed in the future. Please replace with authWithOAuth2Code() OR use the authWithOAuth2() realtime form as shown in https://pocketbase.io/docs/authentication/#oauth2-integration.\"),this.authWithOAuth2Code(e?.[0]||\"\",e?.[1]||\"\",e?.[2]||\"\",e?.[3]||\"\",e?.[4]||{},e?.[5]||{},e?.[6]||{});const t=e?.[0]||{};let s=null;t.urlCallback||(s=openBrowserPopup(void 0));const i=new RealtimeService(this.client);function cleanup(){s?.close(),i.unsubscribe()}const n={},r=t.requestKey;return r&&(n.requestKey=r),this.listAuthMethods(n).then((e=>{const n=e.authProviders.find((e=>e.name===t.provider));if(!n)throw new ClientResponseError(new Error(`Missing or invalid provider \"${t.provider}\".`));const o=this.client.buildUrl(\"/api/oauth2-redirect\"),a=r?this.client.cancelControllers?.[r]:void 0;return a&&(a.signal.onabort=()=>{cleanup()}),new Promise((async(e,r)=>{try{await i.subscribe(\"@oauth2\",(async s=>{const c=i.clientId;try{if(!s.state||c!==s.state)throw new Error(\"State parameters don't match.\");if(s.error||!s.code)throw new Error(\"OAuth2 redirect error or missing code: \"+s.error);const i=Object.assign({},t);delete i.provider,delete i.scopes,delete i.createData,delete i.urlCallback,a?.signal?.onabort&&(a.signal.onabort=null);const r=await this.authWithOAuth2Code(n.name,s.code,n.codeVerifier,o,t.createData,i);e(r)}catch(e){r(new ClientResponseError(e))}cleanup()}));const c={state:i.clientId};t.scopes?.length&&(c.scope=t.scopes.join(\" \"));const l=this._replaceQueryParams(n.authUrl+o,c);let h=t.urlCallback||function(e){s?s.location.href=e:s=openBrowserPopup(e)};await h(l)}catch(e){cleanup(),r(new ClientResponseError(e))}}))})).catch((e=>{throw cleanup(),e}))}async authRefresh(e,t){let s={method:\"POST\"};return s=normalizeLegacyOptionsArgs(\"This form of authRefresh(body?, query?) is deprecated. Consider replacing it with authRefresh(options?).\",s,e,t),this.client.send(this.baseCollectionPath+\"/auth-refresh\",s).then((e=>this.authResponse(e)))}async requestPasswordReset(e,t,s){let i={method:\"POST\",body:{email:e}};return i=normalizeLegacyOptionsArgs(\"This form of requestPasswordReset(email, body?, query?) is deprecated. Consider replacing it with requestPasswordReset(email, options?).\",i,t,s),this.client.send(this.baseCollectionPath+\"/request-password-reset\",i).then((()=>!0))}async confirmPasswordReset(e,t,s,i,n){let r={method:\"POST\",body:{token:e,password:t,passwordConfirm:s}};return r=normalizeLegacyOptionsArgs(\"This form of confirmPasswordReset(token, password, passwordConfirm, body?, query?) is deprecated. Consider replacing it with confirmPasswordReset(token, password, passwordConfirm, options?).\",r,i,n),this.client.send(this.baseCollectionPath+\"/confirm-password-reset\",r).then((()=>!0))}async requestVerification(e,t,s){let i={method:\"POST\",body:{email:e}};return i=normalizeLegacyOptionsArgs(\"This form of requestVerification(email, body?, query?) is deprecated. Consider replacing it with requestVerification(email, options?).\",i,t,s),this.client.send(this.baseCollectionPath+\"/request-verification\",i).then((()=>!0))}async confirmVerification(e,t,s){let i={method:\"POST\",body:{token:e}};return i=normalizeLegacyOptionsArgs(\"This form of confirmVerification(token, body?, query?) is deprecated. Consider replacing it with confirmVerification(token, options?).\",i,t,s),this.client.send(this.baseCollectionPath+\"/confirm-verification\",i).then((()=>{const t=getTokenPayload(e),s=this.client.authStore.model;return s&&!s.verified&&s.id===t.id&&s.collectionId===t.collectionId&&(s.verified=!0,this.client.authStore.save(this.client.authStore.token,s)),!0}))}async requestEmailChange(e,t,s){let i={method:\"POST\",body:{newEmail:e}};return i=normalizeLegacyOptionsArgs(\"This form of requestEmailChange(newEmail, body?, query?) is deprecated. Consider replacing it with requestEmailChange(newEmail, options?).\",i,t,s),this.client.send(this.baseCollectionPath+\"/request-email-change\",i).then((()=>!0))}async confirmEmailChange(e,t,s,i){let n={method:\"POST\",body:{token:e,password:t}};return n=normalizeLegacyOptionsArgs(\"This form of confirmEmailChange(token, password, body?, query?) is deprecated. Consider replacing it with confirmEmailChange(token, password, options?).\",n,s,i),this.client.send(this.baseCollectionPath+\"/confirm-email-change\",n).then((()=>{const t=getTokenPayload(e),s=this.client.authStore.model;return s&&s.id===t.id&&s.collectionId===t.collectionId&&this.client.authStore.clear(),!0}))}async listExternalAuths(e,t){return t=Object.assign({method:\"GET\"},t),this.client.send(this.baseCrudPath+\"/\"+encodeURIComponent(e)+\"/external-auths\",t)}async unlinkExternalAuth(e,t,s){return s=Object.assign({method:\"DELETE\"},s),this.client.send(this.baseCrudPath+\"/\"+encodeURIComponent(e)+\"/external-auths/\"+encodeURIComponent(t),s).then((()=>!0))}_replaceQueryParams(e,t={}){let s=e,i=\"\";e.indexOf(\"?\")>=0&&(s=e.substring(0,e.indexOf(\"?\")),i=e.substring(e.indexOf(\"?\")+1));const n={},r=i.split(\"&\");for(const e of r){if(\"\"==e)continue;const t=e.split(\"=\");n[decodeURIComponent(t[0].replace(/\\+/g,\" \"))]=decodeURIComponent((t[1]||\"\").replace(/\\+/g,\" \"))}for(let e in t)t.hasOwnProperty(e)&&(null==t[e]?delete n[e]:n[e]=t[e]);i=\"\";for(let e in n)n.hasOwnProperty(e)&&(\"\"!=i&&(i+=\"&\"),i+=encodeURIComponent(e.replace(/%20/g,\"+\"))+\"=\"+encodeURIComponent(n[e].replace(/%20/g,\"+\")));return\"\"!=i?s+\"?\"+i:s}}function openBrowserPopup(e){if(\"undefined\"==typeof window||!window?.open)throw new ClientResponseError(new Error(\"Not in a browser context - please pass a custom urlCallback function.\"));let t=1024,s=768,i=window.innerWidth,n=window.innerHeight;t=t>i?i:t,s=s>n?n:s;let r=i/2-t/2,o=n/2-s/2;return window.open(e,\"popup_window\",\"width=\"+t+\",height=\"+s+\",top=\"+o+\",left=\"+r+\",resizable,menubar=no\")}class CollectionService extends CrudService{get baseCrudPath(){return\"/api/collections\"}async import(e,t=!1,s){return s=Object.assign({method:\"PUT\",body:{collections:e,deleteMissing:t}},s),this.client.send(this.baseCrudPath+\"/import\",s).then((()=>!0))}}class LogService extends BaseService{async getList(e=1,t=30,s){return(s=Object.assign({method:\"GET\"},s)).query=Object.assign({page:e,perPage:t},s.query),this.client.send(\"/api/logs\",s)}async getOne(e,t){if(!e)throw new ClientResponseError({url:this.client.buildUrl(\"/api/logs/\"),status:404,response:{code:404,message:\"Missing required log id.\",data:{}}});return t=Object.assign({method:\"GET\"},t),this.client.send(\"/api/logs/\"+encodeURIComponent(e),t)}async getStats(e){return e=Object.assign({method:\"GET\"},e),this.client.send(\"/api/logs/stats\",e)}}class HealthService extends BaseService{async check(e){return e=Object.assign({method:\"GET\"},e),this.client.send(\"/api/health\",e)}}class FileService extends BaseService{getUrl(e,t,s={}){if(!t||!e?.id||!e?.collectionId&&!e?.collectionName)return\"\";const i=[];i.push(\"api\"),i.push(\"files\"),i.push(encodeURIComponent(e.collectionId||e.collectionName)),i.push(encodeURIComponent(e.id)),i.push(encodeURIComponent(t));let n=this.client.buildUrl(i.join(\"/\"));if(Object.keys(s).length){!1===s.download&&delete s.download;const e=new URLSearchParams(s);n+=(n.includes(\"?\")?\"&\":\"?\")+e}return n}async getToken(e){return e=Object.assign({method:\"POST\"},e),this.client.send(\"/api/files/token\",e).then((e=>e?.token||\"\"))}}class BackupService extends BaseService{async getFullList(e){return e=Object.assign({method:\"GET\"},e),this.client.send(\"/api/backups\",e)}async create(e,t){return t=Object.assign({method:\"POST\",body:{name:e}},t),this.client.send(\"/api/backups\",t).then((()=>!0))}async upload(e,t){return t=Object.assign({method:\"POST\",body:e},t),this.client.send(\"/api/backups/upload\",t).then((()=>!0))}async delete(e,t){return t=Object.assign({method:\"DELETE\"},t),this.client.send(`/api/backups/${encodeURIComponent(e)}`,t).then((()=>!0))}async restore(e,t){return t=Object.assign({method:\"POST\"},t),this.client.send(`/api/backups/${encodeURIComponent(e)}/restore`,t).then((()=>!0))}getDownloadUrl(e,t){return this.client.buildUrl(`/api/backups/${encodeURIComponent(t)}?token=${encodeURIComponent(e)}`)}}class Client{constructor(e=\"/\",t,s=\"en-US\"){this.cancelControllers={},this.recordServices={},this.enableAutoCancellation=!0,this.baseUrl=e,this.lang=s,this.authStore=t||new LocalAuthStore,this.admins=new AdminService(this),this.collections=new CollectionService(this),this.files=new FileService(this),this.logs=new LogService(this),this.settings=new SettingsService(this),this.realtime=new RealtimeService(this),this.health=new HealthService(this),this.backups=new BackupService(this)}collection(e){return this.recordServices[e]||(this.recordServices[e]=new RecordService(this,e)),this.recordServices[e]}autoCancellation(e){return this.enableAutoCancellation=!!e,this}cancelRequest(e){return this.cancelControllers[e]&&(this.cancelControllers[e].abort(),delete this.cancelControllers[e]),this}cancelAllRequests(){for(let e in this.cancelControllers)this.cancelControllers[e].abort();return this.cancelControllers={},this}filter(e,t){if(!t)return e;for(let s in t){let i=t[s];switch(typeof i){case\"boolean\":case\"number\":i=\"\"+i;break;case\"string\":i=\"'\"+i.replace(/'/g,\"\\\\'\")+\"'\";break;default:i=null===i?\"null\":i instanceof Date?\"'\"+i.toISOString().replace(\"T\",\" \")+\"'\":\"'\"+JSON.stringify(i).replace(/'/g,\"\\\\'\")+\"'\"}e=e.replaceAll(\"{:\"+s+\"}\",i)}return e}getFileUrl(e,t,s={}){return this.files.getUrl(e,t,s)}buildUrl(e){let t=this.baseUrl;return\"undefined\"==typeof window||!window.location||t.startsWith(\"https://\")||t.startsWith(\"http://\")||(t=window.location.origin?.endsWith(\"/\")?window.location.origin.substring(0,window.location.origin.length-1):window.location.origin||\"\",this.baseUrl.startsWith(\"/\")||(t+=window.location.pathname||\"/\",t+=t.endsWith(\"/\")?\"\":\"/\"),t+=this.baseUrl),e&&(t+=t.endsWith(\"/\")?\"\":\"/\",t+=e.startsWith(\"/\")?e.substring(1):e),t}async send(e,t){t=this.initSendOptions(e,t);let s=this.buildUrl(e);if(this.beforeSend){const e=Object.assign({},await this.beforeSend(s,t));void 0!==e.url||void 0!==e.options?(s=e.url||s,t=e.options||t):Object.keys(e).length&&(t=e,console?.warn&&console.warn(\"Deprecated format of beforeSend return: please use `return { url, options }`, instead of `return options`.\"))}if(void 0!==t.query){const e=this.serializeQueryParams(t.query);e&&(s+=(s.includes(\"?\")?\"&\":\"?\")+e),delete t.query}\"application/json\"==this.getHeader(t.headers,\"Content-Type\")&&t.body&&\"string\"!=typeof t.body&&(t.body=JSON.stringify(t.body));return(t.fetch||fetch)(s,t).then((async e=>{let t={};try{t=await e.json()}catch(e){}if(this.afterSend&&(t=await this.afterSend(e,t)),e.status>=400)throw new ClientResponseError({url:e.url,status:e.status,data:t});return t})).catch((e=>{throw new ClientResponseError(e)}))}initSendOptions(e,t){if((t=Object.assign({method:\"GET\"},t)).body=this.convertToFormDataIfNeeded(t.body),normalizeUnknownQueryParams(t),t.query=Object.assign({},t.params,t.query),void 0===t.requestKey&&(!1===t.$autoCancel||!1===t.query.$autoCancel?t.requestKey=null:(t.$cancelKey||t.query.$cancelKey)&&(t.requestKey=t.$cancelKey||t.query.$cancelKey)),delete t.$autoCancel,delete t.query.$autoCancel,delete t.$cancelKey,delete t.query.$cancelKey,null!==this.getHeader(t.headers,\"Content-Type\")||this.isFormData(t.body)||(t.headers=Object.assign({},t.headers,{\"Content-Type\":\"application/json\"})),null===this.getHeader(t.headers,\"Accept-Language\")&&(t.headers=Object.assign({},t.headers,{\"Accept-Language\":this.lang})),this.authStore.token&&null===this.getHeader(t.headers,\"Authorization\")&&(t.headers=Object.assign({},t.headers,{Authorization:this.authStore.token})),this.enableAutoCancellation&&null!==t.requestKey){const s=t.requestKey||(t.method||\"GET\")+e;delete t.requestKey,this.cancelRequest(s);const i=new AbortController;this.cancelControllers[s]=i,t.signal=i.signal}return t}convertToFormDataIfNeeded(e){if(\"undefined\"==typeof FormData||void 0===e||\"object\"!=typeof e||null===e||this.isFormData(e)||!this.hasBlobField(e))return e;const t=new FormData;for(const s in e){const i=e[s];if(\"object\"!=typeof i||this.hasBlobField({data:i})){const e=Array.isArray(i)?i:[i];for(let i of e)t.append(s,i)}else{let e={};e[s]=i,t.append(\"@jsonPayload\",JSON.stringify(e))}}return t}hasBlobField(e){for(const t in e){const s=Array.isArray(e[t])?e[t]:[e[t]];for(const e of s)if(\"undefined\"!=typeof Blob&&e instanceof Blob||\"undefined\"!=typeof File&&e instanceof File)return!0}return!1}getHeader(e,t){e=e||{},t=t.toLowerCase();for(let s in e)if(s.toLowerCase()==t)return e[s];return null}isFormData(e){return e&&(\"FormData\"===e.constructor.name||\"undefined\"!=typeof FormData&&e instanceof FormData)}serializeQueryParams(e){const t=[];for(const s in e){if(null===e[s])continue;const i=e[s],n=encodeURIComponent(s);if(Array.isArray(i))for(const e of i)t.push(n+\"=\"+encodeURIComponent(e));else i instanceof Date?t.push(n+\"=\"+encodeURIComponent(i.toISOString())):null!==typeof i&&\"object\"==typeof i?t.push(n+\"=\"+encodeURIComponent(JSON.stringify(i))):t.push(n+\"=\"+encodeURIComponent(i))}return t.join(\"&\")}}class AsyncAuthStore extends BaseAuthStore{constructor(e){super(),this.queue=[],this.saveFunc=e.save,this.clearFunc=e.clear,this._enqueue((()=>this._loadInitial(e.initial)))}save(e,t){super.save(e,t);let s=\"\";try{s=JSON.stringify({token:e,model:t})}catch(e){console.warn(\"AsyncAuthStore: failed to stringify the new state\")}this._enqueue((()=>this.saveFunc(s)))}clear(){super.clear(),this.clearFunc?this._enqueue((()=>this.clearFunc())):this._enqueue((()=>this.saveFunc(\"\")))}async _loadInitial(e){try{if(e=await e){let t;\"string\"==typeof e?t=JSON.parse(e)||{}:\"object\"==typeof e&&(t=e),this.save(t.token||\"\",t.model||null)}}catch(e){}}_enqueue(e){this.queue.push(e),1==this.queue.length&&this._dequeue()}_dequeue(){this.queue.length&&this.queue[0]().finally((()=>{this.queue.shift(),this.queue.length&&this._dequeue()}))}}\n//# sourceMappingURL=pocketbase.es.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/pocketbase/dist/pocketbase.es.mjs\n"));

/***/ })

},
/******/ function(__webpack_require__) { // webpackRuntimeModules
/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5CUsers%5C%5CRaymondVerhoef%5C%5CGitea%5C%5Clearning-platform%5C%5Capp%5C%5Cfrontend%5C%5Csrc%5C%5Capp%5C%5Capp%5C%5Csession%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"); });
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;
/******/ }
]);