diff --git a/.gitignore b/.gitignore index 48cf616..6221ec4 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,9 @@ public/js/bundle.js backend/coverage/ # User uploaded files -backend/uploads/ \ No newline at end of file +backend/uploads/ + +# Log files +*.log +server.log +backend/server.log \ No newline at end of file diff --git a/backend/database.sqlite b/backend/database.sqlite deleted file mode 100644 index e69de29..0000000 diff --git a/backend/docs/telegram-duplicate-prevention.md b/backend/docs/telegram-duplicate-prevention.md deleted file mode 100644 index 9b4318d..0000000 --- a/backend/docs/telegram-duplicate-prevention.md +++ /dev/null @@ -1,256 +0,0 @@ -# Telegram Duplicate Prevention System - -## Overview - -This document describes the comprehensive duplicate prevention system implemented for Telegram message processing in the Tududi application. The system prevents duplicate inbox items from being created when the same message is processed multiple times due to network issues, processing errors, or other edge cases. - -## Problem Statement - -When integrating with Telegram's polling API, several scenarios can cause duplicate messages: -- Network timeouts causing message reprocessing -- Application restarts during message processing -- Race conditions in polling cycles -- Telegram API returning the same update multiple times -- Processing failures that lead to retry attempts - -## Solution Architecture - -The duplicate prevention system implements multiple layers of protection: - -### 1. **Update ID Tracking (Application Level)** -- **Purpose**: Prevent reprocessing of the same Telegram update -- **Implementation**: In-memory Set tracking processed update IDs -- **Key Format**: `${userId}-${updateId}` -- **Memory Management**: Automatic cleanup (keeps last 1000 entries) - -```javascript -// Example usage -const processedUpdates = new Set(); -const updateKey = `${user.id}-${update.update_id}`; - -if (!processedUpdates.has(updateKey)) { - // Process the update - processedUpdates.add(updateKey); -} -``` - -### 2. **Content-Based Duplicate Detection (Database Level)** -- **Purpose**: Prevent duplicate inbox items with identical content -- **Implementation**: Database query checking recent items (30-second window) -- **Scope**: Per-user, per-source (telegram) - -```javascript -// Check for existing item within time window -const existingItem = await InboxItem.findOne({ - where: { - content: messageContent, - user_id: userId, - source: 'telegram', - created_at: { - [Op.gte]: new Date(Date.now() - 30000) // 30 seconds - } - } -}); -``` - -### 3. **Telegram API Offset Management** -- **Purpose**: Prevent re-fetching already processed updates -- **Implementation**: Track highest processed update ID per user -- **Persistence**: Maintained in poller state - -## Code Structure - -### Core Files - -- **`services/telegramPoller.js`**: Main polling logic with duplicate prevention -- **`services/telegramInitializer.js`**: Initialization and user management -- **`tests/unit/services/telegramPoller.test.js`**: Unit tests for core functions -- **`tests/integration/telegram-duplicates.test.js`**: Integration tests for database interactions -- **`tests/integration/telegram-duplicate-scenario.test.js`**: Real-world scenario tests - -### Key Functions - -#### `processUpdates(user, updates)` -- Filters out already processed updates -- Updates user status with highest update ID -- Processes each new update individually -- Implements cleanup for memory management - -#### `createInboxItem(content, userId, messageId)` -- Checks for recent duplicates before creation -- Creates inbox item with metadata -- Returns existing item if duplicate found - -#### `processMessage(user, update)` -- Extracts message data -- Creates inbox item (with duplicate check) -- Sends confirmation back to Telegram -- Handles errors gracefully - -## Testing Strategy - -### Unit Tests (12 tests) -- Update ID tracking logic -- User list management -- Message parameter creation -- URL generation -- State management - -### Integration Tests (12 tests) -- Database-level duplicate prevention -- Poller state management -- Update processing logic -- Error handling scenarios - -### Scenario Tests (7 tests) -- Network issue simulations -- Rapid consecutive messages -- Update ID tracking in practice -- Poller restart scenarios -- Memory management verification -- Edge cases and time-based logic - -### Running Tests - -```bash -# Run all Telegram duplicate tests -npm run test:telegram-duplicates - -# Run specific test suites -npm test -- --testPathPatterns="telegramPoller\.test\.js" -npm test -- --testPathPatterns="telegram-duplicates\.test\.js" -npm test -- --testPathPatterns="telegram-duplicate-scenario\.test\.js" -``` - -## Configuration - -### Time Windows -- **Duplicate Detection**: 30 seconds (configurable) -- **Memory Cleanup**: 1000 entries (configurable) -- **Polling Interval**: 5 seconds (configurable) - -### Memory Management -- Automatic cleanup when processed updates exceed 1000 entries -- Removes oldest 100 entries during cleanup -- Prevents memory leaks in long-running processes - -## Monitoring and Debugging - -### Logging -The system includes comprehensive logging for debugging: - -```javascript -console.log(`Processing ${updates.length} updates for user ${user.id}`); -console.log(`Duplicate inbox item detected for user ${userId}`); -console.log(`Successfully processed message ${messageId} for user ${user.id}`); -``` - -### Status Monitoring -```javascript -const status = telegramPoller.getStatus(); -// Returns: { running, usersCount, pollInterval, userStatus } -``` - -## Error Handling - -### Network Errors -- Graceful handling of Telegram API timeouts -- Continuation of polling for other users if one fails -- Detailed error logging for debugging - -### Database Errors -- Fallback behavior when duplicate check fails -- Transaction safety for inbox item creation -- Proper error responses to users - -### Processing Errors -- Individual update error handling -- Continuation of processing for remaining updates -- Error reporting via Telegram messages - -## Performance Considerations - -### Memory Usage -- Bounded memory growth through automatic cleanup -- Efficient Set operations for duplicate checking -- Minimal memory footprint per user - -### Database Performance -- Indexed queries for duplicate detection -- Time-limited searches (30-second window) -- Efficient user-scoped queries - -### Network Efficiency -- Optimized Telegram API calls -- Proper offset management -- Reasonable polling intervals - -## Security Considerations - -### Data Protection -- User-scoped duplicate checking -- Secure token handling -- No sensitive data in logs - -### Rate Limiting -- Respectful Telegram API usage -- Configurable polling intervals -- Graceful handling of API limits - -## Future Enhancements - -### Possible Improvements -1. **Persistent State**: Store processed update IDs in database -2. **Configurable Windows**: Make time windows user-configurable -3. **Metrics Collection**: Add detailed metrics for monitoring -4. **Retry Logic**: Implement exponential backoff for failures -5. **Batch Processing**: Process multiple updates in batches - -### Migration Considerations -- Current system maintains backward compatibility -- New features can be added incrementally -- Existing data remains unaffected - -## Troubleshooting - -### Common Issues - -1. **Duplicates Still Occurring** - - Check if time window is appropriate for your use case - - Verify update ID tracking is working - - Review logs for processing errors - -2. **Memory Usage Growing** - - Verify cleanup logic is running - - Check if cleanup threshold needs adjustment - - Monitor processed updates Set size - -3. **Performance Issues** - - Review database query performance - - Check polling interval settings - - Monitor network latency to Telegram API - -### Debug Commands -```javascript -// Check poller status -const status = telegramPoller.getStatus(); - -// Manual cleanup (for testing) -if (processedUpdates.size > 1000) { - // Cleanup logic -} - -// Verify duplicate detection -const existing = await InboxItem.findOne({ /* query */ }); -``` - -## Conclusion - -The Telegram duplicate prevention system provides robust protection against message duplication through multiple complementary mechanisms. The comprehensive test suite ensures reliability, while the monitoring and debugging features facilitate maintenance and troubleshooting. - -The system is designed to be: -- **Reliable**: Multiple layers of protection -- **Efficient**: Minimal performance impact -- **Maintainable**: Well-tested and documented -- **Scalable**: Bounded memory usage and efficient queries -- **Debuggable**: Comprehensive logging and monitoring \ No newline at end of file diff --git a/backend/server.log b/backend/server.log deleted file mode 100644 index d17d75a..0000000 --- a/backend/server.log +++ /dev/null @@ -1,30 +0,0 @@ - -> backend@1.0.0 dev -> nodemon app.js - -[nodemon] 3.1.10 -[nodemon] to restart at any time, enter `rs` -[nodemon] watching path(s): *.* -[nodemon] watching extensions: js,mjs,cjs,json -[nodemon] starting `node app.js` -Loaded 20 quotes from configuration -Server error: Error: listen EADDRINUSE: address already in use 0.0.0.0:3002 - at Server.setupListenHandle [as _listen2] (node:net:1939:16) - at listenInCluster (node:net:1996:12) - at node:net:2205:7 - at process.processTicksAndRejections (node:internal/process/task_queues:90:21) { - code: 'EADDRINUSE', - errno: -48, - syscall: 'listen', - address: '0.0.0.0', - port: 3002 -} -Error getting updates for user 1: Error: Request timeout - at ClientRequest. (/Users/chris/c0deLab/ProjectLand/tududi/backend/services/telegramPoller.js:93:14) - at ClientRequest.emit (node:events:518:28) - at TLSSocket.emitRequestTimeout (node:_http_client:863:9) - at Object.onceWrapper (node:events:632:28) - at TLSSocket.emit (node:events:530:35) - at Socket._onTimeout (node:net:609:8) - at listOnTimeout (node:internal/timers:588:17) - at process.processTimers (node:internal/timers:523:7) diff --git a/backend/uploads/projects/project-1750364454350-63162117.jpg b/backend/uploads/projects/project-1750364454350-63162117.jpg deleted file mode 100644 index 6d4ee49..0000000 Binary files a/backend/uploads/projects/project-1750364454350-63162117.jpg and /dev/null differ diff --git a/backend/uploads/projects/project-1750364608196-907723876.jpg b/backend/uploads/projects/project-1750364608196-907723876.jpg deleted file mode 100644 index 52d2510..0000000 Binary files a/backend/uploads/projects/project-1750364608196-907723876.jpg and /dev/null differ diff --git a/backend/uploads/projects/project-1750364643530-761344293.jpeg b/backend/uploads/projects/project-1750364643530-761344293.jpeg deleted file mode 100644 index 9b25bbd..0000000 Binary files a/backend/uploads/projects/project-1750364643530-761344293.jpeg and /dev/null differ diff --git a/backend/uploads/projects/project-1750364721124-530764541.jpg b/backend/uploads/projects/project-1750364721124-530764541.jpg deleted file mode 100644 index 91d44d8..0000000 Binary files a/backend/uploads/projects/project-1750364721124-530764541.jpg and /dev/null differ diff --git a/backend/uploads/projects/project-1750364769795-558304047.jpg b/backend/uploads/projects/project-1750364769795-558304047.jpg deleted file mode 100644 index e699c5a..0000000 Binary files a/backend/uploads/projects/project-1750364769795-558304047.jpg and /dev/null differ diff --git a/dist/index.html b/dist/index.html index 7eccfce..c737e32 100644 --- a/dist/index.html +++ b/dist/index.html @@ -5,7 +5,7 @@ Tududi - +
diff --git a/dist/main.272db06f0669b56179b9.js b/dist/main.be344336e9db0dc716cb.js similarity index 96% rename from dist/main.272db06f0669b56179b9.js rename to dist/main.be344336e9db0dc716cb.js index 921be2a..8e61203 100644 --- a/dist/main.272db06f0669b56179b9.js +++ b/dist/main.be344336e9db0dc716cb.js @@ -27,7 +27,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PlusIcon.js\");\n/* harmony import */ var _components_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/Shared/ToastContext */ \"./frontend/components/Shared/ToastContext.tsx\");\n/* harmony import */ var _components_Navbar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/Navbar */ \"./frontend/components/Navbar.tsx\");\n/* harmony import */ var _components_Sidebar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/Sidebar */ \"./frontend/components/Sidebar.tsx\");\n/* harmony import */ var _styles_tailwind_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/tailwind.css */ \"./frontend/styles/tailwind.css\");\n/* harmony import */ var _components_Project_ProjectModal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/Project/ProjectModal */ \"./frontend/components/Project/ProjectModal.tsx\");\n/* harmony import */ var _components_Note_NoteModal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/Note/NoteModal */ \"./frontend/components/Note/NoteModal.tsx\");\n/* harmony import */ var _components_Area_AreaModal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/Area/AreaModal */ \"./frontend/components/Area/AreaModal.tsx\");\n/* harmony import */ var _components_Tag_TagModal__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/Tag/TagModal */ \"./frontend/components/Tag/TagModal.tsx\");\n/* harmony import */ var _components_Task_SimplifiedTaskModal__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/Task/SimplifiedTaskModal */ \"./frontend/components/Task/SimplifiedTaskModal.tsx\");\n/* harmony import */ var _components_Task_TaskModal__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/Task/TaskModal */ \"./frontend/components/Task/TaskModal.tsx\");\n/* harmony import */ var _store_useStore__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./store/useStore */ \"./frontend/store/useStore.ts\");\n/* harmony import */ var _utils_notesService__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils/notesService */ \"./frontend/utils/notesService.ts\");\n/* harmony import */ var _utils_areasService__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utils/areasService */ \"./frontend/utils/areasService.ts\");\n/* harmony import */ var _utils_tagsService__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./utils/tagsService */ \"./frontend/utils/tagsService.ts\");\n/* harmony import */ var _utils_projectsService__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./utils/projectsService */ \"./frontend/utils/projectsService.ts\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _utils_authUtils__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/authUtils */ \"./frontend/utils/authUtils.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Layout = function Layout(_ref) {\n _s();\n var currentUser = _ref.currentUser,\n setCurrentUser = _ref.setCurrentUser,\n isDarkMode = _ref.isDarkMode,\n toggleDarkMode = _ref.toggleDarkMode,\n children = _ref.children;\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n var _useToast = (0,_components_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast)(),\n showSuccessToast = _useToast.showSuccessToast;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(window.innerWidth >= 1024),\n _useState2 = _slicedToArray(_useState, 2),\n isSidebarOpen = _useState2[0],\n setIsSidebarOpen = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isTaskModalOpen = _useState4[0],\n setIsTaskModalOpen = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isProjectModalOpen = _useState6[0],\n setIsProjectModalOpen = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isNoteModalOpen = _useState8[0],\n setIsNoteModalOpen = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isAreaModalOpen = _useState0[0],\n setIsAreaModalOpen = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState10 = _slicedToArray(_useState1, 2),\n isTagModalOpen = _useState10[0],\n setIsTagModalOpen = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('simplified'),\n _useState12 = _slicedToArray(_useState11, 2),\n taskModalType = _useState12[0],\n setTaskModalType = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState14 = _slicedToArray(_useState13, 2),\n selectedNote = _useState14[0],\n setSelectedNote = _useState14[1];\n var _useState15 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState16 = _slicedToArray(_useState15, 2),\n selectedArea = _useState16[0],\n setSelectedArea = _useState16[1];\n var _useState17 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState18 = _slicedToArray(_useState17, 2),\n selectedTag = _useState18[0],\n setSelectedTag = _useState18[1];\n var _useState19 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState20 = _slicedToArray(_useState19, 2),\n newTask = _useState20[0],\n setNewTask = _useState20[1];\n var _useStore = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_12__.useStore)(),\n _useStore$notesStore = _useStore.notesStore,\n notes = _useStore$notesStore.notes,\n setNotes = _useStore$notesStore.setNotes,\n setNotesLoading = _useStore$notesStore.setLoading,\n setNotesError = _useStore$notesStore.setError,\n isNotesLoading = _useStore$notesStore.isLoading,\n isNotesError = _useStore$notesStore.isError,\n _useStore$areasStore = _useStore.areasStore,\n areas = _useStore$areasStore.areas,\n setAreas = _useStore$areasStore.setAreas,\n setAreasLoading = _useStore$areasStore.setLoading,\n setAreasError = _useStore$areasStore.setError,\n isAreasLoading = _useStore$areasStore.isLoading,\n isAreasError = _useStore$areasStore.isError,\n _useStore$tasksStore = _useStore.tasksStore,\n setTasksLoading = _useStore$tasksStore.setLoading,\n setTasksError = _useStore$tasksStore.setError,\n isTasksLoading = _useStore$tasksStore.isLoading,\n isTasksError = _useStore$tasksStore.isError,\n _useStore$projectsSto = _useStore.projectsStore,\n projects = _useStore$projectsSto.projects,\n setProjects = _useStore$projectsSto.setProjects,\n setProjectsLoading = _useStore$projectsSto.setLoading,\n setProjectsError = _useStore$projectsSto.setError,\n isProjectsLoading = _useStore$projectsSto.isLoading,\n isProjectsError = _useStore$projectsSto.isError,\n _useStore$tagsStore = _useStore.tagsStore,\n tags = _useStore$tagsStore.tags,\n setTags = _useStore$tagsStore.setTags,\n setTagsLoading = _useStore$tagsStore.setLoading,\n setTagsError = _useStore$tagsStore.setError,\n isTagsLoading = _useStore$tagsStore.isLoading,\n isTagsError = _useStore$tagsStore.isError;\n var openTaskModal = function openTaskModal() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'simplified';\n setIsTaskModalOpen(true);\n setTaskModalType(type);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleResize = function handleResize() {\n setIsSidebarOpen(window.innerWidth >= 1024);\n };\n window.addEventListener(\"resize\", handleResize);\n return function () {\n return window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n var loadNotes = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var notesData, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n setNotesLoading(true);\n _context.p = 1;\n _context.n = 2;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_13__.fetchNotes)();\n case 2:\n notesData = _context.v;\n setNotes(notesData);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n console.error(\"Error fetching notes:\", _t);\n setNotesError(true);\n case 4:\n _context.p = 4;\n setNotesLoading(false);\n return _context.f(4);\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3, 4, 5]]);\n }));\n return function loadNotes() {\n return _ref2.apply(this, arguments);\n };\n }();\n var loadAreas = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var areasData, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n setAreasLoading(true);\n _context2.p = 1;\n _context2.n = 2;\n return (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_14__.fetchAreas)();\n case 2:\n areasData = _context2.v;\n setAreas(areasData);\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n console.error(\"Error fetching areas:\", _t2);\n setAreasError(true);\n case 4:\n _context2.p = 4;\n setAreasLoading(false);\n return _context2.f(4);\n case 5:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3, 4, 5]]);\n }));\n return function loadAreas() {\n return _ref3.apply(this, arguments);\n };\n }();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n loadNotes();\n loadAreas();\n }, []);\n var openNoteModal = function openNoteModal() {\n var note = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n setSelectedNote(note);\n setIsNoteModalOpen(true);\n };\n var closeNoteModal = function closeNoteModal() {\n setIsNoteModalOpen(false);\n setSelectedNote(null);\n };\n var closeTaskModal = function closeTaskModal() {\n setIsTaskModalOpen(false);\n setNewTask(null);\n };\n var openProjectModal = function openProjectModal() {\n setIsProjectModalOpen(true);\n };\n var closeProjectModal = function closeProjectModal() {\n setIsProjectModalOpen(false);\n };\n var openAreaModal = function openAreaModal() {\n var area = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n setSelectedArea(area);\n setIsAreaModalOpen(true);\n };\n var closeAreaModal = function closeAreaModal() {\n setIsAreaModalOpen(false);\n setSelectedArea(null);\n };\n var openTagModal = function openTagModal() {\n var tag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n setSelectedTag(tag);\n setIsTagModalOpen(true);\n };\n var closeTagModal = function closeTagModal() {\n setIsTagModalOpen(false);\n setSelectedTag(null);\n };\n var handleSaveNote = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(noteData) {\n var _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.p = 0;\n if (!noteData.id) {\n _context3.n = 2;\n break;\n }\n _context3.n = 1;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_13__.updateNote)(noteData.id, noteData);\n case 1:\n _context3.n = 3;\n break;\n case 2:\n _context3.n = 3;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_13__.createNote)(noteData);\n case 3:\n loadNotes();\n closeNoteModal();\n _context3.n = 6;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n console.error(\"Error saving note:\", _t3);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t3)) {\n _context3.n = 5;\n break;\n }\n return _context3.a(2);\n case 5:\n closeNoteModal();\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[0, 4]]);\n }));\n return function handleSaveNote(_x) {\n return _ref4.apply(this, arguments);\n };\n }();\n var handleSaveTask = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(taskData) {\n var taskLink, createdTask, _taskLink, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n _context4.p = 0;\n if (!taskData.id) {\n _context4.n = 2;\n break;\n }\n _context4.n = 1;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_17__.updateTask)(taskData.id, taskData);\n case 1:\n taskLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, t('task.updated', 'Task'), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/tasks\",\n className: \"text-green-200 underline hover:text-green-100\"\n }, taskData.name), \" \", t('task.updatedSuccessfully', 'updated successfully!'));\n showSuccessToast(taskLink);\n _context4.n = 4;\n break;\n case 2:\n _context4.n = 3;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_17__.createTask)(taskData);\n case 3:\n createdTask = _context4.v;\n _taskLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, t('task.created', 'Task'), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/tasks\",\n className: \"text-green-200 underline hover:text-green-100\"\n }, createdTask.name), \" \", t('task.createdSuccessfully', 'created successfully!'));\n showSuccessToast(_taskLink);\n case 4:\n // Don't refetch all tasks here - let individual components handle their own state\n // This prevents unnecessary re-renders and race conditions\n closeTaskModal();\n _context4.n = 7;\n break;\n case 5:\n _context4.p = 5;\n _t4 = _context4.v;\n console.error(\"Error saving task:\", _t4);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t4)) {\n _context4.n = 6;\n break;\n }\n return _context4.a(2);\n case 6:\n // For other errors, still close the modal but let the error bubble up\n closeTaskModal();\n throw _t4;\n case 7:\n return _context4.a(2);\n }\n }, _callee4, null, [[0, 5]]);\n }));\n return function handleSaveTask(_x2) {\n return _ref5.apply(this, arguments);\n };\n }();\n var handleCreateProject = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(name) {\n var newProject, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n _context5.p = 0;\n _context5.n = 1;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_16__.createProject)({\n name: name,\n active: true\n });\n case 1:\n newProject = _context5.v;\n return _context5.a(2, newProject);\n case 2:\n _context5.p = 2;\n _t5 = _context5.v;\n console.error(\"Error creating project:\", _t5);\n throw _t5;\n case 3:\n return _context5.a(2);\n }\n }, _callee5, null, [[0, 2]]);\n }));\n return function handleCreateProject(_x3) {\n return _ref6.apply(this, arguments);\n };\n }();\n var handleSaveProject = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(projectData) {\n var projectsData, _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n _context6.p = 0;\n if (!projectData.id) {\n _context6.n = 2;\n break;\n }\n _context6.n = 1;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_16__.updateProject)(projectData.id, projectData);\n case 1:\n _context6.n = 3;\n break;\n case 2:\n _context6.n = 3;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_16__.createProject)(projectData);\n case 3:\n _context6.n = 4;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_16__.fetchProjects)();\n case 4:\n projectsData = _context6.v;\n setProjects(projectsData);\n closeProjectModal();\n _context6.n = 7;\n break;\n case 5:\n _context6.p = 5;\n _t6 = _context6.v;\n console.error(\"Error saving project:\", _t6);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t6)) {\n _context6.n = 6;\n break;\n }\n return _context6.a(2);\n case 6:\n closeProjectModal();\n case 7:\n return _context6.a(2);\n }\n }, _callee6, null, [[0, 5]]);\n }));\n return function handleSaveProject(_x4) {\n return _ref7.apply(this, arguments);\n };\n }();\n var handleSaveArea = /*#__PURE__*/function () {\n var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(areaData) {\n var _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n _context7.p = 0;\n if (!areaData.id) {\n _context7.n = 2;\n break;\n }\n _context7.n = 1;\n return (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_14__.updateArea)(areaData.id, areaData);\n case 1:\n _context7.n = 3;\n break;\n case 2:\n _context7.n = 3;\n return (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_14__.createArea)(areaData);\n case 3:\n loadAreas();\n closeAreaModal();\n _context7.n = 6;\n break;\n case 4:\n _context7.p = 4;\n _t7 = _context7.v;\n console.error(\"Error saving area:\", _t7);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t7)) {\n _context7.n = 5;\n break;\n }\n return _context7.a(2);\n case 5:\n closeAreaModal();\n case 6:\n return _context7.a(2);\n }\n }, _callee7, null, [[0, 4]]);\n }));\n return function handleSaveArea(_x5) {\n return _ref8.apply(this, arguments);\n };\n }();\n var handleSaveTag = /*#__PURE__*/function () {\n var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(tagData) {\n var tagsData, _t8;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n _context8.p = 0;\n if (!tagData.id) {\n _context8.n = 2;\n break;\n }\n _context8.n = 1;\n return (0,_utils_tagsService__WEBPACK_IMPORTED_MODULE_15__.updateTag)(tagData.id, tagData);\n case 1:\n _context8.n = 3;\n break;\n case 2:\n _context8.n = 3;\n return (0,_utils_tagsService__WEBPACK_IMPORTED_MODULE_15__.createTag)(tagData);\n case 3:\n _context8.n = 4;\n return (0,_utils_tagsService__WEBPACK_IMPORTED_MODULE_15__.fetchTags)();\n case 4:\n tagsData = _context8.v;\n setTags(tagsData);\n closeTagModal();\n _context8.n = 7;\n break;\n case 5:\n _context8.p = 5;\n _t8 = _context8.v;\n console.error(\"Error saving tag:\", _t8);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t8)) {\n _context8.n = 6;\n break;\n }\n return _context8.a(2);\n case 6:\n closeTagModal();\n case 7:\n return _context8.a(2);\n }\n }, _callee8, null, [[0, 5]]);\n }));\n return function handleSaveTag(_x6) {\n return _ref9.apply(this, arguments);\n };\n }();\n var handleLogout = /*#__PURE__*/function () {\n var _ref0 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var response, _t9, _t0, _t1;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.n) {\n case 0:\n _context9.p = 0;\n _context9.n = 1;\n return fetch('/api/logout', {\n method: 'GET',\n credentials: 'include'\n });\n case 1:\n response = _context9.v;\n if (!response.ok) {\n _context9.n = 2;\n break;\n }\n setCurrentUser(null);\n _context9.n = 4;\n break;\n case 2:\n _t9 = console;\n _context9.n = 3;\n return response.json();\n case 3:\n _t0 = _context9.v;\n _t9.error.call(_t9, 'Logout failed:', _t0);\n case 4:\n _context9.n = 6;\n break;\n case 5:\n _context9.p = 5;\n _t1 = _context9.v;\n console.error('Error during logout:', _t1);\n case 6:\n return _context9.a(2);\n }\n }, _callee9, null, [[0, 5]]);\n }));\n return function handleLogout() {\n return _ref0.apply(this, arguments);\n };\n }();\n var mainContentMarginLeft = isSidebarOpen ? \"ml-72\" : \"ml-0\";\n var isLoading = isNotesLoading || isAreasLoading || isTasksLoading || isProjectsLoading || isTagsLoading;\n var isError = isNotesError || isAreasError || isTasksError || isProjectsError || isTagsError;\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"min-h-screen \".concat(isDarkMode ? \"dark\" : \"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Navbar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n currentUser: currentUser,\n setCurrentUser: setCurrentUser,\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen,\n currentUser: currentUser,\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n openTaskModal: openTaskModal,\n openProjectModal: openProjectModal,\n openNoteModal: openNoteModal,\n openAreaModal: openAreaModal,\n openTagModal: openTagModal,\n notes: notes,\n areas: areas,\n tags: tags\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1 flex items-center justify-center bg-gray-100 dark:bg-gray-800 transition-all duration-300 ease-in-out \".concat(mainContentMarginLeft)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl text-gray-700 dark:text-gray-200\"\n }, t('common.loading'))));\n }\n if (isError) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"min-h-screen \".concat(isDarkMode ? \"dark\" : \"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Navbar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n currentUser: currentUser,\n setCurrentUser: setCurrentUser,\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen,\n currentUser: currentUser,\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n openTaskModal: openTaskModal,\n openProjectModal: openProjectModal,\n openNoteModal: openNoteModal,\n openAreaModal: openAreaModal,\n openTagModal: openTagModal,\n notes: notes,\n areas: areas,\n tags: tags\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1 flex flex-col items-center justify-center bg-gray-100 dark:bg-gray-800 transition-all duration-300 ease-in-out \".concat(mainContentMarginLeft)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl text-red-500\"\n }, t('errors.somethingWentWrong'))));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"min-h-screen \".concat(isDarkMode ? \"dark\" : \"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Navbar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n currentUser: currentUser,\n setCurrentUser: setCurrentUser,\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen,\n currentUser: currentUser,\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n openTaskModal: openTaskModal,\n openProjectModal: openProjectModal,\n openNoteModal: openNoteModal,\n openAreaModal: openAreaModal,\n openTagModal: openTagModal,\n notes: notes,\n areas: areas,\n tags: tags\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"transition-all duration-300 ease-in-out \".concat(mainContentMarginLeft)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-gray-100 min-h-screen overflow-y-auto\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-grow py-6 px-2 md:px-6 pt-24\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl mx-auto\"\n }, children)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return openTaskModal('simplified');\n },\n className: \"fixed bottom-6 right-6 bg-blue-500 hover:bg-blue-600 text-white rounded-full p-4 shadow-lg focus:outline-none transform transition-transform duration-200 hover:scale-110 z-50\",\n \"aria-label\": \"Quick Capture\",\n title: t('inbox.captureThought')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-6 w-6\"\n })), isTaskModalOpen && (taskModalType === 'simplified' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Task_SimplifiedTaskModal__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n isOpen: isTaskModalOpen,\n onClose: closeTaskModal,\n onSave: handleSaveTask\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Task_TaskModal__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n isOpen: isTaskModalOpen,\n onClose: closeTaskModal,\n task: {\n name: \"\",\n status: \"not_started\"\n },\n onSave: handleSaveTask,\n onDelete: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.n) {\n case 0:\n return _context0.a(2);\n }\n }, _callee0);\n })),\n projects: projects,\n onCreateProject: handleCreateProject\n })), isProjectModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Project_ProjectModal__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n isOpen: isProjectModalOpen,\n onClose: closeProjectModal,\n onSave: handleSaveProject,\n areas: areas\n }), isNoteModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Note_NoteModal__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n isOpen: isNoteModalOpen,\n onClose: closeNoteModal,\n onSave: handleSaveNote,\n note: selectedNote\n }), isAreaModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Area_AreaModal__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n isOpen: isAreaModalOpen,\n onClose: closeAreaModal,\n onSave: handleSaveArea,\n area: selectedArea\n }), isTagModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Tag_TagModal__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n isOpen: isTagModalOpen,\n onClose: closeTagModal,\n onSave: handleSaveTag,\n tag: selectedTag\n }));\n};\n_s(Layout, \"g34D2WkG8pnD1cwt5Ahi+QWkNWI=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _components_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast, _store_useStore__WEBPACK_IMPORTED_MODULE_12__.useStore];\n});\n_c = Layout;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Layout);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"Layout\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/Layout.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PlusIcon.js\");\n/* harmony import */ var _components_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/Shared/ToastContext */ \"./frontend/components/Shared/ToastContext.tsx\");\n/* harmony import */ var _components_Navbar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/Navbar */ \"./frontend/components/Navbar.tsx\");\n/* harmony import */ var _components_Sidebar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/Sidebar */ \"./frontend/components/Sidebar.tsx\");\n/* harmony import */ var _styles_tailwind_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles/tailwind.css */ \"./frontend/styles/tailwind.css\");\n/* harmony import */ var _components_Project_ProjectModal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/Project/ProjectModal */ \"./frontend/components/Project/ProjectModal.tsx\");\n/* harmony import */ var _components_Note_NoteModal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/Note/NoteModal */ \"./frontend/components/Note/NoteModal.tsx\");\n/* harmony import */ var _components_Area_AreaModal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/Area/AreaModal */ \"./frontend/components/Area/AreaModal.tsx\");\n/* harmony import */ var _components_Tag_TagModal__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/Tag/TagModal */ \"./frontend/components/Tag/TagModal.tsx\");\n/* harmony import */ var _components_Task_SimplifiedTaskModal__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/Task/SimplifiedTaskModal */ \"./frontend/components/Task/SimplifiedTaskModal.tsx\");\n/* harmony import */ var _components_Task_TaskModal__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/Task/TaskModal */ \"./frontend/components/Task/TaskModal.tsx\");\n/* harmony import */ var _store_useStore__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./store/useStore */ \"./frontend/store/useStore.ts\");\n/* harmony import */ var _utils_notesService__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils/notesService */ \"./frontend/utils/notesService.ts\");\n/* harmony import */ var _utils_areasService__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utils/areasService */ \"./frontend/utils/areasService.ts\");\n/* harmony import */ var _utils_tagsService__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./utils/tagsService */ \"./frontend/utils/tagsService.ts\");\n/* harmony import */ var _utils_projectsService__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./utils/projectsService */ \"./frontend/utils/projectsService.ts\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _utils_authUtils__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/authUtils */ \"./frontend/utils/authUtils.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Layout = function Layout(_ref) {\n _s();\n var currentUser = _ref.currentUser,\n setCurrentUser = _ref.setCurrentUser,\n isDarkMode = _ref.isDarkMode,\n toggleDarkMode = _ref.toggleDarkMode,\n children = _ref.children;\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n var _useToast = (0,_components_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast)(),\n showSuccessToast = _useToast.showSuccessToast;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(window.innerWidth >= 1024),\n _useState2 = _slicedToArray(_useState, 2),\n isSidebarOpen = _useState2[0],\n setIsSidebarOpen = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),\n _useState4 = _slicedToArray(_useState3, 2),\n globalModalCount = _useState4[0],\n setGlobalModalCount = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isTaskModalOpen = _useState6[0],\n setIsTaskModalOpen = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isProjectModalOpen = _useState8[0],\n setIsProjectModalOpen = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isNoteModalOpen = _useState0[0],\n setIsNoteModalOpen = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState10 = _slicedToArray(_useState1, 2),\n isAreaModalOpen = _useState10[0],\n setIsAreaModalOpen = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState12 = _slicedToArray(_useState11, 2),\n isTagModalOpen = _useState12[0],\n setIsTagModalOpen = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('simplified'),\n _useState14 = _slicedToArray(_useState13, 2),\n taskModalType = _useState14[0],\n setTaskModalType = _useState14[1];\n var _useState15 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState16 = _slicedToArray(_useState15, 2),\n selectedNote = _useState16[0],\n setSelectedNote = _useState16[1];\n var _useState17 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState18 = _slicedToArray(_useState17, 2),\n selectedArea = _useState18[0],\n setSelectedArea = _useState18[1];\n var _useState19 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState20 = _slicedToArray(_useState19, 2),\n selectedTag = _useState20[0],\n setSelectedTag = _useState20[1];\n var _useState21 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState22 = _slicedToArray(_useState21, 2),\n newTask = _useState22[0],\n setNewTask = _useState22[1];\n var _useStore = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_12__.useStore)(),\n _useStore$notesStore = _useStore.notesStore,\n notes = _useStore$notesStore.notes,\n setNotes = _useStore$notesStore.setNotes,\n setNotesLoading = _useStore$notesStore.setLoading,\n setNotesError = _useStore$notesStore.setError,\n isNotesLoading = _useStore$notesStore.isLoading,\n isNotesError = _useStore$notesStore.isError,\n _useStore$areasStore = _useStore.areasStore,\n areas = _useStore$areasStore.areas,\n setAreas = _useStore$areasStore.setAreas,\n setAreasLoading = _useStore$areasStore.setLoading,\n setAreasError = _useStore$areasStore.setError,\n isAreasLoading = _useStore$areasStore.isLoading,\n isAreasError = _useStore$areasStore.isError,\n _useStore$tasksStore = _useStore.tasksStore,\n setTasksLoading = _useStore$tasksStore.setLoading,\n setTasksError = _useStore$tasksStore.setError,\n isTasksLoading = _useStore$tasksStore.isLoading,\n isTasksError = _useStore$tasksStore.isError,\n _useStore$projectsSto = _useStore.projectsStore,\n projects = _useStore$projectsSto.projects,\n setProjects = _useStore$projectsSto.setProjects,\n setProjectsLoading = _useStore$projectsSto.setLoading,\n setProjectsError = _useStore$projectsSto.setError,\n isProjectsLoading = _useStore$projectsSto.isLoading,\n isProjectsError = _useStore$projectsSto.isError,\n _useStore$tagsStore = _useStore.tagsStore,\n tags = _useStore$tagsStore.tags,\n setTags = _useStore$tagsStore.setTags,\n setTagsLoading = _useStore$tagsStore.setLoading,\n setTagsError = _useStore$tagsStore.setError,\n isTagsLoading = _useStore$tagsStore.isLoading,\n isTagsError = _useStore$tagsStore.isError;\n var openTaskModal = function openTaskModal() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'simplified';\n setIsTaskModalOpen(true);\n setTaskModalType(type);\n };\n\n // Listen for global modal events from child components\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleModalOpen = function handleModalOpen() {\n setGlobalModalCount(function (prev) {\n return prev + 1;\n });\n };\n var handleModalClose = function handleModalClose() {\n setGlobalModalCount(function (prev) {\n return Math.max(0, prev - 1);\n });\n };\n window.addEventListener('modalOpen', handleModalOpen);\n window.addEventListener('modalClose', handleModalClose);\n return function () {\n window.removeEventListener('modalOpen', handleModalOpen);\n window.removeEventListener('modalClose', handleModalClose);\n };\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleResize = function handleResize() {\n setIsSidebarOpen(window.innerWidth >= 1024);\n };\n window.addEventListener(\"resize\", handleResize);\n return function () {\n return window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n var loadNotes = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var notesData, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n setNotesLoading(true);\n _context.p = 1;\n _context.n = 2;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_13__.fetchNotes)();\n case 2:\n notesData = _context.v;\n setNotes(notesData);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n console.error(\"Error fetching notes:\", _t);\n setNotesError(true);\n case 4:\n _context.p = 4;\n setNotesLoading(false);\n return _context.f(4);\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3, 4, 5]]);\n }));\n return function loadNotes() {\n return _ref2.apply(this, arguments);\n };\n }();\n var loadAreas = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var areasData, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n setAreasLoading(true);\n _context2.p = 1;\n _context2.n = 2;\n return (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_14__.fetchAreas)();\n case 2:\n areasData = _context2.v;\n setAreas(areasData);\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n console.error(\"Error fetching areas:\", _t2);\n setAreasError(true);\n case 4:\n _context2.p = 4;\n setAreasLoading(false);\n return _context2.f(4);\n case 5:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3, 4, 5]]);\n }));\n return function loadAreas() {\n return _ref3.apply(this, arguments);\n };\n }();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n loadNotes();\n loadAreas();\n }, []);\n var openNoteModal = function openNoteModal() {\n var note = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n setSelectedNote(note);\n setIsNoteModalOpen(true);\n };\n var closeNoteModal = function closeNoteModal() {\n setIsNoteModalOpen(false);\n setSelectedNote(null);\n };\n var closeTaskModal = function closeTaskModal() {\n setIsTaskModalOpen(false);\n setNewTask(null);\n };\n var openProjectModal = function openProjectModal() {\n setIsProjectModalOpen(true);\n };\n var closeProjectModal = function closeProjectModal() {\n setIsProjectModalOpen(false);\n };\n var openAreaModal = function openAreaModal() {\n var area = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n setSelectedArea(area);\n setIsAreaModalOpen(true);\n };\n var closeAreaModal = function closeAreaModal() {\n setIsAreaModalOpen(false);\n setSelectedArea(null);\n };\n var openTagModal = function openTagModal() {\n var tag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n setSelectedTag(tag);\n setIsTagModalOpen(true);\n };\n var closeTagModal = function closeTagModal() {\n setIsTagModalOpen(false);\n setSelectedTag(null);\n };\n var handleSaveNote = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(noteData) {\n var _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.p = 0;\n if (!noteData.id) {\n _context3.n = 2;\n break;\n }\n _context3.n = 1;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_13__.updateNote)(noteData.id, noteData);\n case 1:\n _context3.n = 3;\n break;\n case 2:\n _context3.n = 3;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_13__.createNote)(noteData);\n case 3:\n loadNotes();\n closeNoteModal();\n _context3.n = 6;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n console.error(\"Error saving note:\", _t3);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t3)) {\n _context3.n = 5;\n break;\n }\n return _context3.a(2);\n case 5:\n closeNoteModal();\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[0, 4]]);\n }));\n return function handleSaveNote(_x) {\n return _ref4.apply(this, arguments);\n };\n }();\n var handleSaveTask = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(taskData) {\n var taskLink, createdTask, _taskLink, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n _context4.p = 0;\n if (!taskData.id) {\n _context4.n = 2;\n break;\n }\n _context4.n = 1;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_17__.updateTask)(taskData.id, taskData);\n case 1:\n taskLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, t('task.updated', 'Task'), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/tasks\",\n className: \"text-green-200 underline hover:text-green-100\"\n }, taskData.name), \" \", t('task.updatedSuccessfully', 'updated successfully!'));\n showSuccessToast(taskLink);\n _context4.n = 4;\n break;\n case 2:\n _context4.n = 3;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_17__.createTask)(taskData);\n case 3:\n createdTask = _context4.v;\n _taskLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, t('task.created', 'Task'), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/tasks\",\n className: \"text-green-200 underline hover:text-green-100\"\n }, createdTask.name), \" \", t('task.createdSuccessfully', 'created successfully!'));\n showSuccessToast(_taskLink);\n case 4:\n // Don't refetch all tasks here - let individual components handle their own state\n // This prevents unnecessary re-renders and race conditions\n closeTaskModal();\n _context4.n = 7;\n break;\n case 5:\n _context4.p = 5;\n _t4 = _context4.v;\n console.error(\"Error saving task:\", _t4);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t4)) {\n _context4.n = 6;\n break;\n }\n return _context4.a(2);\n case 6:\n // For other errors, still close the modal but let the error bubble up\n closeTaskModal();\n throw _t4;\n case 7:\n return _context4.a(2);\n }\n }, _callee4, null, [[0, 5]]);\n }));\n return function handleSaveTask(_x2) {\n return _ref5.apply(this, arguments);\n };\n }();\n var handleCreateProject = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(name) {\n var newProject, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n _context5.p = 0;\n _context5.n = 1;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_16__.createProject)({\n name: name,\n active: true\n });\n case 1:\n newProject = _context5.v;\n return _context5.a(2, newProject);\n case 2:\n _context5.p = 2;\n _t5 = _context5.v;\n console.error(\"Error creating project:\", _t5);\n throw _t5;\n case 3:\n return _context5.a(2);\n }\n }, _callee5, null, [[0, 2]]);\n }));\n return function handleCreateProject(_x3) {\n return _ref6.apply(this, arguments);\n };\n }();\n var handleSaveProject = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(projectData) {\n var projectsData, _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n _context6.p = 0;\n if (!projectData.id) {\n _context6.n = 2;\n break;\n }\n _context6.n = 1;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_16__.updateProject)(projectData.id, projectData);\n case 1:\n _context6.n = 3;\n break;\n case 2:\n _context6.n = 3;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_16__.createProject)(projectData);\n case 3:\n _context6.n = 4;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_16__.fetchProjects)();\n case 4:\n projectsData = _context6.v;\n setProjects(projectsData);\n closeProjectModal();\n _context6.n = 7;\n break;\n case 5:\n _context6.p = 5;\n _t6 = _context6.v;\n console.error(\"Error saving project:\", _t6);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t6)) {\n _context6.n = 6;\n break;\n }\n return _context6.a(2);\n case 6:\n closeProjectModal();\n case 7:\n return _context6.a(2);\n }\n }, _callee6, null, [[0, 5]]);\n }));\n return function handleSaveProject(_x4) {\n return _ref7.apply(this, arguments);\n };\n }();\n var handleSaveArea = /*#__PURE__*/function () {\n var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(areaData) {\n var _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n _context7.p = 0;\n if (!areaData.id) {\n _context7.n = 2;\n break;\n }\n _context7.n = 1;\n return (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_14__.updateArea)(areaData.id, areaData);\n case 1:\n _context7.n = 3;\n break;\n case 2:\n _context7.n = 3;\n return (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_14__.createArea)(areaData);\n case 3:\n loadAreas();\n closeAreaModal();\n _context7.n = 6;\n break;\n case 4:\n _context7.p = 4;\n _t7 = _context7.v;\n console.error(\"Error saving area:\", _t7);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t7)) {\n _context7.n = 5;\n break;\n }\n return _context7.a(2);\n case 5:\n closeAreaModal();\n case 6:\n return _context7.a(2);\n }\n }, _callee7, null, [[0, 4]]);\n }));\n return function handleSaveArea(_x5) {\n return _ref8.apply(this, arguments);\n };\n }();\n var handleSaveTag = /*#__PURE__*/function () {\n var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(tagData) {\n var tagsData, _t8;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n _context8.p = 0;\n if (!tagData.id) {\n _context8.n = 2;\n break;\n }\n _context8.n = 1;\n return (0,_utils_tagsService__WEBPACK_IMPORTED_MODULE_15__.updateTag)(tagData.id, tagData);\n case 1:\n _context8.n = 3;\n break;\n case 2:\n _context8.n = 3;\n return (0,_utils_tagsService__WEBPACK_IMPORTED_MODULE_15__.createTag)(tagData);\n case 3:\n _context8.n = 4;\n return (0,_utils_tagsService__WEBPACK_IMPORTED_MODULE_15__.fetchTags)();\n case 4:\n tagsData = _context8.v;\n setTags(tagsData);\n closeTagModal();\n _context8.n = 7;\n break;\n case 5:\n _context8.p = 5;\n _t8 = _context8.v;\n console.error(\"Error saving tag:\", _t8);\n // Don't close modal if there's an auth error (user will be redirected)\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_18__.isAuthError)(_t8)) {\n _context8.n = 6;\n break;\n }\n return _context8.a(2);\n case 6:\n closeTagModal();\n case 7:\n return _context8.a(2);\n }\n }, _callee8, null, [[0, 5]]);\n }));\n return function handleSaveTag(_x6) {\n return _ref9.apply(this, arguments);\n };\n }();\n var handleLogout = /*#__PURE__*/function () {\n var _ref0 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var response, _t9, _t0, _t1;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.n) {\n case 0:\n _context9.p = 0;\n _context9.n = 1;\n return fetch('/api/logout', {\n method: 'GET',\n credentials: 'include'\n });\n case 1:\n response = _context9.v;\n if (!response.ok) {\n _context9.n = 2;\n break;\n }\n setCurrentUser(null);\n _context9.n = 4;\n break;\n case 2:\n _t9 = console;\n _context9.n = 3;\n return response.json();\n case 3:\n _t0 = _context9.v;\n _t9.error.call(_t9, 'Logout failed:', _t0);\n case 4:\n _context9.n = 6;\n break;\n case 5:\n _context9.p = 5;\n _t1 = _context9.v;\n console.error('Error during logout:', _t1);\n case 6:\n return _context9.a(2);\n }\n }, _callee9, null, [[0, 5]]);\n }));\n return function handleLogout() {\n return _ref0.apply(this, arguments);\n };\n }();\n var mainContentMarginLeft = isSidebarOpen ? \"ml-72\" : \"ml-0\";\n var isLoading = isNotesLoading || isAreasLoading || isTasksLoading || isProjectsLoading || isTagsLoading;\n var isError = isNotesError || isAreasError || isTasksError || isProjectsError || isTagsError;\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"min-h-screen \".concat(isDarkMode ? \"dark\" : \"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Navbar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n currentUser: currentUser,\n setCurrentUser: setCurrentUser,\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen,\n currentUser: currentUser,\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n openTaskModal: openTaskModal,\n openProjectModal: openProjectModal,\n openNoteModal: openNoteModal,\n openAreaModal: openAreaModal,\n openTagModal: openTagModal,\n notes: notes,\n areas: areas,\n tags: tags\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1 flex items-center justify-center bg-gray-100 dark:bg-gray-800 transition-all duration-300 ease-in-out \".concat(mainContentMarginLeft)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl text-gray-700 dark:text-gray-200\"\n }, t('common.loading'))));\n }\n if (isError) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"min-h-screen \".concat(isDarkMode ? \"dark\" : \"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Navbar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n currentUser: currentUser,\n setCurrentUser: setCurrentUser,\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen,\n currentUser: currentUser,\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n openTaskModal: openTaskModal,\n openProjectModal: openProjectModal,\n openNoteModal: openNoteModal,\n openAreaModal: openAreaModal,\n openTagModal: openTagModal,\n notes: notes,\n areas: areas,\n tags: tags\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1 flex flex-col items-center justify-center bg-gray-100 dark:bg-gray-800 transition-all duration-300 ease-in-out \".concat(mainContentMarginLeft)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl text-red-500\"\n }, t('errors.somethingWentWrong'))));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"min-h-screen \".concat(isDarkMode ? \"dark\" : \"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Navbar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n currentUser: currentUser,\n setCurrentUser: setCurrentUser,\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n isSidebarOpen: isSidebarOpen,\n setIsSidebarOpen: setIsSidebarOpen,\n currentUser: currentUser,\n isDarkMode: isDarkMode,\n toggleDarkMode: toggleDarkMode,\n openTaskModal: openTaskModal,\n openProjectModal: openProjectModal,\n openNoteModal: openNoteModal,\n openAreaModal: openAreaModal,\n openTagModal: openTagModal,\n notes: notes,\n areas: areas,\n tags: tags\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"transition-all duration-300 ease-in-out \".concat(mainContentMarginLeft)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-gray-100 min-h-screen overflow-y-auto\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-grow py-6 px-2 md:px-6 pt-24\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl mx-auto\"\n }, children)))), !isTaskModalOpen && !isProjectModalOpen && !isNoteModalOpen && !isAreaModalOpen && !isTagModalOpen && globalModalCount === 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return openTaskModal('simplified');\n },\n className: \"fixed bottom-6 right-6 bg-blue-500 hover:bg-blue-600 text-white rounded-full p-4 shadow-lg focus:outline-none transform transition-transform duration-200 hover:scale-110 z-50\",\n \"aria-label\": \"Quick Capture\",\n title: t('inbox.captureThought')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-6 w-6\"\n })), isTaskModalOpen && (taskModalType === 'simplified' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Task_SimplifiedTaskModal__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n isOpen: isTaskModalOpen,\n onClose: closeTaskModal,\n onSave: handleSaveTask\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Task_TaskModal__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n isOpen: isTaskModalOpen,\n onClose: closeTaskModal,\n task: {\n name: \"\",\n status: \"not_started\"\n },\n onSave: handleSaveTask,\n onDelete: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.n) {\n case 0:\n return _context0.a(2);\n }\n }, _callee0);\n })),\n projects: projects,\n onCreateProject: handleCreateProject\n })), isProjectModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Project_ProjectModal__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n isOpen: isProjectModalOpen,\n onClose: closeProjectModal,\n onSave: handleSaveProject,\n areas: areas\n }), isNoteModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Note_NoteModal__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n isOpen: isNoteModalOpen,\n onClose: closeNoteModal,\n onSave: handleSaveNote,\n note: selectedNote\n }), isAreaModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Area_AreaModal__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n isOpen: isAreaModalOpen,\n onClose: closeAreaModal,\n onSave: handleSaveArea,\n area: selectedArea\n }), isTagModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_Tag_TagModal__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n isOpen: isTagModalOpen,\n onClose: closeTagModal,\n onSave: handleSaveTag,\n tag: selectedTag\n }));\n};\n_s(Layout, \"yXAACjuyTAb4vGCFk/QWBO4MFOk=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _components_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast, _store_useStore__WEBPACK_IMPORTED_MODULE_12__.useStore];\n});\n_c = Layout;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Layout);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"Layout\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/Layout.tsx?"); /***/ }), @@ -71,7 +71,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _Task_TaskModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Task/TaskModal */ \"./frontend/components/Task/TaskModal.tsx\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CalendarIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ChevronLeftIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ChevronRightIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowTopRightOnSquareIcon.js\");\n/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/addWeeks.js\");\n/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/addDays.js\");\n/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/format.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/el.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/es.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/ja.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/uk.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/de.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/en-US.js\");\n/* harmony import */ var _Calendar_CalendarMonthView__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Calendar/CalendarMonthView */ \"./frontend/components/Calendar/CalendarMonthView.tsx\");\n/* harmony import */ var _Calendar_CalendarWeekView__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Calendar/CalendarWeekView */ \"./frontend/components/Calendar/CalendarWeekView.tsx\");\n/* harmony import */ var _Calendar_CalendarDayView__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Calendar/CalendarDayView */ \"./frontend/components/Calendar/CalendarDayView.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _s = __webpack_require__.$Refresh$.signature(),\n _s2 = __webpack_require__.$Refresh$.signature();\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\nvar getLocale = function getLocale(language) {\n switch (language) {\n case 'el':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_7__.el;\n case 'es':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_8__.es;\n case 'jp':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_9__.ja;\n case 'ua':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_10__.uk;\n case 'de':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_11__.de;\n default:\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_12__.enUS;\n }\n};\nvar Calendar = function Calendar() {\n _s();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t,\n i18n = _useTranslation.i18n;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(new Date()),\n _useState2 = _slicedToArray(_useState, 2),\n currentDate = _useState2[0],\n setCurrentDate = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('month'),\n _useState4 = _slicedToArray(_useState3, 2),\n view = _useState4[0],\n setView = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n connected: false\n }),\n _useState6 = _slicedToArray(_useState5, 2),\n googleStatus = _useState6[0],\n setGoogleStatus = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isConnecting = _useState8[0],\n setIsConnecting = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isDemoMode = _useState0[0],\n setIsDemoMode = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState10 = _slicedToArray(_useState1, 2),\n events = _useState10[0],\n setEvents = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState12 = _slicedToArray(_useState11, 2),\n isLoadingTasks = _useState12[0],\n setIsLoadingTasks = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState14 = _slicedToArray(_useState13, 2),\n selectedTask = _useState14[0],\n setSelectedTask = _useState14[1];\n var _useState15 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState16 = _slicedToArray(_useState15, 2),\n allTasks = _useState16[0],\n setAllTasks = _useState16[1];\n var _useState17 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState18 = _slicedToArray(_useState17, 2),\n projects = _useState18[0],\n setProjects = _useState18[1];\n var _useState19 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState20 = _slicedToArray(_useState19, 2),\n isTaskModalOpen = _useState20[0],\n setIsTaskModalOpen = _useState20[1];\n var _useState21 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState22 = _slicedToArray(_useState21, 2),\n isEventDetailModalOpen = _useState22[0],\n setIsEventDetailModalOpen = _useState22[1];\n var locale = getLocale(i18n.language);\n\n // Load Google Calendar status and tasks on component mount\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n checkGoogleCalendarStatus();\n loadTasks();\n loadProjects();\n\n // Check URL parameters for demo mode\n var urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('demo') === 'true' && urlParams.get('connected') === 'true') {\n setGoogleStatus({\n connected: true,\n email: 'demo@example.com'\n });\n setIsDemoMode(true);\n // Clean up URL\n window.history.replaceState({}, document.title, window.location.pathname);\n }\n }, []);\n var checkGoogleCalendarStatus = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var response, status, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.p = 0;\n _context.n = 1;\n return fetch('/api/calendar/status', {\n credentials: 'include'\n });\n case 1:\n response = _context.v;\n if (!response.ok) {\n _context.n = 3;\n break;\n }\n _context.n = 2;\n return response.json();\n case 2:\n status = _context.v;\n setGoogleStatus(status);\n setIsDemoMode(status.demo || false);\n case 3:\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n console.error('Error checking Google Calendar status:', _t);\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[0, 4]]);\n }));\n return function checkGoogleCalendarStatus() {\n return _ref.apply(this, arguments);\n };\n }();\n var loadTasks = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var response, data, tasks, taskEvents, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n setIsLoadingTasks(true);\n _context2.p = 1;\n _context2.n = 2;\n return fetch('/api/tasks', {\n credentials: 'include'\n });\n case 2:\n response = _context2.v;\n if (!response.ok) {\n _context2.n = 4;\n break;\n }\n _context2.n = 3;\n return response.json();\n case 3:\n data = _context2.v;\n if (Array.isArray(data)) {\n tasks = data;\n } else if (data && Array.isArray(data.tasks)) {\n tasks = data.tasks;\n } else if (data && data.data && Array.isArray(data.data)) {\n tasks = data.data;\n } else {\n console.error('Unexpected API response format:', data);\n tasks = [];\n }\n\n // Store the original tasks for later reference\n setAllTasks(tasks);\n taskEvents = convertTasksToEvents(tasks);\n setEvents(taskEvents);\n _context2.n = 5;\n break;\n case 4:\n console.error('Failed to load tasks, status:', response.status);\n case 5:\n _context2.n = 7;\n break;\n case 6:\n _context2.p = 6;\n _t2 = _context2.v;\n console.error('Error loading tasks:', _t2);\n case 7:\n _context2.p = 7;\n setIsLoadingTasks(false);\n return _context2.f(7);\n case 8:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 6, 7, 8]]);\n }));\n return function loadTasks() {\n return _ref2.apply(this, arguments);\n };\n }();\n var convertTasksToEvents = function convertTasksToEvents(tasks) {\n var taskEvents = [];\n if (!Array.isArray(tasks)) {\n console.error('convertTasksToEvents received non-array:', tasks);\n return [];\n }\n tasks.forEach(function (task, index) {\n // Add tasks with due dates\n if (task.due_date) {\n var dueDate = new Date(task.due_date);\n var taskEvent = {\n id: \"task-\".concat(task.id),\n title: task.name || task.title || \"Task \".concat(task.id),\n start: dueDate,\n end: new Date(dueDate.getTime() + 60 * 60 * 1000),\n // 1 hour duration\n type: 'task',\n color: task.completed_at ? '#22c55e' : '#ef4444' // Green if completed, red if not\n };\n taskEvents.push(taskEvent);\n }\n\n // Add tasks scheduled for today (if they don't have due_date)\n if (!task.due_date && task.created_at) {\n var createdDate = new Date(task.created_at);\n var today = new Date();\n\n // Show tasks created today on the calendar\n if (createdDate.toDateString() === today.toDateString()) {\n var _taskEvent = {\n id: \"task-created-\".concat(task.id),\n title: \"\\uD83D\\uDCDD \".concat(task.name || task.title || \"Task \".concat(task.id)),\n start: createdDate,\n end: new Date(createdDate.getTime() + 30 * 60 * 1000),\n // 30 min duration\n type: 'task',\n color: task.completed_at ? '#22c55e' : '#3b82f6' // Green if completed, blue if not\n };\n taskEvents.push(_taskEvent);\n }\n }\n\n // Always add tasks to calendar for easier debugging\n if (!task.due_date && !task.created_at) {\n var _taskEvent2 = {\n id: \"task-fallback-\".concat(task.id),\n title: \"\\uD83D\\uDCCC \".concat(task.name || task.title || \"Task \".concat(task.id)),\n start: new Date(),\n // Today\n end: new Date(Date.now() + 30 * 60 * 1000),\n // 30 min duration\n type: 'task',\n color: task.completed_at ? '#22c55e' : '#8b5cf6' // Green if completed, purple if not\n };\n taskEvents.push(_taskEvent2);\n }\n });\n return taskEvents;\n };\n var loadProjects = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var response, projectsData, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.p = 0;\n _context3.n = 1;\n return fetch('/api/projects', {\n credentials: 'include'\n });\n case 1:\n response = _context3.v;\n if (!response.ok) {\n _context3.n = 3;\n break;\n }\n _context3.n = 2;\n return response.json();\n case 2:\n projectsData = _context3.v;\n setProjects(Array.isArray(projectsData) ? projectsData : []);\n case 3:\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n console.error('Error loading projects:', _t3);\n case 5:\n return _context3.a(2);\n }\n }, _callee3, null, [[0, 4]]);\n }));\n return function loadProjects() {\n return _ref3.apply(this, arguments);\n };\n }();\n var connectGoogleCalendar = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var response, result, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n if (!isConnecting) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n setIsConnecting(true);\n _context4.p = 2;\n _context4.n = 3;\n return fetch('/api/calendar/auth', {\n credentials: 'include'\n });\n case 3:\n response = _context4.v;\n if (!response.ok) {\n _context4.n = 5;\n break;\n }\n _context4.n = 4;\n return response.json();\n case 4:\n result = _context4.v;\n if (result.demo) {\n // Demo mode - simulate connection\n setGoogleStatus({\n connected: true,\n email: 'demo@example.com'\n });\n setIsDemoMode(true);\n } else {\n // Real Google OAuth - redirect to auth URL\n window.location.href = result.authUrl;\n }\n _context4.n = 6;\n break;\n case 5:\n throw new Error('Failed to get authorization URL');\n case 6:\n _context4.n = 8;\n break;\n case 7:\n _context4.p = 7;\n _t4 = _context4.v;\n console.error('Error connecting to Google Calendar:', _t4);\n alert(t('calendar.connectionError'));\n case 8:\n _context4.p = 8;\n setIsConnecting(false);\n return _context4.f(8);\n case 9:\n return _context4.a(2);\n }\n }, _callee4, null, [[2, 7, 8, 9]]);\n }));\n return function connectGoogleCalendar() {\n return _ref4.apply(this, arguments);\n };\n }();\n var disconnectGoogleCalendar = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var response, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n _context5.p = 0;\n if (!isDemoMode) {\n _context5.n = 1;\n break;\n }\n // Demo mode - just update local state\n setGoogleStatus({\n connected: false\n });\n setIsDemoMode(false);\n return _context5.a(2);\n case 1:\n _context5.n = 2;\n return fetch('/api/calendar/disconnect', {\n method: 'POST',\n credentials: 'include'\n });\n case 2:\n response = _context5.v;\n if (!response.ok) {\n _context5.n = 3;\n break;\n }\n setGoogleStatus({\n connected: false\n });\n _context5.n = 4;\n break;\n case 3:\n throw new Error('Failed to disconnect');\n case 4:\n _context5.n = 6;\n break;\n case 5:\n _context5.p = 5;\n _t5 = _context5.v;\n console.error('Error disconnecting Google Calendar:', _t5);\n alert(t('calendar.disconnectionError'));\n case 6:\n return _context5.a(2);\n }\n }, _callee5, null, [[0, 5]]);\n }));\n return function disconnectGoogleCalendar() {\n return _ref5.apply(this, arguments);\n };\n }();\n var navigate = function navigate(direction) {\n setCurrentDate(function (prev) {\n if (view === 'month') {\n var newDate = new Date(prev);\n if (direction === 'prev') {\n newDate.setMonth(prev.getMonth() - 1);\n } else {\n newDate.setMonth(prev.getMonth() + 1);\n }\n return newDate;\n } else if (view === 'week') {\n return direction === 'prev' ? (0,date_fns__WEBPACK_IMPORTED_MODULE_13__.addWeeks)(prev, -1) : (0,date_fns__WEBPACK_IMPORTED_MODULE_13__.addWeeks)(prev, 1);\n } else {\n // day\n return direction === 'prev' ? (0,date_fns__WEBPACK_IMPORTED_MODULE_14__.addDays)(prev, -1) : (0,date_fns__WEBPACK_IMPORTED_MODULE_14__.addDays)(prev, 1);\n }\n });\n };\n var goToToday = function goToToday() {\n setCurrentDate(new Date());\n };\n var handleDateClick = function handleDateClick() {\n // Date click handler - can be used for future functionality\n };\n var handleEventClick = function handleEventClick(event) {\n // Handle task events\n if (event.type === 'task') {\n // Extract task ID from event ID\n var taskId = event.id.replace(/^task(-created|-fallback)?-/, '');\n var task = allTasks.find(function (t) {\n return t.id.toString() === taskId;\n });\n if (task) {\n // Convert task to proper Task entity format for TaskModal\n var taskEntity = _objectSpread(_objectSpread({}, task), {}, {\n name: task.name || task.title || \"Task \".concat(task.id),\n // Ensure all required Task properties are present\n priority: task.priority || 'medium',\n status: task.status || 'not_started',\n tags: task.tags || [],\n note: task.note || task.description || '',\n due_date: task.due_date,\n created_at: task.created_at,\n completed_at: task.completed_at,\n project_id: task.project_id\n });\n setSelectedTask(taskEntity);\n setIsEventDetailModalOpen(true);\n }\n }\n };\n var handleTimeSlotClick = function handleTimeSlotClick() {\n // Time slot click handler - can be used for future functionality\n };\n var handleEditTask = function handleEditTask() {\n setIsEventDetailModalOpen(false);\n setIsTaskModalOpen(true);\n };\n var handleTaskSave = function handleTaskSave(updatedTask) {\n // Update the task in allTasks\n setAllTasks(function (prev) {\n return prev.map(function (t) {\n return t.id === updatedTask.id ? updatedTask : t;\n });\n });\n // Refresh calendar\n loadTasks();\n // Close modal\n setIsTaskModalOpen(false);\n setSelectedTask(null);\n };\n var handleTaskDelete = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(taskId) {\n var _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n _context6.p = 0;\n _context6.n = 1;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.deleteTask)(taskId);\n case 1:\n // Remove task from allTasks\n setAllTasks(function (prev) {\n return prev.filter(function (t) {\n return t.id !== taskId;\n });\n });\n // Refresh calendar\n loadTasks();\n // Close modal\n setIsTaskModalOpen(false);\n setSelectedTask(null);\n _context6.n = 3;\n break;\n case 2:\n _context6.p = 2;\n _t6 = _context6.v;\n console.error('Failed to delete task:', _t6);\n case 3:\n return _context6.a(2);\n }\n }, _callee6, null, [[0, 2]]);\n }));\n return function handleTaskDelete(_x) {\n return _ref6.apply(this, arguments);\n };\n }();\n var handleCreateProject = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(name) {\n var response, newProject, _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n _context7.p = 0;\n _context7.n = 1;\n return fetch('/api/projects', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n credentials: 'include',\n body: JSON.stringify({\n name: name,\n description: ''\n })\n });\n case 1:\n response = _context7.v;\n if (!response.ok) {\n _context7.n = 3;\n break;\n }\n _context7.n = 2;\n return response.json();\n case 2:\n newProject = _context7.v;\n setProjects(function (prev) {\n return [].concat(_toConsumableArray(prev), [newProject]);\n });\n return _context7.a(2, newProject);\n case 3:\n throw new Error('Failed to create project');\n case 4:\n _context7.n = 6;\n break;\n case 5:\n _context7.p = 5;\n _t7 = _context7.v;\n console.error('Error creating project:', _t7);\n throw _t7;\n case 6:\n return _context7.a(2);\n }\n }, _callee7, null, [[0, 5]]);\n }));\n return function handleCreateProject(_x2) {\n return _ref7.apply(this, arguments);\n };\n }();\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-6xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n className: \"h-6 w-6 mr-2\"\n }), t('sidebar.calendar')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-lg text-gray-600 dark:text-gray-400\"\n }, (0,date_fns__WEBPACK_IMPORTED_MODULE_16__.format)(currentDate, 'MMMM yyyy', {\n locale: locale\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex rounded-lg border border-gray-300 dark:border-gray-600\"\n }, ['month', 'week', 'day'].map(function (viewType) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n key: viewType,\n onClick: function onClick() {\n return setView(viewType);\n },\n className: \"px-3 py-1 text-sm font-medium capitalize \".concat(view === viewType ? 'bg-blue-500 text-white' : 'bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700', \" \").concat(viewType === 'month' ? 'rounded-l-lg' : '', \" \").concat(viewType === 'day' ? 'rounded-r-lg' : '')\n }, t(\"calendar.\".concat(viewType)));\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return navigate('prev');\n },\n className: \"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: goToToday,\n className: \"px-3 py-2 text-sm bg-blue-500 text-white rounded-lg hover:bg-blue-600\"\n }, t('calendar.today')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return navigate('next');\n },\n className: \"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"h-5 w-5\"\n })))), isLoadingTasks && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-center py-4 text-gray-500\"\n }, t('calendar.loadingTasks')), view === 'month' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Calendar_CalendarMonthView__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n currentDate: currentDate,\n events: events,\n onDateClick: handleDateClick,\n onEventClick: handleEventClick\n }), view === 'week' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Calendar_CalendarWeekView__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n currentDate: currentDate,\n events: events,\n onDateClick: handleDateClick,\n onEventClick: handleEventClick,\n onTimeSlotClick: handleTimeSlotClick\n }), view === 'day' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Calendar_CalendarDayView__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n currentDate: currentDate,\n events: events,\n onEventClick: handleEventClick,\n onTimeSlotClick: handleTimeSlotClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-6 bg-white dark:bg-gray-900 rounded-lg shadow p-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-lg font-medium mb-4 text-gray-900 dark:text-gray-100\"\n }, t('calendar.googleIntegration')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm text-gray-600 dark:text-gray-400 mb-2\"\n }, isDemoMode ? 'Demo mode: Google Calendar integration simulated for testing purposes.' : t('calendar.googleDescription')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-500\"\n }, t('calendar.googleStatus'), \":\", googleStatus.connected ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-green-500 ml-1\"\n }, t('calendar.connected'), googleStatus.email && \" (\".concat(googleStatus.email, \")\")) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-red-500 ml-1\"\n }, t('calendar.notConnected')))), googleStatus.connected ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: disconnectGoogleCalendar,\n className: \"px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600\"\n }, t('calendar.disconnectGoogle')) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: connectGoogleCalendar,\n disabled: isConnecting,\n className: \"px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 disabled:opacity-50\"\n }, isConnecting ? t('calendar.connecting') : t('calendar.connectGoogle')))), selectedTask && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TaskEventModal, {\n isOpen: isEventDetailModalOpen,\n onClose: function onClose() {\n setIsEventDetailModalOpen(false);\n setSelectedTask(null);\n },\n task: selectedTask,\n onEditTask: handleEditTask\n }), selectedTask && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Task_TaskModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isTaskModalOpen,\n onClose: function onClose() {\n setIsTaskModalOpen(false);\n setSelectedTask(null);\n },\n task: selectedTask,\n onSave: handleTaskSave,\n onDelete: handleTaskDelete,\n projects: projects,\n onCreateProject: handleCreateProject\n })));\n};\n\n// Simple Task Event Details Modal Component\n_s(Calendar, \"zpqEZqfL333j9/U6ZOMSKhKzKaw=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation];\n});\n_c = Calendar;\nvar TaskEventModal = function TaskEventModal(_ref8) {\n _s2();\n var _task$Project;\n var isOpen = _ref8.isOpen,\n task = _ref8.task,\n onClose = _ref8.onClose,\n onEditTask = _ref8.onEditTask;\n var _useTranslation2 = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation2.t,\n i18n = _useTranslation2.i18n;\n var locale = getLocale(i18n.language);\n if (!isOpen) return null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"bg-white dark:bg-gray-800 rounded-lg shadow-lg p-6 max-w-md w-full mx-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-between items-start mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-lg font-semibold text-gray-900 dark:text-gray-100\"\n }, \"\\uD83D\\uDCCB \", t('calendar.taskDetails')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: onClose,\n className: \"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"w-6 h-6\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"space-y-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.title')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-900 dark:text-gray-100\"\n }, task.name || \"Task \".concat(task.id))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.status')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium \".concat(task.completed_at ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' : 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200')\n }, task.completed_at ? \"\\u2705 \".concat(t('calendar.completed')) : \"\\u23F3 \".concat(t('calendar.pending'))))), task.due_date && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.dueDate')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-900 dark:text-gray-100\"\n }, (0,date_fns__WEBPACK_IMPORTED_MODULE_16__.format)(new Date(task.due_date), 'PPP', {\n locale: locale\n }))), task.priority && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.priority')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium \".concat(task.priority === 'high' ? 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200' : task.priority === 'medium' ? 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200' : 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200')\n }, t(\"calendar.\".concat(task.priority)))), ((_task$Project = task.Project) === null || _task$Project === void 0 ? void 0 : _task$Project.name) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.project')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-900 dark:text-gray-100\"\n }, task.Project.name)), task.note && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.description')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-900 dark:text-gray-100 whitespace-pre-wrap\"\n }, task.note)), task.created_at && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.created')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, (0,date_fns__WEBPACK_IMPORTED_MODULE_16__.format)(new Date(task.created_at), 'PPp', {\n locale: locale\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-6 flex justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/tasks\",\n className: \"inline-flex items-center px-3 py-2 text-sm font-medium text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"w-4 h-4 mr-1\"\n }), t('calendar.goToTasks')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex space-x-3\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: onClose,\n className: \"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-700 rounded-md hover:bg-gray-200 dark:hover:bg-gray-600\"\n }, t('calendar.close')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: onEditTask,\n className: \"px-4 py-2 text-sm font-medium bg-blue-500 text-white rounded-md hover:bg-blue-600\"\n }, t('calendar.editTask'))))));\n};\n_s2(TaskEventModal, \"OZwazanA59tbNDUkc8lMSmTHj9Q=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation];\n});\n_c2 = TaskEventModal;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Calendar);\nvar _c, _c2;\n__webpack_require__.$Refresh$.register(_c, \"Calendar\");\n__webpack_require__.$Refresh$.register(_c2, \"TaskEventModal\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Calendar.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _Task_TaskModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Task/TaskModal */ \"./frontend/components/Task/TaskModal.tsx\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CalendarIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ChevronLeftIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ChevronRightIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowTopRightOnSquareIcon.js\");\n/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/addWeeks.js\");\n/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/addDays.js\");\n/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/format.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/el.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/es.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/ja.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/uk.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/de.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/en-US.js\");\n/* harmony import */ var _Calendar_CalendarMonthView__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Calendar/CalendarMonthView */ \"./frontend/components/Calendar/CalendarMonthView.tsx\");\n/* harmony import */ var _Calendar_CalendarWeekView__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Calendar/CalendarWeekView */ \"./frontend/components/Calendar/CalendarWeekView.tsx\");\n/* harmony import */ var _Calendar_CalendarDayView__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Calendar/CalendarDayView */ \"./frontend/components/Calendar/CalendarDayView.tsx\");\n/* harmony import */ var _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../hooks/useModalEvents */ \"./frontend/hooks/useModalEvents.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _s = __webpack_require__.$Refresh$.signature(),\n _s2 = __webpack_require__.$Refresh$.signature();\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\nvar getLocale = function getLocale(language) {\n switch (language) {\n case 'el':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_8__.el;\n case 'es':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_9__.es;\n case 'jp':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_10__.ja;\n case 'ua':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_11__.uk;\n case 'de':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_12__.de;\n default:\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_13__.enUS;\n }\n};\nvar Calendar = function Calendar() {\n _s();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t,\n i18n = _useTranslation.i18n;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(new Date()),\n _useState2 = _slicedToArray(_useState, 2),\n currentDate = _useState2[0],\n setCurrentDate = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('month'),\n _useState4 = _slicedToArray(_useState3, 2),\n view = _useState4[0],\n setView = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n connected: false\n }),\n _useState6 = _slicedToArray(_useState5, 2),\n googleStatus = _useState6[0],\n setGoogleStatus = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isConnecting = _useState8[0],\n setIsConnecting = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isDemoMode = _useState0[0],\n setIsDemoMode = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState10 = _slicedToArray(_useState1, 2),\n events = _useState10[0],\n setEvents = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState12 = _slicedToArray(_useState11, 2),\n isLoadingTasks = _useState12[0],\n setIsLoadingTasks = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState14 = _slicedToArray(_useState13, 2),\n selectedTask = _useState14[0],\n setSelectedTask = _useState14[1];\n var _useState15 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState16 = _slicedToArray(_useState15, 2),\n allTasks = _useState16[0],\n setAllTasks = _useState16[1];\n var _useState17 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState18 = _slicedToArray(_useState17, 2),\n projects = _useState18[0],\n setProjects = _useState18[1];\n var _useState19 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState20 = _slicedToArray(_useState19, 2),\n isTaskModalOpen = _useState20[0],\n setIsTaskModalOpen = _useState20[1];\n var _useState21 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState22 = _slicedToArray(_useState21, 2),\n isEventDetailModalOpen = _useState22[0],\n setIsEventDetailModalOpen = _useState22[1];\n\n // Dispatch global modal events\n (0,_hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_7__.useModalEvents)(isTaskModalOpen || isEventDetailModalOpen);\n var locale = getLocale(i18n.language);\n\n // Load Google Calendar status and tasks on component mount\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n checkGoogleCalendarStatus();\n loadTasks();\n loadProjects();\n\n // Check URL parameters for demo mode\n var urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('demo') === 'true' && urlParams.get('connected') === 'true') {\n setGoogleStatus({\n connected: true,\n email: 'demo@example.com'\n });\n setIsDemoMode(true);\n // Clean up URL\n window.history.replaceState({}, document.title, window.location.pathname);\n }\n }, []);\n var checkGoogleCalendarStatus = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var response, status, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.p = 0;\n _context.n = 1;\n return fetch('/api/calendar/status', {\n credentials: 'include'\n });\n case 1:\n response = _context.v;\n if (!response.ok) {\n _context.n = 3;\n break;\n }\n _context.n = 2;\n return response.json();\n case 2:\n status = _context.v;\n setGoogleStatus(status);\n setIsDemoMode(status.demo || false);\n case 3:\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n console.error('Error checking Google Calendar status:', _t);\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[0, 4]]);\n }));\n return function checkGoogleCalendarStatus() {\n return _ref.apply(this, arguments);\n };\n }();\n var loadTasks = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var response, data, tasks, taskEvents, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n setIsLoadingTasks(true);\n _context2.p = 1;\n _context2.n = 2;\n return fetch('/api/tasks', {\n credentials: 'include'\n });\n case 2:\n response = _context2.v;\n if (!response.ok) {\n _context2.n = 4;\n break;\n }\n _context2.n = 3;\n return response.json();\n case 3:\n data = _context2.v;\n if (Array.isArray(data)) {\n tasks = data;\n } else if (data && Array.isArray(data.tasks)) {\n tasks = data.tasks;\n } else if (data && data.data && Array.isArray(data.data)) {\n tasks = data.data;\n } else {\n console.error('Unexpected API response format:', data);\n tasks = [];\n }\n\n // Store the original tasks for later reference\n setAllTasks(tasks);\n taskEvents = convertTasksToEvents(tasks);\n setEvents(taskEvents);\n _context2.n = 5;\n break;\n case 4:\n console.error('Failed to load tasks, status:', response.status);\n case 5:\n _context2.n = 7;\n break;\n case 6:\n _context2.p = 6;\n _t2 = _context2.v;\n console.error('Error loading tasks:', _t2);\n case 7:\n _context2.p = 7;\n setIsLoadingTasks(false);\n return _context2.f(7);\n case 8:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 6, 7, 8]]);\n }));\n return function loadTasks() {\n return _ref2.apply(this, arguments);\n };\n }();\n var convertTasksToEvents = function convertTasksToEvents(tasks) {\n var taskEvents = [];\n if (!Array.isArray(tasks)) {\n console.error('convertTasksToEvents received non-array:', tasks);\n return [];\n }\n tasks.forEach(function (task, index) {\n // Add tasks with due dates\n if (task.due_date) {\n var dueDate = new Date(task.due_date);\n var taskEvent = {\n id: \"task-\".concat(task.id),\n title: task.name || task.title || \"Task \".concat(task.id),\n start: dueDate,\n end: new Date(dueDate.getTime() + 60 * 60 * 1000),\n // 1 hour duration\n type: 'task',\n color: task.completed_at ? '#22c55e' : '#ef4444' // Green if completed, red if not\n };\n taskEvents.push(taskEvent);\n }\n\n // Add tasks scheduled for today (if they don't have due_date)\n if (!task.due_date && task.created_at) {\n var createdDate = new Date(task.created_at);\n var today = new Date();\n\n // Show tasks created today on the calendar\n if (createdDate.toDateString() === today.toDateString()) {\n var _taskEvent = {\n id: \"task-created-\".concat(task.id),\n title: \"\\uD83D\\uDCDD \".concat(task.name || task.title || \"Task \".concat(task.id)),\n start: createdDate,\n end: new Date(createdDate.getTime() + 30 * 60 * 1000),\n // 30 min duration\n type: 'task',\n color: task.completed_at ? '#22c55e' : '#3b82f6' // Green if completed, blue if not\n };\n taskEvents.push(_taskEvent);\n }\n }\n\n // Always add tasks to calendar for easier debugging\n if (!task.due_date && !task.created_at) {\n var _taskEvent2 = {\n id: \"task-fallback-\".concat(task.id),\n title: \"\\uD83D\\uDCCC \".concat(task.name || task.title || \"Task \".concat(task.id)),\n start: new Date(),\n // Today\n end: new Date(Date.now() + 30 * 60 * 1000),\n // 30 min duration\n type: 'task',\n color: task.completed_at ? '#22c55e' : '#8b5cf6' // Green if completed, purple if not\n };\n taskEvents.push(_taskEvent2);\n }\n });\n return taskEvents;\n };\n var loadProjects = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var response, projectsData, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.p = 0;\n _context3.n = 1;\n return fetch('/api/projects', {\n credentials: 'include'\n });\n case 1:\n response = _context3.v;\n if (!response.ok) {\n _context3.n = 3;\n break;\n }\n _context3.n = 2;\n return response.json();\n case 2:\n projectsData = _context3.v;\n setProjects(Array.isArray(projectsData) ? projectsData : []);\n case 3:\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n console.error('Error loading projects:', _t3);\n case 5:\n return _context3.a(2);\n }\n }, _callee3, null, [[0, 4]]);\n }));\n return function loadProjects() {\n return _ref3.apply(this, arguments);\n };\n }();\n var connectGoogleCalendar = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var response, result, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n if (!isConnecting) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n setIsConnecting(true);\n _context4.p = 2;\n _context4.n = 3;\n return fetch('/api/calendar/auth', {\n credentials: 'include'\n });\n case 3:\n response = _context4.v;\n if (!response.ok) {\n _context4.n = 5;\n break;\n }\n _context4.n = 4;\n return response.json();\n case 4:\n result = _context4.v;\n if (result.demo) {\n // Demo mode - simulate connection\n setGoogleStatus({\n connected: true,\n email: 'demo@example.com'\n });\n setIsDemoMode(true);\n } else {\n // Real Google OAuth - redirect to auth URL\n window.location.href = result.authUrl;\n }\n _context4.n = 6;\n break;\n case 5:\n throw new Error('Failed to get authorization URL');\n case 6:\n _context4.n = 8;\n break;\n case 7:\n _context4.p = 7;\n _t4 = _context4.v;\n console.error('Error connecting to Google Calendar:', _t4);\n alert(t('calendar.connectionError'));\n case 8:\n _context4.p = 8;\n setIsConnecting(false);\n return _context4.f(8);\n case 9:\n return _context4.a(2);\n }\n }, _callee4, null, [[2, 7, 8, 9]]);\n }));\n return function connectGoogleCalendar() {\n return _ref4.apply(this, arguments);\n };\n }();\n var disconnectGoogleCalendar = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var response, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n _context5.p = 0;\n if (!isDemoMode) {\n _context5.n = 1;\n break;\n }\n // Demo mode - just update local state\n setGoogleStatus({\n connected: false\n });\n setIsDemoMode(false);\n return _context5.a(2);\n case 1:\n _context5.n = 2;\n return fetch('/api/calendar/disconnect', {\n method: 'POST',\n credentials: 'include'\n });\n case 2:\n response = _context5.v;\n if (!response.ok) {\n _context5.n = 3;\n break;\n }\n setGoogleStatus({\n connected: false\n });\n _context5.n = 4;\n break;\n case 3:\n throw new Error('Failed to disconnect');\n case 4:\n _context5.n = 6;\n break;\n case 5:\n _context5.p = 5;\n _t5 = _context5.v;\n console.error('Error disconnecting Google Calendar:', _t5);\n alert(t('calendar.disconnectionError'));\n case 6:\n return _context5.a(2);\n }\n }, _callee5, null, [[0, 5]]);\n }));\n return function disconnectGoogleCalendar() {\n return _ref5.apply(this, arguments);\n };\n }();\n var navigate = function navigate(direction) {\n setCurrentDate(function (prev) {\n if (view === 'month') {\n var newDate = new Date(prev);\n if (direction === 'prev') {\n newDate.setMonth(prev.getMonth() - 1);\n } else {\n newDate.setMonth(prev.getMonth() + 1);\n }\n return newDate;\n } else if (view === 'week') {\n return direction === 'prev' ? (0,date_fns__WEBPACK_IMPORTED_MODULE_14__.addWeeks)(prev, -1) : (0,date_fns__WEBPACK_IMPORTED_MODULE_14__.addWeeks)(prev, 1);\n } else {\n // day\n return direction === 'prev' ? (0,date_fns__WEBPACK_IMPORTED_MODULE_15__.addDays)(prev, -1) : (0,date_fns__WEBPACK_IMPORTED_MODULE_15__.addDays)(prev, 1);\n }\n });\n };\n var goToToday = function goToToday() {\n setCurrentDate(new Date());\n };\n var handleDateClick = function handleDateClick() {\n // Date click handler - can be used for future functionality\n };\n var handleEventClick = function handleEventClick(event) {\n // Handle task events\n if (event.type === 'task') {\n // Extract task ID from event ID\n var taskId = event.id.replace(/^task(-created|-fallback)?-/, '');\n var task = allTasks.find(function (t) {\n return t.id.toString() === taskId;\n });\n if (task) {\n // Convert task to proper Task entity format for TaskModal\n var taskEntity = _objectSpread(_objectSpread({}, task), {}, {\n name: task.name || task.title || \"Task \".concat(task.id),\n // Ensure all required Task properties are present\n priority: task.priority || 'medium',\n status: task.status || 'not_started',\n tags: task.tags || [],\n note: task.note || task.description || '',\n due_date: task.due_date,\n created_at: task.created_at,\n completed_at: task.completed_at,\n project_id: task.project_id\n });\n setSelectedTask(taskEntity);\n setIsEventDetailModalOpen(true);\n }\n }\n };\n var handleTimeSlotClick = function handleTimeSlotClick() {\n // Time slot click handler - can be used for future functionality\n };\n var handleEditTask = function handleEditTask() {\n setIsEventDetailModalOpen(false);\n setIsTaskModalOpen(true);\n };\n var handleTaskSave = function handleTaskSave(updatedTask) {\n // Update the task in allTasks\n setAllTasks(function (prev) {\n return prev.map(function (t) {\n return t.id === updatedTask.id ? updatedTask : t;\n });\n });\n // Refresh calendar\n loadTasks();\n // Close modal\n setIsTaskModalOpen(false);\n setSelectedTask(null);\n };\n var handleTaskDelete = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(taskId) {\n var _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n _context6.p = 0;\n _context6.n = 1;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.deleteTask)(taskId);\n case 1:\n // Remove task from allTasks\n setAllTasks(function (prev) {\n return prev.filter(function (t) {\n return t.id !== taskId;\n });\n });\n // Refresh calendar\n loadTasks();\n // Close modal\n setIsTaskModalOpen(false);\n setSelectedTask(null);\n _context6.n = 3;\n break;\n case 2:\n _context6.p = 2;\n _t6 = _context6.v;\n console.error('Failed to delete task:', _t6);\n case 3:\n return _context6.a(2);\n }\n }, _callee6, null, [[0, 2]]);\n }));\n return function handleTaskDelete(_x) {\n return _ref6.apply(this, arguments);\n };\n }();\n var handleCreateProject = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(name) {\n var response, newProject, _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n _context7.p = 0;\n _context7.n = 1;\n return fetch('/api/projects', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n credentials: 'include',\n body: JSON.stringify({\n name: name,\n description: ''\n })\n });\n case 1:\n response = _context7.v;\n if (!response.ok) {\n _context7.n = 3;\n break;\n }\n _context7.n = 2;\n return response.json();\n case 2:\n newProject = _context7.v;\n setProjects(function (prev) {\n return [].concat(_toConsumableArray(prev), [newProject]);\n });\n return _context7.a(2, newProject);\n case 3:\n throw new Error('Failed to create project');\n case 4:\n _context7.n = 6;\n break;\n case 5:\n _context7.p = 5;\n _t7 = _context7.v;\n console.error('Error creating project:', _t7);\n throw _t7;\n case 6:\n return _context7.a(2);\n }\n }, _callee7, null, [[0, 5]]);\n }));\n return function handleCreateProject(_x2) {\n return _ref7.apply(this, arguments);\n };\n }();\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-6xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"h-6 w-6 mr-2\"\n }), t('sidebar.calendar')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-lg text-gray-600 dark:text-gray-400\"\n }, (0,date_fns__WEBPACK_IMPORTED_MODULE_17__.format)(currentDate, 'MMMM yyyy', {\n locale: locale\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex rounded-lg border border-gray-300 dark:border-gray-600\"\n }, ['month', 'week', 'day'].map(function (viewType) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n key: viewType,\n onClick: function onClick() {\n return setView(viewType);\n },\n className: \"px-3 py-1 text-sm font-medium capitalize \".concat(view === viewType ? 'bg-blue-500 text-white' : 'bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700', \" \").concat(viewType === 'month' ? 'rounded-l-lg' : '', \" \").concat(viewType === 'day' ? 'rounded-r-lg' : '')\n }, t(\"calendar.\".concat(viewType)));\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return navigate('prev');\n },\n className: \"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: goToToday,\n className: \"px-3 py-2 text-sm bg-blue-500 text-white rounded-lg hover:bg-blue-600\"\n }, t('calendar.today')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return navigate('next');\n },\n className: \"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-5 w-5\"\n })))), isLoadingTasks && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-center py-4 text-gray-500\"\n }, t('calendar.loadingTasks')), view === 'month' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Calendar_CalendarMonthView__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n currentDate: currentDate,\n events: events,\n onDateClick: handleDateClick,\n onEventClick: handleEventClick\n }), view === 'week' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Calendar_CalendarWeekView__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n currentDate: currentDate,\n events: events,\n onDateClick: handleDateClick,\n onEventClick: handleEventClick,\n onTimeSlotClick: handleTimeSlotClick\n }), view === 'day' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Calendar_CalendarDayView__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n currentDate: currentDate,\n events: events,\n onEventClick: handleEventClick,\n onTimeSlotClick: handleTimeSlotClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-6 bg-white dark:bg-gray-900 rounded-lg shadow p-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-lg font-medium mb-4 text-gray-900 dark:text-gray-100\"\n }, t('calendar.googleIntegration')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm text-gray-600 dark:text-gray-400 mb-2\"\n }, isDemoMode ? 'Demo mode: Google Calendar integration simulated for testing purposes.' : t('calendar.googleDescription')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-500\"\n }, t('calendar.googleStatus'), \":\", googleStatus.connected ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-green-500 ml-1\"\n }, t('calendar.connected'), googleStatus.email && \" (\".concat(googleStatus.email, \")\")) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-red-500 ml-1\"\n }, t('calendar.notConnected')))), googleStatus.connected ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: disconnectGoogleCalendar,\n className: \"px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600\"\n }, t('calendar.disconnectGoogle')) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: connectGoogleCalendar,\n disabled: isConnecting,\n className: \"px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 disabled:opacity-50\"\n }, isConnecting ? t('calendar.connecting') : t('calendar.connectGoogle')))), selectedTask && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TaskEventModal, {\n isOpen: isEventDetailModalOpen,\n onClose: function onClose() {\n setIsEventDetailModalOpen(false);\n setSelectedTask(null);\n },\n task: selectedTask,\n onEditTask: handleEditTask\n }), selectedTask && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Task_TaskModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isTaskModalOpen,\n onClose: function onClose() {\n setIsTaskModalOpen(false);\n setSelectedTask(null);\n },\n task: selectedTask,\n onSave: handleTaskSave,\n onDelete: handleTaskDelete,\n projects: projects,\n onCreateProject: handleCreateProject\n })));\n};\n\n// Simple Task Event Details Modal Component\n_s(Calendar, \"ObyA1dSny8rJzYSDH0KS7dmUDOU=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_7__.useModalEvents];\n});\n_c = Calendar;\nvar TaskEventModal = function TaskEventModal(_ref8) {\n _s2();\n var _task$Project;\n var isOpen = _ref8.isOpen,\n task = _ref8.task,\n onClose = _ref8.onClose,\n onEditTask = _ref8.onEditTask;\n var _useTranslation2 = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation2.t,\n i18n = _useTranslation2.i18n;\n var locale = getLocale(i18n.language);\n if (!isOpen) return null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"bg-white dark:bg-gray-800 rounded-lg shadow-lg p-6 max-w-md w-full mx-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-between items-start mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-lg font-semibold text-gray-900 dark:text-gray-100\"\n }, \"\\uD83D\\uDCCB \", t('calendar.taskDetails')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: onClose,\n className: \"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"w-6 h-6\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"space-y-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.title')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-900 dark:text-gray-100\"\n }, task.name || \"Task \".concat(task.id))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.status')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium \".concat(task.completed_at ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' : 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200')\n }, task.completed_at ? \"\\u2705 \".concat(t('calendar.completed')) : \"\\u23F3 \".concat(t('calendar.pending'))))), task.due_date && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.dueDate')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-900 dark:text-gray-100\"\n }, (0,date_fns__WEBPACK_IMPORTED_MODULE_17__.format)(new Date(task.due_date), 'PPP', {\n locale: locale\n }))), task.priority && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.priority')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium \".concat(task.priority === 'high' ? 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200' : task.priority === 'medium' ? 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200' : 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200')\n }, t(\"calendar.\".concat(task.priority)))), ((_task$Project = task.Project) === null || _task$Project === void 0 ? void 0 : _task$Project.name) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.project')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-900 dark:text-gray-100\"\n }, task.Project.name)), task.note && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.description')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-900 dark:text-gray-100 whitespace-pre-wrap\"\n }, task.note)), task.created_at && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('calendar.created')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, (0,date_fns__WEBPACK_IMPORTED_MODULE_17__.format)(new Date(task.created_at), 'PPp', {\n locale: locale\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-6 flex justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/tasks\",\n className: \"inline-flex items-center px-3 py-2 text-sm font-medium text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n className: \"w-4 h-4 mr-1\"\n }), t('calendar.goToTasks')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex space-x-3\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: onClose,\n className: \"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-700 rounded-md hover:bg-gray-200 dark:hover:bg-gray-600\"\n }, t('calendar.close')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: onEditTask,\n className: \"px-4 py-2 text-sm font-medium bg-blue-500 text-white rounded-md hover:bg-blue-600\"\n }, t('calendar.editTask'))))));\n};\n_s2(TaskEventModal, \"OZwazanA59tbNDUkc8lMSmTHj9Q=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation];\n});\n_c2 = TaskEventModal;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Calendar);\nvar _c, _c2;\n__webpack_require__.$Refresh$.register(_c, \"Calendar\");\n__webpack_require__.$Refresh$.register(_c2, \"TaskEventModal\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Calendar.tsx?"); /***/ }), @@ -115,7 +115,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/format.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PencilIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ClipboardDocumentListIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/FolderIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/DocumentTextIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/TrashIcon.js\");\n/* harmony import */ var _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Shared/ToastContext */ \"./frontend/components/Shared/ToastContext.tsx\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\nvar InboxItemDetail = function InboxItemDetail(_ref) {\n _s();\n var item = _ref.item,\n onProcess = _ref.onProcess,\n onDelete = _ref.onDelete,\n onUpdate = _ref.onUpdate,\n openTaskModal = _ref.openTaskModal,\n openProjectModal = _ref.openProjectModal,\n openNoteModal = _ref.openNoteModal;\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n var _useToast = (0,_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast)(),\n showSuccessToast = _useToast.showSuccessToast,\n showErrorToast = _useToast.showErrorToast;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState2 = _slicedToArray(_useState, 2),\n showConfirmDialog = _useState2[0],\n setShowConfirmDialog = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n loading = _useState4[0],\n setLoading = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isHovered = _useState6[0],\n setIsHovered = _useState6[1];\n var handleConvertToTask = function handleConvertToTask() {\n var newTask = {\n name: item.content,\n status: 'not_started',\n priority: 'medium'\n };\n if (item.id !== undefined) {\n openTaskModal(newTask, item.id);\n } else {\n openTaskModal(newTask);\n }\n };\n var handleConvertToProject = function handleConvertToProject() {\n var newProject = {\n name: item.content,\n description: '',\n active: true\n };\n if (item.id !== undefined) {\n openProjectModal(newProject, item.id);\n } else {\n openProjectModal(newProject);\n }\n };\n var handleConvertToNote = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var title, content, isBookmark, _yield$import, isUrl, extractUrlTitle, timeoutPromise, result, tagObjects, newNote, _t, _t2;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n title = item.content.split('\\n')[0] || item.content.substring(0, 50);\n content = item.content;\n isBookmark = false;\n _context.p = 1;\n _context.n = 2;\n return Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../utils/urlService */ \"./frontend/utils/urlService.ts\"));\n case 2:\n _yield$import = _context.v;\n isUrl = _yield$import.isUrl;\n extractUrlTitle = _yield$import.extractUrlTitle;\n if (!isUrl(item.content.trim())) {\n _context.n = 7;\n break;\n }\n setLoading(true);\n _context.p = 3;\n // Add a timeout to prevent infinite loading\n timeoutPromise = new Promise(function (_, reject) {\n return setTimeout(function () {\n return reject(new Error('Timeout'));\n }, 10000);\n } // 10 second timeout\n );\n _context.n = 4;\n return Promise.race([extractUrlTitle(item.content.trim()), timeoutPromise]);\n case 4:\n result = _context.v;\n if (result && result.title) {\n title = result.title;\n content = item.content;\n isBookmark = true;\n }\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n console.error(\"Error extracting URL title:\", _t);\n // Continue with default title if URL title extraction fails\n // Still mark as bookmark if it's a URL\n isBookmark = true;\n case 6:\n _context.p = 6;\n setLoading(false);\n return _context.f(6);\n case 7:\n _context.n = 9;\n break;\n case 8:\n _context.p = 8;\n _t2 = _context.v;\n console.error(\"Error checking URL or extracting title:\", _t2);\n setLoading(false);\n case 9:\n // Simple array of tag objects for the note\n tagObjects = isBookmark ? [{\n name: \"bookmark\"\n }] : [];\n newNote = {\n title: title,\n content: content,\n tags: tagObjects\n };\n if (item.id !== undefined) {\n openNoteModal(newNote, item.id);\n } else {\n openNoteModal(newNote);\n }\n case 10:\n return _context.a(2);\n }\n }, _callee, null, [[3, 5, 6, 7], [1, 8]]);\n }));\n return function handleConvertToNote() {\n return _ref2.apply(this, arguments);\n };\n }();\n var formattedDate = item.created_at ? (0,date_fns__WEBPACK_IMPORTED_MODULE_4__.format)(new Date(item.created_at), 'MMM dd, yyyy HH:mm') : '';\n var handleDelete = function handleDelete() {\n setShowConfirmDialog(true);\n };\n var confirmDelete = function confirmDelete() {\n if (item.id !== undefined) {\n onDelete(item.id);\n }\n setShowConfirmDialog(false);\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"rounded-lg shadow-sm bg-white dark:bg-gray-900 mt-1\",\n onMouseEnter: function onMouseEnter() {\n return setIsHovered(true);\n },\n onMouseLeave: function onMouseLeave() {\n return setIsHovered(false);\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between px-4 py-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1 mr-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-base font-medium text-gray-900 dark:text-gray-300 break-words\"\n }, item.content, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"ml-3 text-xs text-gray-500 dark:text-gray-600\"\n }, formattedDate), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"ml-2 text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-100 rounded p-1\"\n }, item.source))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-1\"\n }, loading && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"spinner\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n if (onUpdate && item.id !== undefined) {\n onUpdate(item.id, item.content);\n }\n },\n className: \"p-2 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full transition-opacity \".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('common.edit')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleConvertToTask,\n className: \"p-2 text-blue-600 dark:text-blue-400 hover:bg-blue-100 dark:hover:bg-blue-900 rounded-full transition-opacity \".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('inbox.createTask')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleConvertToProject,\n className: \"p-2 text-green-600 dark:text-green-400 hover:bg-green-100 dark:hover:bg-green-900 rounded-full transition-opacity \".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('inbox.createProject')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleConvertToNote,\n className: \"p-2 text-purple-600 dark:text-purple-400 hover:bg-purple-100 dark:hover:bg-purple-900 rounded-full transition-opacity \".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('inbox.createNote', 'Create Note')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleDelete,\n className: \"p-2 text-red-600 dark:text-red-400 hover:bg-red-100 dark:hover:bg-red-900 rounded-full transition-opacity \".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('common.delete')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4\"\n })))), showConfirmDialog && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: t('inbox.deleteConfirmTitle', 'Delete Item'),\n message: t('inbox.deleteConfirmMessage', 'Are you sure you want to delete this inbox item? This action cannot be undone.'),\n onConfirm: confirmDelete,\n onCancel: function onCancel() {\n return setShowConfirmDialog(false);\n }\n }));\n};\n_s(InboxItemDetail, \"4/d1ksDb5mGTRs2OSm4ZrZa6oNc=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast];\n});\n_c = InboxItemDetail;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InboxItemDetail);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"InboxItemDetail\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Inbox/InboxItemDetail.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PencilIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ClipboardDocumentListIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/FolderIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/DocumentTextIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/TrashIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TagIcon.js\");\n/* harmony import */ var _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Shared/ToastContext */ \"./frontend/components/Shared/ToastContext.tsx\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\nvar InboxItemDetail = function InboxItemDetail(_ref) {\n _s();\n var item = _ref.item,\n onProcess = _ref.onProcess,\n onDelete = _ref.onDelete,\n onUpdate = _ref.onUpdate,\n openTaskModal = _ref.openTaskModal,\n openProjectModal = _ref.openProjectModal,\n openNoteModal = _ref.openNoteModal;\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n var _useToast = (0,_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast)(),\n showSuccessToast = _useToast.showSuccessToast,\n showErrorToast = _useToast.showErrorToast;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState2 = _slicedToArray(_useState, 2),\n showConfirmDialog = _useState2[0],\n setShowConfirmDialog = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n loading = _useState4[0],\n setLoading = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isHovered = _useState6[0],\n setIsHovered = _useState6[1];\n var handleConvertToTask = function handleConvertToTask() {\n var newTask = {\n name: item.content,\n status: 'not_started',\n priority: 'medium'\n };\n if (item.id !== undefined) {\n openTaskModal(newTask, item.id);\n } else {\n openTaskModal(newTask);\n }\n };\n var handleConvertToProject = function handleConvertToProject() {\n var newProject = {\n name: item.content,\n description: '',\n active: true\n };\n if (item.id !== undefined) {\n openProjectModal(newProject, item.id);\n } else {\n openProjectModal(newProject);\n }\n };\n var handleConvertToNote = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var title, content, isBookmark, _yield$import, isUrl, extractUrlTitle, timeoutPromise, result, tagObjects, newNote, _t, _t2;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n title = item.content.split('\\n')[0] || item.content.substring(0, 50);\n content = item.content;\n isBookmark = false;\n _context.p = 1;\n _context.n = 2;\n return Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../utils/urlService */ \"./frontend/utils/urlService.ts\"));\n case 2:\n _yield$import = _context.v;\n isUrl = _yield$import.isUrl;\n extractUrlTitle = _yield$import.extractUrlTitle;\n if (!isUrl(item.content.trim())) {\n _context.n = 7;\n break;\n }\n setLoading(true);\n _context.p = 3;\n // Add a timeout to prevent infinite loading\n timeoutPromise = new Promise(function (_, reject) {\n return setTimeout(function () {\n return reject(new Error('Timeout'));\n }, 10000);\n } // 10 second timeout\n );\n _context.n = 4;\n return Promise.race([extractUrlTitle(item.content.trim()), timeoutPromise]);\n case 4:\n result = _context.v;\n if (result && result.title) {\n title = result.title;\n content = item.content;\n isBookmark = true;\n }\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n console.error(\"Error extracting URL title:\", _t);\n // Continue with default title if URL title extraction fails\n // Still mark as bookmark if it's a URL\n isBookmark = true;\n case 6:\n _context.p = 6;\n setLoading(false);\n return _context.f(6);\n case 7:\n _context.n = 9;\n break;\n case 8:\n _context.p = 8;\n _t2 = _context.v;\n console.error(\"Error checking URL or extracting title:\", _t2);\n setLoading(false);\n case 9:\n // Simple array of tag objects for the note\n tagObjects = isBookmark ? [{\n name: \"bookmark\"\n }] : [];\n newNote = {\n title: title,\n content: content,\n tags: tagObjects\n };\n if (item.id !== undefined) {\n openNoteModal(newNote, item.id);\n } else {\n openNoteModal(newNote);\n }\n case 10:\n return _context.a(2);\n }\n }, _callee, null, [[3, 5, 6, 7], [1, 8]]);\n }));\n return function handleConvertToNote() {\n return _ref2.apply(this, arguments);\n };\n }();\n var handleDelete = function handleDelete() {\n setShowConfirmDialog(true);\n };\n var confirmDelete = function confirmDelete() {\n if (item.id !== undefined) {\n onDelete(item.id);\n }\n setShowConfirmDialog(false);\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"rounded-lg shadow-sm bg-white dark:bg-gray-900 mt-1\",\n onMouseEnter: function onMouseEnter() {\n return setIsHovered(true);\n },\n onMouseLeave: function onMouseLeave() {\n return setIsHovered(false);\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col sm:flex-row sm:items-center sm:justify-between px-4 py-2 gap-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-base font-medium text-gray-900 dark:text-gray-300 break-words\"\n }, item.content), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center mt-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-3 w-3 mr-1 text-gray-500 dark:text-gray-400\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, item.source))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-start space-x-1 shrink-0\"\n }, loading && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"spinner\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n if (onUpdate && item.id !== undefined) {\n onUpdate(item.id, item.content);\n }\n },\n className: \"p-2 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full transition-opacity opacity-100 sm:\".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('common.edit')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleConvertToTask,\n className: \"p-2 text-blue-600 dark:text-blue-400 hover:bg-blue-100 dark:hover:bg-blue-900 rounded-full transition-opacity opacity-100 sm:\".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('inbox.createTask')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleConvertToProject,\n className: \"p-2 text-green-600 dark:text-green-400 hover:bg-green-100 dark:hover:bg-green-900 rounded-full transition-opacity opacity-100 sm:\".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('inbox.createProject')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleConvertToNote,\n className: \"p-2 text-purple-600 dark:text-purple-400 hover:bg-purple-100 dark:hover:bg-purple-900 rounded-full transition-opacity opacity-100 sm:\".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('inbox.createNote', 'Create Note')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleDelete,\n className: \"p-2 text-red-600 dark:text-red-400 hover:bg-red-100 dark:hover:bg-red-900 rounded-full transition-opacity opacity-100 sm:\".concat(isHovered ? 'opacity-100' : 'opacity-0'),\n title: t('common.delete')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4\"\n })))), showConfirmDialog && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: t('inbox.deleteConfirmTitle', 'Delete Item'),\n message: t('inbox.deleteConfirmMessage', 'Are you sure you want to delete this inbox item? This action cannot be undone.'),\n onConfirm: confirmDelete,\n onCancel: function onCancel() {\n return setShowConfirmDialog(false);\n }\n }));\n};\n_s(InboxItemDetail, \"4/d1ksDb5mGTRs2OSm4ZrZa6oNc=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast];\n});\n_c = InboxItemDetail;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InboxItemDetail);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"InboxItemDetail\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Inbox/InboxItemDetail.tsx?"); /***/ }), @@ -159,7 +159,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_router_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/DocumentTextIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/PencilSquareIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TrashIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TagIcon.js\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* harmony import */ var _NoteModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NoteModal */ \"./frontend/components/Note/NoteModal.tsx\");\n/* harmony import */ var _Shared_MarkdownRenderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Shared/MarkdownRenderer */ \"./frontend/components/Shared/MarkdownRenderer.tsx\");\n/* harmony import */ var _utils_notesService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/notesService */ \"./frontend/utils/notesService.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\nvar NoteDetails = function NoteDetails() {\n _s();\n var _ref4, _ref5;\n var _useParams = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_5__.useParams)(),\n id = _useParams.id;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState2 = _slicedToArray(_useState, 2),\n note = _useState2[0],\n setNote = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isNoteModalOpen = _useState4[0],\n setIsNoteModalOpen = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isConfirmDialogOpen = _useState6[0],\n setIsConfirmDialogOpen = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState8 = _slicedToArray(_useState7, 2),\n noteToDelete = _useState8[0],\n setNoteToDelete = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState0 = _slicedToArray(_useState9, 2),\n isLoading = _useState0[0],\n setIsLoading = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState10 = _slicedToArray(_useState1, 2),\n isError = _useState10[0],\n setIsError = _useState10[1];\n var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_5__.useNavigate)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var fetchNote = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var notes, foundNote, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.p = 0;\n setIsLoading(true);\n _context.n = 1;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.fetchNotes)();\n case 1:\n notes = _context.v;\n foundNote = notes.find(function (n) {\n return n.id === Number(id);\n });\n setNote(foundNote || null);\n if (!foundNote) {\n setIsError(true);\n }\n _context.n = 3;\n break;\n case 2:\n _context.p = 2;\n _t = _context.v;\n setIsError(true);\n console.error('Error fetching note:', _t);\n case 3:\n _context.p = 3;\n setIsLoading(false);\n return _context.f(3);\n case 4:\n return _context.a(2);\n }\n }, _callee, null, [[0, 2, 3, 4]]);\n }));\n return function fetchNote() {\n return _ref.apply(this, arguments);\n };\n }();\n fetchNote();\n }, [id]);\n var handleDeleteNote = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (noteToDelete) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n _context2.p = 1;\n _context2.n = 2;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.deleteNote)(noteToDelete.id);\n case 2:\n navigate('/notes');\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n console.error('Error deleting note:', _t2);\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function handleDeleteNote() {\n return _ref2.apply(this, arguments);\n };\n }();\n var handleSaveNote = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(updatedNote) {\n var savedNote, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.p = 0;\n if (!(updatedNote.id !== undefined)) {\n _context3.n = 2;\n break;\n }\n _context3.n = 1;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.updateNote)(updatedNote.id, updatedNote);\n case 1:\n savedNote = _context3.v;\n setNote(savedNote);\n _context3.n = 3;\n break;\n case 2:\n console.error(\"Error: Note ID is undefined.\");\n case 3:\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n console.error('Error saving note:', _t3);\n case 5:\n setIsNoteModalOpen(false);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[0, 4]]);\n }));\n return function handleSaveNote(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n var handleEditNote = function handleEditNote() {\n setIsNoteModalOpen(true);\n };\n var handleOpenConfirmDialog = function handleOpenConfirmDialog(note) {\n setNoteToDelete(note);\n setIsConfirmDialogOpen(true);\n };\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl font-semibold text-gray-700 dark:text-gray-200\"\n }, \"Loading note details...\"));\n }\n if (isError || !note) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, isError ? 'Error loading note details.' : 'Note not found.'));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-6 w-6 text-xl mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light text-gray-900 dark:text-gray-100\"\n }, note.title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleEditNote,\n className: \"text-gray-500 hover:text-blue-700 dark:hover:text-blue-300 focus:outline-none\",\n \"aria-label\": \"Edit \".concat(note.title),\n title: \"Edit \".concat(note.title)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return handleOpenConfirmDialog(note);\n },\n className: \"text-gray-500 hover:text-red-700 dark:hover:text-red-300 focus:outline-none\",\n \"aria-label\": \"Delete \".concat(note.title),\n title: \"Delete \".concat(note.title)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-5 w-5\"\n })))), note.tags && note.tags.length > 0 || note.Tags && note.Tags.length > 0 || note.project || note.Project ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"bg-white dark:bg-gray-900 shadow-md rounded-lg p-4 mb-6\"\n }, (note.tags && note.tags.length > 0 || note.Tags && note.Tags.length > 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3 mt-0.5\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Tags:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-wrap gap-2 mt-1\"\n }, (note.tags || note.Tags || []).map(function (tag) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n key: tag.id,\n onClick: function onClick() {\n return navigate(\"/tag/\".concat(tag.id));\n },\n className: \"flex items-center space-x-1 px-2 py-1 bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200 rounded-full cursor-pointer hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors text-xs\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-3 w-3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, tag.name));\n }))))), (note.project || note.Project) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: note.tags && note.tags.length > 0 || note.Tags && note.Tags.length > 0 ? \"mt-4\" : \"\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-lg font-semibold text-gray-900 dark:text-white\"\n }, \"Project\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_10__.Link, {\n to: \"/project/\".concat((_ref4 = note.project || note.Project) === null || _ref4 === void 0 ? void 0 : _ref4.id),\n className: \"text-blue-600 dark:text-blue-400 hover:underline\"\n }, (_ref5 = note.project || note.Project) === null || _ref5 === void 0 ? void 0 : _ref5.name))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6 bg-white dark:bg-gray-900 shadow-md rounded-lg p-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_MarkdownRenderer__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n content: note.content\n })), isNoteModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_NoteModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isNoteModalOpen,\n onClose: function onClose() {\n return setIsNoteModalOpen(false);\n },\n onSave: handleSaveNote,\n note: note\n }), isConfirmDialogOpen && noteToDelete && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n title: \"Delete Note\",\n message: \"Are you sure you want to delete the note \\\"\".concat(noteToDelete.title, \"\\\"?\"),\n onConfirm: handleDeleteNote,\n onCancel: function onCancel() {\n setIsConfirmDialogOpen(false);\n setNoteToDelete(null);\n }\n })));\n};\n_s(NoteDetails, \"bY6WeCnCUShZwa24FpTJ2U/5zyI=\", false, function () {\n return [react_router_dom__WEBPACK_IMPORTED_MODULE_5__.useParams, react_router_dom__WEBPACK_IMPORTED_MODULE_5__.useNavigate];\n});\n_c = NoteDetails;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NoteDetails);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"NoteDetails\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Note/NoteDetails.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/DocumentTextIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/PencilSquareIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TrashIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TagIcon.js\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* harmony import */ var _NoteModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NoteModal */ \"./frontend/components/Note/NoteModal.tsx\");\n/* harmony import */ var _Shared_MarkdownRenderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Shared/MarkdownRenderer */ \"./frontend/components/Shared/MarkdownRenderer.tsx\");\n/* harmony import */ var _utils_notesService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/notesService */ \"./frontend/utils/notesService.ts\");\n/* harmony import */ var _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/useModalEvents */ \"./frontend/hooks/useModalEvents.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\nvar NoteDetails = function NoteDetails() {\n _s();\n var _ref4, _ref5;\n var _useParams = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useParams)(),\n id = _useParams.id;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState2 = _slicedToArray(_useState, 2),\n note = _useState2[0],\n setNote = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isNoteModalOpen = _useState4[0],\n setIsNoteModalOpen = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isConfirmDialogOpen = _useState6[0],\n setIsConfirmDialogOpen = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState8 = _slicedToArray(_useState7, 2),\n noteToDelete = _useState8[0],\n setNoteToDelete = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState0 = _slicedToArray(_useState9, 2),\n isLoading = _useState0[0],\n setIsLoading = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState10 = _slicedToArray(_useState1, 2),\n isError = _useState10[0],\n setIsError = _useState10[1];\n var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useNavigate)();\n\n // Dispatch global modal events\n (0,_hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__.useModalEvents)(isNoteModalOpen);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var fetchNote = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var notes, foundNote, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.p = 0;\n setIsLoading(true);\n _context.n = 1;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.fetchNotes)();\n case 1:\n notes = _context.v;\n foundNote = notes.find(function (n) {\n return n.id === Number(id);\n });\n setNote(foundNote || null);\n if (!foundNote) {\n setIsError(true);\n }\n _context.n = 3;\n break;\n case 2:\n _context.p = 2;\n _t = _context.v;\n setIsError(true);\n console.error('Error fetching note:', _t);\n case 3:\n _context.p = 3;\n setIsLoading(false);\n return _context.f(3);\n case 4:\n return _context.a(2);\n }\n }, _callee, null, [[0, 2, 3, 4]]);\n }));\n return function fetchNote() {\n return _ref.apply(this, arguments);\n };\n }();\n fetchNote();\n }, [id]);\n var handleDeleteNote = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (noteToDelete) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n _context2.p = 1;\n _context2.n = 2;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.deleteNote)(noteToDelete.id);\n case 2:\n navigate('/notes');\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n console.error('Error deleting note:', _t2);\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function handleDeleteNote() {\n return _ref2.apply(this, arguments);\n };\n }();\n var handleSaveNote = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(updatedNote) {\n var savedNote, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.p = 0;\n if (!(updatedNote.id !== undefined)) {\n _context3.n = 2;\n break;\n }\n _context3.n = 1;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.updateNote)(updatedNote.id, updatedNote);\n case 1:\n savedNote = _context3.v;\n setNote(savedNote);\n _context3.n = 3;\n break;\n case 2:\n console.error(\"Error: Note ID is undefined.\");\n case 3:\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n console.error('Error saving note:', _t3);\n case 5:\n setIsNoteModalOpen(false);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[0, 4]]);\n }));\n return function handleSaveNote(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n var handleEditNote = function handleEditNote() {\n setIsNoteModalOpen(true);\n };\n var handleOpenConfirmDialog = function handleOpenConfirmDialog(note) {\n setNoteToDelete(note);\n setIsConfirmDialogOpen(true);\n };\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl font-semibold text-gray-700 dark:text-gray-200\"\n }, \"Loading note details...\"));\n }\n if (isError || !note) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, isError ? 'Error loading note details.' : 'Note not found.'));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-6 w-6 text-xl mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light text-gray-900 dark:text-gray-100\"\n }, note.title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleEditNote,\n className: \"text-gray-500 hover:text-blue-700 dark:hover:text-blue-300 focus:outline-none\",\n \"aria-label\": \"Edit \".concat(note.title),\n title: \"Edit \".concat(note.title)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return handleOpenConfirmDialog(note);\n },\n className: \"text-gray-500 hover:text-red-700 dark:hover:text-red-300 focus:outline-none\",\n \"aria-label\": \"Delete \".concat(note.title),\n title: \"Delete \".concat(note.title)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-5 w-5\"\n })))), note.tags && note.tags.length > 0 || note.Tags && note.Tags.length > 0 || note.project || note.Project ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"bg-white dark:bg-gray-900 shadow-md rounded-lg p-4 mb-6\"\n }, (note.tags && note.tags.length > 0 || note.Tags && note.Tags.length > 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3 mt-0.5\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Tags:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-wrap gap-2 mt-1\"\n }, (note.tags || note.Tags || []).map(function (tag) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n key: tag.id,\n onClick: function onClick() {\n return navigate(\"/tag/\".concat(tag.id));\n },\n className: \"flex items-center space-x-1 px-2 py-1 bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200 rounded-full cursor-pointer hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors text-xs\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-3 w-3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, tag.name));\n }))))), (note.project || note.Project) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: note.tags && note.tags.length > 0 || note.Tags && note.Tags.length > 0 ? \"mt-4\" : \"\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-lg font-semibold text-gray-900 dark:text-white\"\n }, \"Project\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_11__.Link, {\n to: \"/project/\".concat((_ref4 = note.project || note.Project) === null || _ref4 === void 0 ? void 0 : _ref4.id),\n className: \"text-blue-600 dark:text-blue-400 hover:underline\"\n }, (_ref5 = note.project || note.Project) === null || _ref5 === void 0 ? void 0 : _ref5.name))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6 bg-white dark:bg-gray-900 shadow-md rounded-lg p-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_MarkdownRenderer__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n content: note.content\n })), isNoteModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_NoteModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isNoteModalOpen,\n onClose: function onClose() {\n return setIsNoteModalOpen(false);\n },\n onSave: handleSaveNote,\n note: note\n }), isConfirmDialogOpen && noteToDelete && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n title: \"Delete Note\",\n message: \"Are you sure you want to delete the note \\\"\".concat(noteToDelete.title, \"\\\"?\"),\n onConfirm: handleDeleteNote,\n onCancel: function onCancel() {\n setIsConfirmDialogOpen(false);\n setNoteToDelete(null);\n }\n })));\n};\n_s(NoteDetails, \"0MvOqpV4IJ4n2BdA7AcWKgj0/DY=\", false, function () {\n return [react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useParams, react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useNavigate, _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__.useModalEvents];\n});\n_c = NoteDetails;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NoteDetails);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"NoteDetails\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Note/NoteDetails.tsx?"); /***/ }), @@ -181,7 +181,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_router_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/BookOpenIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/MagnifyingGlassIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TagIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/PencilSquareIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TrashIcon.js\");\n/* harmony import */ var _Note_NoteModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Note/NoteModal */ \"./frontend/components/Note/NoteModal.tsx\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* harmony import */ var _utils_notesService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/notesService */ \"./frontend/utils/notesService.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\nvar Notes = function Notes() {\n _s();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_5__.useNavigate)();\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n notes = _useState2[0],\n setNotes = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState4 = _slicedToArray(_useState3, 2),\n selectedNote = _useState4[0],\n setSelectedNote = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isNoteModalOpen = _useState6[0],\n setIsNoteModalOpen = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isConfirmDialogOpen = _useState8[0],\n setIsConfirmDialogOpen = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState0 = _slicedToArray(_useState9, 2),\n noteToDelete = _useState0[0],\n setNoteToDelete = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(''),\n _useState10 = _slicedToArray(_useState1, 2),\n searchQuery = _useState10[0],\n setSearchQuery = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState12 = _slicedToArray(_useState11, 2),\n isLoading = _useState12[0],\n setIsLoading = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState14 = _slicedToArray(_useState13, 2),\n isError = _useState14[0],\n setIsError = _useState14[1];\n var _useState15 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState16 = _slicedToArray(_useState15, 2),\n hoveredNoteId = _useState16[0],\n setHoveredNoteId = _useState16[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var loadNotes = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var fetchedNotes, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n setIsLoading(true);\n _context.p = 1;\n _context.n = 2;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.fetchNotes)();\n case 2:\n fetchedNotes = _context.v;\n setNotes(fetchedNotes);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n console.error('Error loading notes:', _t);\n setIsError(true);\n case 4:\n _context.p = 4;\n setIsLoading(false);\n return _context.f(4);\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3, 4, 5]]);\n }));\n return function loadNotes() {\n return _ref.apply(this, arguments);\n };\n }();\n loadNotes();\n }, []);\n var handleDeleteNote = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (noteToDelete) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n _context2.p = 1;\n _context2.n = 2;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.deleteNote)(noteToDelete.id);\n case 2:\n setNotes(function (prev) {\n return prev.filter(function (note) {\n return note.id !== noteToDelete.id;\n });\n });\n setIsConfirmDialogOpen(false);\n setNoteToDelete(null);\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n console.error('Error deleting note:', _t2);\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function handleDeleteNote() {\n return _ref2.apply(this, arguments);\n };\n }();\n var handleEditNote = function handleEditNote(note) {\n setSelectedNote(note);\n setIsNoteModalOpen(true);\n };\n var handleSaveNote = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(noteData) {\n var updatedNotes, savedNote, newNote, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.p = 0;\n if (!noteData.id) {\n _context3.n = 2;\n break;\n }\n _context3.n = 1;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.updateNote)(noteData.id, noteData);\n case 1:\n savedNote = _context3.v;\n updatedNotes = notes.map(function (note) {\n return note.id === noteData.id ? savedNote : note;\n });\n _context3.n = 4;\n break;\n case 2:\n _context3.n = 3;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.createNote)(noteData);\n case 3:\n newNote = _context3.v;\n updatedNotes = [].concat(_toConsumableArray(notes), [newNote]);\n case 4:\n setNotes(updatedNotes);\n setIsNoteModalOpen(false);\n setSelectedNote(null);\n _context3.n = 6;\n break;\n case 5:\n _context3.p = 5;\n _t3 = _context3.v;\n console.error('Error saving note:', _t3);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[0, 5]]);\n }));\n return function handleSaveNote(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n var filteredNotes = notes.filter(function (note) {\n return note.title.toLowerCase().includes(searchQuery.toLowerCase()) || note.content.toLowerCase().includes(searchQuery.toLowerCase());\n });\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl font-semibold text-gray-700 dark:text-gray-200\"\n }, t('notes.loading')));\n }\n if (isError) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, t('notes.error')));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-8\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-6 w-6 mr-2 text-gray-900 dark:text-white\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light text-gray-900 dark:text-white\"\n }, t('notes.title')))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-700 rounded-md shadow-sm p-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-5 w-5 text-gray-500 dark:text-gray-400 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"text\",\n placeholder: t('notes.searchPlaceholder'),\n value: searchQuery,\n onChange: function onChange(e) {\n return setSearchQuery(e.target.value);\n },\n className: \"w-full bg-transparent border-none focus:ring-0 focus:outline-none dark:text-white\"\n }))), filteredNotes.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-700 dark:text-gray-300\"\n }, t('notes.noNotesFound')) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n className: \"space-y-1\"\n }, filteredNotes.map(function (note) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n key: note.id,\n className: \"bg-white dark:bg-gray-900 shadow rounded-lg px-4 py-3 flex justify-between items-center\",\n onMouseEnter: function onMouseEnter() {\n return setHoveredNoteId(note.id || null);\n },\n onMouseLeave: function onMouseLeave() {\n return setHoveredNoteId(null);\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-grow overflow-hidden pr-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center flex-wrap gap-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_8__.Link, {\n to: \"/note/\".concat(note.id),\n className: \"text-md font-semibold text-gray-900 dark:text-gray-100 hover:underline\"\n }, note.title), (note.tags && note.tags.length > 0 || note.Tags && note.Tags.length > 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, (note.tags || note.Tags || []).map(function (tag) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n key: tag.id,\n onClick: function onClick(e) {\n e.preventDefault();\n navigate(\"/tag/\".concat(tag.id));\n },\n className: \"flex items-center space-x-1 px-2 py-0.5 bg-gray-100 dark:bg-gray-700 rounded text-xs cursor-pointer hover:bg-gray-200 dark:hover:bg-gray-600 transition-colors\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-3 w-3 text-gray-500 dark:text-gray-300\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-gray-700 dark:text-gray-300\"\n }, tag.name));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return handleEditNote(note);\n },\n className: \"text-gray-500 hover:text-blue-700 dark:hover:text-blue-300 focus:outline-none transition-opacity \".concat(hoveredNoteId === note.id ? 'opacity-100' : 'opacity-0'),\n \"aria-label\": t('notes.editNoteAriaLabel', {\n noteTitle: note.title\n }),\n title: t('notes.editNoteTitle', {\n noteTitle: note.title\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n setNoteToDelete(note);\n setIsConfirmDialogOpen(true);\n },\n className: \"text-gray-500 hover:text-red-700 dark:hover:text-red-300 focus:outline-none transition-opacity \".concat(hoveredNoteId === note.id ? 'opacity-100' : 'opacity-0'),\n \"aria-label\": t('notes.deleteNoteAriaLabel', {\n noteTitle: note.title\n }),\n title: t('notes.deleteNoteTitle', {\n noteTitle: note.title\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"h-5 w-5\"\n }))));\n })), isNoteModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Note_NoteModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isNoteModalOpen,\n onClose: function onClose() {\n return setIsNoteModalOpen(false);\n },\n onSave: handleSaveNote,\n note: selectedNote\n }), isConfirmDialogOpen && noteToDelete && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: t('modals.deleteNote.title'),\n message: t('modals.deleteNote.message', {\n noteTitle: noteToDelete.title\n }),\n onConfirm: handleDeleteNote,\n onCancel: function onCancel() {\n return setIsConfirmDialogOpen(false);\n }\n })));\n};\n_s(Notes, \"BMW6ZxYgLLkIcPmmxwxtCmF/lVQ=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, react_router_dom__WEBPACK_IMPORTED_MODULE_5__.useNavigate];\n});\n_c = Notes;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notes);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"Notes\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Notes.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/BookOpenIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/MagnifyingGlassIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TagIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/PencilSquareIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TrashIcon.js\");\n/* harmony import */ var _Note_NoteModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Note/NoteModal */ \"./frontend/components/Note/NoteModal.tsx\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* harmony import */ var _utils_notesService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/notesService */ \"./frontend/utils/notesService.ts\");\n/* harmony import */ var _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../hooks/useModalEvents */ \"./frontend/hooks/useModalEvents.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\nvar Notes = function Notes() {\n _s();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useNavigate)();\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n notes = _useState2[0],\n setNotes = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState4 = _slicedToArray(_useState3, 2),\n selectedNote = _useState4[0],\n setSelectedNote = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isNoteModalOpen = _useState6[0],\n setIsNoteModalOpen = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isConfirmDialogOpen = _useState8[0],\n setIsConfirmDialogOpen = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState0 = _slicedToArray(_useState9, 2),\n noteToDelete = _useState0[0],\n setNoteToDelete = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(''),\n _useState10 = _slicedToArray(_useState1, 2),\n searchQuery = _useState10[0],\n setSearchQuery = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState12 = _slicedToArray(_useState11, 2),\n isLoading = _useState12[0],\n setIsLoading = _useState12[1];\n\n // Dispatch global modal events\n (0,_hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__.useModalEvents)(isNoteModalOpen);\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState14 = _slicedToArray(_useState13, 2),\n isError = _useState14[0],\n setIsError = _useState14[1];\n var _useState15 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState16 = _slicedToArray(_useState15, 2),\n hoveredNoteId = _useState16[0],\n setHoveredNoteId = _useState16[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var loadNotes = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var fetchedNotes, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n setIsLoading(true);\n _context.p = 1;\n _context.n = 2;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.fetchNotes)();\n case 2:\n fetchedNotes = _context.v;\n setNotes(fetchedNotes);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n console.error('Error loading notes:', _t);\n setIsError(true);\n case 4:\n _context.p = 4;\n setIsLoading(false);\n return _context.f(4);\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3, 4, 5]]);\n }));\n return function loadNotes() {\n return _ref.apply(this, arguments);\n };\n }();\n loadNotes();\n }, []);\n var handleDeleteNote = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (noteToDelete) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n _context2.p = 1;\n _context2.n = 2;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.deleteNote)(noteToDelete.id);\n case 2:\n setNotes(function (prev) {\n return prev.filter(function (note) {\n return note.id !== noteToDelete.id;\n });\n });\n setIsConfirmDialogOpen(false);\n setNoteToDelete(null);\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n console.error('Error deleting note:', _t2);\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function handleDeleteNote() {\n return _ref2.apply(this, arguments);\n };\n }();\n var handleEditNote = function handleEditNote(note) {\n setSelectedNote(note);\n setIsNoteModalOpen(true);\n };\n var handleSaveNote = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(noteData) {\n var updatedNotes, savedNote, newNote, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.p = 0;\n if (!noteData.id) {\n _context3.n = 2;\n break;\n }\n _context3.n = 1;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.updateNote)(noteData.id, noteData);\n case 1:\n savedNote = _context3.v;\n updatedNotes = notes.map(function (note) {\n return note.id === noteData.id ? savedNote : note;\n });\n _context3.n = 4;\n break;\n case 2:\n _context3.n = 3;\n return (0,_utils_notesService__WEBPACK_IMPORTED_MODULE_4__.createNote)(noteData);\n case 3:\n newNote = _context3.v;\n updatedNotes = [].concat(_toConsumableArray(notes), [newNote]);\n case 4:\n setNotes(updatedNotes);\n setIsNoteModalOpen(false);\n setSelectedNote(null);\n _context3.n = 6;\n break;\n case 5:\n _context3.p = 5;\n _t3 = _context3.v;\n console.error('Error saving note:', _t3);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[0, 5]]);\n }));\n return function handleSaveNote(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n var filteredNotes = notes.filter(function (note) {\n return note.title.toLowerCase().includes(searchQuery.toLowerCase()) || note.content.toLowerCase().includes(searchQuery.toLowerCase());\n });\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl font-semibold text-gray-700 dark:text-gray-200\"\n }, t('notes.loading')));\n }\n if (isError) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, t('notes.error')));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-8\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-6 w-6 mr-2 text-gray-900 dark:text-white\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light text-gray-900 dark:text-white\"\n }, t('notes.title')))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-700 rounded-md shadow-sm p-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-5 w-5 text-gray-500 dark:text-gray-400 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"text\",\n placeholder: t('notes.searchPlaceholder'),\n value: searchQuery,\n onChange: function onChange(e) {\n return setSearchQuery(e.target.value);\n },\n className: \"w-full bg-transparent border-none focus:ring-0 focus:outline-none dark:text-white\"\n }))), filteredNotes.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-700 dark:text-gray-300\"\n }, t('notes.noNotesFound')) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n className: \"space-y-1\"\n }, filteredNotes.map(function (note) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n key: note.id,\n className: \"bg-white dark:bg-gray-900 shadow rounded-lg px-4 py-3 flex justify-between items-center\",\n onMouseEnter: function onMouseEnter() {\n return setHoveredNoteId(note.id || null);\n },\n onMouseLeave: function onMouseLeave() {\n return setHoveredNoteId(null);\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-grow overflow-hidden pr-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center flex-wrap gap-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_9__.Link, {\n to: \"/note/\".concat(note.id),\n className: \"text-md font-semibold text-gray-900 dark:text-gray-100 hover:underline\"\n }, note.title), (note.tags && note.tags.length > 0 || note.Tags && note.Tags.length > 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, (note.tags || note.Tags || []).map(function (tag) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n key: tag.id,\n onClick: function onClick(e) {\n e.preventDefault();\n navigate(\"/tag/\".concat(tag.id));\n },\n className: \"flex items-center space-x-1 px-2 py-0.5 bg-gray-100 dark:bg-gray-700 rounded text-xs cursor-pointer hover:bg-gray-200 dark:hover:bg-gray-600 transition-colors\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-3 w-3 text-gray-500 dark:text-gray-300\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-gray-700 dark:text-gray-300\"\n }, tag.name));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return handleEditNote(note);\n },\n className: \"text-gray-500 hover:text-blue-700 dark:hover:text-blue-300 focus:outline-none transition-opacity \".concat(hoveredNoteId === note.id ? 'opacity-100' : 'opacity-0'),\n \"aria-label\": t('notes.editNoteAriaLabel', {\n noteTitle: note.title\n }),\n title: t('notes.editNoteTitle', {\n noteTitle: note.title\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n setNoteToDelete(note);\n setIsConfirmDialogOpen(true);\n },\n className: \"text-gray-500 hover:text-red-700 dark:hover:text-red-300 focus:outline-none transition-opacity \".concat(hoveredNoteId === note.id ? 'opacity-100' : 'opacity-0'),\n \"aria-label\": t('notes.deleteNoteAriaLabel', {\n noteTitle: note.title\n }),\n title: t('notes.deleteNoteTitle', {\n noteTitle: note.title\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"h-5 w-5\"\n }))));\n })), isNoteModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Note_NoteModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isNoteModalOpen,\n onClose: function onClose() {\n return setIsNoteModalOpen(false);\n },\n onSave: handleSaveNote,\n note: selectedNote\n }), isConfirmDialogOpen && noteToDelete && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: t('modals.deleteNote.title'),\n message: t('modals.deleteNote.message', {\n noteTitle: noteToDelete.title\n }),\n onConfirm: handleDeleteNote,\n onCancel: function onCancel() {\n return setIsConfirmDialogOpen(false);\n }\n })));\n};\n_s(Notes, \"F5OyVLU548TfYnuTy0YCPJQ0nko=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useNavigate, _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__.useModalEvents];\n});\n_c = Notes;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notes);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"Notes\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Notes.tsx?"); /***/ }), @@ -225,7 +225,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_router_dom__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Shared/ToastContext */ \"./frontend/components/Shared/ToastContext.tsx\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PencilSquareIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/TrashIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/Squares2X2Icon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/FolderIcon.js\");\n/* harmony import */ var _Task_TaskList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Task/TaskList */ \"./frontend/components/Task/TaskList.tsx\");\n/* harmony import */ var _Project_ProjectModal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Project/ProjectModal */ \"./frontend/components/Project/ProjectModal.tsx\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* harmony import */ var _store_useStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../store/useStore */ \"./frontend/store/useStore.ts\");\n/* harmony import */ var _Task_NewTask__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Task/NewTask */ \"./frontend/components/Task/NewTask.tsx\");\n/* harmony import */ var _utils_projectsService__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/projectsService */ \"./frontend/utils/projectsService.ts\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _utils_areasService__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/areasService */ \"./frontend/utils/areasService.ts\");\n/* harmony import */ var _utils_authUtils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/authUtils */ \"./frontend/utils/authUtils.ts\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/InformationCircleIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/CalendarDaysIcon.js\");\n/* harmony import */ var _utils_profileService__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/profileService */ \"./frontend/utils/profileService.ts\");\n/* harmony import */ var _AutoSuggestNextActionBox__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./AutoSuggestNextActionBox */ \"./frontend/components/Project/AutoSuggestNextActionBox.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar priorityStyles = {\n high: 'bg-red-500',\n medium: 'bg-yellow-500',\n low: 'bg-green-500',\n \"default\": 'bg-gray-400'\n};\nvar ProjectDetails = function ProjectDetails() {\n _s();\n var _useParams = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_14__.useParams)(),\n id = _useParams.id;\n var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_14__.useNavigate)();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t,\n i18n = _useTranslation.i18n;\n var _useToast = (0,_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast)(),\n showSuccessToast = _useToast.showSuccessToast;\n var areas = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_6__.useStore)(function (state) {\n return state.areasStore.areas;\n });\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined),\n _useState2 = _slicedToArray(_useState, 2),\n project = _useState2[0],\n setProject = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState4 = _slicedToArray(_useState3, 2),\n tasks = _useState4[0],\n setTasks = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState6 = _slicedToArray(_useState5, 2),\n loading = _useState6[0],\n setLoading = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState8 = _slicedToArray(_useState7, 2),\n error = _useState8[0],\n setError = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isModalOpen = _useState0[0],\n setIsModalOpen = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState10 = _slicedToArray(_useState1, 2),\n isConfirmDialogOpen = _useState10[0],\n setIsConfirmDialogOpen = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState12 = _slicedToArray(_useState11, 2),\n showCompleted = _useState12[0],\n setShowCompleted = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState14 = _slicedToArray(_useState13, 2),\n showAutoSuggestForm = _useState14[0],\n setShowAutoSuggestForm = _useState14[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var loadProjectData = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var projectData, projectTasks, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n if (id) {\n _context.n = 1;\n break;\n }\n console.error(\"Project ID is missing.\");\n return _context.a(2);\n case 1:\n setLoading(true);\n _context.p = 2;\n (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_10__.fetchAreas)();\n _context.n = 3;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_8__.fetchProjectById)(id);\n case 3:\n projectData = _context.v;\n setProject(projectData);\n // Handle both 'tasks' and 'Tasks' property names\n projectTasks = projectData.tasks || projectData.Tasks || [];\n setTasks(projectTasks);\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n console.error(\"Error fetching project data:\", _t);\n case 5:\n _context.p = 5;\n setLoading(false);\n return _context.f(5);\n case 6:\n return _context.a(2);\n }\n }, _callee, null, [[2, 4, 5, 6]]);\n }));\n return function loadProjectData() {\n return _ref.apply(this, arguments);\n };\n }();\n loadProjectData();\n }, [id, _utils_areasService__WEBPACK_IMPORTED_MODULE_10__.fetchAreas]);\n\n // Check if we should show auto-suggest form for projects with no tasks\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var checkAutoSuggest = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var autoSuggestEnabled;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!(project && tasks.length === 0 && !loading)) {\n _context2.n = 2;\n break;\n }\n _context2.n = 1;\n return (0,_utils_profileService__WEBPACK_IMPORTED_MODULE_12__.getAutoSuggestNextActionsEnabled)();\n case 1:\n autoSuggestEnabled = _context2.v;\n if (autoSuggestEnabled) {\n setShowAutoSuggestForm(true);\n }\n case 2:\n return _context2.a(2);\n }\n }, _callee2);\n }));\n return function checkAutoSuggest() {\n return _ref2.apply(this, arguments);\n };\n }();\n checkAutoSuggest();\n }, [project, tasks, loading]);\n var handleTaskCreate = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(taskName) {\n var newTask, taskLink, _t2;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n if (project) {\n _context3.n = 1;\n break;\n }\n console.error(\"Cannot create task: Project is missing\");\n throw new Error(\"Cannot create task: Project is missing\");\n case 1:\n _context3.p = 1;\n _context3.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.createTask)({\n name: taskName,\n status: \"not_started\",\n project_id: project.id\n });\n case 2:\n newTask = _context3.v;\n setTasks(function (prevTasks) {\n return [].concat(_toConsumableArray(prevTasks), [newTask]);\n });\n\n // Show success toast with task link\n taskLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, t('task.created', 'Task'), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/task/\".concat(newTask.uuid),\n className: \"text-green-200 underline hover:text-green-100\"\n }, newTask.name), \" \", t('task.createdSuccessfully', 'created successfully!'));\n showSuccessToast(taskLink);\n _context3.n = 5;\n break;\n case 3:\n _context3.p = 3;\n _t2 = _context3.v;\n console.error(\"Error creating task:\", _t2);\n // Check if it's an authentication error\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_11__.isAuthError)(_t2)) {\n _context3.n = 4;\n break;\n }\n return _context3.a(2);\n case 4:\n throw _t2;\n case 5:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 3]]);\n }));\n return function handleTaskCreate(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n var handleTaskUpdate = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(updatedTask) {\n var _t3;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n if (updatedTask.id) {\n _context4.n = 1;\n break;\n }\n console.error(\"Cannot update task: Task ID is missing\");\n return _context4.a(2);\n case 1:\n _context4.p = 1;\n _context4.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.updateTask)(updatedTask.id, updatedTask);\n case 2:\n setTasks(function (prevTasks) {\n return prevTasks.map(function (task) {\n return task.id === updatedTask.id ? updatedTask : task;\n });\n });\n _context4.n = 4;\n break;\n case 3:\n _context4.p = 3;\n _t3 = _context4.v;\n console.error(\"Error updating task:\", _t3);\n case 4:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 3]]);\n }));\n return function handleTaskUpdate(_x2) {\n return _ref4.apply(this, arguments);\n };\n }();\n var handleTaskDelete = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(taskId) {\n var _t4;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n if (taskId) {\n _context5.n = 1;\n break;\n }\n console.error(\"Cannot delete task: Task ID is missing\");\n return _context5.a(2);\n case 1:\n _context5.p = 1;\n _context5.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.deleteTask)(taskId);\n case 2:\n setTasks(function (prevTasks) {\n return prevTasks.filter(function (task) {\n return task.id !== taskId;\n });\n });\n _context5.n = 4;\n break;\n case 3:\n _context5.p = 3;\n _t4 = _context5.v;\n console.error(\"Error deleting task:\", _t4);\n case 4:\n return _context5.a(2);\n }\n }, _callee5, null, [[1, 3]]);\n }));\n return function handleTaskDelete(_x3) {\n return _ref5.apply(this, arguments);\n };\n }();\n var handleToggleToday = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(taskId) {\n var updatedTask, updatedProject, _t5, _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n _context6.p = 0;\n _context6.n = 1;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.toggleTaskToday)(taskId);\n case 1:\n updatedTask = _context6.v;\n // Update the task in the local state immediately to avoid UI flashing\n setTasks(function (prevTasks) {\n return prevTasks.map(function (task) {\n return task.id === taskId ? _objectSpread(_objectSpread({}, task), {}, {\n today: updatedTask.today,\n today_move_count: updatedTask.today_move_count\n }) : task;\n });\n });\n _context6.n = 6;\n break;\n case 2:\n _context6.p = 2;\n _t5 = _context6.v;\n console.error(\"Error toggling task today status:\", _t5);\n // Optionally refetch data on error to ensure consistency\n if (!id) {\n _context6.n = 6;\n break;\n }\n _context6.p = 3;\n _context6.n = 4;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_8__.fetchProjectById)(id);\n case 4:\n updatedProject = _context6.v;\n setProject(updatedProject);\n setTasks(updatedProject.tasks || []);\n _context6.n = 6;\n break;\n case 5:\n _context6.p = 5;\n _t6 = _context6.v;\n console.error(\"Error refetching project data:\", _t6);\n case 6:\n return _context6.a(2);\n }\n }, _callee6, null, [[3, 5], [0, 2]]);\n }));\n return function handleToggleToday(_x4) {\n return _ref6.apply(this, arguments);\n };\n }();\n var handleEditProject = function handleEditProject() {\n setIsModalOpen(true);\n };\n var handleSaveProject = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(updatedProject) {\n var savedProject, _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n if (updatedProject.id) {\n _context7.n = 1;\n break;\n }\n console.error(\"Cannot save project: Project ID is missing\");\n return _context7.a(2);\n case 1:\n _context7.p = 1;\n _context7.n = 2;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_8__.updateProject)(updatedProject.id, updatedProject);\n case 2:\n savedProject = _context7.v;\n setProject(savedProject);\n setIsModalOpen(false);\n _context7.n = 4;\n break;\n case 3:\n _context7.p = 3;\n _t7 = _context7.v;\n console.error(\"Error saving project:\", _t7);\n case 4:\n return _context7.a(2);\n }\n }, _callee7, null, [[1, 3]]);\n }));\n return function handleSaveProject(_x5) {\n return _ref7.apply(this, arguments);\n };\n }();\n var handleCreateNextAction = /*#__PURE__*/function () {\n var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(projectId, actionDescription) {\n var newTask, taskLink, _t8;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n _context8.p = 0;\n _context8.n = 1;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.createTask)({\n name: actionDescription,\n status: \"not_started\",\n project_id: projectId,\n priority: \"medium\"\n });\n case 1:\n newTask = _context8.v;\n // Update the tasks list to include the new task\n setTasks(function (prevTasks) {\n return [].concat(_toConsumableArray(prevTasks), [newTask]);\n });\n setShowAutoSuggestForm(false);\n\n // Show success toast with task link\n taskLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, t('task.created', 'Task'), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/task/\".concat(newTask.uuid),\n className: \"text-green-200 underline hover:text-green-100\"\n }, newTask.name), \" \", t('task.createdSuccessfully', 'created successfully!'));\n showSuccessToast(taskLink);\n _context8.n = 3;\n break;\n case 2:\n _context8.p = 2;\n _t8 = _context8.v;\n console.error(\"Error creating next action:\", _t8);\n case 3:\n return _context8.a(2);\n }\n }, _callee8, null, [[0, 2]]);\n }));\n return function handleCreateNextAction(_x6, _x7) {\n return _ref8.apply(this, arguments);\n };\n }();\n var handleSkipNextAction = function handleSkipNextAction() {\n setShowAutoSuggestForm(false);\n };\n var handleDeleteProject = /*#__PURE__*/function () {\n var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var _t9;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.n) {\n case 0:\n if (project !== null && project !== void 0 && project.id) {\n _context9.n = 1;\n break;\n }\n console.error(\"Cannot delete project: Project ID is missing\");\n return _context9.a(2);\n case 1:\n _context9.p = 1;\n _context9.n = 2;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_8__.deleteProject)(project.id);\n case 2:\n navigate(\"/projects\");\n _context9.n = 4;\n break;\n case 3:\n _context9.p = 3;\n _t9 = _context9.v;\n console.error(\"Error deleting project:\", _t9);\n case 4:\n return _context9.a(2);\n }\n }, _callee9, null, [[1, 3]]);\n }));\n return function handleDeleteProject() {\n return _ref9.apply(this, arguments);\n };\n }();\n if (loading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl font-semibold text-gray-700 dark:text-gray-200\"\n }, \"Loading project details...\"));\n }\n if (error) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, error));\n }\n if (!project) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, \"Project not found.\"));\n }\n var activeTasks = (tasks === null || tasks === void 0 ? void 0 : tasks.filter(function (task) {\n return typeof task.status === 'number' ? task.status !== 2 : task.status !== 'done';\n })) || []; //TODO: Also add archived\n var completedTasks = tasks === null || tasks === void 0 ? void 0 : tasks.filter(function (task) {\n return typeof task.status === 'number' ? task.status === 2 : task.status === 'done';\n });\n var displayTasks = showCompleted ? [].concat(_toConsumableArray(activeTasks), _toConsumableArray(completedTasks)) : activeTasks;\n var formatProjectDueDate = function formatProjectDueDate(dateString) {\n var date = new Date(dateString);\n var currentLang = i18n.language;\n\n // Format based on language\n var formatOptions = {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n };\n return date.toLocaleDateString(currentLang, formatOptions);\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl\"\n }, project.image_url && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6 rounded-lg overflow-hidden relative\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n src: project.image_url,\n alt: project.name,\n className: \"w-full h-48 object-cover\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"absolute inset-0 bg-black bg-opacity-40 flex items-center justify-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h1\", {\n className: \"text-4xl md:text-5xl font-bold text-white text-center px-4 drop-shadow-lg\"\n }, project.name)), project.priority !== undefined && project.priority !== null && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"absolute top-3 left-3\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-4 h-4 rounded-full border-2 border-white shadow-lg \".concat(getPriorityStyle(project.priority)),\n title: \"Priority: \".concat(priorityLabel(project.priority)),\n \"aria-label\": \"Priority: \".concat(priorityLabel(project.priority))\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"absolute bottom-4 right-4 flex space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleEditProject,\n className: \"p-2 bg-black bg-opacity-50 text-white hover:bg-opacity-70 rounded-full transition-all duration-200 backdrop-blur-sm\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setIsConfirmDialogOpen(true);\n },\n className: \"p-2 bg-black bg-opacity-50 text-white hover:bg-opacity-70 rounded-full transition-all duration-200 backdrop-blur-sm\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"h-5 w-5\"\n })))), (project.description || project.area || project.due_date_at || project.tags && project.tags.length > 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6 p-4 bg-gray-50 dark:bg-gray-800/50 border border-gray-200 dark:border-gray-700 rounded-lg\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"grid gap-3\"\n }, project.description && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3 mt-0.5 flex-shrink-0\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Description:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm text-gray-900 dark:text-gray-100 leading-relaxed mt-1\"\n }, project.description))), project.area && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Area:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-900 dark:text-gray-100 bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded\"\n }, project.area.name)), project.due_date_at && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Due Date:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-900 dark:text-gray-100\"\n }, formatProjectDueDate(project.due_date_at))), project.tags && project.tags.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3 mt-0.5\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n fill: \"currentColor\",\n viewBox: \"0 0 20 20\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M17.707 9.293a1 1 0 010 1.414l-7 7a1 1 0 01-1.414 0l-7-7A.997.997 0 012 10V5a3 3 0 013-3h5c.256 0 .512.098.707.293l7 7zM5 6a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Tags:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-wrap gap-1 mt-1\"\n }, project.tags.map(function (tag, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n key: index,\n onClick: function onClick() {\n return navigate(\"/tag/\".concat(tag.id));\n },\n className: \"inline-block px-2 py-1 text-xs bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200 rounded-full cursor-pointer hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors\"\n }, tag.name);\n })))))), !project.image_url && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-8\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"h-6 w-6 text-gray-500 mr-3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light text-gray-900 dark:text-gray-100 mr-2\"\n }, project.name), project.priority !== undefined && project.priority !== null && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-4 h-4 rounded-full border-2 border-white dark:border-gray-800 \".concat(getPriorityStyle(project.priority)),\n title: \"Priority: \".concat(priorityLabel(project.priority)),\n \"aria-label\": \"Priority: \".concat(priorityLabel(project.priority))\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleEditProject,\n className: \"text-gray-500 hover:text-blue-700 dark:hover:text-blue-300 focus:outline-none\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setIsConfirmDialogOpen(true);\n },\n className: \"text-gray-500 hover:text-red-700 dark:hover:text-red-300 focus:outline-none\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"h-5 w-5\"\n })))), !showAutoSuggestForm && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-lg font-medium text-gray-900 dark:text-gray-100\"\n }, t('sidebar.tasks', 'Tasks')), completedTasks.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"flex items-center space-x-2 cursor-pointer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-600 dark:text-gray-400\"\n }, \"Show completed\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"relative flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"checkbox\",\n checked: showCompleted,\n onChange: function onChange(e) {\n return setShowCompleted(e.target.checked);\n },\n className: \"sr-only\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-10 h-5 rounded-full transition-colors \".concat(showCompleted ? 'bg-blue-500' : 'bg-gray-300 dark:bg-gray-600')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-4 h-4 bg-white rounded-full shadow-md transform transition-transform duration-200 ease-in-out \".concat(showCompleted ? 'translate-x-5' : 'translate-x-0.5', \" translate-y-0.5\")\n }))))), !showAutoSuggestForm && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Task_NewTask__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onTaskCreate: handleTaskCreate\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-2\"\n }, displayTasks.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Task_TaskList__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tasks: displayTasks,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n projects: project ? [project] : [],\n hideProjectName: true,\n onToggleToday: handleToggleToday\n }) : showAutoSuggestForm ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AutoSuggestNextActionBox__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onAddAction: function onAddAction(actionDescription) {\n if (project !== null && project !== void 0 && project.id) {\n handleCreateNextAction(project.id, actionDescription);\n }\n },\n onDismiss: handleSkipNextAction,\n projectName: (project === null || project === void 0 ? void 0 : project.name) || \"\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-500 dark:text-gray-400\"\n }, \"No tasks.\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Project_ProjectModal__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n isOpen: isModalOpen,\n onClose: function onClose() {\n return setIsModalOpen(false);\n },\n onSave: handleSaveProject,\n project: project,\n areas: areas\n }), isConfirmDialogOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"Delete Project\",\n message: \"Are you sure you want to delete the project \\\"\".concat(project.name, \"\\\"?\"),\n onConfirm: handleDeleteProject,\n onCancel: function onCancel() {\n return setIsConfirmDialogOpen(false);\n }\n })));\n};\n_s(ProjectDetails, \"gxqgyxSOnoYNM9owB1G/Rdxoqiw=\", false, function () {\n return [react_router_dom__WEBPACK_IMPORTED_MODULE_14__.useParams, react_router_dom__WEBPACK_IMPORTED_MODULE_14__.useNavigate, react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast, _store_useStore__WEBPACK_IMPORTED_MODULE_6__.useStore];\n});\n_c = ProjectDetails;\nvar priorityLabel = function priorityLabel(priority) {\n // Handle both string and numeric priorities\n var normalizedPriority = typeof priority === 'number' ? ['low', 'medium', 'high'][priority] : priority;\n switch (normalizedPriority) {\n case 'high':\n return 'High';\n case 'medium':\n return 'Medium';\n case 'low':\n return 'Low';\n default:\n return '';\n }\n};\nvar getPriorityStyle = function getPriorityStyle(priority) {\n // Handle both string and numeric priorities\n var normalizedPriority = typeof priority === 'number' ? ['low', 'medium', 'high'][priority] : priority;\n return priorityStyles[normalizedPriority] || priorityStyles[\"default\"];\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProjectDetails);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"ProjectDetails\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Project/ProjectDetails.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 react_router_dom__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Shared/ToastContext */ \"./frontend/components/Shared/ToastContext.tsx\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PencilSquareIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/TrashIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/Squares2X2Icon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/FolderIcon.js\");\n/* harmony import */ var _Task_TaskList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Task/TaskList */ \"./frontend/components/Task/TaskList.tsx\");\n/* harmony import */ var _Project_ProjectModal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Project/ProjectModal */ \"./frontend/components/Project/ProjectModal.tsx\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* harmony import */ var _store_useStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../store/useStore */ \"./frontend/store/useStore.ts\");\n/* harmony import */ var _Task_NewTask__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Task/NewTask */ \"./frontend/components/Task/NewTask.tsx\");\n/* harmony import */ var _utils_projectsService__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/projectsService */ \"./frontend/utils/projectsService.ts\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _utils_areasService__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/areasService */ \"./frontend/utils/areasService.ts\");\n/* harmony import */ var _utils_authUtils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/authUtils */ \"./frontend/utils/authUtils.ts\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/InformationCircleIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/CalendarDaysIcon.js\");\n/* harmony import */ var _utils_profileService__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/profileService */ \"./frontend/utils/profileService.ts\");\n/* harmony import */ var _AutoSuggestNextActionBox__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./AutoSuggestNextActionBox */ \"./frontend/components/Project/AutoSuggestNextActionBox.tsx\");\n/* harmony import */ var _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../hooks/useModalEvents */ \"./frontend/hooks/useModalEvents.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar priorityStyles = {\n high: 'bg-red-500',\n medium: 'bg-yellow-500',\n low: 'bg-green-500',\n \"default\": 'bg-gray-400'\n};\nvar ProjectDetails = function ProjectDetails() {\n _s();\n var _useParams = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_15__.useParams)(),\n id = _useParams.id;\n var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_15__.useNavigate)();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t,\n i18n = _useTranslation.i18n;\n var _useToast = (0,_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast)(),\n showSuccessToast = _useToast.showSuccessToast;\n var areas = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_6__.useStore)(function (state) {\n return state.areasStore.areas;\n });\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined),\n _useState2 = _slicedToArray(_useState, 2),\n project = _useState2[0],\n setProject = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState4 = _slicedToArray(_useState3, 2),\n tasks = _useState4[0],\n setTasks = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState6 = _slicedToArray(_useState5, 2),\n loading = _useState6[0],\n setLoading = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState8 = _slicedToArray(_useState7, 2),\n error = _useState8[0],\n setError = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isModalOpen = _useState0[0],\n setIsModalOpen = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState10 = _slicedToArray(_useState1, 2),\n isConfirmDialogOpen = _useState10[0],\n setIsConfirmDialogOpen = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState12 = _slicedToArray(_useState11, 2),\n showCompleted = _useState12[0],\n setShowCompleted = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState14 = _slicedToArray(_useState13, 2),\n showAutoSuggestForm = _useState14[0],\n setShowAutoSuggestForm = _useState14[1];\n\n // Dispatch global modal events\n (0,_hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_14__.useModalEvents)(isModalOpen);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var loadProjectData = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var projectData, projectTasks, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n if (id) {\n _context.n = 1;\n break;\n }\n console.error(\"Project ID is missing.\");\n return _context.a(2);\n case 1:\n setLoading(true);\n _context.p = 2;\n (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_10__.fetchAreas)();\n _context.n = 3;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_8__.fetchProjectById)(id);\n case 3:\n projectData = _context.v;\n setProject(projectData);\n // Handle both 'tasks' and 'Tasks' property names\n projectTasks = projectData.tasks || projectData.Tasks || [];\n setTasks(projectTasks);\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n console.error(\"Error fetching project data:\", _t);\n case 5:\n _context.p = 5;\n setLoading(false);\n return _context.f(5);\n case 6:\n return _context.a(2);\n }\n }, _callee, null, [[2, 4, 5, 6]]);\n }));\n return function loadProjectData() {\n return _ref.apply(this, arguments);\n };\n }();\n loadProjectData();\n }, [id, _utils_areasService__WEBPACK_IMPORTED_MODULE_10__.fetchAreas]);\n\n // Check if we should show auto-suggest form for projects with no tasks\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var checkAutoSuggest = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var autoSuggestEnabled;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!(project && tasks.length === 0 && !loading)) {\n _context2.n = 2;\n break;\n }\n _context2.n = 1;\n return (0,_utils_profileService__WEBPACK_IMPORTED_MODULE_12__.getAutoSuggestNextActionsEnabled)();\n case 1:\n autoSuggestEnabled = _context2.v;\n if (autoSuggestEnabled) {\n setShowAutoSuggestForm(true);\n }\n case 2:\n return _context2.a(2);\n }\n }, _callee2);\n }));\n return function checkAutoSuggest() {\n return _ref2.apply(this, arguments);\n };\n }();\n checkAutoSuggest();\n }, [project, tasks, loading]);\n var handleTaskCreate = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(taskName) {\n var newTask, taskLink, _t2;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n if (project) {\n _context3.n = 1;\n break;\n }\n console.error(\"Cannot create task: Project is missing\");\n throw new Error(\"Cannot create task: Project is missing\");\n case 1:\n _context3.p = 1;\n _context3.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.createTask)({\n name: taskName,\n status: \"not_started\",\n project_id: project.id\n });\n case 2:\n newTask = _context3.v;\n setTasks(function (prevTasks) {\n return [].concat(_toConsumableArray(prevTasks), [newTask]);\n });\n\n // Show success toast with task link\n taskLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, t('task.created', 'Task'), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/task/\".concat(newTask.uuid),\n className: \"text-green-200 underline hover:text-green-100\"\n }, newTask.name), \" \", t('task.createdSuccessfully', 'created successfully!'));\n showSuccessToast(taskLink);\n _context3.n = 5;\n break;\n case 3:\n _context3.p = 3;\n _t2 = _context3.v;\n console.error(\"Error creating task:\", _t2);\n // Check if it's an authentication error\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_11__.isAuthError)(_t2)) {\n _context3.n = 4;\n break;\n }\n return _context3.a(2);\n case 4:\n throw _t2;\n case 5:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 3]]);\n }));\n return function handleTaskCreate(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n var handleTaskUpdate = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(updatedTask) {\n var _t3;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n if (updatedTask.id) {\n _context4.n = 1;\n break;\n }\n console.error(\"Cannot update task: Task ID is missing\");\n return _context4.a(2);\n case 1:\n _context4.p = 1;\n _context4.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.updateTask)(updatedTask.id, updatedTask);\n case 2:\n setTasks(function (prevTasks) {\n return prevTasks.map(function (task) {\n return task.id === updatedTask.id ? updatedTask : task;\n });\n });\n _context4.n = 4;\n break;\n case 3:\n _context4.p = 3;\n _t3 = _context4.v;\n console.error(\"Error updating task:\", _t3);\n case 4:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 3]]);\n }));\n return function handleTaskUpdate(_x2) {\n return _ref4.apply(this, arguments);\n };\n }();\n var handleTaskDelete = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(taskId) {\n var _t4;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n if (taskId) {\n _context5.n = 1;\n break;\n }\n console.error(\"Cannot delete task: Task ID is missing\");\n return _context5.a(2);\n case 1:\n _context5.p = 1;\n _context5.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.deleteTask)(taskId);\n case 2:\n setTasks(function (prevTasks) {\n return prevTasks.filter(function (task) {\n return task.id !== taskId;\n });\n });\n _context5.n = 4;\n break;\n case 3:\n _context5.p = 3;\n _t4 = _context5.v;\n console.error(\"Error deleting task:\", _t4);\n case 4:\n return _context5.a(2);\n }\n }, _callee5, null, [[1, 3]]);\n }));\n return function handleTaskDelete(_x3) {\n return _ref5.apply(this, arguments);\n };\n }();\n var handleToggleToday = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(taskId) {\n var updatedTask, updatedProject, _t5, _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n _context6.p = 0;\n _context6.n = 1;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.toggleTaskToday)(taskId);\n case 1:\n updatedTask = _context6.v;\n // Update the task in the local state immediately to avoid UI flashing\n setTasks(function (prevTasks) {\n return prevTasks.map(function (task) {\n return task.id === taskId ? _objectSpread(_objectSpread({}, task), {}, {\n today: updatedTask.today,\n today_move_count: updatedTask.today_move_count\n }) : task;\n });\n });\n _context6.n = 6;\n break;\n case 2:\n _context6.p = 2;\n _t5 = _context6.v;\n console.error(\"Error toggling task today status:\", _t5);\n // Optionally refetch data on error to ensure consistency\n if (!id) {\n _context6.n = 6;\n break;\n }\n _context6.p = 3;\n _context6.n = 4;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_8__.fetchProjectById)(id);\n case 4:\n updatedProject = _context6.v;\n setProject(updatedProject);\n setTasks(updatedProject.tasks || []);\n _context6.n = 6;\n break;\n case 5:\n _context6.p = 5;\n _t6 = _context6.v;\n console.error(\"Error refetching project data:\", _t6);\n case 6:\n return _context6.a(2);\n }\n }, _callee6, null, [[3, 5], [0, 2]]);\n }));\n return function handleToggleToday(_x4) {\n return _ref6.apply(this, arguments);\n };\n }();\n var handleEditProject = function handleEditProject() {\n setIsModalOpen(true);\n };\n var handleSaveProject = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(updatedProject) {\n var savedProject, _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n if (updatedProject.id) {\n _context7.n = 1;\n break;\n }\n console.error(\"Cannot save project: Project ID is missing\");\n return _context7.a(2);\n case 1:\n _context7.p = 1;\n _context7.n = 2;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_8__.updateProject)(updatedProject.id, updatedProject);\n case 2:\n savedProject = _context7.v;\n setProject(savedProject);\n setIsModalOpen(false);\n _context7.n = 4;\n break;\n case 3:\n _context7.p = 3;\n _t7 = _context7.v;\n console.error(\"Error saving project:\", _t7);\n case 4:\n return _context7.a(2);\n }\n }, _callee7, null, [[1, 3]]);\n }));\n return function handleSaveProject(_x5) {\n return _ref7.apply(this, arguments);\n };\n }();\n var handleCreateNextAction = /*#__PURE__*/function () {\n var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(projectId, actionDescription) {\n var newTask, taskLink, _t8;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n _context8.p = 0;\n _context8.n = 1;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_9__.createTask)({\n name: actionDescription,\n status: \"not_started\",\n project_id: projectId,\n priority: \"medium\"\n });\n case 1:\n newTask = _context8.v;\n // Update the tasks list to include the new task\n setTasks(function (prevTasks) {\n return [].concat(_toConsumableArray(prevTasks), [newTask]);\n });\n setShowAutoSuggestForm(false);\n\n // Show success toast with task link\n taskLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, t('task.created', 'Task'), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n href: \"/task/\".concat(newTask.uuid),\n className: \"text-green-200 underline hover:text-green-100\"\n }, newTask.name), \" \", t('task.createdSuccessfully', 'created successfully!'));\n showSuccessToast(taskLink);\n _context8.n = 3;\n break;\n case 2:\n _context8.p = 2;\n _t8 = _context8.v;\n console.error(\"Error creating next action:\", _t8);\n case 3:\n return _context8.a(2);\n }\n }, _callee8, null, [[0, 2]]);\n }));\n return function handleCreateNextAction(_x6, _x7) {\n return _ref8.apply(this, arguments);\n };\n }();\n var handleSkipNextAction = function handleSkipNextAction() {\n setShowAutoSuggestForm(false);\n };\n var handleDeleteProject = /*#__PURE__*/function () {\n var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var _t9;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.n) {\n case 0:\n if (project !== null && project !== void 0 && project.id) {\n _context9.n = 1;\n break;\n }\n console.error(\"Cannot delete project: Project ID is missing\");\n return _context9.a(2);\n case 1:\n _context9.p = 1;\n _context9.n = 2;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_8__.deleteProject)(project.id);\n case 2:\n navigate(\"/projects\");\n _context9.n = 4;\n break;\n case 3:\n _context9.p = 3;\n _t9 = _context9.v;\n console.error(\"Error deleting project:\", _t9);\n case 4:\n return _context9.a(2);\n }\n }, _callee9, null, [[1, 3]]);\n }));\n return function handleDeleteProject() {\n return _ref9.apply(this, arguments);\n };\n }();\n if (loading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl font-semibold text-gray-700 dark:text-gray-200\"\n }, \"Loading project details...\"));\n }\n if (error) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, error));\n }\n if (!project) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, \"Project not found.\"));\n }\n var activeTasks = (tasks === null || tasks === void 0 ? void 0 : tasks.filter(function (task) {\n return typeof task.status === 'number' ? task.status !== 2 : task.status !== 'done';\n })) || []; //TODO: Also add archived\n var completedTasks = tasks === null || tasks === void 0 ? void 0 : tasks.filter(function (task) {\n return typeof task.status === 'number' ? task.status === 2 : task.status === 'done';\n });\n var displayTasks = showCompleted ? [].concat(_toConsumableArray(activeTasks), _toConsumableArray(completedTasks)) : activeTasks;\n var formatProjectDueDate = function formatProjectDueDate(dateString) {\n var date = new Date(dateString);\n var currentLang = i18n.language;\n\n // Format based on language\n var formatOptions = {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n };\n return date.toLocaleDateString(currentLang, formatOptions);\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl\"\n }, project.image_url && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6 rounded-lg overflow-hidden relative\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n src: project.image_url,\n alt: project.name,\n className: \"w-full h-48 object-cover\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"absolute inset-0 bg-black bg-opacity-40 flex items-center justify-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h1\", {\n className: \"text-4xl md:text-5xl font-bold text-white text-center px-4 drop-shadow-lg\"\n }, project.name)), project.priority !== undefined && project.priority !== null && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"absolute top-3 left-3\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-4 h-4 rounded-full border-2 border-white shadow-lg \".concat(getPriorityStyle(project.priority)),\n title: \"Priority: \".concat(priorityLabel(project.priority)),\n \"aria-label\": \"Priority: \".concat(priorityLabel(project.priority))\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"absolute bottom-4 right-4 flex space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleEditProject,\n className: \"p-2 bg-black bg-opacity-50 text-white hover:bg-opacity-70 rounded-full transition-all duration-200 backdrop-blur-sm\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setIsConfirmDialogOpen(true);\n },\n className: \"p-2 bg-black bg-opacity-50 text-white hover:bg-opacity-70 rounded-full transition-all duration-200 backdrop-blur-sm\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"h-5 w-5\"\n })))), (project.description || project.area || project.due_date_at || project.tags && project.tags.length > 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6 p-4 bg-gray-50 dark:bg-gray-800/50 border border-gray-200 dark:border-gray-700 rounded-lg\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"grid gap-3\"\n }, project.description && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3 mt-0.5 flex-shrink-0\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Description:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm text-gray-900 dark:text-gray-100 leading-relaxed mt-1\"\n }, project.description))), project.area && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Area:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-900 dark:text-gray-100 bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded\"\n }, project.area.name)), project.due_date_at && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Due Date:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-900 dark:text-gray-100\"\n }, formatProjectDueDate(project.due_date_at))), project.tags && project.tags.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"h-4 w-4 text-gray-500 dark:text-gray-400 mr-3 mt-0.5\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n fill: \"currentColor\",\n viewBox: \"0 0 20 20\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M17.707 9.293a1 1 0 010 1.414l-7 7a1 1 0 01-1.414 0l-7-7A.997.997 0 012 10V5a3 3 0 013-3h5c.256 0 .512.098.707.293l7 7zM5 6a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm font-medium text-gray-600 dark:text-gray-400 mr-2\"\n }, \"Tags:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-wrap gap-1 mt-1\"\n }, project.tags.map(function (tag, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n key: index,\n onClick: function onClick() {\n return navigate(\"/tag/\".concat(tag.id));\n },\n className: \"inline-block px-2 py-1 text-xs bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200 rounded-full cursor-pointer hover:bg-blue-200 dark:hover:bg-blue-900/50 transition-colors\"\n }, tag.name);\n })))))), !project.image_url && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-8\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n className: \"h-6 w-6 text-gray-500 mr-3\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light text-gray-900 dark:text-gray-100 mr-2\"\n }, project.name), project.priority !== undefined && project.priority !== null && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-4 h-4 rounded-full border-2 border-white dark:border-gray-800 \".concat(getPriorityStyle(project.priority)),\n title: \"Priority: \".concat(priorityLabel(project.priority)),\n \"aria-label\": \"Priority: \".concat(priorityLabel(project.priority))\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleEditProject,\n className: \"text-gray-500 hover:text-blue-700 dark:hover:text-blue-300 focus:outline-none\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setIsConfirmDialogOpen(true);\n },\n className: \"text-gray-500 hover:text-red-700 dark:hover:text-red-300 focus:outline-none\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"h-5 w-5\"\n })))), !showAutoSuggestForm && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-lg font-medium text-gray-900 dark:text-gray-100\"\n }, t('sidebar.tasks', 'Tasks')), completedTasks.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n className: \"flex items-center space-x-2 cursor-pointer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-600 dark:text-gray-400\"\n }, \"Show completed\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"relative flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"checkbox\",\n checked: showCompleted,\n onChange: function onChange(e) {\n return setShowCompleted(e.target.checked);\n },\n className: \"sr-only\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-10 h-5 rounded-full transition-colors \".concat(showCompleted ? 'bg-blue-500' : 'bg-gray-300 dark:bg-gray-600')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-4 h-4 bg-white rounded-full shadow-md transform transition-transform duration-200 ease-in-out \".concat(showCompleted ? 'translate-x-5' : 'translate-x-0.5', \" translate-y-0.5\")\n }))))), !showAutoSuggestForm && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Task_NewTask__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onTaskCreate: handleTaskCreate\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-2\"\n }, displayTasks.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Task_TaskList__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n tasks: displayTasks,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n projects: project ? [project] : [],\n hideProjectName: true,\n onToggleToday: handleToggleToday\n }) : showAutoSuggestForm ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AutoSuggestNextActionBox__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onAddAction: function onAddAction(actionDescription) {\n if (project !== null && project !== void 0 && project.id) {\n handleCreateNextAction(project.id, actionDescription);\n }\n },\n onDismiss: handleSkipNextAction,\n projectName: (project === null || project === void 0 ? void 0 : project.name) || \"\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-500 dark:text-gray-400\"\n }, \"No tasks.\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Project_ProjectModal__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n isOpen: isModalOpen,\n onClose: function onClose() {\n return setIsModalOpen(false);\n },\n onSave: handleSaveProject,\n project: project,\n areas: areas\n }), isConfirmDialogOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"Delete Project\",\n message: \"Are you sure you want to delete the project \\\"\".concat(project.name, \"\\\"?\"),\n onConfirm: handleDeleteProject,\n onCancel: function onCancel() {\n return setIsConfirmDialogOpen(false);\n }\n })));\n};\n_s(ProjectDetails, \"MmMVGi9196KIyNMOr0euyT1Zwiw=\", false, function () {\n return [react_router_dom__WEBPACK_IMPORTED_MODULE_15__.useParams, react_router_dom__WEBPACK_IMPORTED_MODULE_15__.useNavigate, react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_2__.useToast, _store_useStore__WEBPACK_IMPORTED_MODULE_6__.useStore, _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_14__.useModalEvents];\n});\n_c = ProjectDetails;\nvar priorityLabel = function priorityLabel(priority) {\n // Handle both string and numeric priorities\n var normalizedPriority = typeof priority === 'number' ? ['low', 'medium', 'high'][priority] : priority;\n switch (normalizedPriority) {\n case 'high':\n return 'High';\n case 'medium':\n return 'Medium';\n case 'low':\n return 'Low';\n default:\n return '';\n }\n};\nvar getPriorityStyle = function getPriorityStyle(priority) {\n // Handle both string and numeric priorities\n var normalizedPriority = typeof priority === 'number' ? ['low', 'medium', 'high'][priority] : priority;\n return priorityStyles[normalizedPriority] || priorityStyles[\"default\"];\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProjectDetails);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"ProjectDetails\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Project/ProjectDetails.tsx?"); /***/ }), @@ -258,7 +258,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/FolderIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/Squares2X2Icon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/Bars3Icon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/MagnifyingGlassIcon.js\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* harmony import */ var _Project_ProjectModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Project/ProjectModal */ \"./frontend/components/Project/ProjectModal.tsx\");\n/* harmony import */ var _store_useStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../store/useStore */ \"./frontend/store/useStore.ts\");\n/* harmony import */ var _utils_projectsService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/projectsService */ \"./frontend/utils/projectsService.ts\");\n/* harmony import */ var _utils_areasService__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/areasService */ \"./frontend/utils/areasService.ts\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\");\n/* harmony import */ var _Project_ProjectItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Project/ProjectItem */ \"./frontend/components/Project/ProjectItem.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\nvar getPriorityStyles = function getPriorityStyles(priority) {\n switch (priority) {\n case \"low\":\n return {\n color: \"bg-green-500\"\n };\n case \"medium\":\n return {\n color: \"bg-yellow-500\"\n };\n case \"high\":\n return {\n color: \"bg-red-500\"\n };\n default:\n return {\n color: \"bg-gray-500\"\n };\n }\n};\nvar Projects = function Projects() {\n _s();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_6__.useTranslation)(),\n t = _useTranslation.t;\n var _useStore = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore)(function (state) {\n return state.areasStore;\n }),\n areas = _useStore.areas,\n setAreas = _useStore.setAreas,\n setAreasLoading = _useStore.setLoading,\n setAreasError = _useStore.setError;\n var _useStore2 = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore)(function (state) {\n return state.projectsStore;\n }),\n setProjectsLoading = _useStore2.setLoading,\n setProjectsError = _useStore2.setError;\n var _useStore3 = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore)(function (state) {\n return state.projectsStore;\n }),\n isLoading = _useStore3.isLoading,\n isError = _useStore3.isError;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}),\n _useState2 = _slicedToArray(_useState, 2),\n groupedProjects = _useState2[0],\n setGroupedProjects = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isProjectModalOpen = _useState4[0],\n setIsProjectModalOpen = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState6 = _slicedToArray(_useState5, 2),\n projectToEdit = _useState6[0],\n setProjectToEdit = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState8 = _slicedToArray(_useState7, 2),\n projectToDelete = _useState8[0],\n setProjectToDelete = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isConfirmDialogOpen = _useState0[0],\n setIsConfirmDialogOpen = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState10 = _slicedToArray(_useState1, 2),\n activeDropdown = _useState10[0],\n setActiveDropdown = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState12 = _slicedToArray(_useState11, 2),\n searchQuery = _useState12[0],\n setSearchQuery = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"cards\"),\n _useState14 = _slicedToArray(_useState13, 2),\n viewMode = _useState14[0],\n setViewMode = _useState14[1];\n var _useSearchParams = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_8__.useSearchParams)(),\n _useSearchParams2 = _slicedToArray(_useSearchParams, 2),\n searchParams = _useSearchParams2[0],\n setSearchParams = _useSearchParams2[1];\n var activeFilter = searchParams.get(\"active\") || \"all\";\n var areaFilter = searchParams.get(\"area_id\") || \"\";\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var loadAreas = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var areasData, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.p = 0;\n _context.n = 1;\n return (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_5__.fetchAreas)();\n case 1:\n areasData = _context.v;\n setAreas(areasData);\n _context.n = 3;\n break;\n case 2:\n _context.p = 2;\n _t = _context.v;\n console.error(\"Failed to fetch areas:\", _t);\n setAreasError(true);\n case 3:\n return _context.a(2);\n }\n }, _callee, null, [[0, 2]]);\n }));\n return function loadAreas() {\n return _ref.apply(this, arguments);\n };\n }();\n loadAreas();\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var loadProjects = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var groupedProjectsData, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n _context2.p = 0;\n _context2.n = 1;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.fetchGroupedProjects)(activeFilter, areaFilter);\n case 1:\n groupedProjectsData = _context2.v;\n setGroupedProjects(groupedProjectsData);\n _context2.n = 3;\n break;\n case 2:\n _context2.p = 2;\n _t2 = _context2.v;\n console.error(\"Failed to fetch projects:\", _t2);\n setProjectsError(true);\n case 3:\n return _context2.a(2);\n }\n }, _callee2, null, [[0, 2]]);\n }));\n return function loadProjects() {\n return _ref2.apply(this, arguments);\n };\n }();\n loadProjects();\n }, [activeFilter, areaFilter]);\n var handleSaveProject = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(project) {\n var groupedProjectsData, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n setProjectsLoading(true);\n _context3.p = 1;\n if (!project.id) {\n _context3.n = 3;\n break;\n }\n _context3.n = 2;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.updateProject)(project.id, project);\n case 2:\n _context3.n = 4;\n break;\n case 3:\n _context3.n = 4;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.createProject)(project);\n case 4:\n _context3.n = 5;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.fetchGroupedProjects)(activeFilter, areaFilter);\n case 5:\n groupedProjectsData = _context3.v;\n setGroupedProjects(groupedProjectsData);\n _context3.n = 7;\n break;\n case 6:\n _context3.p = 6;\n _t3 = _context3.v;\n console.error(\"Error saving project:\", _t3);\n setProjectsError(true);\n case 7:\n _context3.p = 7;\n setProjectsLoading(false);\n setIsProjectModalOpen(false);\n return _context3.f(7);\n case 8:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 6, 7, 8]]);\n }));\n return function handleSaveProject(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n var handleEditProject = function handleEditProject(project) {\n setProjectToEdit(project);\n setIsProjectModalOpen(true);\n };\n var handleDeleteProject = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var groupedProjectsData, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n if (projectToDelete) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n _context4.p = 1;\n if (!(projectToDelete.id !== undefined)) {\n _context4.n = 4;\n break;\n }\n setProjectsLoading(true);\n _context4.n = 2;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.deleteProject)(projectToDelete.id);\n case 2:\n _context4.n = 3;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.fetchGroupedProjects)(activeFilter, areaFilter);\n case 3:\n groupedProjectsData = _context4.v;\n setGroupedProjects(groupedProjectsData);\n _context4.n = 5;\n break;\n case 4:\n console.error(\"Cannot delete project: ID is undefined.\");\n case 5:\n _context4.n = 7;\n break;\n case 6:\n _context4.p = 6;\n _t4 = _context4.v;\n console.error(\"Error deleting project:\", _t4);\n setProjectsError(true);\n case 7:\n _context4.p = 7;\n setProjectsLoading(false);\n setIsConfirmDialogOpen(false);\n setProjectToDelete(null);\n return _context4.f(7);\n case 8:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 6, 7, 8]]);\n }));\n return function handleDeleteProject() {\n return _ref4.apply(this, arguments);\n };\n }();\n var _getCompletionPercentage = function getCompletionPercentage(project) {\n // Now the completion percentage comes directly from the backend\n return project.completion_percentage || 0;\n };\n var handleActiveFilterChange = function handleActiveFilterChange(e) {\n var newActiveFilter = e.target.value;\n var params = new URLSearchParams(searchParams);\n if (newActiveFilter === \"all\") {\n params[\"delete\"](\"active\");\n } else {\n params.set(\"active\", newActiveFilter);\n }\n setSearchParams(params);\n };\n var handleAreaFilterChange = function handleAreaFilterChange(e) {\n var newAreaFilter = e.target.value;\n var params = new URLSearchParams(searchParams);\n if (newAreaFilter === \"\") {\n params[\"delete\"](\"area_id\");\n } else {\n params.set(\"area_id\", newAreaFilter);\n }\n setSearchParams(params);\n };\n\n // Apply search filter to the grouped projects from backend\n var searchFilteredGroupedProjects = Object.keys(groupedProjects).reduce(function (acc, areaName) {\n var projectsInArea = groupedProjects[areaName];\n\n // Defensive check: ensure projectsInArea is an array\n if (!Array.isArray(projectsInArea)) {\n console.warn(\"Projects for area \\\"\".concat(areaName, \"\\\" is not an array:\"), projectsInArea);\n return acc;\n }\n var filteredProjects = projectsInArea.filter(function (project) {\n return project.name.toLowerCase().includes(searchQuery.toLowerCase());\n });\n if (filteredProjects.length > 0) {\n acc[areaName] = filteredProjects;\n }\n return acc;\n }, {});\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl font-semibold text-gray-700 dark:text-gray-200\"\n }, t('projects.loading')));\n }\n if (isError) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, t('projects.error')));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-6xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center mb-8\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-6 w-6 text-gray-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light text-gray-900 dark:text-gray-100\"\n }, t('projects.title'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col md:flex-row md:items-center justify-between mb-6 space-y-4 md:space-y-0\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setViewMode(\"cards\");\n },\n className: \"p-2 rounded-md focus:outline-none \".concat(viewMode === \"cards\" ? \"bg-blue-500 text-white\" : \"bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300\"),\n \"aria-label\": t(\"projects.cardViewAriaLabel\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setViewMode(\"list\");\n },\n className: \"p-2 rounded-md focus:outline-none \".concat(viewMode === \"list\" ? \"bg-blue-500 text-white\" : \"bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300\"),\n \"aria-label\": t(\"projects.listViewAriaLabel\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"h-5 w-5\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col md:flex-row md:items-center md:space-x-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full md:w-auto\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n htmlFor: \"activeFilter\",\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('common.status')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"select\", {\n id: \"activeFilter\",\n value: activeFilter,\n onChange: handleActiveFilterChange,\n className: \"block w-full p-2 border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n value: \"true\"\n }, t('projects.filters.active')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n value: \"false\"\n }, t('projects.filters.inactive')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n value: \"all\"\n }, t('projects.filters.all')))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full md:w-auto\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n htmlFor: \"areaFilter\",\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('common.area')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"select\", {\n id: \"areaFilter\",\n value: areaFilter,\n onChange: handleAreaFilterChange,\n className: \"block w-full p-2 border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n value: \"\"\n }, t('projects.filters.allAreas')), areas.map(function (area) {\n var _area$id;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n key: area.id,\n value: (_area$id = area.id) === null || _area$id === void 0 ? void 0 : _area$id.toString()\n }, area.name);\n }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-700 rounded-md shadow-sm p-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"h-5 w-5 text-gray-500 dark:text-gray-400 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"text\",\n placeholder: t('projects.searchPlaceholder'),\n value: searchQuery,\n onChange: function onChange(e) {\n return setSearchQuery(e.target.value);\n },\n className: \"w-full bg-transparent border-none focus:ring-0 focus:outline-none dark:text-white\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"\".concat(viewMode === \"cards\" ? \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\" : \"flex flex-col space-y-1\")\n }, Object.keys(searchFilteredGroupedProjects).length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-gray-700 dark:text-gray-300\"\n }, t('projects.noProjectsFound')) : Object.keys(searchFilteredGroupedProjects).map(function (areaName) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: areaName\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"\".concat(viewMode === \"cards\" ? \"col-span-full text-md uppercase font-light text-gray-800 dark:text-gray-200 mb-2 mt-6\" : \"text-lg font-semibold text-gray-800 dark:text-gray-200 mb-3 mt-6 border-b border-gray-300 dark:border-gray-600 pb-2\")\n }, areaName), searchFilteredGroupedProjects[areaName].map(function (project) {\n var _getPriorityStyles = getPriorityStyles(project.priority || \"low\"),\n color = _getPriorityStyles.color;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Project_ProjectItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: project.id,\n project: project,\n viewMode: viewMode,\n color: color,\n getCompletionPercentage: function getCompletionPercentage() {\n return _getCompletionPercentage(project);\n },\n activeDropdown: activeDropdown,\n setActiveDropdown: setActiveDropdown,\n handleEditProject: handleEditProject,\n setProjectToDelete: setProjectToDelete,\n setIsConfirmDialogOpen: setIsConfirmDialogOpen\n });\n }));\n }))), isProjectModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Project_ProjectModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isProjectModalOpen,\n onClose: function onClose() {\n setIsProjectModalOpen(false);\n setProjectToEdit(null);\n },\n onSave: handleSaveProject,\n project: projectToEdit || undefined,\n areas: areas\n }), isConfirmDialogOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n title: t('modals.deleteProject.title'),\n message: t('modals.deleteProject.message', {\n projectName: projectToDelete === null || projectToDelete === void 0 ? void 0 : projectToDelete.name\n }),\n onConfirm: handleDeleteProject,\n onCancel: function onCancel() {\n return setIsConfirmDialogOpen(false);\n }\n }));\n};\n_s(Projects, \"YFBvF/C0nP6Ansaq6f+UE3LQboE=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_6__.useTranslation, _store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore, _store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore, _store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore, react_router_dom__WEBPACK_IMPORTED_MODULE_8__.useSearchParams];\n});\n_c = Projects;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Projects);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"Projects\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Projects.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/FolderIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/Squares2X2Icon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/Bars3Icon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/MagnifyingGlassIcon.js\");\n/* harmony import */ var _Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Shared/ConfirmDialog */ \"./frontend/components/Shared/ConfirmDialog.tsx\");\n/* harmony import */ var _Project_ProjectModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Project/ProjectModal */ \"./frontend/components/Project/ProjectModal.tsx\");\n/* harmony import */ var _store_useStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../store/useStore */ \"./frontend/store/useStore.ts\");\n/* harmony import */ var _utils_projectsService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/projectsService */ \"./frontend/utils/projectsService.ts\");\n/* harmony import */ var _utils_areasService__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/areasService */ \"./frontend/utils/areasService.ts\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../hooks/useModalEvents */ \"./frontend/hooks/useModalEvents.ts\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\");\n/* harmony import */ var _Project_ProjectItem__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Project/ProjectItem */ \"./frontend/components/Project/ProjectItem.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\nvar getPriorityStyles = function getPriorityStyles(priority) {\n switch (priority) {\n case \"low\":\n return {\n color: \"bg-green-500\"\n };\n case \"medium\":\n return {\n color: \"bg-yellow-500\"\n };\n case \"high\":\n return {\n color: \"bg-red-500\"\n };\n default:\n return {\n color: \"bg-gray-500\"\n };\n }\n};\nvar Projects = function Projects() {\n _s();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_6__.useTranslation)(),\n t = _useTranslation.t;\n var _useStore = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore)(function (state) {\n return state.areasStore;\n }),\n areas = _useStore.areas,\n setAreas = _useStore.setAreas,\n setAreasLoading = _useStore.setLoading,\n setAreasError = _useStore.setError;\n var _useStore2 = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore)(function (state) {\n return state.projectsStore;\n }),\n setProjectsLoading = _useStore2.setLoading,\n setProjectsError = _useStore2.setError;\n var _useStore3 = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore)(function (state) {\n return state.projectsStore;\n }),\n isLoading = _useStore3.isLoading,\n isError = _useStore3.isError;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}),\n _useState2 = _slicedToArray(_useState, 2),\n groupedProjects = _useState2[0],\n setGroupedProjects = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isProjectModalOpen = _useState4[0],\n setIsProjectModalOpen = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState6 = _slicedToArray(_useState5, 2),\n projectToEdit = _useState6[0],\n setProjectToEdit = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState8 = _slicedToArray(_useState7, 2),\n projectToDelete = _useState8[0],\n setProjectToDelete = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isConfirmDialogOpen = _useState0[0],\n setIsConfirmDialogOpen = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState10 = _slicedToArray(_useState1, 2),\n activeDropdown = _useState10[0],\n setActiveDropdown = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState12 = _slicedToArray(_useState11, 2),\n searchQuery = _useState12[0],\n setSearchQuery = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"cards\"),\n _useState14 = _slicedToArray(_useState13, 2),\n viewMode = _useState14[0],\n setViewMode = _useState14[1];\n var _useSearchParams = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_9__.useSearchParams)(),\n _useSearchParams2 = _slicedToArray(_useSearchParams, 2),\n searchParams = _useSearchParams2[0],\n setSearchParams = _useSearchParams2[1];\n var activeFilter = searchParams.get(\"active\") || \"all\";\n\n // Dispatch global modal events\n (0,_hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_7__.useModalEvents)(isProjectModalOpen);\n var areaFilter = searchParams.get(\"area_id\") || \"\";\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var loadAreas = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var areasData, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.p = 0;\n _context.n = 1;\n return (0,_utils_areasService__WEBPACK_IMPORTED_MODULE_5__.fetchAreas)();\n case 1:\n areasData = _context.v;\n setAreas(areasData);\n _context.n = 3;\n break;\n case 2:\n _context.p = 2;\n _t = _context.v;\n console.error(\"Failed to fetch areas:\", _t);\n setAreasError(true);\n case 3:\n return _context.a(2);\n }\n }, _callee, null, [[0, 2]]);\n }));\n return function loadAreas() {\n return _ref.apply(this, arguments);\n };\n }();\n loadAreas();\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var loadProjects = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var groupedProjectsData, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n _context2.p = 0;\n _context2.n = 1;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.fetchGroupedProjects)(activeFilter, areaFilter);\n case 1:\n groupedProjectsData = _context2.v;\n setGroupedProjects(groupedProjectsData);\n _context2.n = 3;\n break;\n case 2:\n _context2.p = 2;\n _t2 = _context2.v;\n console.error(\"Failed to fetch projects:\", _t2);\n setProjectsError(true);\n case 3:\n return _context2.a(2);\n }\n }, _callee2, null, [[0, 2]]);\n }));\n return function loadProjects() {\n return _ref2.apply(this, arguments);\n };\n }();\n loadProjects();\n }, [activeFilter, areaFilter]);\n var handleSaveProject = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(project) {\n var groupedProjectsData, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n setProjectsLoading(true);\n _context3.p = 1;\n if (!project.id) {\n _context3.n = 3;\n break;\n }\n _context3.n = 2;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.updateProject)(project.id, project);\n case 2:\n _context3.n = 4;\n break;\n case 3:\n _context3.n = 4;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.createProject)(project);\n case 4:\n _context3.n = 5;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.fetchGroupedProjects)(activeFilter, areaFilter);\n case 5:\n groupedProjectsData = _context3.v;\n setGroupedProjects(groupedProjectsData);\n _context3.n = 7;\n break;\n case 6:\n _context3.p = 6;\n _t3 = _context3.v;\n console.error(\"Error saving project:\", _t3);\n setProjectsError(true);\n case 7:\n _context3.p = 7;\n setProjectsLoading(false);\n setIsProjectModalOpen(false);\n return _context3.f(7);\n case 8:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 6, 7, 8]]);\n }));\n return function handleSaveProject(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n var handleEditProject = function handleEditProject(project) {\n setProjectToEdit(project);\n setIsProjectModalOpen(true);\n };\n var handleDeleteProject = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var groupedProjectsData, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n if (projectToDelete) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n _context4.p = 1;\n if (!(projectToDelete.id !== undefined)) {\n _context4.n = 4;\n break;\n }\n setProjectsLoading(true);\n _context4.n = 2;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.deleteProject)(projectToDelete.id);\n case 2:\n _context4.n = 3;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.fetchGroupedProjects)(activeFilter, areaFilter);\n case 3:\n groupedProjectsData = _context4.v;\n setGroupedProjects(groupedProjectsData);\n _context4.n = 5;\n break;\n case 4:\n console.error(\"Cannot delete project: ID is undefined.\");\n case 5:\n _context4.n = 7;\n break;\n case 6:\n _context4.p = 6;\n _t4 = _context4.v;\n console.error(\"Error deleting project:\", _t4);\n setProjectsError(true);\n case 7:\n _context4.p = 7;\n setProjectsLoading(false);\n setIsConfirmDialogOpen(false);\n setProjectToDelete(null);\n return _context4.f(7);\n case 8:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 6, 7, 8]]);\n }));\n return function handleDeleteProject() {\n return _ref4.apply(this, arguments);\n };\n }();\n var _getCompletionPercentage = function getCompletionPercentage(project) {\n // Now the completion percentage comes directly from the backend\n return project.completion_percentage || 0;\n };\n var handleActiveFilterChange = function handleActiveFilterChange(e) {\n var newActiveFilter = e.target.value;\n var params = new URLSearchParams(searchParams);\n if (newActiveFilter === \"all\") {\n params[\"delete\"](\"active\");\n } else {\n params.set(\"active\", newActiveFilter);\n }\n setSearchParams(params);\n };\n var handleAreaFilterChange = function handleAreaFilterChange(e) {\n var newAreaFilter = e.target.value;\n var params = new URLSearchParams(searchParams);\n if (newAreaFilter === \"\") {\n params[\"delete\"](\"area_id\");\n } else {\n params.set(\"area_id\", newAreaFilter);\n }\n setSearchParams(params);\n };\n\n // Apply search filter to the grouped projects from backend\n var searchFilteredGroupedProjects = Object.keys(groupedProjects).reduce(function (acc, areaName) {\n var projectsInArea = groupedProjects[areaName];\n\n // Defensive check: ensure projectsInArea is an array\n if (!Array.isArray(projectsInArea)) {\n console.warn(\"Projects for area \\\"\".concat(areaName, \"\\\" is not an array:\"), projectsInArea);\n return acc;\n }\n var filteredProjects = projectsInArea.filter(function (project) {\n return project.name.toLowerCase().includes(searchQuery.toLowerCase());\n });\n if (filteredProjects.length > 0) {\n acc[areaName] = filteredProjects;\n }\n return acc;\n }, {});\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xl font-semibold text-gray-700 dark:text-gray-200\"\n }, t('projects.loading')));\n }\n if (isError) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-center h-screen bg-gray-100 dark:bg-gray-900\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-red-500 text-lg\"\n }, t('projects.error')));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-6xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center mb-8\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-6 w-6 text-gray-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light text-gray-900 dark:text-gray-100\"\n }, t('projects.title'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col md:flex-row md:items-center justify-between mb-6 space-y-4 md:space-y-0\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setViewMode(\"cards\");\n },\n className: \"p-2 rounded-md focus:outline-none \".concat(viewMode === \"cards\" ? \"bg-blue-500 text-white\" : \"bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300\"),\n \"aria-label\": t(\"projects.cardViewAriaLabel\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"h-5 w-5\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setViewMode(\"list\");\n },\n className: \"p-2 rounded-md focus:outline-none \".concat(viewMode === \"list\" ? \"bg-blue-500 text-white\" : \"bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300\"),\n \"aria-label\": t(\"projects.listViewAriaLabel\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"h-5 w-5\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col md:flex-row md:items-center md:space-x-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full md:w-auto\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n htmlFor: \"activeFilter\",\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('common.status')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"select\", {\n id: \"activeFilter\",\n value: activeFilter,\n onChange: handleActiveFilterChange,\n className: \"block w-full p-2 border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n value: \"true\"\n }, t('projects.filters.active')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n value: \"false\"\n }, t('projects.filters.inactive')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n value: \"all\"\n }, t('projects.filters.all')))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full md:w-auto\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", {\n htmlFor: \"areaFilter\",\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n }, t('common.area')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"select\", {\n id: \"areaFilter\",\n value: areaFilter,\n onChange: handleAreaFilterChange,\n className: \"block w-full p-2 border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n value: \"\"\n }, t('projects.filters.allAreas')), areas.map(function (area) {\n var _area$id;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"option\", {\n key: area.id,\n value: (_area$id = area.id) === null || _area$id === void 0 ? void 0 : _area$id.toString()\n }, area.name);\n }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-700 rounded-md shadow-sm p-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"h-5 w-5 text-gray-500 dark:text-gray-400 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"text\",\n placeholder: t('projects.searchPlaceholder'),\n value: searchQuery,\n onChange: function onChange(e) {\n return setSearchQuery(e.target.value);\n },\n className: \"w-full bg-transparent border-none focus:ring-0 focus:outline-none dark:text-white\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"\".concat(viewMode === \"cards\" ? \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\" : \"flex flex-col space-y-1\")\n }, Object.keys(searchFilteredGroupedProjects).length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-gray-700 dark:text-gray-300\"\n }, t('projects.noProjectsFound')) : Object.keys(searchFilteredGroupedProjects).map(function (areaName) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: areaName\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"\".concat(viewMode === \"cards\" ? \"col-span-full text-md uppercase font-light text-gray-800 dark:text-gray-200 mb-2 mt-6\" : \"text-lg font-semibold text-gray-800 dark:text-gray-200 mb-3 mt-6 border-b border-gray-300 dark:border-gray-600 pb-2\")\n }, areaName), searchFilteredGroupedProjects[areaName].map(function (project) {\n var _getPriorityStyles = getPriorityStyles(project.priority || \"low\"),\n color = _getPriorityStyles.color;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Project_ProjectItem__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n key: project.id,\n project: project,\n viewMode: viewMode,\n color: color,\n getCompletionPercentage: function getCompletionPercentage() {\n return _getCompletionPercentage(project);\n },\n activeDropdown: activeDropdown,\n setActiveDropdown: setActiveDropdown,\n handleEditProject: handleEditProject,\n setProjectToDelete: setProjectToDelete,\n setIsConfirmDialogOpen: setIsConfirmDialogOpen\n });\n }));\n }))), isProjectModalOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Project_ProjectModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isProjectModalOpen,\n onClose: function onClose() {\n setIsProjectModalOpen(false);\n setProjectToEdit(null);\n },\n onSave: handleSaveProject,\n project: projectToEdit || undefined,\n areas: areas\n }), isConfirmDialogOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_ConfirmDialog__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n title: t('modals.deleteProject.title'),\n message: t('modals.deleteProject.message', {\n projectName: projectToDelete === null || projectToDelete === void 0 ? void 0 : projectToDelete.name\n }),\n onConfirm: handleDeleteProject,\n onCancel: function onCancel() {\n return setIsConfirmDialogOpen(false);\n }\n }));\n};\n_s(Projects, \"BiIAVFo1f7zO+GhHg0b6sQ8NupA=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_6__.useTranslation, _store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore, _store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore, _store_useStore__WEBPACK_IMPORTED_MODULE_3__.useStore, react_router_dom__WEBPACK_IMPORTED_MODULE_9__.useSearchParams, _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_7__.useModalEvents];\n});\n_c = Projects;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Projects);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"Projects\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Projects.tsx?"); /***/ }), @@ -361,17 +361,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./frontend/components/Shared/UrlPreview.tsx": -/*!***************************************************!*\ - !*** ./frontend/components/Shared/UrlPreview.tsx ***! - \***************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _utils_urlService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/urlService */ \"./frontend/utils/urlService.ts\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PhotoIcon.js\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\nvar UrlPreview = function UrlPreview(_ref) {\n _s();\n var text = _ref.text,\n onPreviewChange = _ref.onPreviewChange;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState2 = _slicedToArray(_useState, 2),\n preview = _useState2[0],\n setPreview = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isLoading = _useState4[0],\n setIsLoading = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState6 = _slicedToArray(_useState5, 2),\n isVisible = _useState6[0],\n setIsVisible = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n imageError = _useState8[0],\n setImageError = _useState8[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var extractPreview = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var result, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n if (text.trim()) {\n _context.n = 1;\n break;\n }\n setPreview(null);\n onPreviewChange === null || onPreviewChange === void 0 || onPreviewChange(null);\n return _context.a(2);\n case 1:\n setIsLoading(true);\n _context.p = 2;\n _context.n = 3;\n return (0,_utils_urlService__WEBPACK_IMPORTED_MODULE_1__.extractTitleFromText)(text);\n case 3:\n result = _context.v;\n setPreview(result);\n onPreviewChange === null || onPreviewChange === void 0 || onPreviewChange(result);\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n console.error('Failed to extract URL preview:', _t);\n setPreview(null);\n onPreviewChange === null || onPreviewChange === void 0 || onPreviewChange(null);\n case 5:\n _context.p = 5;\n setIsLoading(false);\n return _context.f(5);\n case 6:\n return _context.a(2);\n }\n }, _callee, null, [[2, 4, 5, 6]]);\n }));\n return function extractPreview() {\n return _ref2.apply(this, arguments);\n };\n }();\n var timeoutId = setTimeout(extractPreview, 300);\n return function () {\n return clearTimeout(timeoutId);\n };\n }, [text, onPreviewChange]);\n var handleDismiss = function handleDismiss() {\n setIsVisible(false);\n setPreview(null);\n onPreviewChange === null || onPreviewChange === void 0 || onPreviewChange(null);\n };\n var handleImageError = function handleImageError() {\n setImageError(true);\n };\n if (!isVisible || !preview && !isLoading) {\n return null;\n }\n if (isLoading) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-3 p-3 bg-gray-50 dark:bg-gray-700 rounded-lg border border-gray-200 dark:border-gray-600\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"animate-spin rounded-full h-4 w-4 border-b-2 border-blue-500\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-600 dark:text-gray-300\"\n }, \"Loading preview...\")));\n }\n if (!preview) {\n return null;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-3 p-3 bg-gray-50 dark:bg-gray-700 rounded-lg border border-gray-200 dark:border-gray-600 relative\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleDismiss,\n className: \"absolute top-2 right-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 z-10\",\n \"aria-label\": \"Dismiss preview\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"h-4 w-4\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start space-x-3\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-shrink-0\"\n }, preview.image && !imageError ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n src: preview.image,\n alt: \"Preview\",\n className: \"w-16 h-16 object-cover rounded-md\",\n onError: handleImageError\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-16 h-16 bg-gray-200 dark:bg-gray-600 rounded-md flex items-center justify-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"h-8 w-8 text-gray-400\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1 min-w-0 pr-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-sm font-medium text-gray-900 dark:text-gray-100\",\n style: {\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden'\n }\n }, preview.title || 'Untitled'), preview.description && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xs text-gray-600 dark:text-gray-300 mt-1\",\n style: {\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden'\n }\n }, preview.description), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"text-xs text-gray-500 dark:text-gray-400 truncate mt-1\"\n }, preview.url))));\n};\n_s(UrlPreview, \"nwpNmBFgxF1vZbkqpcqMaotnnRI=\");\n_c = UrlPreview;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UrlPreview);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"UrlPreview\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Shared/UrlPreview.tsx?"); - -/***/ }), - /***/ "./frontend/components/Sidebar.tsx": /*!*****************************************!*\ !*** ./frontend/components/Sidebar.tsx ***! @@ -544,7 +533,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Shared/ToastContext */ \"./frontend/components/Shared/ToastContext.tsx\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _utils_inboxService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/inboxService */ \"./frontend/utils/inboxService.ts\");\n/* harmony import */ var _utils_authUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/authUtils */ \"./frontend/utils/authUtils.ts\");\n/* harmony import */ var _Shared_UrlPreview__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Shared/UrlPreview */ \"./frontend/components/Shared/UrlPreview.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\nvar SimplifiedTaskModal = function SimplifiedTaskModal(_ref) {\n _s();\n var isOpen = _ref.isOpen,\n onClose = _ref.onClose,\n onSave = _ref.onSave,\n _ref$initialText = _ref.initialText,\n initialText = _ref$initialText === void 0 ? \"\" : _ref$initialText,\n _ref$editMode = _ref.editMode,\n editMode = _ref$editMode === void 0 ? false : _ref$editMode,\n onEdit = _ref.onEdit;\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_2__.useTranslation)(),\n t = _useTranslation.t;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialText),\n _useState2 = _slicedToArray(_useState, 2),\n inputText = _useState2[0],\n setInputText = _useState2[1];\n var modalRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isClosing = _useState4[0],\n setIsClosing = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isSaving = _useState6[0],\n setIsSaving = _useState6[1];\n var _useToast = (0,_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_1__.useToast)(),\n showSuccessToast = _useToast.showSuccessToast,\n showErrorToast = _useToast.showErrorToast;\n var nameInputRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('inbox'),\n _useState8 = _slicedToArray(_useState7, 2),\n saveMode = _useState8[0],\n setSaveMode = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState0 = _slicedToArray(_useState9, 2),\n urlPreview = _useState0[0],\n setUrlPreview = _useState0[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isOpen && nameInputRef.current) {\n nameInputRef.current.focus();\n }\n }, [isOpen]);\n var handleChange = function handleChange(e) {\n setInputText(e.target.value);\n };\n var handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var newTask, _t, _t2, _t3;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n if (!(!inputText.trim() || isSaving)) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n setIsSaving(true);\n _context.p = 2;\n if (!(editMode && onEdit)) {\n _context.n = 4;\n break;\n }\n _context.n = 3;\n return onEdit(inputText.trim());\n case 3:\n setIsClosing(true);\n setTimeout(function () {\n onClose();\n setIsClosing(false);\n }, 300);\n return _context.a(2);\n case 4:\n if (!(saveMode === 'task')) {\n _context.n = 10;\n break;\n }\n newTask = {\n name: inputText.trim(),\n status: \"not_started\"\n };\n _context.p = 5;\n _context.n = 6;\n return onSave(newTask);\n case 6:\n showSuccessToast(t('task.createSuccess'));\n setInputText('');\n handleClose();\n _context.n = 9;\n break;\n case 7:\n _context.p = 7;\n _t = _context.v;\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_4__.isAuthError)(_t)) {\n _context.n = 8;\n break;\n }\n return _context.a(2);\n case 8:\n throw _t;\n case 9:\n _context.n = 13;\n break;\n case 10:\n _context.p = 10;\n _context.n = 11;\n return (0,_utils_inboxService__WEBPACK_IMPORTED_MODULE_3__.createInboxItemWithStore)(inputText.trim());\n case 11:\n showSuccessToast(t('inbox.itemAdded'));\n handleClose();\n _context.n = 13;\n break;\n case 12:\n _context.p = 12;\n _t2 = _context.v;\n console.error('Failed to create inbox item:', _t2);\n showErrorToast(t('inbox.addError'));\n setIsSaving(false);\n case 13:\n _context.n = 15;\n break;\n case 14:\n _context.p = 14;\n _t3 = _context.v;\n console.error('Failed to save:', _t3);\n if (editMode) {\n showErrorToast(t('inbox.updateError'));\n } else {\n showErrorToast(saveMode === 'task' ? t('task.createError') : t('inbox.addError'));\n }\n case 15:\n _context.p = 15;\n setIsSaving(false);\n return _context.f(15);\n case 16:\n return _context.a(2);\n }\n }, _callee, null, [[10, 12], [5, 7], [2, 14, 15, 16]]);\n })), [inputText, isSaving, editMode, onEdit, saveMode, onSave, showSuccessToast, showErrorToast, t, onClose]);\n var handleClose = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function () {\n setIsClosing(true);\n setTimeout(function () {\n onClose();\n if (!editMode) {\n setInputText(\"\");\n setSaveMode('inbox');\n }\n setIsClosing(false);\n }, 300);\n }, [onClose, editMode]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleClickOutside = function handleClickOutside(event) {\n if (modalRef.current && !modalRef.current.contains(event.target)) {\n handleClose();\n }\n };\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return function () {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleKeyDown = function handleKeyDown(event) {\n if (event.key === \"Escape\") {\n handleClose();\n }\n };\n if (isOpen) {\n document.addEventListener(\"keydown\", handleKeyDown);\n }\n return function () {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [isOpen, handleClose]); // Only depend on isOpen and handleClose\n\n if (!isOpen) return null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fixed top-16 left-0 right-0 bottom-0 flex items-start sm:items-center justify-center bg-gray-900 bg-opacity-80 z-40 transition-opacity duration-300 \".concat(isClosing ? \"opacity-0\" : \"opacity-100\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: modalRef,\n className: \"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-800 sm:rounded-lg sm:shadow-2xl w-full sm:max-w-2xl md:max-w-3xl overflow-hidden transform transition-transform duration-300 \".concat(isClosing ? \"scale-95\" : \"scale-100\", \" flex flex-col\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"p-6 px-8\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n ref: nameInputRef,\n type: \"text\",\n name: \"text\",\n value: inputText,\n onChange: handleChange,\n required: true,\n className: \"flex-1 text-xl font-semibold dark:bg-gray-800 text-black dark:text-white border-b-2 border-gray-200 dark:border-gray-900 focus:outline-none shadow-sm py-2\",\n placeholder: t('inbox.captureThought'),\n onKeyDown: function onKeyDown(e) {\n if (e.key === 'Enter' && !e.shiftKey && !isSaving) {\n e.preventDefault();\n handleSubmit();\n }\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n type: \"button\",\n onClick: handleSubmit,\n disabled: !inputText.trim() || isSaving,\n className: \"ml-4 inline-flex justify-center px-4 py-2 text-sm font-medium text-white rounded-md shadow-sm focus:outline-none \".concat(inputText.trim() && !isSaving ? \"bg-blue-600 hover:bg-blue-700\" : \"bg-blue-400 cursor-not-allowed\")\n }, isSaving ? t('common.saving') : t('common.save'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Shared_UrlPreview__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n text: inputText,\n onPreviewChange: setUrlPreview\n }))));\n};\n_s(SimplifiedTaskModal, \"Wnm+IQrFJBkOyVvwxWdT5/KpbME=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_2__.useTranslation, _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_1__.useToast];\n});\n_c = SimplifiedTaskModal;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SimplifiedTaskModal);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"SimplifiedTaskModal\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Task/SimplifiedTaskModal.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Shared/ToastContext */ \"./frontend/components/Shared/ToastContext.tsx\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _utils_inboxService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/inboxService */ \"./frontend/utils/inboxService.ts\");\n/* harmony import */ var _utils_authUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/authUtils */ \"./frontend/utils/authUtils.ts\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js\");\n/* harmony import */ var _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/useModalEvents */ \"./frontend/hooks/useModalEvents.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n// import UrlPreview from \"../Shared/UrlPreview\";\n// import { UrlTitleResult } from \"../../utils/urlService\";\n\nvar SimplifiedTaskModal = function SimplifiedTaskModal(_ref) {\n _s();\n var isOpen = _ref.isOpen,\n onClose = _ref.onClose,\n onSave = _ref.onSave,\n _ref$initialText = _ref.initialText,\n initialText = _ref$initialText === void 0 ? \"\" : _ref$initialText,\n _ref$editMode = _ref.editMode,\n editMode = _ref$editMode === void 0 ? false : _ref$editMode,\n onEdit = _ref.onEdit;\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_2__.useTranslation)(),\n t = _useTranslation.t;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialText),\n _useState2 = _slicedToArray(_useState, 2),\n inputText = _useState2[0],\n setInputText = _useState2[1];\n var modalRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isClosing = _useState4[0],\n setIsClosing = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isSaving = _useState6[0],\n setIsSaving = _useState6[1];\n var _useToast = (0,_Shared_ToastContext__WEBPACK_IMPORTED_MODULE_1__.useToast)(),\n showSuccessToast = _useToast.showSuccessToast,\n showErrorToast = _useToast.showErrorToast;\n var nameInputRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('inbox'),\n _useState8 = _slicedToArray(_useState7, 2),\n saveMode = _useState8[0],\n setSaveMode = _useState8[1];\n // const [urlPreview, setUrlPreview] = useState(null);\n\n // Dispatch global modal events to hide floating + button\n (0,_hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__.useModalEvents)(isOpen);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isOpen && nameInputRef.current) {\n nameInputRef.current.focus();\n }\n }, [isOpen]);\n\n // Prevent body scroll when modal is open\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'unset';\n }\n\n // Cleanup function to restore scroll when component unmounts\n return function () {\n document.body.style.overflow = 'unset';\n };\n }, [isOpen]);\n var handleChange = function handleChange(e) {\n setInputText(e.target.value);\n };\n var handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var newTask, _t, _t2, _t3;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n if (!(!inputText.trim() || isSaving)) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n setIsSaving(true);\n _context.p = 2;\n if (!(editMode && onEdit)) {\n _context.n = 4;\n break;\n }\n _context.n = 3;\n return onEdit(inputText.trim());\n case 3:\n setIsClosing(true);\n setTimeout(function () {\n onClose();\n setIsClosing(false);\n }, 300);\n return _context.a(2);\n case 4:\n if (!(saveMode === 'task')) {\n _context.n = 10;\n break;\n }\n newTask = {\n name: inputText.trim(),\n status: \"not_started\"\n };\n _context.p = 5;\n _context.n = 6;\n return onSave(newTask);\n case 6:\n showSuccessToast(t('task.createSuccess'));\n setInputText('');\n handleClose();\n _context.n = 9;\n break;\n case 7:\n _context.p = 7;\n _t = _context.v;\n if (!(0,_utils_authUtils__WEBPACK_IMPORTED_MODULE_4__.isAuthError)(_t)) {\n _context.n = 8;\n break;\n }\n return _context.a(2);\n case 8:\n throw _t;\n case 9:\n _context.n = 13;\n break;\n case 10:\n _context.p = 10;\n _context.n = 11;\n return (0,_utils_inboxService__WEBPACK_IMPORTED_MODULE_3__.createInboxItemWithStore)(inputText.trim());\n case 11:\n showSuccessToast(t('inbox.itemAdded'));\n handleClose();\n _context.n = 13;\n break;\n case 12:\n _context.p = 12;\n _t2 = _context.v;\n console.error('Failed to create inbox item:', _t2);\n showErrorToast(t('inbox.addError'));\n setIsSaving(false);\n case 13:\n _context.n = 15;\n break;\n case 14:\n _context.p = 14;\n _t3 = _context.v;\n console.error('Failed to save:', _t3);\n if (editMode) {\n showErrorToast(t('inbox.updateError'));\n } else {\n showErrorToast(saveMode === 'task' ? t('task.createError') : t('inbox.addError'));\n }\n case 15:\n _context.p = 15;\n setIsSaving(false);\n return _context.f(15);\n case 16:\n return _context.a(2);\n }\n }, _callee, null, [[10, 12], [5, 7], [2, 14, 15, 16]]);\n })), [inputText, isSaving, editMode, onEdit, saveMode, onSave, showSuccessToast, showErrorToast, t, onClose]);\n var handleClose = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function () {\n setIsClosing(true);\n setTimeout(function () {\n onClose();\n if (!editMode) {\n setInputText(\"\");\n setSaveMode('inbox');\n }\n setIsClosing(false);\n }, 300);\n }, [onClose, editMode]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleClickOutside = function handleClickOutside(event) {\n if (modalRef.current && !modalRef.current.contains(event.target)) {\n handleClose();\n }\n };\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return function () {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleKeyDown = function handleKeyDown(event) {\n if (event.key === \"Escape\") {\n handleClose();\n }\n };\n if (isOpen) {\n document.addEventListener(\"keydown\", handleKeyDown);\n }\n return function () {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [isOpen, handleClose]); // Only depend on isOpen and handleClose\n\n if (!isOpen) return null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"fixed top-16 left-0 right-0 bottom-0 sm:top-16 flex items-start sm:items-center justify-center bg-gray-900 bg-opacity-80 z-[45] transition-opacity duration-300 \".concat(isClosing ? \"opacity-0\" : \"opacity-100\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: modalRef,\n className: \"relative bg-white dark:bg-gray-800 border-0 sm:border border-gray-200 dark:border-gray-800 sm:rounded-lg sm:shadow-2xl w-full h-full sm:h-auto sm:max-w-2xl md:max-w-3xl transform transition-transform duration-300 \".concat(isClosing ? \"scale-95\" : \"scale-100\", \" flex flex-col\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleClose,\n className: \"absolute top-4 right-4 z-10 p-2 text-gray-600 hover:text-gray-800 dark:text-gray-300 dark:hover:text-gray-100 bg-gray-100 hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600 rounded-full shadow-lg transition-colors duration-200 sm:hidden\",\n \"aria-label\": \"Close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-6 w-6\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex-1 flex items-center justify-center sm:block sm:flex-none\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full p-6 px-8\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col sm:flex-row sm:items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n ref: nameInputRef,\n type: \"text\",\n name: \"text\",\n value: inputText,\n onChange: handleChange,\n required: true,\n className: \"flex-1 text-xl font-semibold dark:bg-gray-800 text-black dark:text-white border-b-2 border-gray-200 dark:border-gray-900 focus:outline-none shadow-sm py-2\",\n placeholder: t('inbox.captureThought'),\n onKeyDown: function onKeyDown(e) {\n if (e.key === 'Enter' && !e.shiftKey && !isSaving) {\n e.preventDefault();\n handleSubmit();\n }\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n type: \"button\",\n onClick: handleSubmit,\n disabled: !inputText.trim() || isSaving,\n className: \"mt-4 sm:mt-0 sm:ml-4 inline-flex justify-center px-4 py-2 text-sm font-medium text-white rounded-md shadow-sm focus:outline-none \".concat(inputText.trim() && !isSaving ? \"bg-blue-600 hover:bg-blue-700\" : \"bg-blue-400 cursor-not-allowed\")\n }, isSaving ? t('common.saving') : t('common.save')))))));\n};\n_s(SimplifiedTaskModal, \"XLYb9EgfK5yQXYZv9BiXpRtvtDs=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_2__.useTranslation, _Shared_ToastContext__WEBPACK_IMPORTED_MODULE_1__.useToast, _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__.useModalEvents];\n});\n_c = SimplifiedTaskModal;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SimplifiedTaskModal);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"SimplifiedTaskModal\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Task/SimplifiedTaskModal.tsx?"); /***/ }), @@ -632,7 +621,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CalendarIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowPathIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CalendarDaysIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PlayIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/FolderIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TagIcon.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _TaskPriorityIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TaskPriorityIcon */ \"./frontend/components/Task/TaskPriorityIcon.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n\n\n\n\n\nvar TaskHeader = function TaskHeader(_ref) {\n _s();\n var task = _ref.task,\n project = _ref.project,\n onTaskClick = _ref.onTaskClick,\n onToggleCompletion = _ref.onToggleCompletion,\n _ref$hideProjectName = _ref.hideProjectName,\n hideProjectName = _ref$hideProjectName === void 0 ? false : _ref$hideProjectName,\n onToggleToday = _ref.onToggleToday,\n onTaskUpdate = _ref.onTaskUpdate;\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n var formatDueDate = function formatDueDate(dueDate) {\n var today = new Date().toISOString().split('T')[0];\n var tomorrow = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString().split('T')[0];\n var yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString().split('T')[0];\n if (dueDate === today) return t('dateIndicators.today', 'TODAY');\n if (dueDate === tomorrow) return t('dateIndicators.tomorrow', 'TOMORROW');\n if (dueDate === yesterday) return t('dateIndicators.yesterday', 'YESTERDAY');\n return new Date(dueDate).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n };\n var formatRecurrence = function formatRecurrence(recurrenceType) {\n switch (recurrenceType) {\n case 'daily':\n return t('recurrence.daily', 'Daily');\n case 'weekly':\n return t('recurrence.weekly', 'Weekly');\n case 'monthly':\n return t('recurrence.monthly', 'Monthly');\n case 'monthly_weekday':\n return t('recurrence.monthlyWeekday', 'Monthly');\n case 'monthly_last_day':\n return t('recurrence.monthlyLastDay', 'Monthly');\n default:\n return t('recurrence.recurring', 'Recurring');\n }\n };\n var handleTodayToggle = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {\n var _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n e.stopPropagation(); // Prevent opening task modal\n if (!(onToggleToday && task.id)) {\n _context.n = 4;\n break;\n }\n _context.p = 1;\n _context.n = 2;\n return onToggleToday(task.id);\n case 2:\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n console.error('Failed to toggle today status:', _t);\n case 4:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3]]);\n }));\n return function handleTodayToggle(_x) {\n return _ref2.apply(this, arguments);\n };\n }();\n var handlePlayToggle = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(e) {\n var isCurrentlyInProgress, updatedTask, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n e.stopPropagation(); // Prevent opening task modal\n if (!(task.id && (task.status === 'not_started' || task.status === 'in_progress' || task.status === 0 || task.status === 1) && onTaskUpdate)) {\n _context2.n = 4;\n break;\n }\n _context2.p = 1;\n isCurrentlyInProgress = task.status === 'in_progress' || task.status === 1;\n updatedTask = _objectSpread(_objectSpread({}, task), {}, {\n status: isCurrentlyInProgress ? 'not_started' : 'in_progress',\n // Automatically add to today plan when setting to in_progress\n today: isCurrentlyInProgress ? task.today : true\n });\n _context2.n = 2;\n return onTaskUpdate(updatedTask);\n case 2:\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n console.error('Failed to toggle in progress status:', _t2);\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function handlePlayToggle(_x2) {\n return _ref3.apply(this, arguments);\n };\n }();\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"py-2 px-4 cursor-pointer group\",\n onClick: onTaskClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"hidden md:flex flex-col md:flex-row md:items-center md:justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-4 mb-2 md:mb-0\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskPriorityIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n priority: task.priority,\n status: task.status,\n onToggleCompletion: onToggleCompletion\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-md text-gray-900 dark:text-gray-100\"\n }, task.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center text-xs text-gray-500 dark:text-gray-400\"\n }, project && !hideProjectName && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, project.name)), project && !hideProjectName && task.tags && task.tags.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"mx-2\"\n }, \"\\u2022\"), task.tags && task.tags.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, task.tags.map(function (tag) {\n return tag.name;\n }).join(', '))), (project && !hideProjectName || task.tags && task.tags.length > 0) && task.due_date && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"mx-2\"\n }, \"\\u2022\"), task.due_date && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, formatDueDate(task.due_date))), (project && !hideProjectName || task.tags && task.tags.length > 0 || task.due_date) && task.recurrence_type && task.recurrence_type !== 'none' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"mx-2\"\n }, \"\\u2022\"), task.recurrence_type && task.recurrence_type !== 'none' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, formatRecurrence(task.recurrence_type)))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center flex-wrap justify-start md:justify-end space-x-2\"\n }, onToggleToday && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleTodayToggle,\n className: \"items-center justify-center \".concat(Number(task.today_move_count) > 1 ? 'px-2 h-6' : 'w-6 h-6', \" rounded-full transition-all duration-200 opacity-0 group-hover:opacity-100 \").concat(task.today ? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 flex' : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 hidden group-hover:flex'),\n title: task.today ? t('tasks.removeFromToday', 'Remove from today plan') : t('tasks.addToToday', 'Add to today plan')\n }, task.today ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-3 w-3\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3 w-3\"\n }), Number(task.today_move_count) > 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"ml-1 text-xs font-medium\"\n }, Number(task.today_move_count))), (task.status === 'not_started' || task.status === 'in_progress' || task.status === 0 || task.status === 1) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handlePlayToggle,\n className: \"flex items-center justify-center w-6 h-6 rounded-full transition-all duration-200 \".concat(task.status === 'in_progress' || task.status === 1 ? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 animate-pulse' : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 opacity-0 group-hover:opacity-100'),\n title: task.status === 'in_progress' || task.status === 1 ? t('tasks.setNotStarted', 'Set to not started') : t('tasks.setInProgress', 'Set in progress')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-3 w-3\"\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"block md:hidden\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start font-light text-md text-gray-900 dark:text-gray-100\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskPriorityIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n priority: task.priority,\n status: task.status,\n onToggleCompletion: onToggleCompletion\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"ml-2 flex flex-col flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, task.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col text-xs text-gray-500 dark:text-gray-400 mt-1 space-y-1\"\n }, project && !hideProjectName && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, project.name)), task.tags && task.tags.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, task.tags.map(function (tag) {\n return tag.name;\n }).join(', '))), task.due_date && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, formatDueDate(task.due_date))), task.recurrence_type && task.recurrence_type !== 'none' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, formatRecurrence(task.recurrence_type)))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center flex-wrap justify-start space-x-2 mt-2 ml-8\"\n }, (task.status === 'not_started' || task.status === 'in_progress' || task.status === 0 || task.status === 1) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handlePlayToggle,\n className: \"flex items-center justify-center w-6 h-6 rounded-full transition-all duration-200 \".concat(task.status === 'in_progress' || task.status === 1 ? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 animate-pulse' : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 opacity-0 group-hover:opacity-100'),\n title: task.status === 'in_progress' || task.status === 1 ? t('tasks.setNotStarted', 'Set to not started') : t('tasks.setInProgress', 'Set in progress')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-3 w-3\"\n })), onToggleToday && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleTodayToggle,\n className: \"items-center justify-center \".concat(task.today_move_count && task.today_move_count > 1 ? 'px-2 h-6' : 'w-6 h-6', \" rounded-full transition-all duration-200 opacity-0 group-hover:opacity-100 \").concat(task.today ? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 flex' : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 hidden group-hover:flex'),\n title: task.today ? t('tasks.removeFromToday', 'Remove from today plan') : t('tasks.addToToday', 'Add to today plan')\n }, task.today ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-3 w-3\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3 w-3\"\n }), task.today_move_count && task.today_move_count > 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"ml-1 text-xs font-medium\"\n }, task.today_move_count)))));\n};\n_s(TaskHeader, \"zlIdU9EjM2llFt74AbE2KsUJXyM=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation];\n});\n_c = TaskHeader;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TaskHeader);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"TaskHeader\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Task/TaskHeader.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CalendarIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowPathIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CalendarDaysIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/PlayIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/FolderIcon.js\");\n/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @heroicons/react/24/solid */ \"./node_modules/@heroicons/react/24/solid/esm/TagIcon.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var _TaskPriorityIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TaskPriorityIcon */ \"./frontend/components/Task/TaskPriorityIcon.tsx\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n\n\n\n\n\nvar TaskHeader = function TaskHeader(_ref) {\n _s();\n var task = _ref.task,\n project = _ref.project,\n onTaskClick = _ref.onTaskClick,\n onToggleCompletion = _ref.onToggleCompletion,\n _ref$hideProjectName = _ref.hideProjectName,\n hideProjectName = _ref$hideProjectName === void 0 ? false : _ref$hideProjectName,\n onToggleToday = _ref.onToggleToday,\n onTaskUpdate = _ref.onTaskUpdate,\n _ref$isOverdue = _ref.isOverdue,\n isOverdue = _ref$isOverdue === void 0 ? false : _ref$isOverdue;\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n var formatDueDate = function formatDueDate(dueDate) {\n var today = new Date().toISOString().split('T')[0];\n var tomorrow = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString().split('T')[0];\n var yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString().split('T')[0];\n if (dueDate === today) return t('dateIndicators.today', 'TODAY');\n if (dueDate === tomorrow) return t('dateIndicators.tomorrow', 'TOMORROW');\n if (dueDate === yesterday) return t('dateIndicators.yesterday', 'YESTERDAY');\n return new Date(dueDate).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n };\n var formatRecurrence = function formatRecurrence(recurrenceType) {\n switch (recurrenceType) {\n case 'daily':\n return t('recurrence.daily', 'Daily');\n case 'weekly':\n return t('recurrence.weekly', 'Weekly');\n case 'monthly':\n return t('recurrence.monthly', 'Monthly');\n case 'monthly_weekday':\n return t('recurrence.monthlyWeekday', 'Monthly');\n case 'monthly_last_day':\n return t('recurrence.monthlyLastDay', 'Monthly');\n default:\n return t('recurrence.recurring', 'Recurring');\n }\n };\n var handleTodayToggle = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {\n var _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n e.stopPropagation(); // Prevent opening task modal\n if (!(onToggleToday && task.id)) {\n _context.n = 4;\n break;\n }\n _context.p = 1;\n _context.n = 2;\n return onToggleToday(task.id);\n case 2:\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n console.error('Failed to toggle today status:', _t);\n case 4:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3]]);\n }));\n return function handleTodayToggle(_x) {\n return _ref2.apply(this, arguments);\n };\n }();\n var handlePlayToggle = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(e) {\n var isCurrentlyInProgress, updatedTask, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n e.stopPropagation(); // Prevent opening task modal\n if (!(task.id && (task.status === 'not_started' || task.status === 'in_progress' || task.status === 0 || task.status === 1) && onTaskUpdate)) {\n _context2.n = 4;\n break;\n }\n _context2.p = 1;\n isCurrentlyInProgress = task.status === 'in_progress' || task.status === 1;\n updatedTask = _objectSpread(_objectSpread({}, task), {}, {\n status: isCurrentlyInProgress ? 'not_started' : 'in_progress',\n // Automatically add to today plan when setting to in_progress\n today: isCurrentlyInProgress ? task.today : true\n });\n _context2.n = 2;\n return onTaskUpdate(updatedTask);\n case 2:\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n console.error('Failed to toggle in progress status:', _t2);\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function handlePlayToggle(_x2) {\n return _ref3.apply(this, arguments);\n };\n }();\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"py-2 px-4 cursor-pointer group\",\n onClick: onTaskClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"hidden md:flex flex-col md:flex-row md:items-center md:justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-4 mb-2 md:mb-0\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskPriorityIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n priority: task.priority,\n status: task.status,\n onToggleCompletion: onToggleCompletion\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-md text-gray-900 dark:text-gray-100\"\n }, task.name), isOverdue && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"ml-2 px-2 py-0.5 text-xs bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300 rounded-md\",\n title: \"Task has been in today plan for a while\"\n }, \"overdue\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center text-xs text-gray-500 dark:text-gray-400\"\n }, project && !hideProjectName && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, project.name)), project && !hideProjectName && task.tags && task.tags.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"mx-2\"\n }, \"\\u2022\"), task.tags && task.tags.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, task.tags.map(function (tag) {\n return tag.name;\n }).join(', '))), (project && !hideProjectName || task.tags && task.tags.length > 0) && task.due_date && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"mx-2\"\n }, \"\\u2022\"), task.due_date && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, formatDueDate(task.due_date))), (project && !hideProjectName || task.tags && task.tags.length > 0 || task.due_date) && task.recurrence_type && task.recurrence_type !== 'none' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"mx-2\"\n }, \"\\u2022\"), task.recurrence_type && task.recurrence_type !== 'none' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, formatRecurrence(task.recurrence_type)))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center flex-wrap justify-start md:justify-end space-x-2\"\n }, onToggleToday && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleTodayToggle,\n className: \"items-center justify-center \".concat(Number(task.today_move_count) > 1 ? 'px-2 h-6' : 'w-6 h-6', \" rounded-full transition-all duration-200 opacity-0 group-hover:opacity-100 \").concat(task.today ? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 flex' : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 hidden group-hover:flex'),\n title: task.today ? t('tasks.removeFromToday', 'Remove from today plan') : t('tasks.addToToday', 'Add to today plan')\n }, task.today ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-3 w-3\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3 w-3\"\n }), Number(task.today_move_count) > 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"ml-1 text-xs font-medium\"\n }, Number(task.today_move_count))), (task.status === 'not_started' || task.status === 'in_progress' || task.status === 0 || task.status === 1) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handlePlayToggle,\n className: \"flex items-center justify-center w-6 h-6 rounded-full transition-all duration-200 \".concat(task.status === 'in_progress' || task.status === 1 ? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 animate-pulse' : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 opacity-0 group-hover:opacity-100'),\n title: task.status === 'in_progress' || task.status === 1 ? t('tasks.setNotStarted', 'Set to not started') : t('tasks.setInProgress', 'Set in progress')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-3 w-3\"\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"block md:hidden\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-start font-light text-md text-gray-900 dark:text-gray-100\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskPriorityIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n priority: task.priority,\n status: task.status,\n onToggleCompletion: onToggleCompletion\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"ml-2 flex flex-col flex-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, task.name), isOverdue && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"ml-2 px-2 py-0.5 text-xs bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300 rounded-md\",\n title: \"Task has been in today plan for a while\"\n }, \"overdue\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col text-xs text-gray-500 dark:text-gray-400 mt-1 space-y-1\"\n }, project && !hideProjectName && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, project.name)), task.tags && task.tags.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, task.tags.map(function (tag) {\n return tag.name;\n }).join(', '))), task.due_date && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, formatDueDate(task.due_date))), task.recurrence_type && task.recurrence_type !== 'none' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-3 w-3 mr-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, formatRecurrence(task.recurrence_type)))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center flex-wrap justify-start space-x-2 mt-2 ml-8\"\n }, (task.status === 'not_started' || task.status === 'in_progress' || task.status === 0 || task.status === 1) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handlePlayToggle,\n className: \"flex items-center justify-center w-6 h-6 rounded-full transition-all duration-200 \".concat(task.status === 'in_progress' || task.status === 1 ? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 animate-pulse' : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 opacity-0 group-hover:opacity-100'),\n title: task.status === 'in_progress' || task.status === 1 ? t('tasks.setNotStarted', 'Set to not started') : t('tasks.setInProgress', 'Set in progress')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-3 w-3\"\n })), onToggleToday && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: handleTodayToggle,\n className: \"items-center justify-center \".concat(Number(task.today_move_count) > 1 ? 'px-2 h-6' : 'w-6 h-6', \" rounded-full transition-all duration-200 opacity-0 group-hover:opacity-100 \").concat(task.today ? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 flex' : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 hidden group-hover:flex'),\n title: task.today ? t('tasks.removeFromToday', 'Remove from today plan') : t('tasks.addToToday', 'Add to today plan')\n }, task.today ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-3 w-3\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-3 w-3\"\n }), Number(task.today_move_count) > 1 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"ml-1 text-xs font-medium\"\n }, Number(task.today_move_count))))));\n};\n_s(TaskHeader, \"zlIdU9EjM2llFt74AbE2KsUJXyM=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation];\n});\n_c = TaskHeader;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TaskHeader);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"TaskHeader\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Task/TaskHeader.tsx?"); /***/ }), @@ -643,7 +632,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _TaskHeader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TaskHeader */ \"./frontend/components/Task/TaskHeader.tsx\");\n/* harmony import */ var _TaskModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TaskModal */ \"./frontend/components/Task/TaskModal.tsx\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\nvar TaskItem = function TaskItem(_ref) {\n _s();\n var task = _ref.task,\n onTaskUpdate = _ref.onTaskUpdate,\n onTaskDelete = _ref.onTaskDelete,\n projects = _ref.projects,\n _ref$hideProjectName = _ref.hideProjectName,\n hideProjectName = _ref$hideProjectName === void 0 ? false : _ref$hideProjectName,\n onToggleToday = _ref.onToggleToday;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState2 = _slicedToArray(_useState, 2),\n isModalOpen = _useState2[0],\n setIsModalOpen = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(projects),\n _useState4 = _slicedToArray(_useState3, 2),\n projectList = _useState4[0],\n setProjectList = _useState4[1];\n var handleTaskClick = function handleTaskClick() {\n setIsModalOpen(true);\n };\n var handleSave = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(updatedTask) {\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.n = 1;\n return onTaskUpdate(updatedTask);\n case 1:\n setIsModalOpen(false);\n case 2:\n return _context.a(2);\n }\n }, _callee);\n }));\n return function handleSave(_x) {\n return _ref2.apply(this, arguments);\n };\n }();\n var handleDelete = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(taskId) {\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!task.id) {\n _context2.n = 1;\n break;\n }\n _context2.n = 1;\n return onTaskDelete(task.id);\n case 1:\n return _context2.a(2);\n }\n }, _callee2);\n }));\n return function handleDelete(_x2) {\n return _ref3.apply(this, arguments);\n };\n }();\n var handleToggleCompletion = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var updatedTask, _t;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n if (!task.id) {\n _context3.n = 5;\n break;\n }\n _context3.p = 1;\n _context3.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.toggleTaskCompletion)(task.id);\n case 2:\n updatedTask = _context3.v;\n _context3.n = 3;\n return onTaskUpdate(updatedTask);\n case 3:\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t = _context3.v;\n case 5:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 4]]);\n }));\n return function handleToggleCompletion() {\n return _ref4.apply(this, arguments);\n };\n }();\n var handleCreateProject = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(name) {\n var response, newProject, _t2;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n _context4.p = 0;\n _context4.n = 1;\n return fetch('/api/project', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n name: name,\n active: true\n })\n });\n case 1:\n response = _context4.v;\n if (response.ok) {\n _context4.n = 2;\n break;\n }\n throw new Error('Failed to create project');\n case 2:\n _context4.n = 3;\n return response.json();\n case 3:\n newProject = _context4.v;\n setProjectList(function (prevProjects) {\n return [].concat(_toConsumableArray(prevProjects), [newProject]);\n });\n return _context4.a(2, newProject);\n case 4:\n _context4.p = 4;\n _t2 = _context4.v;\n throw _t2;\n case 5:\n return _context4.a(2);\n }\n }, _callee4, null, [[0, 4]]);\n }));\n return function handleCreateProject(_x3) {\n return _ref5.apply(this, arguments);\n };\n }();\n\n // Use the project from the task's included data if available, otherwise find from projectList\n var project = task.Project || projectList.find(function (p) {\n return p.id === task.project_id;\n });\n\n // Check if task is in progress to apply pulsing border animation\n var isInProgress = task.status === 'in_progress' || task.status === 1;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"rounded-lg shadow-sm bg-white dark:bg-gray-900 mt-1 \".concat(isInProgress ? 'border-2 border-green-400/60 dark:border-green-500/60' : 'border-2 border-gray-50 dark:border-gray-800')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskHeader__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n task: task,\n project: project,\n onTaskClick: handleTaskClick,\n onToggleCompletion: handleToggleCompletion,\n hideProjectName: hideProjectName,\n onToggleToday: onToggleToday,\n onTaskUpdate: onTaskUpdate\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isModalOpen,\n onClose: function onClose() {\n return setIsModalOpen(false);\n },\n task: task,\n onSave: handleSave,\n onDelete: handleDelete,\n projects: projectList,\n onCreateProject: handleCreateProject\n }));\n};\n_s(TaskItem, \"nPVTAiszvgH11lFcf0xprYGPwt4=\");\n_c = TaskItem;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TaskItem);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"TaskItem\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Task/TaskItem.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 _TaskHeader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TaskHeader */ \"./frontend/components/Task/TaskHeader.tsx\");\n/* harmony import */ var _TaskModal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TaskModal */ \"./frontend/components/Task/TaskModal.tsx\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _utils_dateUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtils */ \"./frontend/utils/dateUtils.ts\");\n/* harmony import */ var _hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/useModalEvents */ \"./frontend/hooks/useModalEvents.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\nvar TaskItem = function TaskItem(_ref) {\n _s();\n var task = _ref.task,\n onTaskUpdate = _ref.onTaskUpdate,\n onTaskDelete = _ref.onTaskDelete,\n projects = _ref.projects,\n _ref$hideProjectName = _ref.hideProjectName,\n hideProjectName = _ref$hideProjectName === void 0 ? false : _ref$hideProjectName,\n onToggleToday = _ref.onToggleToday;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState2 = _slicedToArray(_useState, 2),\n isModalOpen = _useState2[0],\n setIsModalOpen = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(projects),\n _useState4 = _slicedToArray(_useState3, 2),\n projectList = _useState4[0],\n setProjectList = _useState4[1];\n\n // Dispatch global modal events\n (0,_hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__.useModalEvents)(isModalOpen);\n var handleTaskClick = function handleTaskClick() {\n setIsModalOpen(true);\n };\n var handleSave = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(updatedTask) {\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.n = 1;\n return onTaskUpdate(updatedTask);\n case 1:\n setIsModalOpen(false);\n case 2:\n return _context.a(2);\n }\n }, _callee);\n }));\n return function handleSave(_x) {\n return _ref2.apply(this, arguments);\n };\n }();\n var handleDelete = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(taskId) {\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!task.id) {\n _context2.n = 1;\n break;\n }\n _context2.n = 1;\n return onTaskDelete(task.id);\n case 1:\n return _context2.a(2);\n }\n }, _callee2);\n }));\n return function handleDelete(_x2) {\n return _ref3.apply(this, arguments);\n };\n }();\n var handleToggleCompletion = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var updatedTask, _t;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n if (!task.id) {\n _context3.n = 5;\n break;\n }\n _context3.p = 1;\n _context3.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.toggleTaskCompletion)(task.id);\n case 2:\n updatedTask = _context3.v;\n _context3.n = 3;\n return onTaskUpdate(updatedTask);\n case 3:\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t = _context3.v;\n case 5:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 4]]);\n }));\n return function handleToggleCompletion() {\n return _ref4.apply(this, arguments);\n };\n }();\n var handleCreateProject = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(name) {\n var response, newProject, _t2;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n _context4.p = 0;\n _context4.n = 1;\n return fetch('/api/project', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n name: name,\n active: true\n })\n });\n case 1:\n response = _context4.v;\n if (response.ok) {\n _context4.n = 2;\n break;\n }\n throw new Error('Failed to create project');\n case 2:\n _context4.n = 3;\n return response.json();\n case 3:\n newProject = _context4.v;\n setProjectList(function (prevProjects) {\n return [].concat(_toConsumableArray(prevProjects), [newProject]);\n });\n return _context4.a(2, newProject);\n case 4:\n _context4.p = 4;\n _t2 = _context4.v;\n throw _t2;\n case 5:\n return _context4.a(2);\n }\n }, _callee4, null, [[0, 4]]);\n }));\n return function handleCreateProject(_x3) {\n return _ref5.apply(this, arguments);\n };\n }();\n\n // Use the project from the task's included data if available, otherwise find from projectList\n var project = task.Project || projectList.find(function (p) {\n return p.id === task.project_id;\n });\n\n // Check if task is in progress to apply pulsing border animation\n var isInProgress = task.status === 'in_progress' || task.status === 1;\n\n // Check if task is overdue (created yesterday or earlier and not completed)\n var isOverdue = (0,_utils_dateUtils__WEBPACK_IMPORTED_MODULE_4__.isTaskOverdue)(task);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"rounded-lg shadow-sm bg-white dark:bg-gray-900 mt-1 \".concat(isInProgress ? 'border-2 border-green-400/60 dark:border-green-500/60' : 'border-2 border-gray-50 dark:border-gray-800')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskHeader__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n task: task,\n project: project,\n onTaskClick: handleTaskClick,\n onToggleCompletion: handleToggleCompletion,\n hideProjectName: hideProjectName,\n onToggleToday: onToggleToday,\n onTaskUpdate: onTaskUpdate,\n isOverdue: isOverdue\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskModal__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isOpen: isModalOpen,\n onClose: function onClose() {\n return setIsModalOpen(false);\n },\n task: task,\n onSave: handleSave,\n onDelete: handleDelete,\n projects: projectList,\n onCreateProject: handleCreateProject\n }));\n};\n_s(TaskItem, \"HuoIldrRkimoruvo/lCAgxgoLnY=\", false, function () {\n return [_hooks_useModalEvents__WEBPACK_IMPORTED_MODULE_5__.useModalEvents];\n});\n_c = TaskItem;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TaskItem);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"TaskItem\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Task/TaskItem.tsx?"); /***/ }), @@ -709,7 +698,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 date_fns__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/format.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/el.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/es.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/ja.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/uk.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/de.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/en-US.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18next */ \"./node_modules/i18next/dist/esm/i18next.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CalendarDaysIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CogIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ClipboardDocumentListIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowPathIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CheckCircleIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowUpIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowDownIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/FolderIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ChevronRightIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ChevronDownIcon.js\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _utils_projectsService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/projectsService */ \"./frontend/utils/projectsService.ts\");\n/* harmony import */ var _store_useStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../store/useStore */ \"./frontend/store/useStore.ts\");\n/* harmony import */ var _TaskList__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TaskList */ \"./frontend/components/Task/TaskList.tsx\");\n/* harmony import */ var _TodayPlan__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./TodayPlan */ \"./frontend/components/Task/TodayPlan.tsx\");\n/* harmony import */ var _Productivity_ProductivityAssistant__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Productivity/ProductivityAssistant */ \"./frontend/components/Productivity/ProductivityAssistant.tsx\");\n/* harmony import */ var _NextTaskSuggestion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./NextTaskSuggestion */ \"./frontend/components/Task/NextTaskSuggestion.tsx\");\n/* harmony import */ var _WeeklyCompletionChart__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./WeeklyCompletionChart */ \"./frontend/components/Task/WeeklyCompletionChart.tsx\");\n/* harmony import */ var _TodaySettingsDropdown__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./TodaySettingsDropdown */ \"./frontend/components/Task/TodaySettingsDropdown.tsx\");\n/* harmony import */ var _utils_profileService__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/profileService */ \"./frontend/utils/profileService.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar getLocale = function getLocale(language) {\n switch (language) {\n case 'el':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_13__.el;\n case 'es':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_14__.es;\n case 'jp':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_15__.ja;\n case 'ua':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_16__.uk;\n case 'de':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_17__.de;\n default:\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_18__.enUS;\n }\n};\nvar TasksToday = function TasksToday() {\n _s();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n\n // Don't use multiple separate useStore calls - combine them into one\n var store = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_5__.useStore)();\n\n // Use local state for data instead of directly using store state\n // This prevents unnecessary re-renders from store updates\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n localTasks = _useState2[0],\n setLocalTasks = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState4 = _slicedToArray(_useState3, 2),\n localProjects = _useState4[0],\n setLocalProjects = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isLoading = _useState6[0],\n setIsLoading = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isError = _useState8[0],\n setIsError = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(''),\n _useState0 = _slicedToArray(_useState9, 2),\n dailyQuote = _useState0[0],\n setDailyQuote = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState10 = _slicedToArray(_useState1, 2),\n productivityAssistantEnabled = _useState10[0],\n setProductivityAssistantEnabled = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState12 = _slicedToArray(_useState11, 2),\n isSettingsDropdownOpen = _useState12[0],\n setIsSettingsDropdownOpen = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n showMetrics: false,\n showProductivity: false,\n showIntelligence: false,\n showDueToday: true,\n showCompleted: true,\n showProgressBar: true,\n // Always enabled\n showDailyQuote: true\n }),\n _useState14 = _slicedToArray(_useState13, 2),\n todaySettings = _useState14[0],\n setTodaySettings = _useState14[1];\n var _useState15 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState16 = _slicedToArray(_useState15, 2),\n nextTaskSuggestionEnabled = _useState16[0],\n setNextTaskSuggestionEnabled = _useState16[1];\n var _useState17 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () {\n var stored = sessionStorage.getItem('hideNextTaskSuggestion');\n return stored !== 'true';\n }),\n _useState18 = _slicedToArray(_useState17, 2),\n showNextTaskSuggestion = _useState18[0],\n setShowNextTaskSuggestion = _useState18[1];\n var _useState19 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () {\n var stored = localStorage.getItem('suggestedTasksCollapsed');\n return stored === 'true';\n }),\n _useState20 = _slicedToArray(_useState19, 2),\n isSuggestedCollapsed = _useState20[0],\n setIsSuggestedCollapsed = _useState20[1];\n var _useState21 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () {\n var stored = localStorage.getItem('completedTasksCollapsed');\n return stored === 'true';\n }),\n _useState22 = _slicedToArray(_useState21, 2),\n isCompletedCollapsed = _useState22[0],\n setIsCompletedCollapsed = _useState22[1];\n\n // Metrics from the API\n var _useState23 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n total_open_tasks: 0,\n tasks_pending_over_month: 0,\n tasks_in_progress_count: 0,\n tasks_in_progress: [],\n tasks_due_today: [],\n suggested_tasks: [],\n tasks_completed_today: [],\n weekly_completions: []\n }),\n _useState24 = _slicedToArray(_useState23, 2),\n metrics = _useState24[0],\n setMetrics = _useState24[1];\n\n // Helper function to get completion trend vs average\n var getCompletionTrend = function getCompletionTrend() {\n var todayCount = metrics.tasks_completed_today.length;\n\n // Calculate average: sum of all completed tasks divided by 7 days\n // The average represents the daily average across the week\n if (metrics.weekly_completions.length === 0) {\n return {\n direction: 'same',\n difference: 0,\n percentage: 0,\n todayCount: todayCount,\n averageCount: 0\n };\n }\n\n // Sum all completed tasks from the weekly data\n var totalCompletedTasks = metrics.weekly_completions.reduce(function (sum, completion) {\n return sum + completion.count;\n }, 0);\n\n // Average is total completed tasks divided by 7\n var averageCount = totalCompletedTasks / 7;\n\n // Calculate percentage change vs average\n var percentage = 0;\n if (averageCount > 0) {\n percentage = Math.round((todayCount - averageCount) / averageCount * 100);\n } else if (todayCount > 0) {\n // If average was 0 but today has completions, it's a 100%+ increase\n percentage = 100;\n }\n if (todayCount > averageCount) {\n return {\n direction: 'up',\n difference: Math.round((todayCount - averageCount) * 10) / 10,\n // Round to 1 decimal\n percentage: Math.abs(percentage),\n todayCount: todayCount,\n averageCount: Math.round(averageCount * 10) / 10 // Round to 1 decimal\n };\n } else if (todayCount < averageCount) {\n return {\n direction: 'down',\n difference: Math.round((averageCount - todayCount) * 10) / 10,\n // Round to 1 decimal\n percentage: Math.abs(percentage),\n todayCount: todayCount,\n averageCount: Math.round(averageCount * 10) / 10 // Round to 1 decimal\n };\n } else {\n return {\n direction: 'same',\n difference: 0,\n percentage: 0,\n todayCount: todayCount,\n averageCount: Math.round(averageCount * 10) / 10 // Round to 1 decimal\n };\n }\n };\n\n // Track mounting state to prevent state updates after unmount\n var isMounted = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(false);\n\n // Function to handle next task suggestion dismissal\n var handleCloseNextTaskSuggestion = function handleCloseNextTaskSuggestion() {\n setShowNextTaskSuggestion(false);\n sessionStorage.setItem('hideNextTaskSuggestion', 'true');\n };\n\n // Toggle functions for collapsible sections\n var toggleSuggestedCollapsed = function toggleSuggestedCollapsed() {\n var newState = !isSuggestedCollapsed;\n setIsSuggestedCollapsed(newState);\n localStorage.setItem('suggestedTasksCollapsed', newState.toString());\n };\n var toggleCompletedCollapsed = function toggleCompletedCollapsed() {\n var newState = !isCompletedCollapsed;\n setIsCompletedCollapsed(newState);\n localStorage.setItem('completedTasksCollapsed', newState.toString());\n };\n\n // Load data once on component mount\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n isMounted.current = true;\n\n // Only fetch data once on mount\n var loadData = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var isEnabled, isNextTaskEnabled, projectsData, safeProjectsData, _yield$fetchTasks, fetchedTasks, fetchedMetrics, response, data, randomIndex, fallbackResponse, fallbackData, _randomIndex, _response, userData, settings, _t, _t2, _t3, _t4, _t5, _t6;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n if (isMounted.current) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n setIsLoading(true);\n setIsError(false);\n _context.p = 2;\n _context.n = 3;\n return (0,_utils_profileService__WEBPACK_IMPORTED_MODULE_12__.getProductivityAssistantEnabled)();\n case 3:\n isEnabled = _context.v;\n if (isMounted.current) {\n setProductivityAssistantEnabled(isEnabled);\n }\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n console.error(\"Failed to load productivity assistant setting:\", _t);\n case 5:\n _context.p = 5;\n _context.n = 6;\n return (0,_utils_profileService__WEBPACK_IMPORTED_MODULE_12__.getNextTaskSuggestionEnabled)();\n case 6:\n isNextTaskEnabled = _context.v;\n if (isMounted.current) {\n setNextTaskSuggestionEnabled(isNextTaskEnabled);\n }\n _context.n = 8;\n break;\n case 7:\n _context.p = 7;\n _t2 = _context.v;\n console.error(\"Failed to load next task suggestion setting:\", _t2);\n case 8:\n _context.p = 8;\n _context.n = 9;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.fetchProjects)();\n case 9:\n projectsData = _context.v;\n if (isMounted.current) {\n safeProjectsData = Array.isArray(projectsData) ? projectsData : [];\n setLocalProjects(safeProjectsData);\n store.projectsStore.setProjects(safeProjectsData);\n }\n _context.n = 11;\n break;\n case 10:\n _context.p = 10;\n _t3 = _context.v;\n console.error('Projects loading error:', _t3);\n if (isMounted.current) {\n setLocalProjects([]);\n setIsError(true);\n }\n case 11:\n _context.p = 11;\n _context.n = 12;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.fetchTasks)(\"?type=today\");\n case 12:\n _yield$fetchTasks = _context.v;\n fetchedTasks = _yield$fetchTasks.tasks;\n fetchedMetrics = _yield$fetchTasks.metrics;\n if (isMounted.current) {\n setLocalTasks(fetchedTasks);\n setMetrics(fetchedMetrics);\n // Also update the store\n store.tasksStore.setTasks(fetchedTasks);\n }\n _context.n = 14;\n break;\n case 13:\n _context.p = 13;\n _t4 = _context.v;\n console.error(\"Failed to fetch tasks:\", _t4);\n if (isMounted.current) {\n setIsError(true);\n }\n case 14:\n _context.p = 14;\n if (isMounted.current) {\n setIsLoading(false);\n }\n return _context.f(14);\n case 15:\n _context.p = 15;\n _context.n = 16;\n return fetch(\"/locales/\".concat(i18next__WEBPACK_IMPORTED_MODULE_2__[\"default\"].language, \"/quotes.json\"));\n case 16:\n response = _context.v;\n if (!response.ok) {\n _context.n = 18;\n break;\n }\n _context.n = 17;\n return response.json();\n case 17:\n data = _context.v;\n if (isMounted.current && data.quotes && data.quotes.length > 0) {\n // Get a random quote from the translated quotes\n randomIndex = Math.floor(Math.random() * data.quotes.length);\n setDailyQuote(data.quotes[randomIndex]);\n }\n _context.n = 21;\n break;\n case 18:\n _context.n = 19;\n return fetch('/locales/en/quotes.json');\n case 19:\n fallbackResponse = _context.v;\n if (!fallbackResponse.ok) {\n _context.n = 21;\n break;\n }\n _context.n = 20;\n return fallbackResponse.json();\n case 20:\n fallbackData = _context.v;\n if (isMounted.current && fallbackData.quotes && fallbackData.quotes.length > 0) {\n _randomIndex = Math.floor(Math.random() * fallbackData.quotes.length);\n setDailyQuote(fallbackData.quotes[_randomIndex]);\n }\n case 21:\n _context.n = 23;\n break;\n case 22:\n _context.p = 22;\n _t5 = _context.v;\n console.error(\"Failed to load daily quote:\", _t5);\n // Ultimate fallback\n if (isMounted.current) {\n setDailyQuote(\"Focus on progress, not perfection.\");\n }\n case 23:\n _context.p = 23;\n _context.n = 24;\n return fetch('/api/profile', {\n credentials: 'include'\n });\n case 24:\n _response = _context.v;\n if (!_response.ok) {\n _context.n = 26;\n break;\n }\n _context.n = 25;\n return _response.json();\n case 25:\n userData = _context.v;\n if (isMounted.current) {\n // Parse today_settings if it's a string, or use the object directly\n\n if (userData.today_settings) {\n if (typeof userData.today_settings === 'string') {\n try {\n settings = JSON.parse(userData.today_settings);\n } catch (error) {\n console.error('Error parsing today_settings:', error);\n settings = null;\n }\n } else {\n settings = userData.today_settings;\n }\n }\n\n // Use parsed settings or fall back to defaults\n settings = settings || {\n showMetrics: false,\n showProductivity: false,\n showIntelligence: false,\n showDueToday: true,\n showCompleted: true,\n showProgressBar: true,\n // Always enabled\n showDailyQuote: true\n };\n\n // Ensure progress bar is always enabled\n settings.showProgressBar = true;\n setTodaySettings(settings);\n }\n case 26:\n _context.n = 28;\n break;\n case 27:\n _context.p = 27;\n _t6 = _context.v;\n console.error(\"Failed to load user settings:\", _t6);\n case 28:\n return _context.a(2);\n }\n }, _callee, null, [[23, 27], [15, 22], [11, 13, 14, 15], [8, 10], [5, 7], [2, 4]]);\n }));\n return function loadData() {\n return _ref.apply(this, arguments);\n };\n }();\n loadData();\n\n // Cleanup function to prevent state updates after unmount\n return function () {\n isMounted.current = false;\n };\n }, []); // Empty dependency array - only run once on mount\n\n // Memoize task handlers to prevent recreating functions on each render\n var handleTaskUpdate = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(updatedTask) {\n var _yield$fetchTasks2, updatedTasks, _metrics, _t7;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!(!updatedTask.id || !isMounted.current)) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n setIsLoading(true);\n _context2.p = 2;\n _context2.n = 3;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.updateTask)(updatedTask.id, updatedTask);\n case 3:\n _context2.n = 4;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.fetchTasks)(\"?type=today\");\n case 4:\n _yield$fetchTasks2 = _context2.v;\n updatedTasks = _yield$fetchTasks2.tasks;\n _metrics = _yield$fetchTasks2.metrics;\n if (isMounted.current) {\n setLocalTasks(updatedTasks);\n setMetrics(_metrics);\n // Update store\n store.tasksStore.setTasks(updatedTasks);\n }\n _context2.n = 6;\n break;\n case 5:\n _context2.p = 5;\n _t7 = _context2.v;\n console.error(\"Error updating task:\", _t7);\n if (isMounted.current) {\n setIsError(true);\n }\n case 6:\n _context2.p = 6;\n if (isMounted.current) {\n setIsLoading(false);\n }\n return _context2.f(6);\n case 7:\n return _context2.a(2);\n }\n }, _callee2, null, [[2, 5, 6, 7]]);\n }));\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }(), [store.tasksStore]);\n var handleTaskDelete = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(taskId) {\n var _yield$fetchTasks3, updatedTasks, _metrics2, _t8;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n if (isMounted.current) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n setIsLoading(true);\n _context3.p = 2;\n _context3.n = 3;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.deleteTask)(taskId);\n case 3:\n _context3.n = 4;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.fetchTasks)(\"?type=today\");\n case 4:\n _yield$fetchTasks3 = _context3.v;\n updatedTasks = _yield$fetchTasks3.tasks;\n _metrics2 = _yield$fetchTasks3.metrics;\n if (isMounted.current) {\n setLocalTasks(updatedTasks);\n setMetrics(_metrics2);\n // Update store\n store.tasksStore.setTasks(updatedTasks);\n }\n _context3.n = 6;\n break;\n case 5:\n _context3.p = 5;\n _t8 = _context3.v;\n console.error(\"Error deleting task:\", _t8);\n if (isMounted.current) {\n setIsError(true);\n }\n case 6:\n _context3.p = 6;\n if (isMounted.current) {\n setIsLoading(false);\n }\n return _context3.f(6);\n case 7:\n return _context3.a(2);\n }\n }, _callee3, null, [[2, 5, 6, 7]]);\n }));\n return function (_x2) {\n return _ref3.apply(this, arguments);\n };\n }(), [store.tasksStore]);\n var handleToggleToday = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(/*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(taskId) {\n var _yield$fetchTasks4, updatedTasks, _metrics3, _t9;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n if (isMounted.current) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n _context4.p = 1;\n _context4.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.toggleTaskToday)(taskId);\n case 2:\n _context4.n = 3;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.fetchTasks)(\"?type=today\");\n case 3:\n _yield$fetchTasks4 = _context4.v;\n updatedTasks = _yield$fetchTasks4.tasks;\n _metrics3 = _yield$fetchTasks4.metrics;\n if (isMounted.current) {\n setLocalTasks(updatedTasks);\n setMetrics(_metrics3);\n // Update store\n store.tasksStore.setTasks(updatedTasks);\n }\n _context4.n = 5;\n break;\n case 4:\n _context4.p = 4;\n _t9 = _context4.v;\n console.error(\"Error toggling task today status:\", _t9);\n if (isMounted.current) {\n setIsError(true);\n }\n case 5:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 4]]);\n }));\n return function (_x3) {\n return _ref4.apply(this, arguments);\n };\n }(), [store.tasksStore]);\n\n // Calculate today's progress for the progress bar\n var getTodayProgress = function getTodayProgress() {\n var todayTasks = metrics.today_plan_tasks || [];\n var completedToday = metrics.tasks_completed_today.length;\n var totalTodayTasks = todayTasks.length + completedToday;\n return {\n completed: completedToday,\n total: totalTodayTasks,\n percentage: totalTodayTasks === 0 ? 0 : Math.round(completedToday / totalTodayTasks * 100)\n };\n };\n var todayProgress = getTodayProgress();\n\n // Handle settings change\n var handleSettingsChange = function handleSettingsChange(newSettings) {\n setTodaySettings(newSettings);\n };\n\n // Show loading state\n if (isLoading && localTasks.length === 0) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center items-center h-64\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-500 dark:text-gray-400\"\n }, t('common.loading', 'Loading...')));\n }\n\n // Show error state\n if (isError && localTasks.length === 0) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center items-center h-64\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-red-500\"\n }, t('errors.somethingWentWrong', 'Something went wrong')));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-end justify-between mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-5 w-5 mr-2 mb-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light mr-4\"\n }, t('tasks.today')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-gray-500\"\n }, (0,date_fns__WEBPACK_IMPORTED_MODULE_20__.format)(new Date(), \"PPP\", {\n locale: getLocale(i18next__WEBPACK_IMPORTED_MODULE_2__[\"default\"].language)\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-end space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"relative\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setIsSettingsDropdownOpen(!isSettingsDropdownOpen);\n },\n className: \"flex flex-row items-center p-2 group focus:outline-none rounded-md transition-all duration-200 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800\",\n title: t('settings.todayPageSettings', 'Today Page Settings')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n className: \"h-5 w-5\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-xs font-medium transition-all duration-200 max-w-0 overflow-hidden opacity-0 group-hover:max-w-xs group-hover:opacity-100 group-focus:max-w-xs group-focus:opacity-100 group-hover:ml-2 group-focus:ml-2\"\n }, t('common.settings', 'Settings'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TodaySettingsDropdown__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n isOpen: isSettingsDropdownOpen,\n onClose: function onClose() {\n return setIsSettingsDropdownOpen(false);\n },\n settings: todaySettings,\n onSettingsChange: handleSettingsChange\n })))), todaySettings.showProgressBar && todayProgress.total > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"h-1 rounded-full transition-all duration-500 ease-out bg-gradient-to-r from-blue-400 via-blue-500 to-blue-700\",\n style: {\n width: \"\".concat(todayProgress.percentage, \"%\")\n }\n })), todaySettings.showDailyQuote && dailyQuote && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-s text-gray-400 dark:text-gray-500 font-light text-left\"\n }, dailyQuote))))), todaySettings.showMetrics && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-2 grid grid-cols-1 lg:grid-cols-3 gap-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"bg-white dark:bg-gray-900 rounded-lg shadow p-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-sm font-medium mb-2 text-gray-700 dark:text-gray-300\"\n }, t('dashboard.overview')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"space-y-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n className: \"h-4 w-4 text-blue-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('tasks.backlog'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, metrics.total_open_tasks)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n className: \"h-4 w-4 text-green-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('tasks.inProgress'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, metrics.tasks_in_progress_count)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-4 w-4 text-red-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('tasks.dueToday'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, metrics.tasks_due_today.length)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n className: \"h-4 w-4 text-green-600 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('tasks.completedToday', 'Completed Today'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-1\"\n }, function () {\n var trend = getCompletionTrend();\n var getTooltipText = function getTooltipText() {\n if (trend.direction === 'same') {\n return t('dashboard.sameAsAverage', 'Same as average');\n } else if (trend.direction === 'up') {\n return t('dashboard.betterThanAverage', '{{percentage}}% more than average', {\n percentage: trend.percentage\n });\n } else {\n return t('dashboard.worseThanAverage', '{{percentage}}% less than average', {\n percentage: trend.percentage\n });\n }\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, (trend.direction === 'up' || trend.direction === 'down') && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"relative group\"\n }, trend.direction === 'up' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n className: \"h-3 w-3 text-green-500\"\n }), trend.direction === 'down' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n className: \"h-3 w-3 text-red-500\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-2 py-1 text-xs text-white bg-gray-900 dark:bg-gray-700 rounded opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none whitespace-nowrap z-10\"\n }, getTooltipText())), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, metrics.tasks_completed_today.length));\n }())), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n className: \"h-4 w-4 text-purple-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('projects.active'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, Array.isArray(localProjects) ? localProjects.filter(function (project) {\n return project.active;\n }).length : 0)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"lg:col-span-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_WeeklyCompletionChart__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n data: metrics.weekly_completions\n }))), todaySettings.showProductivity && productivityAssistantEnabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Productivity_ProductivityAssistant__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n tasks: localTasks,\n projects: localProjects\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TodayPlan__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n todayPlanTasks: metrics.today_plan_tasks || [],\n projects: localProjects,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n onToggleToday: handleToggleToday\n }), todaySettings.showIntelligence && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-8\"\n }, nextTaskSuggestionEnabled && showNextTaskSuggestion && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_NextTaskSuggestion__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n metrics: {\n tasks_due_today: metrics.tasks_due_today,\n suggested_tasks: metrics.suggested_tasks,\n tasks_in_progress: metrics.tasks_in_progress,\n today_plan_tasks: metrics.today_plan_tasks\n },\n onTaskUpdate: handleTaskUpdate,\n onClose: handleCloseNextTaskSuggestion\n }), metrics.suggested_tasks.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between cursor-pointer mt-6 mb-2 pb-2 border-b border-gray-200 dark:border-gray-700\",\n onClick: toggleSuggestedCollapsed\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-xl font-medium\"\n }, t('tasks.suggested')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-500 mr-2\"\n }, metrics.suggested_tasks.length), isSuggestedCollapsed ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }))), !isSuggestedCollapsed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskList__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tasks: metrics.suggested_tasks,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n projects: localProjects,\n onToggleToday: handleToggleToday\n }))), todaySettings.showDueToday && metrics.tasks_due_today.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-xl font-medium mt-6 mb-2\"\n }, t('tasks.dueToday')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskList__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tasks: metrics.tasks_due_today,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n projects: localProjects,\n onToggleToday: handleToggleToday\n })), todaySettings.showCompleted && metrics.tasks_completed_today.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between cursor-pointer mt-6 mb-2 pb-2 border-b border-gray-200 dark:border-gray-700\",\n onClick: toggleCompletedCollapsed\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-xl font-medium\"\n }, t('tasks.completedToday')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-500 mr-2\"\n }, metrics.tasks_completed_today.length), isCompletedCollapsed ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }))), !isCompletedCollapsed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskList__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tasks: metrics.tasks_completed_today,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n projects: localProjects,\n onToggleToday: handleToggleToday\n })), metrics.tasks_due_today.length === 0 && metrics.tasks_in_progress.length === 0 && metrics.suggested_tasks.length === 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-500 text-center mt-4\"\n }, t('tasks.noTasksAvailable'))));\n};\n_s(TasksToday, \"Hc8C7xHEanytcQXEnF7K/scGgfE=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _store_useStore__WEBPACK_IMPORTED_MODULE_5__.useStore];\n});\n_c = TasksToday;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TasksToday);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"TasksToday\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Task/TasksToday.tsx?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/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 date_fns__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/format.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/el.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/es.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/ja.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/uk.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/de.js\");\n/* harmony import */ var date_fns_locale__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! date-fns/locale */ \"./node_modules/date-fns/locale/en-US.js\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"./node_modules/react-i18next/dist/es/index.js\");\n/* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! i18next */ \"./node_modules/i18next/dist/esm/i18next.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CalendarDaysIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/Cog6ToothIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ClipboardDocumentListIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowPathIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/CheckCircleIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowUpIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ArrowDownIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/FolderIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ChevronRightIcon.js\");\n/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @heroicons/react/24/outline */ \"./node_modules/@heroicons/react/24/outline/esm/ChevronDownIcon.js\");\n/* harmony import */ var _utils_tasksService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/tasksService */ \"./frontend/utils/tasksService.ts\");\n/* harmony import */ var _utils_projectsService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/projectsService */ \"./frontend/utils/projectsService.ts\");\n/* harmony import */ var _store_useStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../store/useStore */ \"./frontend/store/useStore.ts\");\n/* harmony import */ var _TaskList__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TaskList */ \"./frontend/components/Task/TaskList.tsx\");\n/* harmony import */ var _TodayPlan__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./TodayPlan */ \"./frontend/components/Task/TodayPlan.tsx\");\n/* harmony import */ var _Productivity_ProductivityAssistant__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Productivity/ProductivityAssistant */ \"./frontend/components/Productivity/ProductivityAssistant.tsx\");\n/* harmony import */ var _NextTaskSuggestion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./NextTaskSuggestion */ \"./frontend/components/Task/NextTaskSuggestion.tsx\");\n/* harmony import */ var _WeeklyCompletionChart__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./WeeklyCompletionChart */ \"./frontend/components/Task/WeeklyCompletionChart.tsx\");\n/* harmony import */ var _TodaySettingsDropdown__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./TodaySettingsDropdown */ \"./frontend/components/Task/TodaySettingsDropdown.tsx\");\n/* harmony import */ var _utils_profileService__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/profileService */ \"./frontend/utils/profileService.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2); } }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar getLocale = function getLocale(language) {\n switch (language) {\n case 'el':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_13__.el;\n case 'es':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_14__.es;\n case 'jp':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_15__.ja;\n case 'ua':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_16__.uk;\n case 'de':\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_17__.de;\n default:\n return date_fns_locale__WEBPACK_IMPORTED_MODULE_18__.enUS;\n }\n};\nvar TasksToday = function TasksToday() {\n _s();\n var _useTranslation = (0,react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation)(),\n t = _useTranslation.t;\n\n // Don't use multiple separate useStore calls - combine them into one\n var store = (0,_store_useStore__WEBPACK_IMPORTED_MODULE_5__.useStore)();\n\n // Use local state for data instead of directly using store state\n // This prevents unnecessary re-renders from store updates\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n localTasks = _useState2[0],\n setLocalTasks = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState4 = _slicedToArray(_useState3, 2),\n localProjects = _useState4[0],\n setLocalProjects = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isLoading = _useState6[0],\n setIsLoading = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isError = _useState8[0],\n setIsError = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(''),\n _useState0 = _slicedToArray(_useState9, 2),\n dailyQuote = _useState0[0],\n setDailyQuote = _useState0[1];\n var _useState1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState10 = _slicedToArray(_useState1, 2),\n productivityAssistantEnabled = _useState10[0],\n setProductivityAssistantEnabled = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState12 = _slicedToArray(_useState11, 2),\n isSettingsDropdownOpen = _useState12[0],\n setIsSettingsDropdownOpen = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n showMetrics: false,\n showProductivity: false,\n showIntelligence: false,\n showDueToday: true,\n showCompleted: true,\n showProgressBar: true,\n // Always enabled\n showDailyQuote: true\n }),\n _useState14 = _slicedToArray(_useState13, 2),\n todaySettings = _useState14[0],\n setTodaySettings = _useState14[1];\n var _useState15 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),\n _useState16 = _slicedToArray(_useState15, 2),\n nextTaskSuggestionEnabled = _useState16[0],\n setNextTaskSuggestionEnabled = _useState16[1];\n var _useState17 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () {\n var stored = sessionStorage.getItem('hideNextTaskSuggestion');\n return stored !== 'true';\n }),\n _useState18 = _slicedToArray(_useState17, 2),\n showNextTaskSuggestion = _useState18[0],\n setShowNextTaskSuggestion = _useState18[1];\n var _useState19 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () {\n var stored = localStorage.getItem('suggestedTasksCollapsed');\n return stored === 'true';\n }),\n _useState20 = _slicedToArray(_useState19, 2),\n isSuggestedCollapsed = _useState20[0],\n setIsSuggestedCollapsed = _useState20[1];\n var _useState21 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () {\n var stored = localStorage.getItem('completedTasksCollapsed');\n return stored === 'true';\n }),\n _useState22 = _slicedToArray(_useState21, 2),\n isCompletedCollapsed = _useState22[0],\n setIsCompletedCollapsed = _useState22[1];\n\n // Metrics from the API\n var _useState23 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n total_open_tasks: 0,\n tasks_pending_over_month: 0,\n tasks_in_progress_count: 0,\n tasks_in_progress: [],\n tasks_due_today: [],\n suggested_tasks: [],\n tasks_completed_today: [],\n weekly_completions: []\n }),\n _useState24 = _slicedToArray(_useState23, 2),\n metrics = _useState24[0],\n setMetrics = _useState24[1];\n\n // Helper function to get completion trend vs average\n var getCompletionTrend = function getCompletionTrend() {\n var todayCount = metrics.tasks_completed_today.length;\n\n // Calculate average: sum of all completed tasks divided by 7 days\n // The average represents the daily average across the week\n if (metrics.weekly_completions.length === 0) {\n return {\n direction: 'same',\n difference: 0,\n percentage: 0,\n todayCount: todayCount,\n averageCount: 0\n };\n }\n\n // Sum all completed tasks from the weekly data\n var totalCompletedTasks = metrics.weekly_completions.reduce(function (sum, completion) {\n return sum + completion.count;\n }, 0);\n\n // Average is total completed tasks divided by 7\n var averageCount = totalCompletedTasks / 7;\n\n // Calculate percentage change vs average\n var percentage = 0;\n if (averageCount > 0) {\n percentage = Math.round((todayCount - averageCount) / averageCount * 100);\n } else if (todayCount > 0) {\n // If average was 0 but today has completions, it's a 100%+ increase\n percentage = 100;\n }\n if (todayCount > averageCount) {\n return {\n direction: 'up',\n difference: Math.round((todayCount - averageCount) * 10) / 10,\n // Round to 1 decimal\n percentage: Math.abs(percentage),\n todayCount: todayCount,\n averageCount: Math.round(averageCount * 10) / 10 // Round to 1 decimal\n };\n } else if (todayCount < averageCount) {\n return {\n direction: 'down',\n difference: Math.round((averageCount - todayCount) * 10) / 10,\n // Round to 1 decimal\n percentage: Math.abs(percentage),\n todayCount: todayCount,\n averageCount: Math.round(averageCount * 10) / 10 // Round to 1 decimal\n };\n } else {\n return {\n direction: 'same',\n difference: 0,\n percentage: 0,\n todayCount: todayCount,\n averageCount: Math.round(averageCount * 10) / 10 // Round to 1 decimal\n };\n }\n };\n\n // Track mounting state to prevent state updates after unmount\n var isMounted = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(false);\n\n // Function to handle next task suggestion dismissal\n var handleCloseNextTaskSuggestion = function handleCloseNextTaskSuggestion() {\n setShowNextTaskSuggestion(false);\n sessionStorage.setItem('hideNextTaskSuggestion', 'true');\n };\n\n // Toggle functions for collapsible sections\n var toggleSuggestedCollapsed = function toggleSuggestedCollapsed() {\n var newState = !isSuggestedCollapsed;\n setIsSuggestedCollapsed(newState);\n localStorage.setItem('suggestedTasksCollapsed', newState.toString());\n };\n var toggleCompletedCollapsed = function toggleCompletedCollapsed() {\n var newState = !isCompletedCollapsed;\n setIsCompletedCollapsed(newState);\n localStorage.setItem('completedTasksCollapsed', newState.toString());\n };\n\n // Load data once on component mount\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n isMounted.current = true;\n\n // Only fetch data once on mount\n var loadData = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var isEnabled, isNextTaskEnabled, projectsData, safeProjectsData, _yield$fetchTasks, fetchedTasks, fetchedMetrics, response, data, randomIndex, fallbackResponse, fallbackData, _randomIndex, _response, userData, settings, _t, _t2, _t3, _t4, _t5, _t6;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n if (isMounted.current) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n setIsLoading(true);\n setIsError(false);\n _context.p = 2;\n _context.n = 3;\n return (0,_utils_profileService__WEBPACK_IMPORTED_MODULE_12__.getProductivityAssistantEnabled)();\n case 3:\n isEnabled = _context.v;\n if (isMounted.current) {\n setProductivityAssistantEnabled(isEnabled);\n }\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n console.error(\"Failed to load productivity assistant setting:\", _t);\n case 5:\n _context.p = 5;\n _context.n = 6;\n return (0,_utils_profileService__WEBPACK_IMPORTED_MODULE_12__.getNextTaskSuggestionEnabled)();\n case 6:\n isNextTaskEnabled = _context.v;\n if (isMounted.current) {\n setNextTaskSuggestionEnabled(isNextTaskEnabled);\n }\n _context.n = 8;\n break;\n case 7:\n _context.p = 7;\n _t2 = _context.v;\n console.error(\"Failed to load next task suggestion setting:\", _t2);\n case 8:\n _context.p = 8;\n _context.n = 9;\n return (0,_utils_projectsService__WEBPACK_IMPORTED_MODULE_4__.fetchProjects)();\n case 9:\n projectsData = _context.v;\n if (isMounted.current) {\n safeProjectsData = Array.isArray(projectsData) ? projectsData : [];\n setLocalProjects(safeProjectsData);\n store.projectsStore.setProjects(safeProjectsData);\n }\n _context.n = 11;\n break;\n case 10:\n _context.p = 10;\n _t3 = _context.v;\n console.error('Projects loading error:', _t3);\n if (isMounted.current) {\n setLocalProjects([]);\n setIsError(true);\n }\n case 11:\n _context.p = 11;\n _context.n = 12;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.fetchTasks)(\"?type=today\");\n case 12:\n _yield$fetchTasks = _context.v;\n fetchedTasks = _yield$fetchTasks.tasks;\n fetchedMetrics = _yield$fetchTasks.metrics;\n if (isMounted.current) {\n setLocalTasks(fetchedTasks);\n setMetrics(fetchedMetrics);\n // Also update the store\n store.tasksStore.setTasks(fetchedTasks);\n }\n _context.n = 14;\n break;\n case 13:\n _context.p = 13;\n _t4 = _context.v;\n console.error(\"Failed to fetch tasks:\", _t4);\n if (isMounted.current) {\n setIsError(true);\n }\n case 14:\n _context.p = 14;\n if (isMounted.current) {\n setIsLoading(false);\n }\n return _context.f(14);\n case 15:\n _context.p = 15;\n _context.n = 16;\n return fetch(\"/locales/\".concat(i18next__WEBPACK_IMPORTED_MODULE_2__[\"default\"].language, \"/quotes.json\"));\n case 16:\n response = _context.v;\n if (!response.ok) {\n _context.n = 18;\n break;\n }\n _context.n = 17;\n return response.json();\n case 17:\n data = _context.v;\n if (isMounted.current && data.quotes && data.quotes.length > 0) {\n // Get a random quote from the translated quotes\n randomIndex = Math.floor(Math.random() * data.quotes.length);\n setDailyQuote(data.quotes[randomIndex]);\n }\n _context.n = 21;\n break;\n case 18:\n _context.n = 19;\n return fetch('/locales/en/quotes.json');\n case 19:\n fallbackResponse = _context.v;\n if (!fallbackResponse.ok) {\n _context.n = 21;\n break;\n }\n _context.n = 20;\n return fallbackResponse.json();\n case 20:\n fallbackData = _context.v;\n if (isMounted.current && fallbackData.quotes && fallbackData.quotes.length > 0) {\n _randomIndex = Math.floor(Math.random() * fallbackData.quotes.length);\n setDailyQuote(fallbackData.quotes[_randomIndex]);\n }\n case 21:\n _context.n = 23;\n break;\n case 22:\n _context.p = 22;\n _t5 = _context.v;\n console.error(\"Failed to load daily quote:\", _t5);\n // Ultimate fallback\n if (isMounted.current) {\n setDailyQuote(\"Focus on progress, not perfection.\");\n }\n case 23:\n _context.p = 23;\n _context.n = 24;\n return fetch('/api/profile', {\n credentials: 'include'\n });\n case 24:\n _response = _context.v;\n if (!_response.ok) {\n _context.n = 26;\n break;\n }\n _context.n = 25;\n return _response.json();\n case 25:\n userData = _context.v;\n if (isMounted.current) {\n // Parse today_settings if it's a string, or use the object directly\n\n if (userData.today_settings) {\n if (typeof userData.today_settings === 'string') {\n try {\n settings = JSON.parse(userData.today_settings);\n } catch (error) {\n console.error('Error parsing today_settings:', error);\n settings = null;\n }\n } else {\n settings = userData.today_settings;\n }\n }\n\n // Use parsed settings or fall back to defaults\n settings = settings || {\n showMetrics: false,\n showProductivity: false,\n showIntelligence: false,\n showDueToday: true,\n showCompleted: true,\n showProgressBar: true,\n // Always enabled\n showDailyQuote: true\n };\n\n // Ensure progress bar is always enabled\n settings.showProgressBar = true;\n setTodaySettings(settings);\n }\n case 26:\n _context.n = 28;\n break;\n case 27:\n _context.p = 27;\n _t6 = _context.v;\n console.error(\"Failed to load user settings:\", _t6);\n case 28:\n return _context.a(2);\n }\n }, _callee, null, [[23, 27], [15, 22], [11, 13, 14, 15], [8, 10], [5, 7], [2, 4]]);\n }));\n return function loadData() {\n return _ref.apply(this, arguments);\n };\n }();\n loadData();\n\n // Cleanup function to prevent state updates after unmount\n return function () {\n isMounted.current = false;\n };\n }, []); // Empty dependency array - only run once on mount\n\n // Memoize task handlers to prevent recreating functions on each render\n var handleTaskUpdate = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(updatedTask) {\n var _yield$fetchTasks2, updatedTasks, _metrics, _t7;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!(!updatedTask.id || !isMounted.current)) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n setIsLoading(true);\n _context2.p = 2;\n _context2.n = 3;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.updateTask)(updatedTask.id, updatedTask);\n case 3:\n _context2.n = 4;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.fetchTasks)(\"?type=today\");\n case 4:\n _yield$fetchTasks2 = _context2.v;\n updatedTasks = _yield$fetchTasks2.tasks;\n _metrics = _yield$fetchTasks2.metrics;\n if (isMounted.current) {\n setLocalTasks(updatedTasks);\n setMetrics(_metrics);\n // Update store\n store.tasksStore.setTasks(updatedTasks);\n }\n _context2.n = 6;\n break;\n case 5:\n _context2.p = 5;\n _t7 = _context2.v;\n console.error(\"Error updating task:\", _t7);\n if (isMounted.current) {\n setIsError(true);\n }\n case 6:\n _context2.p = 6;\n if (isMounted.current) {\n setIsLoading(false);\n }\n return _context2.f(6);\n case 7:\n return _context2.a(2);\n }\n }, _callee2, null, [[2, 5, 6, 7]]);\n }));\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }(), [store.tasksStore]);\n var handleTaskDelete = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(taskId) {\n var _yield$fetchTasks3, updatedTasks, _metrics2, _t8;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n if (isMounted.current) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n setIsLoading(true);\n _context3.p = 2;\n _context3.n = 3;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.deleteTask)(taskId);\n case 3:\n _context3.n = 4;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.fetchTasks)(\"?type=today\");\n case 4:\n _yield$fetchTasks3 = _context3.v;\n updatedTasks = _yield$fetchTasks3.tasks;\n _metrics2 = _yield$fetchTasks3.metrics;\n if (isMounted.current) {\n setLocalTasks(updatedTasks);\n setMetrics(_metrics2);\n // Update store\n store.tasksStore.setTasks(updatedTasks);\n }\n _context3.n = 6;\n break;\n case 5:\n _context3.p = 5;\n _t8 = _context3.v;\n console.error(\"Error deleting task:\", _t8);\n if (isMounted.current) {\n setIsError(true);\n }\n case 6:\n _context3.p = 6;\n if (isMounted.current) {\n setIsLoading(false);\n }\n return _context3.f(6);\n case 7:\n return _context3.a(2);\n }\n }, _callee3, null, [[2, 5, 6, 7]]);\n }));\n return function (_x2) {\n return _ref3.apply(this, arguments);\n };\n }(), [store.tasksStore]);\n var handleToggleToday = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(/*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(taskId) {\n var _yield$fetchTasks4, updatedTasks, _metrics3, _t9;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n if (isMounted.current) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n _context4.p = 1;\n _context4.n = 2;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.toggleTaskToday)(taskId);\n case 2:\n _context4.n = 3;\n return (0,_utils_tasksService__WEBPACK_IMPORTED_MODULE_3__.fetchTasks)(\"?type=today\");\n case 3:\n _yield$fetchTasks4 = _context4.v;\n updatedTasks = _yield$fetchTasks4.tasks;\n _metrics3 = _yield$fetchTasks4.metrics;\n if (isMounted.current) {\n setLocalTasks(updatedTasks);\n setMetrics(_metrics3);\n // Update store\n store.tasksStore.setTasks(updatedTasks);\n }\n _context4.n = 5;\n break;\n case 4:\n _context4.p = 4;\n _t9 = _context4.v;\n console.error(\"Error toggling task today status:\", _t9);\n if (isMounted.current) {\n setIsError(true);\n }\n case 5:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 4]]);\n }));\n return function (_x3) {\n return _ref4.apply(this, arguments);\n };\n }(), [store.tasksStore]);\n\n // Calculate today's progress for the progress bar\n var getTodayProgress = function getTodayProgress() {\n var todayTasks = metrics.today_plan_tasks || [];\n var completedToday = metrics.tasks_completed_today.length;\n var totalTodayTasks = todayTasks.length + completedToday;\n return {\n completed: completedToday,\n total: totalTodayTasks,\n percentage: totalTodayTasks === 0 ? 0 : Math.round(completedToday / totalTodayTasks * 100)\n };\n };\n var todayProgress = getTodayProgress();\n\n // Handle settings change\n var handleSettingsChange = function handleSettingsChange(newSettings) {\n setTodaySettings(newSettings);\n };\n\n // Show loading state\n if (isLoading && localTasks.length === 0) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center items-center h-64\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-500 dark:text-gray-400\"\n }, t('common.loading', 'Loading...')));\n }\n\n // Show error state\n if (isError && localTasks.length === 0) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center items-center h-64\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-red-500\"\n }, t('errors.somethingWentWrong', 'Something went wrong')));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex justify-center px-4 lg:px-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full max-w-5xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex flex-col\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-end justify-between mb-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-5 w-5 mr-2 mb-1\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h2\", {\n className: \"text-2xl font-light mr-4\"\n }, t('tasks.today')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-gray-500\"\n }, (0,date_fns__WEBPACK_IMPORTED_MODULE_20__.format)(new Date(), \"PPP\", {\n locale: getLocale(i18next__WEBPACK_IMPORTED_MODULE_2__[\"default\"].language)\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-end space-x-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"relative\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n onClick: function onClick() {\n return setIsSettingsDropdownOpen(!isSettingsDropdownOpen);\n },\n className: \"flex flex-row items-center p-2 group focus:outline-none rounded-md transition-all duration-200 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800\",\n title: t('settings.todayPageSettings', 'Today Page Settings')\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n className: \"h-5 w-5\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-xs font-medium transition-all duration-200 max-w-0 overflow-hidden opacity-0 group-hover:max-w-xs group-hover:opacity-100 group-focus:max-w-xs group-focus:opacity-100 group-hover:ml-2 group-focus:ml-2\"\n }, t('common.settings', 'Settings'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TodaySettingsDropdown__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n isOpen: isSettingsDropdownOpen,\n onClose: function onClose() {\n return setIsSettingsDropdownOpen(false);\n },\n settings: todaySettings,\n onSettingsChange: handleSettingsChange\n })))), todaySettings.showProgressBar && todayProgress.total > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-1\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"h-1 rounded-full transition-all duration-500 ease-out bg-gradient-to-r from-blue-400 via-blue-500 to-blue-700\",\n style: {\n width: \"\".concat(todayProgress.percentage, \"%\")\n }\n })), todaySettings.showDailyQuote && dailyQuote && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-s text-gray-400 dark:text-gray-500 font-light text-left\"\n }, dailyQuote))))), todaySettings.showMetrics && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-2 grid grid-cols-1 lg:grid-cols-3 gap-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"bg-white dark:bg-gray-900 rounded-lg shadow p-4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-sm font-medium mb-2 text-gray-700 dark:text-gray-300\"\n }, t('dashboard.overview')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"space-y-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n className: \"h-4 w-4 text-blue-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('tasks.backlog'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, metrics.total_open_tasks)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n className: \"h-4 w-4 text-green-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('tasks.inProgress'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, metrics.tasks_in_progress_count)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-4 w-4 text-red-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('tasks.dueToday'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, metrics.tasks_due_today.length)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n className: \"h-4 w-4 text-green-600 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('tasks.completedToday', 'Completed Today'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center space-x-1\"\n }, function () {\n var trend = getCompletionTrend();\n var getTooltipText = function getTooltipText() {\n if (trend.direction === 'same') {\n return t('dashboard.sameAsAverage', 'Same as average');\n } else if (trend.direction === 'up') {\n return t('dashboard.betterThanAverage', '{{percentage}}% more than average', {\n percentage: trend.percentage\n });\n } else {\n return t('dashboard.worseThanAverage', '{{percentage}}% less than average', {\n percentage: trend.percentage\n });\n }\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, (trend.direction === 'up' || trend.direction === 'down') && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"relative group\"\n }, trend.direction === 'up' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n className: \"h-3 w-3 text-green-500\"\n }), trend.direction === 'down' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n className: \"h-3 w-3 text-red-500\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-2 py-1 text-xs text-white bg-gray-900 dark:bg-gray-700 rounded opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none whitespace-nowrap z-10\"\n }, getTooltipText())), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, metrics.tasks_completed_today.length));\n }())), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n className: \"h-4 w-4 text-purple-500 mr-2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\"\n }, t('projects.active'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-sm font-semibold\"\n }, Array.isArray(localProjects) ? localProjects.filter(function (project) {\n return project.active;\n }).length : 0)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"lg:col-span-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_WeeklyCompletionChart__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n data: metrics.weekly_completions\n }))), todaySettings.showProductivity && productivityAssistantEnabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Productivity_ProductivityAssistant__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n tasks: localTasks,\n projects: localProjects\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TodayPlan__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n todayPlanTasks: metrics.today_plan_tasks || [],\n projects: localProjects,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n onToggleToday: handleToggleToday\n }), todaySettings.showIntelligence && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mt-2\"\n }, nextTaskSuggestionEnabled && showNextTaskSuggestion && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_NextTaskSuggestion__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n metrics: {\n tasks_due_today: metrics.tasks_due_today,\n suggested_tasks: metrics.suggested_tasks,\n tasks_in_progress: metrics.tasks_in_progress,\n today_plan_tasks: metrics.today_plan_tasks\n },\n onTaskUpdate: handleTaskUpdate,\n onClose: handleCloseNextTaskSuggestion\n }), metrics.suggested_tasks.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between cursor-pointer mt-6 mb-2 pb-2 border-b border-gray-200 dark:border-gray-700\",\n onClick: toggleSuggestedCollapsed\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-xl font-medium\"\n }, t('tasks.suggested')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-500 mr-2\"\n }, metrics.suggested_tasks.length), isSuggestedCollapsed ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }))), !isSuggestedCollapsed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskList__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tasks: metrics.suggested_tasks,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n projects: localProjects,\n onToggleToday: handleToggleToday\n }))), todaySettings.showDueToday && metrics.tasks_due_today.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-xl font-medium mt-6 mb-2\"\n }, t('tasks.dueToday')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskList__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tasks: metrics.tasks_due_today,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n projects: localProjects,\n onToggleToday: handleToggleToday\n })), todaySettings.showCompleted && metrics.tasks_completed_today.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"mb-6\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center justify-between cursor-pointer mt-6 mb-2 pb-2 border-b border-gray-200 dark:border-gray-700\",\n onClick: toggleCompletedCollapsed\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", {\n className: \"text-xl font-medium\"\n }, t('tasks.completedToday')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"flex items-center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"text-sm text-gray-500 mr-2\"\n }, metrics.tasks_completed_today.length), isCompletedCollapsed ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n className: \"h-5 w-5 text-gray-500\"\n }))), !isCompletedCollapsed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TaskList__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n tasks: metrics.tasks_completed_today,\n onTaskUpdate: handleTaskUpdate,\n onTaskDelete: handleTaskDelete,\n projects: localProjects,\n onToggleToday: handleToggleToday\n })), metrics.tasks_due_today.length === 0 && metrics.tasks_in_progress.length === 0 && metrics.suggested_tasks.length === 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n className: \"text-gray-500 text-center mt-4\"\n }, t('tasks.noTasksAvailable'))));\n};\n_s(TasksToday, \"Hc8C7xHEanytcQXEnF7K/scGgfE=\", false, function () {\n return [react_i18next__WEBPACK_IMPORTED_MODULE_1__.useTranslation, _store_useStore__WEBPACK_IMPORTED_MODULE_5__.useStore];\n});\n_c = TasksToday;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TasksToday);\nvar _c;\n__webpack_require__.$Refresh$.register(_c, \"TasksToday\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/components/Task/TasksToday.tsx?"); /***/ }), @@ -757,6 +746,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./frontend/hooks/useModalEvents.ts": +/*!******************************************!*\ + !*** ./frontend/hooks/useModalEvents.ts ***! + \******************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useModalEvents: () => (/* binding */ useModalEvents)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\nvar _s = __webpack_require__.$Refresh$.signature();\n\n\n/**\n * Hook to dispatch global modal events when local modal state changes\n * @param isOpen - Whether the modal is currently open\n */\nvar useModalEvents = function useModalEvents(isOpen) {\n _s();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isOpen) {\n window.dispatchEvent(new CustomEvent('modalOpen'));\n } else {\n window.dispatchEvent(new CustomEvent('modalClose'));\n }\n }, [isOpen]);\n};\n_s(useModalEvents, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/hooks/useModalEvents.ts?"); + +/***/ }), + /***/ "./frontend/i18n.ts": /*!**************************!*\ !*** ./frontend/i18n.ts ***! @@ -834,6 +834,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./frontend/utils/dateUtils.ts": +/*!*************************************!*\ + !*** ./frontend/utils/dateUtils.ts ***! + \*************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ formatDateTime: () => (/* binding */ formatDateTime),\n/* harmony export */ formatDayMonth: () => (/* binding */ formatDayMonth),\n/* harmony export */ formatLocalizedDate: () => (/* binding */ formatLocalizedDate),\n/* harmony export */ formatLongDate: () => (/* binding */ formatLongDate),\n/* harmony export */ formatMonthYear: () => (/* binding */ formatMonthYear),\n/* harmony export */ formatShortDate: () => (/* binding */ formatShortDate),\n/* harmony export */ formatTime: () => (/* binding */ formatTime),\n/* harmony export */ getCurrentLocale: () => (/* binding */ getCurrentLocale),\n/* harmony export */ getDateFormatPattern: () => (/* binding */ getDateFormatPattern),\n/* harmony export */ isTaskOverdue: () => (/* binding */ isTaskOverdue)\n/* harmony export */ });\n/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! date-fns */ \"./node_modules/date-fns/format.js\");\n/* harmony import */ var date_fns_locale_en_US__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! date-fns/locale/en-US */ \"./node_modules/date-fns/locale/en-US.js\");\n/* harmony import */ var date_fns_locale_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! date-fns/locale/es */ \"./node_modules/date-fns/locale/es.js\");\n/* harmony import */ var date_fns_locale_el__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! date-fns/locale/el */ \"./node_modules/date-fns/locale/el.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n */ \"./frontend/i18n.ts\");\n/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/* provided dependency */ var __react_refresh_error_overlay__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */ \"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ \"./node_modules/react-refresh/runtime.js\");\n\n\n\n\n\n\n\n/**\r\n * Maps i18next language codes to date-fns locale objects\r\n */\nvar localeMap = {\n en: date_fns_locale_en_US__WEBPACK_IMPORTED_MODULE_1__.enUS,\n es: date_fns_locale_es__WEBPACK_IMPORTED_MODULE_2__.es,\n el: date_fns_locale_el__WEBPACK_IMPORTED_MODULE_3__.el\n};\n\n/**\r\n * Returns the date-fns locale object based on the current i18next language\r\n * Falls back to English if the current language is not supported\r\n */\nvar getCurrentLocale = function getCurrentLocale() {\n var language = _i18n__WEBPACK_IMPORTED_MODULE_0__[\"default\"].language || 'en';\n return localeMap[language] || date_fns_locale_en_US__WEBPACK_IMPORTED_MODULE_1__.enUS;\n};\n\n/**\r\n * Formats a date using the current locale from i18next\r\n * \r\n * @param date - The date to format\r\n * @param formatStr - The format string (https://date-fns.org/v2.29.3/docs/format)\r\n * @returns The formatted date string\r\n */\nvar formatLocalizedDate = function formatLocalizedDate(date, formatStr) {\n return (0,date_fns__WEBPACK_IMPORTED_MODULE_4__.format)(date, formatStr, {\n locale: getCurrentLocale()\n });\n};\n\n/**\r\n * Gets the date format pattern from translation file\r\n * \r\n * @param formatKey - The key for the format in the dateFormats object\r\n * @param fallback - Fallback format to use if translation is missing\r\n * @returns The format pattern string\r\n */\nvar getDateFormatPattern = function getDateFormatPattern(formatKey, fallback) {\n var pattern = _i18n__WEBPACK_IMPORTED_MODULE_0__[\"default\"].t(\"dateFormats.\".concat(formatKey));\n // If the translation key doesn't exist, it will return the key itself\n return pattern === \"dateFormats.\".concat(formatKey) ? fallback : pattern;\n};\n\n/**\r\n * Formats a date in a long readable format based on the current locale\r\n * Example: \"Monday, January 1, 2023\" (in English)\r\n * \r\n * @param date - The date to format\r\n * @returns The formatted date string\r\n */\nvar formatLongDate = function formatLongDate(date) {\n return formatLocalizedDate(date, getDateFormatPattern('long', 'EEEE, MMMM d, yyyy'));\n};\n\n/**\r\n * Formats a date in a short format based on the current locale\r\n * Example: \"Jan 1, 2023\" (in English)\r\n * \r\n * @param date - The date to format\r\n * @returns The formatted date string\r\n */\nvar formatShortDate = function formatShortDate(date) {\n return formatLocalizedDate(date, getDateFormatPattern('short', 'MMM d, yyyy'));\n};\n\n/**\r\n * Formats a date to show only month and year based on the current locale\r\n * Example: \"January 2023\" (in English)\r\n * \r\n * @param date - The date to format\r\n * @returns The formatted date string\r\n */\nvar formatMonthYear = function formatMonthYear(date) {\n return formatLocalizedDate(date, getDateFormatPattern('monthYear', 'MMMM yyyy'));\n};\n\n/**\r\n * Formats a date to show only day and month based on the current locale\r\n * Example: \"January 1\" (in English)\r\n * \r\n * @param date - The date to format\r\n * @returns The formatted date string\r\n */\nvar formatDayMonth = function formatDayMonth(date) {\n return formatLocalizedDate(date, getDateFormatPattern('dayMonth', 'MMMM d'));\n};\n\n/**\r\n * Formats a date to show only time based on the current locale\r\n * Example: \"3:30 PM\" (in English)\r\n * \r\n * @param date - The date to format\r\n * @returns The formatted time string\r\n */\nvar formatTime = function formatTime(date) {\n return formatLocalizedDate(date, getDateFormatPattern('time', 'h:mm a'));\n};\n\n/**\r\n * Formats a date to show date and time based on the current locale\r\n * Example: \"Jan 1, 2023 3:30 PM\" (in English)\r\n * \r\n * @param date - The date to format\r\n * @returns The formatted date and time string\r\n */\nvar formatDateTime = function formatDateTime(date) {\n return formatLocalizedDate(date, getDateFormatPattern('dateTime', 'MMM d, yyyy h:mm a'));\n};\n\n/**\r\n * Checks if a task in today plan has been there for more than a day (likely overdue)\r\n * \r\n * @param task - The task to check\r\n * @returns True if the task is likely overdue in today plan, false otherwise\r\n */\nvar isTaskOverdue = function isTaskOverdue(task) {\n // If task is not in today plan, it's not overdue\n if (!task.today) {\n return false;\n }\n\n // Only hide overdue badge if task is actually completed (done/archived), not just in progress\n if (task.completed_at || task.status === 'done' || task.status === 2 || task.status === 'archived' || task.status === 3) {\n return false;\n }\n\n // If task has been moved to today multiple times, it's likely been sitting around\n if (task.today_move_count && task.today_move_count > 1) {\n return true;\n }\n\n // If no creation date, can't determine if overdue\n if (!task.created_at) {\n return false;\n }\n var createdDate = new Date(task.created_at);\n var yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n yesterday.setHours(23, 59, 59, 999); // End of yesterday\n\n // Task is likely overdue if created before end of yesterday and is in today plan\n // This is an approximation - tasks created yesterday or earlier that are in today plan\n // are likely to have been sitting there for a while\n return createdDate.getTime() < yesterday.getTime();\n};\n\nconst $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction $ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined') {\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined') {\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn __react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else {\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}\n\n//# sourceURL=webpack://tududi/./frontend/utils/dateUtils.ts?"); + +/***/ }), + /***/ "./frontend/utils/inboxService.ts": /*!****************************************!*\ !*** ./frontend/utils/inboxService.ts ***! @@ -1230,6 +1241,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@heroicons/react/24/outline/esm/Cog6ToothIcon.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@heroicons/react/24/outline/esm/Cog6ToothIcon.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nfunction Cog6ToothIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(Cog6ToothIcon);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ForwardRef);\n\n//# sourceURL=webpack://tududi/./node_modules/@heroicons/react/24/outline/esm/Cog6ToothIcon.js?"); + +/***/ }), + /***/ "./node_modules/@heroicons/react/24/outline/esm/CogIcon.js": /*!*****************************************************************!*\ !*** ./node_modules/@heroicons/react/24/outline/esm/CogIcon.js ***! @@ -1395,17 +1417,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./node_modules/@heroicons/react/24/outline/esm/PhotoIcon.js": -/*!*******************************************************************!*\ - !*** ./node_modules/@heroicons/react/24/outline/esm/PhotoIcon.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nfunction PhotoIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(PhotoIcon);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ForwardRef);\n\n//# sourceURL=webpack://tududi/./node_modules/@heroicons/react/24/outline/esm/PhotoIcon.js?"); - -/***/ }), - /***/ "./node_modules/@heroicons/react/24/outline/esm/PlayIcon.js": /*!******************************************************************!*\ !*** ./node_modules/@heroicons/react/24/outline/esm/PlayIcon.js ***! @@ -3421,7 +3432,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}/*\n! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured \\`sans\\` font-family by default.\n5. Use the user's configured \\`sans\\` font-feature-settings by default.\n6. Use the user's configured \\`sans\\` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from \\`html\\` so users can set them as a class directly on the \\`html\\` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured \\`mono\\` font-family by default.\n2. Use the user's configured \\`mono\\` font-feature-settings by default.\n3. Use the user's configured \\`mono\\` font-variation-settings by default.\n4. Correct the odd \\`em\\` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent \\`sub\\` and \\`sup\\` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional \\`:invalid\\` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to \\`inherit\\` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements \\`display: block\\` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add \\`vertical-align: middle\\` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.visible {\n visibility: visible;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-1 {\n inset: 0.25rem;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-right-2 {\n right: -0.5rem;\n}\n.-top-2 {\n top: -0.5rem;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.bottom-6 {\n bottom: 1.5rem;\n}\n.bottom-full {\n bottom: 100%;\n}\n.left-0 {\n left: 0px;\n}\n.left-1 {\n left: 0.25rem;\n}\n.left-1\\\\/2 {\n left: 50%;\n}\n.left-2 {\n left: 0.5rem;\n}\n.left-3 {\n left: 0.75rem;\n}\n.right-0 {\n right: 0px;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-2 {\n right: 0.5rem;\n}\n.right-3 {\n right: 0.75rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-6 {\n right: 1.5rem;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\\\/2 {\n top: 50%;\n}\n.top-16 {\n top: 4rem;\n}\n.top-2 {\n top: 0.5rem;\n}\n.top-20 {\n top: 5rem;\n}\n.top-3 {\n top: 0.75rem;\n}\n.top-full {\n top: 100%;\n}\n.z-10 {\n z-index: 10;\n}\n.z-40 {\n z-index: 40;\n}\n.z-50 {\n z-index: 50;\n}\n.col-span-full {\n grid-column: 1 / -1;\n}\n.m-1 {\n margin: 0.25rem;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.my-6 {\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n}\n.-mb-px {\n margin-bottom: -1px;\n}\n.mb-1 {\n margin-bottom: 0.25rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-3 {\n margin-bottom: 0.75rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.mb-8 {\n margin-bottom: 2rem;\n}\n.ml-0 {\n margin-left: 0px;\n}\n.ml-1 {\n margin-left: 0.25rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-72 {\n margin-left: 18rem;\n}\n.ml-8 {\n margin-left: 2rem;\n}\n.mr-1 {\n margin-right: 0.25rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mr-3 {\n margin-right: 0.75rem;\n}\n.mr-4 {\n margin-right: 1rem;\n}\n.mt-0\\\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-1\\\\.5 {\n margin-top: 0.375rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.mt-auto {\n margin-top: auto;\n}\n.line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-20 {\n height: 5rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\\\.5 {\n height: 0.875rem;\n}\n.h-32 {\n height: 8rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-40 {\n height: 10rem;\n}\n.h-48 {\n height: 12rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-64 {\n height: 16rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-\\\\[calc\\\\(100vh-4rem\\\\)\\\\] {\n height: calc(100vh - 4rem);\n}\n.h-full {\n height: 100%;\n}\n.h-screen {\n height: 100vh;\n}\n.max-h-0 {\n max-height: 0px;\n}\n.max-h-60 {\n max-height: 15rem;\n}\n.max-h-96 {\n max-height: 24rem;\n}\n.max-h-\\\\[500px\\\\] {\n max-height: 500px;\n}\n.max-h-\\\\[90vh\\\\] {\n max-height: 90vh;\n}\n.min-h-0 {\n min-height: 0px;\n}\n.min-h-32 {\n min-height: 8rem;\n}\n.min-h-\\\\[400px\\\\] {\n min-height: 400px;\n}\n.min-h-\\\\[40px\\\\] {\n min-height: 40px;\n}\n.min-h-full {\n min-height: 100%;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-16 {\n width: 4rem;\n}\n.w-20 {\n width: 5rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\\\.5 {\n width: 0.875rem;\n}\n.w-32 {\n width: 8rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-48 {\n width: 12rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.max-w-0 {\n max-width: 0px;\n}\n.max-w-5xl {\n max-width: 64rem;\n}\n.max-w-6xl {\n max-width: 72rem;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-sm {\n max-width: 24rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\n}\n.origin-top-right {\n transform-origin: top right;\n}\n.-translate-x-1\\\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-0\\\\.5 {\n --tw-translate-x: 0.125rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-1 {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-6 {\n --tw-translate-x: 1.5rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-0\\\\.5 {\n --tw-translate-y: 0.125rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-100 {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-95 {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes pulse {\n\n 50% {\n opacity: .5;\n }\n}\n.animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n@keyframes spin {\n\n to {\n transform: rotate(360deg);\n }\n}\n.animate-spin {\n animation: spin 1s linear infinite;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.resize {\n resize: both;\n}\n.list-inside {\n list-style-position: inside;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.appearance-none {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.grid-cols-8 {\n grid-template-columns: repeat(8, minmax(0, 1fr));\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-wrap {\n flex-wrap: wrap;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-end {\n align-items: flex-end;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-6 {\n gap: 1.5rem;\n}\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(2rem * var(--tw-space-x-reverse));\n margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-pre-wrap {\n white-space: pre-wrap;\n}\n.break-words {\n overflow-wrap: break-word;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-l-lg {\n border-top-left-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n.rounded-r-lg {\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l {\n border-left-width: 1px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-l-4 {\n border-left-width: 4px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-none {\n border-style: none;\n}\n.border-blue-200 {\n --tw-border-opacity: 1;\n border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-300 {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n.border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n.border-blue-500 {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-blue-700 {\n --tw-border-opacity: 1;\n border-color: rgb(29 78 216 / var(--tw-border-opacity, 1));\n}\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-border-opacity, 1));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.border-gray-50 {\n --tw-border-opacity: 1;\n border-color: rgb(249 250 251 / var(--tw-border-opacity, 1));\n}\n.border-green-200 {\n --tw-border-opacity: 1;\n border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));\n}\n.border-green-300 {\n --tw-border-opacity: 1;\n border-color: rgb(134 239 172 / var(--tw-border-opacity, 1));\n}\n.border-green-400\\\\/60 {\n border-color: rgb(74 222 128 / 0.6);\n}\n.border-green-500 {\n --tw-border-opacity: 1;\n border-color: rgb(34 197 94 / var(--tw-border-opacity, 1));\n}\n.border-orange-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 215 170 / var(--tw-border-opacity, 1));\n}\n.border-purple-500 {\n --tw-border-opacity: 1;\n border-color: rgb(168 85 247 / var(--tw-border-opacity, 1));\n}\n.border-red-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));\n}\n.border-red-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));\n}\n.border-red-700 {\n --tw-border-opacity: 1;\n border-color: rgb(185 28 28 / var(--tw-border-opacity, 1));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.border-yellow-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 240 138 / var(--tw-border-opacity, 1));\n}\n.border-yellow-500 {\n --tw-border-opacity: 1;\n border-color: rgb(234 179 8 / var(--tw-border-opacity, 1));\n}\n.border-l-white\\\\/50 {\n border-left-color: rgb(255 255 255 / 0.5);\n}\n.border-t-blue-500 {\n --tw-border-opacity: 1;\n border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-100\\\\/50 {\n background-color: rgb(219 234 254 / 0.5);\n}\n.bg-blue-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(96 165 250 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50\\\\/30 {\n background-color: rgb(239 246 255 / 0.3);\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\n}\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n.bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n.bg-green-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));\n}\n.bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1));\n}\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n.bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n.bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1));\n}\n.bg-opacity-40 {\n --tw-bg-opacity: 0.4;\n}\n.bg-opacity-50 {\n --tw-bg-opacity: 0.5;\n}\n.bg-opacity-80 {\n --tw-bg-opacity: 0.8;\n}\n.bg-gradient-to-r {\n background-image: linear-gradient(to right, var(--tw-gradient-stops));\n}\n.from-blue-400 {\n --tw-gradient-from: #60a5fa var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.via-blue-500 {\n --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.to-blue-700 {\n --tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position);\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-1\\\\.5 {\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.py-0\\\\.5 {\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.pb-3 {\n padding-bottom: 0.75rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-4 {\n padding-left: 1rem;\n}\n.pr-10 {\n padding-right: 2.5rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pr-6 {\n padding-right: 1.5rem;\n}\n.pr-8 {\n padding-right: 2rem;\n}\n.pt-24 {\n padding-top: 6rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.font-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-5xl {\n font-size: 3rem;\n line-height: 1;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.capitalize {\n text-transform: capitalize;\n}\n.italic {\n font-style: italic;\n}\n.leading-none {\n line-height: 1;\n}\n.leading-relaxed {\n line-height: 1.625;\n}\n.leading-tight {\n line-height: 1.25;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n.text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n.text-blue-500 {\n --tw-text-opacity: 1;\n color: rgb(59 130 246 / var(--tw-text-opacity, 1));\n}\n.text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n.text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n.text-gray-800 {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.text-green-200 {\n --tw-text-opacity: 1;\n color: rgb(187 247 208 / var(--tw-text-opacity, 1));\n}\n.text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity, 1));\n}\n.text-green-500 {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity, 1));\n}\n.text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity, 1));\n}\n.text-indigo-500 {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity, 1));\n}\n.text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.text-orange-800 {\n --tw-text-opacity: 1;\n color: rgb(154 52 18 / var(--tw-text-opacity, 1));\n}\n.text-pink-500 {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n.text-purple-500 {\n --tw-text-opacity: 1;\n color: rgb(168 85 247 / var(--tw-text-opacity, 1));\n}\n.text-purple-600 {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n.text-purple-800 {\n --tw-text-opacity: 1;\n color: rgb(107 33 168 / var(--tw-text-opacity, 1));\n}\n.text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n.text-red-800 {\n --tw-text-opacity: 1;\n color: rgb(153 27 27 / var(--tw-text-opacity, 1));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity, 1));\n}\n.text-yellow-500 {\n --tw-text-opacity: 1;\n color: rgb(234 179 8 / var(--tw-text-opacity, 1));\n}\n.text-yellow-600 {\n --tw-text-opacity: 1;\n color: rgb(202 138 4 / var(--tw-text-opacity, 1));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity, 1));\n}\n.text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.no-underline {\n text-decoration-line: none;\n}\n.placeholder-gray-400::-moz-placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));\n}\n.placeholder-gray-400::placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));\n}\n.placeholder-gray-500::-moz-placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(107 114 128 / var(--tw-placeholder-opacity, 1));\n}\n.placeholder-gray-500::placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(107 114 128 / var(--tw-placeholder-opacity, 1));\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-20 {\n opacity: 0.2;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-90 {\n opacity: 0.9;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.ring-1 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-black {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-100 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1));\n}\n.ring-opacity-5 {\n --tw-ring-opacity: 0.05;\n}\n.drop-shadow-lg {\n --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.duration-500 {\n transition-duration: 500ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ease-out {\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n}\n\n.spinner {\n border: 4px solid rgba(0, 0, 0, 0.1);\n width: 36px;\n height: 36px;\n border-radius: 50%;\n border-left-color: #09f;\n animation: spin 1s ease infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes border-pulse {\n 0%, 100% {\n border-color: rgba(74, 222, 128, 0.3);\n }\n 50% {\n border-color: rgba(74, 222, 128, 0.8);\n }\n}\n\n.dark .task-border-pulse {\n animation: border-pulse-dark 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n@keyframes border-pulse-dark {\n 0%, 100% {\n border-color: rgba(34, 197, 94, 0.3);\n }\n 50% {\n border-color: rgba(34, 197, 94, 0.8);\n }\n}\n\n.task-border-pulse {\n animation: border-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n/* Rotating border animation for in-progress tasks */\n@keyframes border-spin {\n 0% {\n border-color: rgba(74, 222, 128, 0.8);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.8);\n }\n 25% {\n border-color: rgba(74, 222, 128, 0.2);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.2);\n }\n 50% {\n border-color: rgba(74, 222, 128, 0.8);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.8);\n }\n 75% {\n border-color: rgba(74, 222, 128, 0.2);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.2);\n }\n 100% {\n border-color: rgba(74, 222, 128, 0.8);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.8);\n }\n}\n\n.task-border-rotate {\n border: 2px solid rgba(74, 222, 128, 0.8);\n border-radius: 0.5rem;\n animation: border-spin 1.5s ease-in-out infinite;\n}\n\n.dark .task-border-rotate {\n border-color: rgba(34, 197, 94, 0.8);\n}\n\n@keyframes border-spin-dark {\n 0% {\n border-color: rgba(34, 197, 94, 0.8);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.8);\n }\n 25% {\n border-color: rgba(34, 197, 94, 0.2);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.2);\n }\n 50% {\n border-color: rgba(34, 197, 94, 0.8);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.8);\n }\n 75% {\n border-color: rgba(34, 197, 94, 0.2);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.2);\n }\n 100% {\n border-color: rgba(34, 197, 94, 0.8);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.8);\n }\n}\n\n.dark .task-border-rotate {\n animation: border-spin-dark 1.5s ease-in-out infinite;\n}\n\ninput:focus, select:focus, textarea:focus {\n outline: none;\n box-shadow: none;\n}\n\n.hover\\\\:scale-110:hover {\n --tw-scale-x: 1.1;\n --tw-scale-y: 1.1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.hover\\\\:border-blue-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n\n.hover\\\\:border-gray-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n\n.hover\\\\:bg-blue-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-blue-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(191 219 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-blue-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-blue-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-blue-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-300:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-400:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-green-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-green-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(187 247 208 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-green-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-purple-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-purple-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-red-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-red-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-red-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-opacity-70:hover {\n --tw-bg-opacity: 0.7;\n}\n\n.hover\\\\:text-black:hover {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-blue-600:hover {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-blue-700:hover {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-blue-800:hover {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-gray-600:hover {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-gray-700:hover {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-gray-800:hover {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-green-100:hover {\n --tw-text-opacity: 1;\n color: rgb(220 252 231 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-red-500:hover {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-red-700:hover {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:underline:hover {\n text-decoration-line: underline;\n}\n\n.hover\\\\:opacity-75:hover {\n opacity: 0.75;\n}\n\n.hover\\\\:opacity-80:hover {\n opacity: 0.8;\n}\n\n.focus\\\\:border-none:focus {\n border-style: none;\n}\n\n.focus\\\\:border-blue-300:focus {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n\n.focus\\\\:border-blue-500:focus {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n\n.focus\\\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n.focus\\\\:ring:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\\\:ring-0:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\\\:ring-blue-200:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\\\:ring-blue-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\\\:ring-opacity-50:focus {\n --tw-ring-opacity: 0.5;\n}\n\n.focus\\\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n\n.disabled\\\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n\n.disabled\\\\:bg-gray-400:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\\\:bg-green-400:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\\\:opacity-50:disabled {\n opacity: 0.5;\n}\n\n.group:hover .group-hover\\\\:ml-2 {\n margin-left: 0.5rem;\n}\n\n.group:hover .group-hover\\\\:flex {\n display: flex;\n}\n\n.group:hover .group-hover\\\\:max-w-xs {\n max-width: 20rem;\n}\n\n.group:hover .group-hover\\\\:opacity-100 {\n opacity: 1;\n}\n\n.group:focus .group-focus\\\\:ml-2 {\n margin-left: 0.5rem;\n}\n\n.group:focus .group-focus\\\\:max-w-xs {\n max-width: 20rem;\n}\n\n.group:focus .group-focus\\\\:opacity-100 {\n opacity: 1;\n}\n\n.dark\\\\:border-blue-600:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-blue-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(29 78 216 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-blue-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(30 64 175 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-gray-600:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(75 85 99 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-gray-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-gray-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(31 41 55 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-gray-900:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(17 24 39 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-green-500\\\\/60:is(.dark *) {\n border-color: rgb(34 197 94 / 0.6);\n}\n\n.dark\\\\:border-green-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(21 128 61 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-green-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(22 101 52 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-orange-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(194 65 12 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-red-600:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(220 38 38 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-red-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(185 28 28 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-yellow-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(161 98 7 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-yellow-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(133 77 14 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:bg-blue-500:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-blue-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-blue-800:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(30 64 175 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-blue-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-blue-900\\\\/10:is(.dark *) {\n background-color: rgb(30 58 138 / 0.1);\n}\n\n.dark\\\\:bg-blue-900\\\\/20:is(.dark *) {\n background-color: rgb(30 58 138 / 0.2);\n}\n\n.dark\\\\:bg-blue-900\\\\/30:is(.dark *) {\n background-color: rgb(30 58 138 / 0.3);\n}\n\n.dark\\\\:bg-blue-900\\\\/50:is(.dark *) {\n background-color: rgb(30 58 138 / 0.5);\n}\n\n.dark\\\\:bg-gray-600:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-gray-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-gray-800:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-gray-800\\\\/50:is(.dark *) {\n background-color: rgb(31 41 55 / 0.5);\n}\n\n.dark\\\\:bg-gray-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-gray-900\\\\/20:is(.dark *) {\n background-color: rgb(17 24 39 / 0.2);\n}\n\n.dark\\\\:bg-gray-900\\\\/50:is(.dark *) {\n background-color: rgb(17 24 39 / 0.5);\n}\n\n.dark\\\\:bg-green-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-green-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(20 83 45 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-green-900\\\\/20:is(.dark *) {\n background-color: rgb(20 83 45 / 0.2);\n}\n\n.dark\\\\:bg-orange-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(124 45 18 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-orange-900\\\\/20:is(.dark *) {\n background-color: rgb(124 45 18 / 0.2);\n}\n\n.dark\\\\:bg-purple-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-purple-800:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(107 33 168 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-red-500:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-red-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-red-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-red-900\\\\/20:is(.dark *) {\n background-color: rgb(127 29 29 / 0.2);\n}\n\n.dark\\\\:bg-red-900\\\\/50:is(.dark *) {\n background-color: rgb(127 29 29 / 0.5);\n}\n\n.dark\\\\:bg-transparent:is(.dark *) {\n background-color: transparent;\n}\n\n.dark\\\\:bg-yellow-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(113 63 18 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-yellow-900\\\\/20:is(.dark *) {\n background-color: rgb(113 63 18 / 0.2);\n}\n\n.dark\\\\:bg-yellow-900\\\\/30:is(.dark *) {\n background-color: rgb(113 63 18 / 0.3);\n}\n\n.dark\\\\:text-blue-100:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(219 234 254 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-blue-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(191 219 254 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-blue-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-blue-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-blue-500:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(59 130 246 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-100:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(243 244 246 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-500:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-600:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-green-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(187 247 208 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-green-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-orange-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(254 215 170 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-purple-100:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(243 232 255 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-purple-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(192 132 252 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-red-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(254 202 202 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-red-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-red-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-white:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-yellow-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(254 240 138 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-yellow-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(253 224 71 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-yellow-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:placeholder-gray-400:is(.dark *)::-moz-placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));\n}\n\n.dark\\\\:placeholder-gray-400:is(.dark *)::placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));\n}\n\n.dark\\\\:placeholder-gray-600:is(.dark *)::-moz-placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(75 85 99 / var(--tw-placeholder-opacity, 1));\n}\n\n.dark\\\\:placeholder-gray-600:is(.dark *)::placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(75 85 99 / var(--tw-placeholder-opacity, 1));\n}\n\n.dark\\\\:ring-blue-600:is(.dark *) {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(37 99 235 / var(--tw-ring-opacity, 1));\n}\n\n.dark\\\\:ring-blue-900\\\\/50:is(.dark *) {\n --tw-ring-color: rgb(30 58 138 / 0.5);\n}\n\n.dark\\\\:hover\\\\:border-blue-600:hover:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-blue-600:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-blue-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(30 64 175 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-blue-800\\\\/50:hover:is(.dark *) {\n background-color: rgb(30 64 175 / 0.5);\n}\n\n.dark\\\\:hover\\\\:bg-blue-900:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-blue-900\\\\/30:hover:is(.dark *) {\n background-color: rgb(30 58 138 / 0.3);\n}\n\n.dark\\\\:hover\\\\:bg-blue-900\\\\/50:hover:is(.dark *) {\n background-color: rgb(30 58 138 / 0.5);\n}\n\n.dark\\\\:hover\\\\:bg-gray-600:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-gray-700:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-gray-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-green-600:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-green-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(22 101 52 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-green-900:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(20 83 45 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-purple-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(107 33 168 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-purple-900:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(88 28 135 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-red-600:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-red-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(153 27 27 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-red-800\\\\/50:hover:is(.dark *) {\n background-color: rgb(153 27 27 / 0.5);\n}\n\n.dark\\\\:hover\\\\:bg-red-900:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-blue-300:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-gray-200:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-gray-300:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-gray-400:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-red-300:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-white:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:focus\\\\:ring-blue-800:focus:is(.dark *) {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity, 1));\n}\n\n@media (min-width: 640px) {\n\n .sm\\\\:left-auto {\n left: auto;\n }\n\n .sm\\\\:right-0 {\n right: 0px;\n }\n\n .sm\\\\:mb-0 {\n margin-bottom: 0px;\n }\n\n .sm\\\\:h-auto {\n height: auto;\n }\n\n .sm\\\\:w-56 {\n width: 14rem;\n }\n\n .sm\\\\:w-72 {\n width: 18rem;\n }\n\n .sm\\\\:max-w-2xl {\n max-width: 42rem;\n }\n\n .sm\\\\:max-w-6xl {\n max-width: 72rem;\n }\n\n .sm\\\\:max-w-md {\n max-width: 28rem;\n }\n\n .sm\\\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\\\:items-center {\n align-items: center;\n }\n\n .sm\\\\:rounded-lg {\n border-radius: 0.5rem;\n }\n\n .sm\\\\:p-6 {\n padding: 1.5rem;\n }\n\n .sm\\\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\\\:shadow-2xl {\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n }\n}\n\n@media (min-width: 768px) {\n\n .md\\\\:mb-0 {\n margin-bottom: 0px;\n }\n\n .md\\\\:block {\n display: block;\n }\n\n .md\\\\:flex {\n display: flex;\n }\n\n .md\\\\:hidden {\n display: none;\n }\n\n .md\\\\:w-auto {\n width: auto;\n }\n\n .md\\\\:max-w-3xl {\n max-width: 48rem;\n }\n\n .md\\\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .md\\\\:flex-row {\n flex-direction: row;\n }\n\n .md\\\\:items-center {\n align-items: center;\n }\n\n .md\\\\:justify-end {\n justify-content: flex-end;\n }\n\n .md\\\\:justify-between {\n justify-content: space-between;\n }\n\n .md\\\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .md\\\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0px * var(--tw-space-y-reverse));\n }\n\n .md\\\\:px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n\n .md\\\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .md\\\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n}\n\n@media (min-width: 1024px) {\n\n .lg\\\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n\n .lg\\\\:flex {\n display: flex;\n }\n\n .lg\\\\:hidden {\n display: none;\n }\n\n .lg\\\\:w-12 {\n width: 3rem;\n }\n\n .lg\\\\:w-80 {\n width: 20rem;\n }\n\n .lg\\\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .lg\\\\:flex-row {\n flex-direction: row;\n }\n\n .lg\\\\:border-l {\n border-left-width: 1px;\n }\n\n .lg\\\\:border-t-0 {\n border-top-width: 0px;\n }\n\n .lg\\\\:p-4 {\n padding: 1rem;\n }\n\n .lg\\\\:p-8 {\n padding: 2rem;\n }\n\n .lg\\\\:px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n\n .lg\\\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .lg\\\\:pr-2 {\n padding-right: 0.5rem;\n }\n\n .lg\\\\:opacity-100 {\n opacity: 1;\n }\n}\n\n@media (min-width: 1280px) {\n\n .xl\\\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n}\n\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://tududi/./frontend/styles/tailwind.css?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}/*\n! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured \\`sans\\` font-family by default.\n5. Use the user's configured \\`sans\\` font-feature-settings by default.\n6. Use the user's configured \\`sans\\` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from \\`html\\` so users can set them as a class directly on the \\`html\\` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured \\`mono\\` font-family by default.\n2. Use the user's configured \\`mono\\` font-feature-settings by default.\n3. Use the user's configured \\`mono\\` font-variation-settings by default.\n4. Correct the odd \\`em\\` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent \\`sub\\` and \\`sup\\` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional \\`:invalid\\` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to \\`inherit\\` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements \\`display: block\\` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add \\`vertical-align: middle\\` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.visible {\n visibility: visible;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-1 {\n inset: 0.25rem;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-right-2 {\n right: -0.5rem;\n}\n.-top-2 {\n top: -0.5rem;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.bottom-6 {\n bottom: 1.5rem;\n}\n.bottom-full {\n bottom: 100%;\n}\n.left-0 {\n left: 0px;\n}\n.left-1 {\n left: 0.25rem;\n}\n.left-1\\\\/2 {\n left: 50%;\n}\n.left-2 {\n left: 0.5rem;\n}\n.left-3 {\n left: 0.75rem;\n}\n.right-0 {\n right: 0px;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-2 {\n right: 0.5rem;\n}\n.right-3 {\n right: 0.75rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-6 {\n right: 1.5rem;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\\\/2 {\n top: 50%;\n}\n.top-16 {\n top: 4rem;\n}\n.top-2 {\n top: 0.5rem;\n}\n.top-20 {\n top: 5rem;\n}\n.top-3 {\n top: 0.75rem;\n}\n.top-4 {\n top: 1rem;\n}\n.top-full {\n top: 100%;\n}\n.z-10 {\n z-index: 10;\n}\n.z-40 {\n z-index: 40;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\\\[45\\\\] {\n z-index: 45;\n}\n.col-span-full {\n grid-column: 1 / -1;\n}\n.m-1 {\n margin: 0.25rem;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.my-6 {\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n}\n.-mb-px {\n margin-bottom: -1px;\n}\n.mb-1 {\n margin-bottom: 0.25rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-3 {\n margin-bottom: 0.75rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.mb-8 {\n margin-bottom: 2rem;\n}\n.ml-0 {\n margin-left: 0px;\n}\n.ml-1 {\n margin-left: 0.25rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-72 {\n margin-left: 18rem;\n}\n.ml-8 {\n margin-left: 2rem;\n}\n.mr-1 {\n margin-right: 0.25rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mr-3 {\n margin-right: 0.75rem;\n}\n.mr-4 {\n margin-right: 1rem;\n}\n.mt-0\\\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-1\\\\.5 {\n margin-top: 0.375rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-auto {\n margin-top: auto;\n}\n.line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-20 {\n height: 5rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\\\.5 {\n height: 0.875rem;\n}\n.h-32 {\n height: 8rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-40 {\n height: 10rem;\n}\n.h-48 {\n height: 12rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-64 {\n height: 16rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-\\\\[calc\\\\(100vh-4rem\\\\)\\\\] {\n height: calc(100vh - 4rem);\n}\n.h-full {\n height: 100%;\n}\n.h-screen {\n height: 100vh;\n}\n.max-h-0 {\n max-height: 0px;\n}\n.max-h-60 {\n max-height: 15rem;\n}\n.max-h-96 {\n max-height: 24rem;\n}\n.max-h-\\\\[500px\\\\] {\n max-height: 500px;\n}\n.max-h-\\\\[90vh\\\\] {\n max-height: 90vh;\n}\n.min-h-0 {\n min-height: 0px;\n}\n.min-h-32 {\n min-height: 8rem;\n}\n.min-h-\\\\[400px\\\\] {\n min-height: 400px;\n}\n.min-h-\\\\[40px\\\\] {\n min-height: 40px;\n}\n.min-h-full {\n min-height: 100%;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-16 {\n width: 4rem;\n}\n.w-20 {\n width: 5rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\\\.5 {\n width: 0.875rem;\n}\n.w-32 {\n width: 8rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-48 {\n width: 12rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.max-w-0 {\n max-width: 0px;\n}\n.max-w-5xl {\n max-width: 64rem;\n}\n.max-w-6xl {\n max-width: 72rem;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-sm {\n max-width: 24rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\n}\n.origin-top-right {\n transform-origin: top right;\n}\n.-translate-x-1\\\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-0\\\\.5 {\n --tw-translate-x: 0.125rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-1 {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-6 {\n --tw-translate-x: 1.5rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-0\\\\.5 {\n --tw-translate-y: 0.125rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-100 {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-95 {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes pulse {\n\n 50% {\n opacity: .5;\n }\n}\n.animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n@keyframes spin {\n\n to {\n transform: rotate(360deg);\n }\n}\n.animate-spin {\n animation: spin 1s linear infinite;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.resize {\n resize: both;\n}\n.list-inside {\n list-style-position: inside;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.appearance-none {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.grid-cols-8 {\n grid-template-columns: repeat(8, minmax(0, 1fr));\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-wrap {\n flex-wrap: wrap;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-end {\n align-items: flex-end;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-6 {\n gap: 1.5rem;\n}\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-x-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(2rem * var(--tw-space-x-reverse));\n margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-pre-wrap {\n white-space: pre-wrap;\n}\n.break-words {\n overflow-wrap: break-word;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-l-lg {\n border-top-left-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n.rounded-r-lg {\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l {\n border-left-width: 1px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-l-4 {\n border-left-width: 4px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-none {\n border-style: none;\n}\n.border-blue-200 {\n --tw-border-opacity: 1;\n border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-300 {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n.border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n.border-blue-500 {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-blue-700 {\n --tw-border-opacity: 1;\n border-color: rgb(29 78 216 / var(--tw-border-opacity, 1));\n}\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-border-opacity, 1));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.border-gray-50 {\n --tw-border-opacity: 1;\n border-color: rgb(249 250 251 / var(--tw-border-opacity, 1));\n}\n.border-green-200 {\n --tw-border-opacity: 1;\n border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));\n}\n.border-green-300 {\n --tw-border-opacity: 1;\n border-color: rgb(134 239 172 / var(--tw-border-opacity, 1));\n}\n.border-green-400\\\\/60 {\n border-color: rgb(74 222 128 / 0.6);\n}\n.border-green-500 {\n --tw-border-opacity: 1;\n border-color: rgb(34 197 94 / var(--tw-border-opacity, 1));\n}\n.border-orange-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 215 170 / var(--tw-border-opacity, 1));\n}\n.border-purple-500 {\n --tw-border-opacity: 1;\n border-color: rgb(168 85 247 / var(--tw-border-opacity, 1));\n}\n.border-red-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));\n}\n.border-red-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));\n}\n.border-red-700 {\n --tw-border-opacity: 1;\n border-color: rgb(185 28 28 / var(--tw-border-opacity, 1));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.border-yellow-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 240 138 / var(--tw-border-opacity, 1));\n}\n.border-yellow-500 {\n --tw-border-opacity: 1;\n border-color: rgb(234 179 8 / var(--tw-border-opacity, 1));\n}\n.border-l-white\\\\/50 {\n border-left-color: rgb(255 255 255 / 0.5);\n}\n.border-t-blue-500 {\n --tw-border-opacity: 1;\n border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.bg-amber-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));\n}\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-100\\\\/50 {\n background-color: rgb(219 234 254 / 0.5);\n}\n.bg-blue-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(96 165 250 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50\\\\/30 {\n background-color: rgb(239 246 255 / 0.3);\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\n}\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n.bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n.bg-green-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));\n}\n.bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1));\n}\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n.bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n.bg-red-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1));\n}\n.bg-opacity-40 {\n --tw-bg-opacity: 0.4;\n}\n.bg-opacity-50 {\n --tw-bg-opacity: 0.5;\n}\n.bg-opacity-80 {\n --tw-bg-opacity: 0.8;\n}\n.bg-gradient-to-r {\n background-image: linear-gradient(to right, var(--tw-gradient-stops));\n}\n.from-blue-400 {\n --tw-gradient-from: #60a5fa var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.via-blue-500 {\n --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.to-blue-700 {\n --tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position);\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-1\\\\.5 {\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.py-0\\\\.5 {\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.pb-3 {\n padding-bottom: 0.75rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-4 {\n padding-left: 1rem;\n}\n.pr-10 {\n padding-right: 2.5rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pr-6 {\n padding-right: 1.5rem;\n}\n.pr-8 {\n padding-right: 2rem;\n}\n.pt-24 {\n padding-top: 6rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.font-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-5xl {\n font-size: 3rem;\n line-height: 1;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.capitalize {\n text-transform: capitalize;\n}\n.italic {\n font-style: italic;\n}\n.leading-none {\n line-height: 1;\n}\n.leading-relaxed {\n line-height: 1.625;\n}\n.leading-tight {\n line-height: 1.25;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(180 83 9 / var(--tw-text-opacity, 1));\n}\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n.text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n.text-blue-500 {\n --tw-text-opacity: 1;\n color: rgb(59 130 246 / var(--tw-text-opacity, 1));\n}\n.text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n.text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n.text-gray-800 {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.text-green-200 {\n --tw-text-opacity: 1;\n color: rgb(187 247 208 / var(--tw-text-opacity, 1));\n}\n.text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity, 1));\n}\n.text-green-500 {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity, 1));\n}\n.text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity, 1));\n}\n.text-indigo-500 {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity, 1));\n}\n.text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.text-orange-800 {\n --tw-text-opacity: 1;\n color: rgb(154 52 18 / var(--tw-text-opacity, 1));\n}\n.text-pink-500 {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n.text-purple-500 {\n --tw-text-opacity: 1;\n color: rgb(168 85 247 / var(--tw-text-opacity, 1));\n}\n.text-purple-600 {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n.text-purple-800 {\n --tw-text-opacity: 1;\n color: rgb(107 33 168 / var(--tw-text-opacity, 1));\n}\n.text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n.text-red-800 {\n --tw-text-opacity: 1;\n color: rgb(153 27 27 / var(--tw-text-opacity, 1));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity, 1));\n}\n.text-yellow-500 {\n --tw-text-opacity: 1;\n color: rgb(234 179 8 / var(--tw-text-opacity, 1));\n}\n.text-yellow-600 {\n --tw-text-opacity: 1;\n color: rgb(202 138 4 / var(--tw-text-opacity, 1));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity, 1));\n}\n.text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.no-underline {\n text-decoration-line: none;\n}\n.placeholder-gray-400::-moz-placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));\n}\n.placeholder-gray-400::placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));\n}\n.placeholder-gray-500::-moz-placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(107 114 128 / var(--tw-placeholder-opacity, 1));\n}\n.placeholder-gray-500::placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(107 114 128 / var(--tw-placeholder-opacity, 1));\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-20 {\n opacity: 0.2;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-90 {\n opacity: 0.9;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.ring-1 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-black {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-100 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1));\n}\n.ring-opacity-5 {\n --tw-ring-opacity: 0.05;\n}\n.drop-shadow-lg {\n --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.duration-500 {\n transition-duration: 500ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ease-out {\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n}\n\n.spinner {\n border: 4px solid rgba(0, 0, 0, 0.1);\n width: 36px;\n height: 36px;\n border-radius: 50%;\n border-left-color: #09f;\n animation: spin 1s ease infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes border-pulse {\n 0%, 100% {\n border-color: rgba(74, 222, 128, 0.3);\n }\n 50% {\n border-color: rgba(74, 222, 128, 0.8);\n }\n}\n\n.dark .task-border-pulse {\n animation: border-pulse-dark 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n@keyframes border-pulse-dark {\n 0%, 100% {\n border-color: rgba(34, 197, 94, 0.3);\n }\n 50% {\n border-color: rgba(34, 197, 94, 0.8);\n }\n}\n\n.task-border-pulse {\n animation: border-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n/* Rotating border animation for in-progress tasks */\n@keyframes border-spin {\n 0% {\n border-color: rgba(74, 222, 128, 0.8);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.8);\n }\n 25% {\n border-color: rgba(74, 222, 128, 0.2);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.2);\n }\n 50% {\n border-color: rgba(74, 222, 128, 0.8);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.8);\n }\n 75% {\n border-color: rgba(74, 222, 128, 0.2);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.2);\n }\n 100% {\n border-color: rgba(74, 222, 128, 0.8);\n box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.8);\n }\n}\n\n.task-border-rotate {\n border: 2px solid rgba(74, 222, 128, 0.8);\n border-radius: 0.5rem;\n animation: border-spin 1.5s ease-in-out infinite;\n}\n\n.dark .task-border-rotate {\n border-color: rgba(34, 197, 94, 0.8);\n}\n\n@keyframes border-spin-dark {\n 0% {\n border-color: rgba(34, 197, 94, 0.8);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.8);\n }\n 25% {\n border-color: rgba(34, 197, 94, 0.2);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.2);\n }\n 50% {\n border-color: rgba(34, 197, 94, 0.8);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.8);\n }\n 75% {\n border-color: rgba(34, 197, 94, 0.2);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.2);\n }\n 100% {\n border-color: rgba(34, 197, 94, 0.8);\n box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.8);\n }\n}\n\n.dark .task-border-rotate {\n animation: border-spin-dark 1.5s ease-in-out infinite;\n}\n\ninput:focus, select:focus, textarea:focus {\n outline: none;\n box-shadow: none;\n}\n\n.hover\\\\:scale-110:hover {\n --tw-scale-x: 1.1;\n --tw-scale-y: 1.1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.hover\\\\:border-blue-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n\n.hover\\\\:border-gray-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n\n.hover\\\\:bg-blue-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-blue-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(191 219 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-blue-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-blue-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-blue-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-300:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-400:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-green-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-green-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(187 247 208 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-green-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-purple-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-purple-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-red-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-red-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-red-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\\\:bg-opacity-70:hover {\n --tw-bg-opacity: 0.7;\n}\n\n.hover\\\\:text-black:hover {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-blue-600:hover {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-blue-700:hover {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-blue-800:hover {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-gray-600:hover {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-gray-700:hover {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-gray-800:hover {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-green-100:hover {\n --tw-text-opacity: 1;\n color: rgb(220 252 231 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-red-500:hover {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:text-red-700:hover {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n\n.hover\\\\:underline:hover {\n text-decoration-line: underline;\n}\n\n.hover\\\\:opacity-75:hover {\n opacity: 0.75;\n}\n\n.hover\\\\:opacity-80:hover {\n opacity: 0.8;\n}\n\n.focus\\\\:border-none:focus {\n border-style: none;\n}\n\n.focus\\\\:border-blue-300:focus {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n\n.focus\\\\:border-blue-500:focus {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n\n.focus\\\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n.focus\\\\:ring:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\\\:ring-0:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\\\:ring-blue-200:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\\\:ring-blue-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\\\:ring-opacity-50:focus {\n --tw-ring-opacity: 0.5;\n}\n\n.focus\\\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n\n.disabled\\\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n\n.disabled\\\\:bg-gray-400:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\\\:bg-green-400:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\\\:opacity-50:disabled {\n opacity: 0.5;\n}\n\n.group:hover .group-hover\\\\:ml-2 {\n margin-left: 0.5rem;\n}\n\n.group:hover .group-hover\\\\:flex {\n display: flex;\n}\n\n.group:hover .group-hover\\\\:max-w-xs {\n max-width: 20rem;\n}\n\n.group:hover .group-hover\\\\:opacity-100 {\n opacity: 1;\n}\n\n.group:focus .group-focus\\\\:ml-2 {\n margin-left: 0.5rem;\n}\n\n.group:focus .group-focus\\\\:max-w-xs {\n max-width: 20rem;\n}\n\n.group:focus .group-focus\\\\:opacity-100 {\n opacity: 1;\n}\n\n.dark\\\\:border-blue-600:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-blue-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(29 78 216 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-blue-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(30 64 175 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-gray-600:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(75 85 99 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-gray-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-gray-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(31 41 55 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-gray-900:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(17 24 39 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-green-500\\\\/60:is(.dark *) {\n border-color: rgb(34 197 94 / 0.6);\n}\n\n.dark\\\\:border-green-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(21 128 61 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-green-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(22 101 52 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-orange-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(194 65 12 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-red-600:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(220 38 38 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-red-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(185 28 28 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-yellow-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(161 98 7 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:border-yellow-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(133 77 14 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:bg-amber-900\\\\/30:is(.dark *) {\n background-color: rgb(120 53 15 / 0.3);\n}\n\n.dark\\\\:bg-blue-500:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-blue-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-blue-800:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(30 64 175 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-blue-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-blue-900\\\\/10:is(.dark *) {\n background-color: rgb(30 58 138 / 0.1);\n}\n\n.dark\\\\:bg-blue-900\\\\/20:is(.dark *) {\n background-color: rgb(30 58 138 / 0.2);\n}\n\n.dark\\\\:bg-blue-900\\\\/30:is(.dark *) {\n background-color: rgb(30 58 138 / 0.3);\n}\n\n.dark\\\\:bg-blue-900\\\\/50:is(.dark *) {\n background-color: rgb(30 58 138 / 0.5);\n}\n\n.dark\\\\:bg-gray-600:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-gray-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-gray-800:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-gray-800\\\\/50:is(.dark *) {\n background-color: rgb(31 41 55 / 0.5);\n}\n\n.dark\\\\:bg-gray-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-gray-900\\\\/20:is(.dark *) {\n background-color: rgb(17 24 39 / 0.2);\n}\n\n.dark\\\\:bg-gray-900\\\\/50:is(.dark *) {\n background-color: rgb(17 24 39 / 0.5);\n}\n\n.dark\\\\:bg-green-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-green-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(20 83 45 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-green-900\\\\/20:is(.dark *) {\n background-color: rgb(20 83 45 / 0.2);\n}\n\n.dark\\\\:bg-orange-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(124 45 18 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-orange-900\\\\/20:is(.dark *) {\n background-color: rgb(124 45 18 / 0.2);\n}\n\n.dark\\\\:bg-purple-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-purple-800:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(107 33 168 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-red-500:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-red-700:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-red-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-red-900\\\\/20:is(.dark *) {\n background-color: rgb(127 29 29 / 0.2);\n}\n\n.dark\\\\:bg-red-900\\\\/50:is(.dark *) {\n background-color: rgb(127 29 29 / 0.5);\n}\n\n.dark\\\\:bg-transparent:is(.dark *) {\n background-color: transparent;\n}\n\n.dark\\\\:bg-yellow-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(113 63 18 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:bg-yellow-900\\\\/20:is(.dark *) {\n background-color: rgb(113 63 18 / 0.2);\n}\n\n.dark\\\\:bg-yellow-900\\\\/30:is(.dark *) {\n background-color: rgb(113 63 18 / 0.3);\n}\n\n.dark\\\\:text-amber-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(252 211 77 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-blue-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(191 219 254 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-blue-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-blue-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-blue-500:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(59 130 246 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-100:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(243 244 246 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-500:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-gray-600:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-green-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(187 247 208 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-green-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-orange-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(254 215 170 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-purple-100:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(243 232 255 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-purple-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(192 132 252 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-red-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(254 202 202 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-red-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-red-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-white:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-yellow-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(254 240 138 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-yellow-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(253 224 71 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:text-yellow-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:placeholder-gray-400:is(.dark *)::-moz-placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));\n}\n\n.dark\\\\:placeholder-gray-400:is(.dark *)::placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1));\n}\n\n.dark\\\\:placeholder-gray-600:is(.dark *)::-moz-placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(75 85 99 / var(--tw-placeholder-opacity, 1));\n}\n\n.dark\\\\:placeholder-gray-600:is(.dark *)::placeholder {\n --tw-placeholder-opacity: 1;\n color: rgb(75 85 99 / var(--tw-placeholder-opacity, 1));\n}\n\n.dark\\\\:ring-blue-600:is(.dark *) {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(37 99 235 / var(--tw-ring-opacity, 1));\n}\n\n.dark\\\\:ring-blue-900\\\\/50:is(.dark *) {\n --tw-ring-color: rgb(30 58 138 / 0.5);\n}\n\n.dark\\\\:hover\\\\:border-blue-600:hover:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-blue-600:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-blue-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(30 64 175 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-blue-800\\\\/50:hover:is(.dark *) {\n background-color: rgb(30 64 175 / 0.5);\n}\n\n.dark\\\\:hover\\\\:bg-blue-900:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-blue-900\\\\/30:hover:is(.dark *) {\n background-color: rgb(30 58 138 / 0.3);\n}\n\n.dark\\\\:hover\\\\:bg-blue-900\\\\/50:hover:is(.dark *) {\n background-color: rgb(30 58 138 / 0.5);\n}\n\n.dark\\\\:hover\\\\:bg-gray-600:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-gray-700:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-gray-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-green-600:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-green-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(22 101 52 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-green-900:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(20 83 45 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-purple-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(107 33 168 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-purple-900:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(88 28 135 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-red-600:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-red-800:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(153 27 27 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:bg-red-800\\\\/50:hover:is(.dark *) {\n background-color: rgb(153 27 27 / 0.5);\n}\n\n.dark\\\\:hover\\\\:bg-red-900:hover:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-blue-300:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-gray-100:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(243 244 246 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-gray-200:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-gray-300:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-gray-400:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-red-300:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(252 165 165 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:hover\\\\:text-white:hover:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.dark\\\\:focus\\\\:ring-blue-800:focus:is(.dark *) {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity, 1));\n}\n\n@media (min-width: 640px) {\n\n .sm\\\\:left-auto {\n left: auto;\n }\n\n .sm\\\\:right-0 {\n right: 0px;\n }\n\n .sm\\\\:top-16 {\n top: 4rem;\n }\n\n .sm\\\\:mb-0 {\n margin-bottom: 0px;\n }\n\n .sm\\\\:ml-4 {\n margin-left: 1rem;\n }\n\n .sm\\\\:mt-0 {\n margin-top: 0px;\n }\n\n .sm\\\\:block {\n display: block;\n }\n\n .sm\\\\:hidden {\n display: none;\n }\n\n .sm\\\\:h-auto {\n height: auto;\n }\n\n .sm\\\\:w-56 {\n width: 14rem;\n }\n\n .sm\\\\:w-72 {\n width: 18rem;\n }\n\n .sm\\\\:max-w-2xl {\n max-width: 42rem;\n }\n\n .sm\\\\:max-w-6xl {\n max-width: 72rem;\n }\n\n .sm\\\\:max-w-md {\n max-width: 28rem;\n }\n\n .sm\\\\:flex-none {\n flex: none;\n }\n\n .sm\\\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\\\:items-center {\n align-items: center;\n }\n\n .sm\\\\:justify-between {\n justify-content: space-between;\n }\n\n .sm\\\\:rounded-lg {\n border-radius: 0.5rem;\n }\n\n .sm\\\\:border {\n border-width: 1px;\n }\n\n .sm\\\\:p-6 {\n padding: 1.5rem;\n }\n\n .sm\\\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\\\:shadow-2xl {\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n }\n}\n\n@media (min-width: 768px) {\n\n .md\\\\:mb-0 {\n margin-bottom: 0px;\n }\n\n .md\\\\:block {\n display: block;\n }\n\n .md\\\\:flex {\n display: flex;\n }\n\n .md\\\\:hidden {\n display: none;\n }\n\n .md\\\\:w-auto {\n width: auto;\n }\n\n .md\\\\:max-w-3xl {\n max-width: 48rem;\n }\n\n .md\\\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .md\\\\:flex-row {\n flex-direction: row;\n }\n\n .md\\\\:items-center {\n align-items: center;\n }\n\n .md\\\\:justify-end {\n justify-content: flex-end;\n }\n\n .md\\\\:justify-between {\n justify-content: space-between;\n }\n\n .md\\\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .md\\\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0px * var(--tw-space-y-reverse));\n }\n\n .md\\\\:px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n\n .md\\\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .md\\\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n}\n\n@media (min-width: 1024px) {\n\n .lg\\\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n\n .lg\\\\:flex {\n display: flex;\n }\n\n .lg\\\\:hidden {\n display: none;\n }\n\n .lg\\\\:w-12 {\n width: 3rem;\n }\n\n .lg\\\\:w-80 {\n width: 20rem;\n }\n\n .lg\\\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .lg\\\\:flex-row {\n flex-direction: row;\n }\n\n .lg\\\\:border-l {\n border-left-width: 1px;\n }\n\n .lg\\\\:border-t-0 {\n border-top-width: 0px;\n }\n\n .lg\\\\:p-4 {\n padding: 1rem;\n }\n\n .lg\\\\:p-8 {\n padding: 2rem;\n }\n\n .lg\\\\:px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n\n .lg\\\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .lg\\\\:pr-2 {\n padding-right: 0.5rem;\n }\n\n .lg\\\\:opacity-100 {\n opacity: 1;\n }\n}\n\n@media (min-width: 1280px) {\n\n .xl\\\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n}\n\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://tududi/./frontend/styles/tailwind.css?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js"); /***/ }), @@ -14612,7 +14623,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /******/ // This function allow to reference all chunks /******/ __webpack_require__.u = (chunkId) => { /******/ // return url for filenames based on template -/******/ return "" + chunkId + "." + {"main":"272db06f0669b56179b9","frontend_components_Tasks_tsx":"5d1f9b2b7404e2433dee","vendors-node_modules_cross-fetch_dist_browser-ponyfill_js":"6451a0808e985bae004f"}[chunkId] + ".js"; +/******/ return "" + chunkId + "." + {"main":"be344336e9db0dc716cb","frontend_components_Tasks_tsx":"5d1f9b2b7404e2433dee","vendors-node_modules_cross-fetch_dist_browser-ponyfill_js":"6451a0808e985bae004f"}[chunkId] + ".js"; /******/ }; /******/ })(); /******/ @@ -14632,7 +14643,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("3cbea2de803737656ce6") +/******/ __webpack_require__.h = () => ("a0f865248d65c046519d") /******/ })(); /******/ /******/ /* webpack/runtime/global */ diff --git a/frontend/Layout.tsx b/frontend/Layout.tsx index b98fc82..7b42a5a 100644 --- a/frontend/Layout.tsx +++ b/frontend/Layout.tsx @@ -43,6 +43,7 @@ const Layout: React.FC = ({ const { t } = useTranslation(); const { showSuccessToast } = useToast(); const [isSidebarOpen, setIsSidebarOpen] = useState(window.innerWidth >= 1024); + const [globalModalCount, setGlobalModalCount] = useState(0); const [isTaskModalOpen, setIsTaskModalOpen] = useState(false); const [isProjectModalOpen, setIsProjectModalOpen] = useState(false); const [isNoteModalOpen, setIsNoteModalOpen] = useState(false); @@ -101,6 +102,26 @@ const Layout: React.FC = ({ setTaskModalType(type); }; + // Listen for global modal events from child components + useEffect(() => { + const handleModalOpen = () => { + setGlobalModalCount(prev => prev + 1); + }; + + const handleModalClose = () => { + setGlobalModalCount(prev => Math.max(0, prev - 1)); + }; + + window.addEventListener('modalOpen', handleModalOpen); + window.addEventListener('modalClose', handleModalClose); + + return () => { + window.removeEventListener('modalOpen', handleModalOpen); + window.removeEventListener('modalClose', handleModalClose); + }; + }, []); + + useEffect(() => { const handleResize = () => { setIsSidebarOpen(window.innerWidth >= 1024); @@ -449,14 +470,17 @@ const Layout: React.FC = ({ - + {/* Hide floating + button when any modal is open to prevent overlap with save buttons */} + {!isTaskModalOpen && !isProjectModalOpen && !isNoteModalOpen && !isAreaModalOpen && !isTagModalOpen && globalModalCount === 0 && ( + + )} {isTaskModalOpen && ( taskModalType === 'simplified' ? ( diff --git a/frontend/components/Calendar.tsx b/frontend/components/Calendar.tsx index fa65fcc..74639d4 100644 --- a/frontend/components/Calendar.tsx +++ b/frontend/components/Calendar.tsx @@ -17,6 +17,7 @@ import { el, enUS, es, ja, uk, de } from 'date-fns/locale'; import CalendarMonthView from './Calendar/CalendarMonthView'; import CalendarWeekView from './Calendar/CalendarWeekView'; import CalendarDayView from './Calendar/CalendarDayView'; +import { useModalEvents } from '../hooks/useModalEvents'; const getLocale = (language: string) => { switch (language) { @@ -57,6 +58,9 @@ const Calendar: React.FC = () => { const [projects, setProjects] = useState([]); const [isTaskModalOpen, setIsTaskModalOpen] = useState(false); const [isEventDetailModalOpen, setIsEventDetailModalOpen] = useState(false); + + // Dispatch global modal events + useModalEvents(isTaskModalOpen || isEventDetailModalOpen); const locale = getLocale(i18n.language); diff --git a/frontend/components/Inbox/InboxItemDetail.tsx b/frontend/components/Inbox/InboxItemDetail.tsx index 44abfb6..b075a9a 100644 --- a/frontend/components/Inbox/InboxItemDetail.tsx +++ b/frontend/components/Inbox/InboxItemDetail.tsx @@ -1,8 +1,8 @@ import React, { useState } from 'react'; import { InboxItem } from '../../entities/InboxItem'; import { useTranslation } from 'react-i18next'; -import { format } from 'date-fns'; import { TrashIcon, PencilIcon, DocumentTextIcon, FolderIcon, ClipboardDocumentListIcon } from '@heroicons/react/24/outline'; +import { TagIcon } from '@heroicons/react/24/solid'; import { Task } from '../../entities/Task'; import { Project } from '../../entities/Project'; import { Note } from '../../entities/Note'; @@ -118,9 +118,6 @@ const InboxItemDetail: React.FC = ({ } }; - const formattedDate = item.created_at - ? format(new Date(item.created_at), 'MMM dd, yyyy HH:mm') - : ''; const handleDelete = () => { setShowConfirmDialog(true); @@ -139,20 +136,20 @@ const InboxItemDetail: React.FC = ({ onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} > -
-
+
+

{item.content} - - {formattedDate} - - +

+
+ + {item.source} -

+
-
+
{loading &&
} {/* Edit Button */} @@ -162,7 +159,7 @@ const InboxItemDetail: React.FC = ({ onUpdate(item.id, item.content); } }} - className={`p-2 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full transition-opacity ${isHovered ? 'opacity-100' : 'opacity-0'}`} + className={`p-2 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full transition-opacity opacity-100 sm:${isHovered ? 'opacity-100' : 'opacity-0'}`} title={t('common.edit')} > @@ -171,7 +168,7 @@ const InboxItemDetail: React.FC = ({ {/* Convert to Task Button */} + +
+
+
= ({ type="button" onClick={handleSubmit} disabled={!inputText.trim() || isSaving} - className={`ml-4 inline-flex justify-center px-4 py-2 text-sm font-medium text-white rounded-md shadow-sm focus:outline-none ${ + className={`mt-4 sm:mt-0 sm:ml-4 inline-flex justify-center px-4 py-2 text-sm font-medium text-white rounded-md shadow-sm focus:outline-none ${ inputText.trim() && !isSaving ? "bg-blue-600 hover:bg-blue-700" : "bg-blue-400 cursor-not-allowed" @@ -193,6 +222,7 @@ const SimplifiedTaskModal: React.FC = ({ text={inputText} onPreviewChange={setUrlPreview} /> */} +
diff --git a/frontend/components/Task/TaskHeader.tsx b/frontend/components/Task/TaskHeader.tsx index b816471..ab29ea0 100644 --- a/frontend/components/Task/TaskHeader.tsx +++ b/frontend/components/Task/TaskHeader.tsx @@ -269,7 +269,7 @@ const TaskHeader: React.FC = ({ {onToggleToday && ( diff --git a/frontend/components/Task/TaskItem.tsx b/frontend/components/Task/TaskItem.tsx index d07ec04..9821336 100644 --- a/frontend/components/Task/TaskItem.tsx +++ b/frontend/components/Task/TaskItem.tsx @@ -5,6 +5,7 @@ import TaskHeader from './TaskHeader'; import TaskModal from './TaskModal'; import { toggleTaskCompletion } from '../../utils/tasksService'; import { isTaskOverdue } from '../../utils/dateUtils'; +import { useModalEvents } from '../../hooks/useModalEvents'; interface TaskItemProps { task: Task; @@ -25,6 +26,9 @@ const TaskItem: React.FC = ({ }) => { const [isModalOpen, setIsModalOpen] = useState(false); const [projectList, setProjectList] = useState(projects); + + // Dispatch global modal events + useModalEvents(isModalOpen); const handleTaskClick = () => { setIsModalOpen(true); diff --git a/frontend/contexts/ModalContext.tsx b/frontend/contexts/ModalContext.tsx new file mode 100644 index 0000000..e35883d --- /dev/null +++ b/frontend/contexts/ModalContext.tsx @@ -0,0 +1,42 @@ +import React, { createContext, useContext, useState, ReactNode } from 'react'; + +interface ModalContextType { + isAnyModalOpen: boolean; + openModal: () => void; + closeModal: () => void; + modalCount: number; +} + +const ModalContext = createContext(undefined); + +export const useModal = () => { + const context = useContext(ModalContext); + if (context === undefined) { + throw new Error('useModal must be used within a ModalProvider'); + } + return context; +}; + +interface ModalProviderProps { + children: ReactNode; +} + +export const ModalProvider: React.FC = ({ children }) => { + const [modalCount, setModalCount] = useState(0); + + const openModal = () => { + setModalCount(prev => prev + 1); + }; + + const closeModal = () => { + setModalCount(prev => Math.max(0, prev - 1)); + }; + + const isAnyModalOpen = modalCount > 0; + + return ( + + {children} + + ); +}; \ No newline at end of file diff --git a/frontend/hooks/useModalEvents.ts b/frontend/hooks/useModalEvents.ts new file mode 100644 index 0000000..966d300 --- /dev/null +++ b/frontend/hooks/useModalEvents.ts @@ -0,0 +1,15 @@ +import { useEffect } from 'react'; + +/** + * Hook to dispatch global modal events when local modal state changes + * @param isOpen - Whether the modal is currently open + */ +export const useModalEvents = (isOpen: boolean) => { + useEffect(() => { + if (isOpen) { + window.dispatchEvent(new CustomEvent('modalOpen')); + } else { + window.dispatchEvent(new CustomEvent('modalClose')); + } + }, [isOpen]); +}; \ No newline at end of file diff --git a/frontend/hooks/useModalManager.ts b/frontend/hooks/useModalManager.ts new file mode 100644 index 0000000..03ab944 --- /dev/null +++ b/frontend/hooks/useModalManager.ts @@ -0,0 +1,28 @@ +import { useEffect } from 'react'; +import { useModal } from '../contexts/ModalContext'; + +/** + * Hook to automatically manage modal state with the global modal context + * @param isOpen - Whether the modal is currently open + * @returns Object with the modal context functions + */ +export const useModalManager = (isOpen: boolean) => { + const modalContext = useModal(); + + useEffect(() => { + if (isOpen) { + modalContext.openModal(); + } else { + modalContext.closeModal(); + } + + // Cleanup function to ensure we close the modal if component unmounts while open + return () => { + if (isOpen) { + modalContext.closeModal(); + } + }; + }, [isOpen, modalContext]); + + return modalContext; +}; \ No newline at end of file diff --git a/scripts/deploy_to_docker.sh b/scripts/deploy_to_docker.sh index b87d9a8..a19664d 100755 --- a/scripts/deploy_to_docker.sh +++ b/scripts/deploy_to_docker.sh @@ -27,15 +27,15 @@ echo "Setting up Docker buildx for multi-architecture builds" docker buildx ls | grep -q mybuilder || docker buildx create --name mybuilder --use docker buildx inspect --bootstrap -# Build and push multi-architecture images (AMD64, ARM64, ARMv7) with the version tag +# Build and push multi-architecture images (AMD64, ARM64) with the version tag echo "Building and pushing multi-architecture docker image: chrisvel/tududi:$docker_tag" -docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 \ +docker buildx build --platform linux/amd64,linux/arm64 \ -t chrisvel/tududi:"$docker_tag" \ --push . -# Build and push multi-architecture images (AMD64, ARM64, ARMv7) with the latest tag +# Build and push multi-architecture images (AMD64, ARM64) with the latest tag echo "Building and pushing multi-architecture docker image: chrisvel/tududi:latest" -docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 \ +docker buildx build --platform linux/amd64,linux/arm64 \ -t chrisvel/tududi:latest \ --push .