22 lines
32 KiB
JavaScript
22 lines
32 KiB
JavaScript
"use strict";
|
|
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
self["webpackHotUpdate_N_E"]("app/page",{
|
|
|
|
/***/ "(app-pages-browser)/./src/components/ProjectsGrid.tsx":
|
|
/*!*****************************************!*\
|
|
!*** ./src/components/ProjectsGrid.tsx ***!
|
|
\*****************************************/
|
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ProjectsGrid)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/image */ \"(app-pages-browser)/./node_modules/next/dist/api/image.js\");\n/* harmony import */ var _Layouts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Layouts */ \"(app-pages-browser)/./src/components/Layouts.tsx\");\n/* harmony import */ var _Buttons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Buttons */ \"(app-pages-browser)/./src/components/Buttons.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nfunction ProjectsGrid() {\n _s();\n const [projects, setProjects] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ProjectsGrid.useEffect\": ()=>{\n const fetchProjects = {\n \"ProjectsGrid.useEffect.fetchProjects\": async ()=>{\n try {\n const res = await fetch('/api/projects');\n if (!res.ok) {\n throw new Error('Failed to fetch projects');\n }\n const data = await res.json();\n // Filter to only show featured projects on the homepage\n const featuredProjects = data.filter({\n \"ProjectsGrid.useEffect.fetchProjects.featuredProjects\": (p)=>p.featured === true\n }[\"ProjectsGrid.useEffect.fetchProjects.featuredProjects\"]);\n setProjects(featuredProjects);\n } catch (err) {\n console.error('Error fetching projects:', err);\n setError('Failed to load projects');\n } finally{\n setLoading(false);\n }\n }\n }[\"ProjectsGrid.useEffect.fetchProjects\"];\n fetchProjects();\n }\n }[\"ProjectsGrid.useEffect\"], []);\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_Layouts__WEBPACK_IMPORTED_MODULE_4__.Section, {\n className: \"bg-surface-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_Layouts__WEBPACK_IMPORTED_MODULE_4__.Container, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-3xl font-display tracking-tight text-white mb-8 text-center\",\n children: \"Selected Projects\"\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 51,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-text-muted\",\n children: \"Loading projects...\"\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 55,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 54,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 50,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 49,\n columnNumber: 7\n }, this);\n }\n if (error) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_Layouts__WEBPACK_IMPORTED_MODULE_4__.Section, {\n className: \"bg-surface-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_Layouts__WEBPACK_IMPORTED_MODULE_4__.Container, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-3xl font-display tracking-tight text-white mb-8 text-center\",\n children: \"Selected Projects\"\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 66,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-500\",\n children: error\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 70,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 69,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 65,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 64,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_Layouts__WEBPACK_IMPORTED_MODULE_4__.Section, {\n className: \"bg-surface-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_Layouts__WEBPACK_IMPORTED_MODULE_4__.Container, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-3xl font-display tracking-tight text-white mb-8 text-center\",\n children: \"Selected Projects\"\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 80,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\",\n children: projects.map((project)=>{\n // Extract year from createdAt\n const year = new Date(project.createdAt).getFullYear().toString();\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/projects/\".concat(project.id),\n className: \"group relative overflow-hidden rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"aspect-cinema relative overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_image__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n src: project.thumbnail,\n alt: project.title,\n fill: true,\n className: \"object-cover transition-transform duration-500 group-hover:scale-105\"\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 98,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent opacity-70\"\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 105,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 97,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute bottom-0 left-0 right-0 p-5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-accent text-xs font-medium mb-1\",\n children: [\n project.category || 'Project',\n \" • \",\n year\n ]\n }, void 0, true, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 110,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-1\",\n children: project.title\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 113,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-text-muted text-sm line-clamp-2\",\n children: project.description || 'A showcase of our visual effects work.'\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 116,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 109,\n columnNumber: 17\n }, this),\n project.featured && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute top-3 left-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"badge badge-accent text-xs\",\n children: \"FEATURED\"\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 124,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 123,\n columnNumber: 19\n }, this)\n ]\n }, project.id, true, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 91,\n columnNumber: 15\n }, this);\n })\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 85,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mt-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_Buttons__WEBPACK_IMPORTED_MODULE_5__.LinkButton, {\n href: \"/projects\",\n variant: \"primary\",\n children: \"View All Projects\"\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 134,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 133,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 79,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/home/Nicholai/Nextcloud/Dev/BiohazardVFX_Website/biohazard-vfx/src/components/ProjectsGrid.tsx\",\n lineNumber: 78,\n columnNumber: 5\n }, this);\n}\n_s(ProjectsGrid, \"D01YWZOqXtPgB8Jf7trLNzFYnAg=\");\n_c = ProjectsGrid;\nvar _c;\n$RefreshReg$(_c, \"ProjectsGrid\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL1Byb2plY3RzR3JpZC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFMkM7QUFDZjtBQUNFO0FBQ2dCO0FBQ1I7QUFhdkIsU0FBU087O0lBQ3RCLE1BQU0sQ0FBQ0MsVUFBVUMsWUFBWSxHQUFHVCwrQ0FBUUEsQ0FBWSxFQUFFO0lBQ3RELE1BQU0sQ0FBQ1UsU0FBU0MsV0FBVyxHQUFHWCwrQ0FBUUEsQ0FBQztJQUN2QyxNQUFNLENBQUNZLE9BQU9DLFNBQVMsR0FBR2IsK0NBQVFBLENBQWdCO0lBRWxEQyxnREFBU0E7a0NBQUM7WUFDUixNQUFNYTt3REFBZ0I7b0JBQ3BCLElBQUk7d0JBQ0YsTUFBTUMsTUFBTSxNQUFNQyxNQUFNO3dCQUN4QixJQUFJLENBQUNELElBQUlFLEVBQUUsRUFBRTs0QkFDWCxNQUFNLElBQUlDLE1BQU07d0JBQ2xCO3dCQUNBLE1BQU1DLE9BQWtCLE1BQU1KLElBQUlLLElBQUk7d0JBQ3RDLHdEQUF3RDt3QkFDeEQsTUFBTUMsbUJBQW1CRixLQUFLRyxNQUFNO3FGQUFDQyxDQUFBQSxJQUFLQSxFQUFFQyxRQUFRLEtBQUs7O3dCQUN6RGYsWUFBWVk7b0JBQ2QsRUFBRSxPQUFPSSxLQUFLO3dCQUNaQyxRQUFRZCxLQUFLLENBQUMsNEJBQTRCYTt3QkFDMUNaLFNBQVM7b0JBQ1gsU0FBVTt3QkFDUkYsV0FBVztvQkFDYjtnQkFDRjs7WUFFQUc7UUFDRjtpQ0FBRyxFQUFFO0lBRUwsSUFBSUosU0FBUztRQUNYLHFCQUNFLDhEQUFDTCw2Q0FBT0E7WUFBQ3NCLFdBQVU7c0JBQ2pCLDRFQUFDdkIsK0NBQVNBOztrQ0FDUiw4REFBQ3dCO3dCQUFHRCxXQUFVO2tDQUFtRTs7Ozs7O2tDQUdqRiw4REFBQ0U7d0JBQUlGLFdBQVU7a0NBQ2IsNEVBQUNKOzRCQUFFSSxXQUFVO3NDQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUt6QztJQUVBLElBQUlmLE9BQU87UUFDVCxxQkFDRSw4REFBQ1AsNkNBQU9BO1lBQUNzQixXQUFVO3NCQUNqQiw0RUFBQ3ZCLCtDQUFTQTs7a0NBQ1IsOERBQUN3Qjt3QkFBR0QsV0FBVTtrQ0FBbUU7Ozs7OztrQ0FHakYsOERBQUNFO3dCQUFJRixXQUFVO2tDQUNiLDRFQUFDSjs0QkFBRUksV0FBVTtzQ0FBZ0JmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBS3ZDO0lBRUEscUJBQ0UsOERBQUNQLDZDQUFPQTtRQUFDc0IsV0FBVTtrQkFDakIsNEVBQUN2QiwrQ0FBU0E7OzhCQUNSLDhEQUFDd0I7b0JBQUdELFdBQVU7OEJBQW1FOzs7Ozs7OEJBS2pGLDhEQUFDRTtvQkFBSUYsV0FBVTs4QkFDWm5CLFNBQVNzQixHQUFHLENBQUMsQ0FBQ0M7d0JBQ2IsOEJBQThCO3dCQUM5QixNQUFNQyxPQUFPLElBQUlDLEtBQUtGLFFBQVFHLFNBQVMsRUFBRUMsV0FBVyxHQUFHQyxRQUFRO3dCQUUvRCxxQkFDRSw4REFBQ2xDLGtEQUFJQTs0QkFFSG1DLE1BQU0sYUFBd0IsT0FBWE4sUUFBUU8sRUFBRTs0QkFDN0JYLFdBQVU7OzhDQUdWLDhEQUFDRTtvQ0FBSUYsV0FBVTs7c0RBQ2IsOERBQUN4QixrREFBS0E7NENBQ0pvQyxLQUFLUixRQUFRUyxTQUFTOzRDQUN0QkMsS0FBS1YsUUFBUVcsS0FBSzs0Q0FDbEJDLElBQUk7NENBQ0poQixXQUFVOzs7Ozs7c0RBR1osOERBQUNFOzRDQUFJRixXQUFVOzs7Ozs7Ozs7Ozs7OENBSWpCLDhEQUFDRTtvQ0FBSUYsV0FBVTs7c0RBQ2IsOERBQUNKOzRDQUFFSSxXQUFVOztnREFDVkksUUFBUWEsUUFBUSxJQUFJO2dEQUFVO2dEQUFJWjs7Ozs7OztzREFFckMsOERBQUNhOzRDQUFHbEIsV0FBVTtzREFDWEksUUFBUVcsS0FBSzs7Ozs7O3NEQUVoQiw4REFBQ25COzRDQUFFSSxXQUFVO3NEQUNWSSxRQUFRZSxXQUFXLElBQUk7Ozs7Ozs7Ozs7OztnQ0FLM0JmLFFBQVFQLFFBQVEsa0JBQ2YsOERBQUNLO29DQUFJRixXQUFVOzhDQUNiLDRFQUFDb0I7d0NBQUtwQixXQUFVO2tEQUE2Qjs7Ozs7Ozs7Ozs7OzJCQWhDNUNJLFFBQVFPLEVBQUU7Ozs7O29CQXFDckI7Ozs7Ozs4QkFJRiw4REFBQ1Q7b0JBQUlGLFdBQVU7OEJBQ2IsNEVBQUNyQixnREFBVUE7d0JBQUMrQixNQUFLO3dCQUFZVyxTQUFRO2tDQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3pEO0dBekh3QnpDO0tBQUFBIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9OZXh0Y2xvdWQvRGV2L0Jpb2hhemFyZFZGWF9XZWJzaXRlL2Jpb2hhemFyZC12Zngvc3JjL2NvbXBvbmVudHMvUHJvamVjdHNHcmlkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xuaW1wb3J0IEltYWdlIGZyb20gJ25leHQvaW1hZ2UnXG5pbXBvcnQgeyBDb250YWluZXIsIFNlY3Rpb24gfSBmcm9tICcuL0xheW91dHMnXG5pbXBvcnQgeyBMaW5rQnV0dG9uIH0gZnJvbSAnLi9CdXR0b25zJ1xuXG5pbnRlcmZhY2UgUHJvamVjdCB7XG4gIGlkOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbFxuICB0aHVtYm5haWw6IHN0cmluZ1xuICBzaXplOiBzdHJpbmcgLy8gVGhpcyBjb21lcyBhcyBhIHN0cmluZyBmcm9tIHRoZSBBUElcbiAgY2F0ZWdvcnk6IHN0cmluZyB8IG51bGxcbiAgZmVhdHVyZWQ6IGJvb2xlYW4gfCBudWxsXG4gIGNyZWF0ZWRBdDogc3RyaW5nIC8vIFRoaXMgd2lsbCBiZSBhIHN0cmluZyB3aGVuIHBhc3NlZCB0byB0aGUgY2xpZW50IGNvbXBvbmVudFxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcm9qZWN0c0dyaWQoKSB7XG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gdXNlU3RhdGU8UHJvamVjdFtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZmV0Y2hQcm9qZWN0cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Byb2plY3RzJylcbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBwcm9qZWN0cycpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YTogUHJvamVjdFtdID0gYXdhaXQgcmVzLmpzb24oKVxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBzaG93IGZlYXR1cmVkIHByb2plY3RzIG9uIHRoZSBob21lcGFnZVxuICAgICAgICBjb25zdCBmZWF0dXJlZFByb2plY3RzID0gZGF0YS5maWx0ZXIocCA9PiBwLmZlYXR1cmVkID09PSB0cnVlKVxuICAgICAgICBzZXRQcm9qZWN0cyhmZWF0dXJlZFByb2plY3RzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHByb2plY3RzOicsIGVycilcbiAgICAgICAgc2V0RXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHByb2plY3RzJylcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hQcm9qZWN0cygpXG4gIH0sIFtdKVxuXG4gIGlmIChsb2FkaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTZWN0aW9uIGNsYXNzTmFtZT1cImJnLXN1cmZhY2UtOTAwXCI+XG4gICAgICAgIDxDb250YWluZXI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtM3hsIGZvbnQtZGlzcGxheSB0cmFja2luZy10aWdodCB0ZXh0LXdoaXRlIG1iLTggdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIFNlbGVjdGVkIFByb2plY3RzXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtdGV4dC1tdXRlZFwiPkxvYWRpbmcgcHJvamVjdHMuLi48L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgPC9TZWN0aW9uPlxuICAgIClcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiAoXG4gICAgICA8U2VjdGlvbiBjbGFzc05hbWU9XCJiZy1zdXJmYWNlLTkwMFwiPlxuICAgICAgICA8Q29udGFpbmVyPlxuICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LTN4bCBmb250LWRpc3BsYXkgdHJhY2tpbmctdGlnaHQgdGV4dC13aGl0ZSBtYi04IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICBTZWxlY3RlZCBQcm9qZWN0c1xuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDBcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NvbnRhaW5lcj5cbiAgICAgIDwvU2VjdGlvbj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTZWN0aW9uIGNsYXNzTmFtZT1cImJnLXN1cmZhY2UtOTAwXCI+XG4gICAgICA8Q29udGFpbmVyPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC0zeGwgZm9udC1kaXNwbGF5IHRyYWNraW5nLXRpZ2h0IHRleHQtd2hpdGUgbWItOCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIFNlbGVjdGVkIFByb2plY3RzXG4gICAgICAgIDwvaDI+XG5cbiAgICAgICAgey8qIExhcmdlciBQcm9qZWN0IFRpbGVzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTMgZ2FwLTZcIj5cbiAgICAgICAgICB7cHJvamVjdHMubWFwKChwcm9qZWN0KSA9PiB7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IHllYXIgZnJvbSBjcmVhdGVkQXRcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBuZXcgRGF0ZShwcm9qZWN0LmNyZWF0ZWRBdCkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpXG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAga2V5PXtwcm9qZWN0LmlkfVxuICAgICAgICAgICAgICAgIGhyZWY9e2AvcHJvamVjdHMvJHtwcm9qZWN0LmlkfWB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIEJhY2tncm91bmQgSW1hZ2UgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhc3BlY3QtY2luZW1hIHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgIHNyYz17cHJvamVjdC50aHVtYm5haWx9XG4gICAgICAgICAgICAgICAgICAgIGFsdD17cHJvamVjdC50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgZmlsbFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY292ZXIgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNTAwIGdyb3VwLWhvdmVyOnNjYWxlLTEwNVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgey8qIEdyYWRpZW50IE92ZXJsYXkgKi99XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgYmctZ3JhZGllbnQtdG8tdCBmcm9tLWJsYWNrLzgwIHZpYS1ibGFjay8yMCB0by10cmFuc3BhcmVudCBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIHsvKiBDb250ZW50ICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgcC01XCI+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWFjY2VudCB0ZXh0LXhzIGZvbnQtbWVkaXVtIG1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3Byb2plY3QuY2F0ZWdvcnkgfHwgJ1Byb2plY3QnfSDigKIge3llYXJ9XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LXhsIGZvbnQtYm9sZCBtYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9qZWN0LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtdGV4dC1tdXRlZCB0ZXh0LXNtIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICB7cHJvamVjdC5kZXNjcmlwdGlvbiB8fCAnQSBzaG93Y2FzZSBvZiBvdXIgdmlzdWFsIGVmZmVjdHMgd29yay4nfVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgey8qIEZlYXR1cmVkIEJhZGdlICovfVxuICAgICAgICAgICAgICAgIHtwcm9qZWN0LmZlYXR1cmVkICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTMgbGVmdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJhZGdlIGJhZGdlLWFjY2VudCB0ZXh0LXhzXCI+RkVBVFVSRUQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBWaWV3IEFsbCBMaW5rICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyIG10LTEwXCI+XG4gICAgICAgICAgPExpbmtCdXR0b24gaHJlZj1cIi9wcm9qZWN0c1wiIHZhcmlhbnQ9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICBWaWV3IEFsbCBQcm9qZWN0c1xuICAgICAgICAgIDwvTGlua0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0NvbnRhaW5lcj5cbiAgICA8L1NlY3Rpb24+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJJbWFnZSIsIkNvbnRhaW5lciIsIlNlY3Rpb24iLCJMaW5rQnV0dG9uIiwiUHJvamVjdHNHcmlkIiwicHJvamVjdHMiLCJzZXRQcm9qZWN0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImZldGNoUHJvamVjdHMiLCJyZXMiLCJmZXRjaCIsIm9rIiwiRXJyb3IiLCJkYXRhIiwianNvbiIsImZlYXR1cmVkUHJvamVjdHMiLCJmaWx0ZXIiLCJwIiwiZmVhdHVyZWQiLCJlcnIiLCJjb25zb2xlIiwiY2xhc3NOYW1lIiwiaDIiLCJkaXYiLCJtYXAiLCJwcm9qZWN0IiwieWVhciIsIkRhdGUiLCJjcmVhdGVkQXQiLCJnZXRGdWxsWWVhciIsInRvU3RyaW5nIiwiaHJlZiIsImlkIiwic3JjIiwidGh1bWJuYWlsIiwiYWx0IiwidGl0bGUiLCJmaWxsIiwiY2F0ZWdvcnkiLCJoMyIsImRlc2NyaXB0aW9uIiwic3BhbiIsInZhcmlhbnQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ProjectsGrid.tsx\n"));
|
|
|
|
/***/ })
|
|
|
|
}); |