feat: implement PWA, manifest, service worker and offline indicator

This commit is contained in:
2025-12-17 23:15:51 +01:00
parent 5807d949ef
commit 19689ffd2f
71 changed files with 1573 additions and 112 deletions

View File

@@ -1,4 +1,6 @@
{
"/not-found": "app/not-found.js",
"/page": "app/page.js",
"/bottles/[id]/page": "app/bottles/[id]/page.js"
"/bottles/[id]/page": "app/bottles/[id]/page.js",
"/manifest.webmanifest/route": "app/manifest.webmanifest/route.js"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -231,6 +231,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ }),
/***/ "(ssr)/./node_modules/lucide-react/dist/esm/icons/wifi-off.js":
/*!**************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/wifi-off.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ WifiOff)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(ssr)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.300.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst WifiOff = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"WifiOff\", [\n [\n \"line\",\n {\n x1: \"2\",\n x2: \"22\",\n y1: \"2\",\n y2: \"22\",\n key: \"a6p6uj\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.5 16.5a5 5 0 0 1 7 0\",\n key: \"sej527\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 8.82a15 15 0 0 1 4.17-2.65\",\n key: \"11utq1\"\n }\n ],\n [\n \"path\",\n {\n d: \"M10.66 5c4.01-.36 8.14.9 11.34 3.76\",\n key: \"hxefdu\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16.85 11.25a10 10 0 0 1 2.22 1.68\",\n key: \"q734kn\"\n }\n ],\n [\n \"path\",\n {\n d: \"M5 13a10 10 0 0 1 5.24-2.76\",\n key: \"piq4yl\"\n }\n ],\n [\n \"line\",\n {\n x1: \"12\",\n x2: \"12.01\",\n y1: \"20\",\n y2: \"20\",\n key: \"of4bc4\"\n }\n ]\n]);\n //# sourceMappingURL=wifi-off.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL3dpZmktb2ZmLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7O0NBS0MsR0FFcUQ7QUFFdEQsTUFBTUMsVUFBVUQsZ0VBQWdCQSxDQUFDLFdBQVc7SUFDMUM7UUFBQztRQUFRO1lBQUVFLElBQUk7WUFBS0MsSUFBSTtZQUFNQyxJQUFJO1lBQUtDLElBQUk7WUFBTUMsS0FBSztRQUFTO0tBQUU7SUFDakU7UUFBQztRQUFRO1lBQUVDLEdBQUc7WUFBMkJELEtBQUs7UUFBUztLQUFFO0lBQ3pEO1FBQUM7UUFBUTtZQUFFQyxHQUFHO1lBQWlDRCxLQUFLO1FBQVM7S0FBRTtJQUMvRDtRQUFDO1FBQVE7WUFBRUMsR0FBRztZQUF1Q0QsS0FBSztRQUFTO0tBQUU7SUFDckU7UUFBQztRQUFRO1lBQUVDLEdBQUc7WUFBc0NELEtBQUs7UUFBUztLQUFFO0lBQ3BFO1FBQUM7UUFBUTtZQUFFQyxHQUFHO1lBQStCRCxLQUFLO1FBQVM7S0FBRTtJQUM3RDtRQUFDO1FBQVE7WUFBRUosSUFBSTtZQUFNQyxJQUFJO1lBQVNDLElBQUk7WUFBTUMsSUFBSTtZQUFNQyxLQUFLO1FBQVM7S0FBRTtDQUN2RTtBQUU2QixDQUM5QixvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93aGlza3ktdmF1bHQvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL3dpZmktb2ZmLmpzPzVhNzYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuMzAwLjAgLSBJU0NcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS5cbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24uanMnO1xuXG5jb25zdCBXaWZpT2ZmID0gY3JlYXRlTHVjaWRlSWNvbihcIldpZmlPZmZcIiwgW1xuICBbXCJsaW5lXCIsIHsgeDE6IFwiMlwiLCB4MjogXCIyMlwiLCB5MTogXCIyXCIsIHkyOiBcIjIyXCIsIGtleTogXCJhNnA2dWpcIiB9XSxcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTguNSAxNi41YTUgNSAwIDAgMSA3IDBcIiwga2V5OiBcInNlajUyN1wiIH1dLFxuICBbXCJwYXRoXCIsIHsgZDogXCJNMiA4LjgyYTE1IDE1IDAgMCAxIDQuMTctMi42NVwiLCBrZXk6IFwiMTF1dHExXCIgfV0sXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0xMC42NiA1YzQuMDEtLjM2IDguMTQuOSAxMS4zNCAzLjc2XCIsIGtleTogXCJoeGVmZHVcIiB9XSxcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTE2Ljg1IDExLjI1YTEwIDEwIDAgMCAxIDIuMjIgMS42OFwiLCBrZXk6IFwicTczNGtuXCIgfV0sXG4gIFtcInBhdGhcIiwgeyBkOiBcIk01IDEzYTEwIDEwIDAgMCAxIDUuMjQtMi43NlwiLCBrZXk6IFwicGlxNHlsXCIgfV0sXG4gIFtcImxpbmVcIiwgeyB4MTogXCIxMlwiLCB4MjogXCIxMi4wMVwiLCB5MTogXCIyMFwiLCB5MjogXCIyMFwiLCBrZXk6IFwib2Y0YmM0XCIgfV1cbl0pO1xuXG5leHBvcnQgeyBXaWZpT2ZmIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpZmktb2ZmLmpzLm1hcFxuIl0sIm5hbWVzIjpbImNyZWF0ZUx1Y2lkZUljb24iLCJXaWZpT2ZmIiwieDEiLCJ4MiIsInkxIiwieTIiLCJrZXkiLCJkIiwiZGVmYXVsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/lucide-react/dist/esm/icons/wifi-off.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/lucide-react/dist/esm/icons/x.js":
/*!*******************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/x.js ***!

File diff suppressed because one or more lines are too long

View File

@@ -47,6 +47,11 @@
/******/ __webpack_require__.m = __webpack_modules__;
/******/
/************************************************************************/
/******/ /* webpack/runtime/amd options */
/******/ (() => {
/******/ __webpack_require__.amdO = {};
/******/ })();
/******/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
@@ -125,7 +130,7 @@
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ (() => {
/******/ __webpack_require__.h = () => ("0776ab2dbf0ec189")
/******/ __webpack_require__.h = () => ("721e37b485e1959f")
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */