diff --git a/.next/cache/webpack/client-development/2.pack.gz b/.next/cache/webpack/client-development/2.pack.gz index 472323b..19bdf2e 100644 Binary files a/.next/cache/webpack/client-development/2.pack.gz and b/.next/cache/webpack/client-development/2.pack.gz differ diff --git a/.next/cache/webpack/client-development/4.pack.gz b/.next/cache/webpack/client-development/4.pack.gz index e8c7177..301a814 100644 Binary files a/.next/cache/webpack/client-development/4.pack.gz and b/.next/cache/webpack/client-development/4.pack.gz differ diff --git a/.next/cache/webpack/client-development/index.pack.gz b/.next/cache/webpack/client-development/index.pack.gz index 97c0103..8fdd959 100644 Binary files a/.next/cache/webpack/client-development/index.pack.gz and b/.next/cache/webpack/client-development/index.pack.gz differ diff --git a/.next/cache/webpack/client-development/index.pack.gz.old b/.next/cache/webpack/client-development/index.pack.gz.old index efdd1ac..97c0103 100644 Binary files a/.next/cache/webpack/client-development/index.pack.gz.old and b/.next/cache/webpack/client-development/index.pack.gz.old differ diff --git a/.next/cache/webpack/server-development/1.pack.gz b/.next/cache/webpack/server-development/1.pack.gz index ea0721f..77bfa10 100644 Binary files a/.next/cache/webpack/server-development/1.pack.gz and b/.next/cache/webpack/server-development/1.pack.gz differ diff --git a/.next/cache/webpack/server-development/2.pack.gz b/.next/cache/webpack/server-development/2.pack.gz index 27e2d76..f2a9817 100644 Binary files a/.next/cache/webpack/server-development/2.pack.gz and b/.next/cache/webpack/server-development/2.pack.gz differ diff --git a/.next/cache/webpack/server-development/index.pack.gz b/.next/cache/webpack/server-development/index.pack.gz index d64289e..5c0e526 100644 Binary files a/.next/cache/webpack/server-development/index.pack.gz and b/.next/cache/webpack/server-development/index.pack.gz differ diff --git a/.next/cache/webpack/server-development/index.pack.gz.old b/.next/cache/webpack/server-development/index.pack.gz.old index 955abab..d64289e 100644 Binary files a/.next/cache/webpack/server-development/index.pack.gz.old and b/.next/cache/webpack/server-development/index.pack.gz.old differ diff --git a/.next/server/app-paths-manifest.json b/.next/server/app-paths-manifest.json index f95049e..6f30181 100644 --- a/.next/server/app-paths-manifest.json +++ b/.next/server/app-paths-manifest.json @@ -1,6 +1,4 @@ { "/gunbuilder/page": "app/gunbuilder/page.js", - "/gunbuilder/[categoryId]/[partId]/page": "app/gunbuilder/[categoryId]/[partId]/page.js", - "/page": "app/page.js", "/gunbuilder/[categoryId]/page": "app/gunbuilder/[categoryId]/page.js" } \ No newline at end of file diff --git a/.next/server/app/gunbuilder/page.js b/.next/server/app/gunbuilder/page.js index 8df7272..414f615 100644 --- a/.next/server/app/gunbuilder/page.js +++ b/.next/server/app/gunbuilder/page.js @@ -137,7 +137,7 @@ eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__w /***/ ((__unused_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\": () => (/* binding */ GunbuilderPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(ssr)/./components/CategoryColumn.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\nfunction GunbuilderPage() {\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.CATEGORIES){\n grouped[category.id] = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.PARTS.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, []);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map(([categoryId, partId])=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.PARTS.find((p)=>p.id === partId && p.categoryId === categoryId)).filter(Boolean);\n }, [\n build\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 49,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 53,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 52,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Prices and links are mock data for now—but the flow is close to what the real tool will be.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 55,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 48,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 63,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 64,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 67,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 62,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 47,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_3__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 83,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 79,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 77,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 76,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 98,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 104,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.PARTS.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 117,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 123,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 122,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 128,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 121,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 133,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 116,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 109,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 102,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 disabled:opacity-40 disabled:cursor-not-allowed\",\n disabled: selectedParts.length === 0,\n onClick: ()=>{\n console.log(\"Build:\", build);\n alert(\"Prototype only: in the real app this would go to a sharable build summary with affiliate links.\");\n },\n children: \"Continue to Buy (Prototype)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 145,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"In the production version, this will take you to a build page with retailer links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 158,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 144,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 97,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 74,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 45,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 44,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YnVpbGRlci1wcm90b3R5cGUvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUywgUEFSVFMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPih7fSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gUEFSVFMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIFBBUlRTLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgR3VuYnVpbGRlciA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlByb3RvdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBDaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5IHRvIGFzc2VtYmxlIGFuIEFSLTE1IGJ1aWxkLiBQcmljZXNcbiAgICAgICAgICAgICAgYW5kIGxpbmtzIGFyZSBtb2NrIGRhdGEgZm9yIG5vd+KAlGJ1dCB0aGUgZmxvdyBpcyBjbG9zZSB0byB3aGF0XG4gICAgICAgICAgICAgIHRoZSByZWFsIHRvb2wgd2lsbCBiZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMFwiPkN1cnJlbnQgYnVpbGQgdG90YWw8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RofSAvIHtDQVRFR09SSUVTLmxlbmd0aH0gY2F0ZWdvcmllcyBmaWxsZWRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbGc6Z3JpZC1jb2xzLVszZnIsMS4yNWZyXVwiPlxuICAgICAgICAgIHsvKiBDYXRlZ29yaWVzL3BhcnRzICovfVxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17Y2F0ZWdvcnkuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPENhdGVnb3J5Q29sdW1uXG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydElkPXtidWlsZFtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgey8qIEJ1aWxkIFN1bW1hcnkgKi99XG4gICAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTZlbV0gdXBwZXJjYXNlIHRleHQtemluYy00MDAgbWItM1wiPlxuICAgICAgICAgICAgICBDdXJyZW50IEJ1aWxkXG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHItMVwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgcGFydCBmcm9tIGVhY2ggY2F0ZWdvcnkgdG8gc3RhcnQgeW91ciBidWlsZC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdC5pZF07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gUEFSVFMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0LmlkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2NhdC5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2F0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIENUQSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBib3JkZXItdCBib3JkZXItemluYy04MDAgcHQtM1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQnVpbGQ6XCIsIGJ1aWxkKTtcbiAgICAgICAgICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgICAgICAgICBcIlByb3RvdHlwZSBvbmx5OiBpbiB0aGUgcmVhbCBhcHAgdGhpcyB3b3VsZCBnbyB0byBhIHNoYXJhYmxlIGJ1aWxkIHN1bW1hcnkgd2l0aCBhZmZpbGlhdGUgbGlua3MuXCIsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDb250aW51ZSB0byBCdXkgKFByb3RvdHlwZSlcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgSW4gdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiwgdGhpcyB3aWxsIHRha2UgeW91IHRvIGEgYnVpbGQgcGFnZSB3aXRoXG4gICAgICAgICAgICAgICAgcmV0YWlsZXIgbGlua3MgYW5kIHNoYXJpbmcgb3B0aW9ucy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59XG4iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwiQ0FURUdPUklFUyIsIlBBUlRTIiwiQ2F0ZWdvcnlDb2x1bW4iLCJHdW5idWlsZGVyUGFnZSIsImJ1aWxkIiwic2V0QnVpbGQiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJpZCIsImZpbHRlciIsInAiLCJjYXRlZ29yeUlkIiwic2VsZWN0ZWRQYXJ0cyIsIk9iamVjdCIsImVudHJpZXMiLCJtYXAiLCJwYXJ0SWQiLCJmaW5kIiwiQm9vbGVhbiIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJwcmljZSIsImhhbmRsZVNlbGVjdFBhcnQiLCJwcmV2IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImhlYWRlciIsImgxIiwic3BhbiIsInRvRml4ZWQiLCJsZW5ndGgiLCJzZWN0aW9uIiwicGFydHMiLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsIm5hbWUiLCJicmFuZCIsImJ1dHRvbiIsInR5cGUiLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJjb25zb2xlIiwibG9nIiwiYWxlcnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/page.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GunbuilderPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.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_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(ssr)/./components/CategoryColumn.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n // Initialize from localStorage if available\n if (false) {}\n return {};\n });\n // Handle URL query parameter for part selection\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n // Persist to localStorage\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n // Remove query param from URL\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES){\n grouped[category.id] = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, []);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map(([categoryId, partId])=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.find((p)=>p.id === partId && p.categoryId === categoryId)).filter(Boolean);\n }, [\n build\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 95,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 99,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 98,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Prices and links are mock data for now—but the flow is close to what the real tool will be.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 101,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 94,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 109,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 110,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 113,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 108,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 93,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_4__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 129,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 125,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 123,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 122,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 144,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 150,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 163,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 169,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 168,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 167,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 162,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 155,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 148,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 disabled:opacity-40 disabled:cursor-not-allowed\",\n disabled: selectedParts.length === 0,\n onClick: ()=>{\n console.log(\"Build:\", build);\n alert(\"Prototype only: in the real app this would go to a sharable build summary with affiliate links.\");\n },\n children: \"Continue to Buy (Prototype)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 191,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"In the production version, this will take you to a build page with retailer links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 143,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 120,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 91,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 90,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUUsS0FBS2lDLGtCQUFrQnRCLEVBQUVoQixVQUFVLEtBQUsyQyxJQUFJdEMsRUFBRTtnREFFM0QscUJBQ0UsOERBQUN3Qzs7c0VBQ0MsOERBQUNmOzREQUFJRCxXQUFVO3NFQUNaYyxJQUFJRyxJQUFJOzs7Ozs7d0RBRVZGLHFCQUNDLDhEQUFDZDs0REFBSUQsV0FBVTs7OEVBQ2IsOERBQUNDO29FQUFJRCxXQUFVOztzRkFDYiw4REFBQ0k7NEVBQUtKLFdBQVU7O2dGQUNiZSxLQUFLRyxLQUFLO2dGQUFFOzs7Ozs7O3dFQUVkSCxLQUFLRSxJQUFJOzs7Ozs7OzhFQUVaLDhEQUFDaEI7b0VBQUlELFdBQVU7O3dFQUF5RDt3RUFDcEVlLEtBQUtsQixLQUFLLENBQUNRLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O2lGQUl6Qiw4REFBQ0o7NERBQUlELFdBQVU7c0VBQTZCOzs7Ozs7O21EQWpCdkNjLElBQUl0QyxFQUFFOzs7Ozs0Q0F1Qm5COzs7Ozs7Ozs7Ozs7OENBS0osOERBQUN5QjtvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUNtQjs0Q0FDQ0MsTUFBSzs0Q0FDTHBCLFdBQVU7NENBQ1ZxQixVQUFVakMsY0FBY2tCLE1BQU0sS0FBSzs0Q0FDbkNnQixTQUFTO2dEQUNQQyxRQUFRQyxHQUFHLENBQUMsVUFBVTlEO2dEQUN0QitELE1BQ0U7NENBRUo7c0RBQ0Q7Ozs7OztzREFHRCw4REFBQ3RDOzRDQUFFYSxXQUFVO3NEQUFtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVOUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUywgUEFSVFMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICAvLyBJbml0aWFsaXplIGZyb20gbG9jYWxTdG9yYWdlIGlmIGF2YWlsYWJsZVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBQZXJzaXN0IHRvIGxvY2FsU3RvcmFnZVxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW0gZnJvbSBVUkxcbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gUEFSVFMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+XG4gICAgICAgIFBBUlRTLmZpbmQoKHApID0+IHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWQpLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgR3VuYnVpbGRlciA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlByb3RvdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBDaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5IHRvIGFzc2VtYmxlIGFuIEFSLTE1IGJ1aWxkLiBQcmljZXNcbiAgICAgICAgICAgICAgYW5kIGxpbmtzIGFyZSBtb2NrIGRhdGEgZm9yIG5vd+KAlGJ1dCB0aGUgZmxvdyBpcyBjbG9zZSB0byB3aGF0XG4gICAgICAgICAgICAgIHRoZSByZWFsIHRvb2wgd2lsbCBiZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMFwiPkN1cnJlbnQgYnVpbGQgdG90YWw8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RofSAvIHtDQVRFR09SSUVTLmxlbmd0aH0gY2F0ZWdvcmllcyBmaWxsZWRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbGc6Z3JpZC1jb2xzLVszZnIsMS4yNWZyXVwiPlxuICAgICAgICAgIHsvKiBDYXRlZ29yaWVzL3BhcnRzICovfVxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTQgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17Y2F0ZWdvcnkuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPENhdGVnb3J5Q29sdW1uXG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydElkPXtidWlsZFtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgey8qIEJ1aWxkIFN1bW1hcnkgKi99XG4gICAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC84MCBwLTMgbWQ6cC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTZlbV0gdXBwZXJjYXNlIHRleHQtemluYy00MDAgbWItM1wiPlxuICAgICAgICAgICAgICBDdXJyZW50IEJ1aWxkXG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcHItMVwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgcGFydCBmcm9tIGVhY2ggY2F0ZWdvcnkgdG8gc3RhcnQgeW91ciBidWlsZC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdC5pZF07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gUEFSVFMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0LmlkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2NhdC5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2F0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIENUQSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBib3JkZXItdCBib3JkZXItemluYy04MDAgcHQtM1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQnVpbGQ6XCIsIGJ1aWxkKTtcbiAgICAgICAgICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgICAgICAgICBcIlByb3RvdHlwZSBvbmx5OiBpbiB0aGUgcmVhbCBhcHAgdGhpcyB3b3VsZCBnbyB0byBhIHNoYXJhYmxlIGJ1aWxkIHN1bW1hcnkgd2l0aCBhZmZpbGlhdGUgbGlua3MuXCIsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDb250aW51ZSB0byBCdXkgKFByb3RvdHlwZSlcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgSW4gdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiwgdGhpcyB3aWxsIHRha2UgeW91IHRvIGEgYnVpbGQgcGFnZSB3aXRoXG4gICAgICAgICAgICAgICAgcmV0YWlsZXIgbGlua3MgYW5kIHNoYXJpbmcgb3B0aW9ucy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59XG4iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIlBBUlRTIiwiQ2F0ZWdvcnlDb2x1bW4iLCJTVE9SQUdFX0tFWSIsIkd1bmJ1aWxkZXJQYWdlIiwic2VhcmNoUGFyYW1zIiwicm91dGVyIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJzZWxlY3RQYXJhbSIsImdldCIsImNhdGVnb3J5SWQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwiaWQiLCJwcmV2IiwidXBkYXRlZCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJyZXBsYWNlIiwic2Nyb2xsIiwicGFydHNCeUNhdGVnb3J5IiwiZ3JvdXBlZCIsImNhdGVnb3J5IiwiZmlsdGVyIiwicCIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwicHJpY2UiLCJoYW5kbGVTZWxlY3RQYXJ0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImhlYWRlciIsImgxIiwic3BhbiIsInRvRml4ZWQiLCJsZW5ndGgiLCJzZWN0aW9uIiwicGFydHMiLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsIm5hbWUiLCJicmFuZCIsImJ1dHRvbiIsInR5cGUiLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJjb25zb2xlIiwibG9nIiwiYWxlcnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/page.tsx\n"); /***/ }), @@ -148,7 +148,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_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 */ CategoryColumn: () => (/* binding */ CategoryColumn)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var _components_PartCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/PartCard */ \"(ssr)/./components/PartCard.tsx\");\n/* __next_internal_client_entry_do_not_use__ CategoryColumn auto */ \n\n\nfunction CategoryColumn({ category, parts, selectedPartId, onSelectPart }) {\n // Show selected part if available, otherwise show first part\n const displayedPart = selectedPartId ? parts.find((p)=>p.id === selectedPartId) || parts[0] : parts[0];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col h-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.15em] text-zinc-400 uppercase\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 28,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 27,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n parts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: \"No parts yet for this category.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 34,\n columnNumber: 11\n }, this),\n displayedPart && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_PartCard__WEBPACK_IMPORTED_MODULE_2__.PartCard, {\n part: displayedPart,\n selected: displayedPart.id === selectedPartId,\n onSelect: ()=>onSelectPart(displayedPart.id)\n }, displayedPart.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 37,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 32,\n columnNumber: 7\n }, this),\n parts.length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: `/gunbuilder/${category.id}`,\n className: \"mt-2 w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: [\n \"View All (\",\n parts.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 46,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 26,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFNkI7QUFFb0I7QUFTMUMsU0FBU0UsZUFBZSxFQUM3QkMsUUFBUSxFQUNSQyxLQUFLLEVBQ0xDLGNBQWMsRUFDZEMsWUFBWSxFQUNRO0lBQ3BCLDZEQUE2RDtJQUM3RCxNQUFNQyxnQkFBZ0JGLGlCQUNsQkQsTUFBTUksSUFBSSxDQUFDLENBQUNDLElBQU1BLEVBQUVDLEVBQUUsS0FBS0wsbUJBQW1CRCxLQUFLLENBQUMsRUFBRSxHQUN0REEsS0FBSyxDQUFDLEVBQUU7SUFFWixxQkFDRSw4REFBQ087UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNEO2dCQUFJQyxXQUFVOzBCQUNiLDRFQUFDQztvQkFBR0QsV0FBVTs4QkFDWFQsU0FBU1csSUFBSTs7Ozs7Ozs7Ozs7MEJBR2xCLDhEQUFDSDtnQkFBSUMsV0FBVTs7b0JBQ1pSLE1BQU1XLE1BQU0sS0FBSyxtQkFDaEIsOERBQUNOO3dCQUFFRyxXQUFVO2tDQUF3Qjs7Ozs7O29CQUV0Q0wsK0JBQ0MsOERBQUNOLDBEQUFRQTt3QkFFUGUsTUFBTVQ7d0JBQ05VLFVBQVVWLGNBQWNHLEVBQUUsS0FBS0w7d0JBQy9CYSxVQUFVLElBQU1aLGFBQWFDLGNBQWNHLEVBQUU7dUJBSHhDSCxjQUFjRyxFQUFFOzs7Ozs7Ozs7OztZQU8xQk4sTUFBTVcsTUFBTSxHQUFHLG1CQUNkLDhEQUFDZixpREFBSUE7Z0JBQ0htQixNQUFNLENBQUMsWUFBWSxFQUFFaEIsU0FBU08sRUFBRSxDQUFDLENBQUM7Z0JBQ2xDRSxXQUFVOztvQkFDWDtvQkFDWVIsTUFBTVcsTUFBTTtvQkFBQzs7Ozs7Ozs7Ozs7OztBQUtsQyIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLy4vY29tcG9uZW50cy9DYXRlZ29yeUNvbHVtbi50c3g/OWMxOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeSwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcbmltcG9ydCB7IFBhcnRDYXJkIH0gZnJvbSBcIkAvY29tcG9uZW50cy9QYXJ0Q2FyZFwiO1xuXG5pbnRlcmZhY2UgQ2F0ZWdvcnlDb2x1bW5Qcm9wcyB7XG4gIGNhdGVnb3J5OiBDYXRlZ29yeTtcbiAgcGFydHM6IFBhcnRbXTtcbiAgc2VsZWN0ZWRQYXJ0SWQ/OiBzdHJpbmc7XG4gIG9uU2VsZWN0UGFydDogKHBhcnRJZDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2F0ZWdvcnlDb2x1bW4oe1xuICBjYXRlZ29yeSxcbiAgcGFydHMsXG4gIHNlbGVjdGVkUGFydElkLFxuICBvblNlbGVjdFBhcnQsXG59OiBDYXRlZ29yeUNvbHVtblByb3BzKSB7XG4gIC8vIFNob3cgc2VsZWN0ZWQgcGFydCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBzaG93IGZpcnN0IHBhcnRcbiAgY29uc3QgZGlzcGxheWVkUGFydCA9IHNlbGVjdGVkUGFydElkXG4gICAgPyBwYXJ0cy5maW5kKChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCkgfHwgcGFydHNbMF1cbiAgICA6IHBhcnRzWzBdO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0zXCI+XG4gICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC16aW5jLTQwMCB1cHBlcmNhc2VcIj5cbiAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAge3BhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+Tm8gcGFydHMgeWV0IGZvciB0aGlzIGNhdGVnb3J5LjwvcD5cbiAgICAgICAgKX1cbiAgICAgICAge2Rpc3BsYXllZFBhcnQgJiYgKFxuICAgICAgICAgIDxQYXJ0Q2FyZFxuICAgICAgICAgICAga2V5PXtkaXNwbGF5ZWRQYXJ0LmlkfVxuICAgICAgICAgICAgcGFydD17ZGlzcGxheWVkUGFydH1cbiAgICAgICAgICAgIHNlbGVjdGVkPXtkaXNwbGF5ZWRQYXJ0LmlkID09PSBzZWxlY3RlZFBhcnRJZH1cbiAgICAgICAgICAgIG9uU2VsZWN0PXsoKSA9PiBvblNlbGVjdFBhcnQoZGlzcGxheWVkUGFydC5pZCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAge3BhcnRzLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICA8TGlua1xuICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5LmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPVwibXQtMiB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIFZpZXcgQWxsICh7cGFydHMubGVuZ3RofSlcbiAgICAgICAgPC9MaW5rPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJMaW5rIiwiUGFydENhcmQiLCJDYXRlZ29yeUNvbHVtbiIsImNhdGVnb3J5IiwicGFydHMiLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImRpc3BsYXllZFBhcnQiLCJmaW5kIiwicCIsImlkIiwiZGl2IiwiY2xhc3NOYW1lIiwiaDIiLCJuYW1lIiwibGVuZ3RoIiwicGFydCIsInNlbGVjdGVkIiwib25TZWxlY3QiLCJocmVmIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/CategoryColumn.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CategoryColumn: () => (/* binding */ CategoryColumn)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var _components_PartCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/PartCard */ \"(ssr)/./components/PartCard.tsx\");\n/* __next_internal_client_entry_do_not_use__ CategoryColumn auto */ \n\n\nfunction CategoryColumn({ category, parts, selectedPartId, onSelectPart }) {\n // Show selected part if available, otherwise show placeholder\n const displayedPart = selectedPartId ? parts.find((p)=>p.id === selectedPartId) : null;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col h-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.15em] text-zinc-400 uppercase\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 28,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 27,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n parts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: \"No parts yet for this category.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 34,\n columnNumber: 11\n }, this),\n !displayedPart && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full border border-zinc-700 rounded-md p-3 mb-2 text-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Choose a Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 38,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 37,\n columnNumber: 11\n }, this),\n displayedPart && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_PartCard__WEBPACK_IMPORTED_MODULE_2__.PartCard, {\n part: displayedPart,\n selected: displayedPart.id === selectedPartId,\n onSelect: ()=>onSelectPart(displayedPart.id)\n }, displayedPart.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 42,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 32,\n columnNumber: 7\n }, this),\n parts.length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: `/gunbuilder/${category.id}`,\n className: \"mt-2 w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: [\n \"View All (\",\n parts.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 51,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 26,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFNkI7QUFFb0I7QUFTMUMsU0FBU0UsZUFBZSxFQUM3QkMsUUFBUSxFQUNSQyxLQUFLLEVBQ0xDLGNBQWMsRUFDZEMsWUFBWSxFQUNRO0lBQ3BCLDhEQUE4RDtJQUM5RCxNQUFNQyxnQkFBZ0JGLGlCQUNsQkQsTUFBTUksSUFBSSxDQUFDLENBQUNDLElBQU1BLEVBQUVDLEVBQUUsS0FBS0wsa0JBQzNCO0lBRUoscUJBQ0UsOERBQUNNO1FBQUlDLFdBQVU7OzBCQUNiLDhEQUFDRDtnQkFBSUMsV0FBVTswQkFDYiw0RUFBQ0M7b0JBQUdELFdBQVU7OEJBQ1hULFNBQVNXLElBQUk7Ozs7Ozs7Ozs7OzBCQUdsQiw4REFBQ0g7Z0JBQUlDLFdBQVU7O29CQUNaUixNQUFNVyxNQUFNLEtBQUssbUJBQ2hCLDhEQUFDTjt3QkFBRUcsV0FBVTtrQ0FBd0I7Ozs7OztvQkFFdEMsQ0FBQ0wsaUJBQWlCSCxNQUFNVyxNQUFNLEdBQUcsbUJBQ2hDLDhEQUFDSjt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ0g7NEJBQUVHLFdBQVU7c0NBQXdCOzs7Ozs7Ozs7OztvQkFHeENMLCtCQUNDLDhEQUFDTiwwREFBUUE7d0JBRVBlLE1BQU1UO3dCQUNOVSxVQUFVVixjQUFjRyxFQUFFLEtBQUtMO3dCQUMvQmEsVUFBVSxJQUFNWixhQUFhQyxjQUFjRyxFQUFFO3VCQUh4Q0gsY0FBY0csRUFBRTs7Ozs7Ozs7Ozs7WUFPMUJOLE1BQU1XLE1BQU0sR0FBRyxtQkFDZCw4REFBQ2YsaURBQUlBO2dCQUNIbUIsTUFBTSxDQUFDLFlBQVksRUFBRWhCLFNBQVNPLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQ0UsV0FBVTs7b0JBQ1g7b0JBQ1lSLE1BQU1XLE1BQU07b0JBQUM7Ozs7Ozs7Ozs7Ozs7QUFLbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW4udHN4PzljMTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnksIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBQYXJ0Q2FyZCB9IGZyb20gXCJAL2NvbXBvbmVudHMvUGFydENhcmRcIjtcblxuaW50ZXJmYWNlIENhdGVnb3J5Q29sdW1uUHJvcHMge1xuICBjYXRlZ29yeTogQ2F0ZWdvcnk7XG4gIHBhcnRzOiBQYXJ0W107XG4gIHNlbGVjdGVkUGFydElkPzogc3RyaW5nO1xuICBvblNlbGVjdFBhcnQ6IChwYXJ0SWQ6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhdGVnb3J5Q29sdW1uKHtcbiAgY2F0ZWdvcnksXG4gIHBhcnRzLFxuICBzZWxlY3RlZFBhcnRJZCxcbiAgb25TZWxlY3RQYXJ0LFxufTogQ2F0ZWdvcnlDb2x1bW5Qcm9wcykge1xuICAvLyBTaG93IHNlbGVjdGVkIHBhcnQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2Ugc2hvdyBwbGFjZWhvbGRlclxuICBjb25zdCBkaXNwbGF5ZWRQYXJ0ID0gc2VsZWN0ZWRQYXJ0SWRcbiAgICA/IHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItM1wiPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE1ZW1dIHRleHQtemluYy00MDAgdXBwZXJjYXNlXCI+XG4gICAgICAgICAge2NhdGVnb3J5Lm5hbWV9XG4gICAgICAgIDwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgIHtwYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPk5vIHBhcnRzIHlldCBmb3IgdGhpcyBjYXRlZ29yeS48L3A+XG4gICAgICAgICl9XG4gICAgICAgIHshZGlzcGxheWVkUGFydCAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIG1iLTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkNob29zZSBhIFBhcnQ8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtkaXNwbGF5ZWRQYXJ0ICYmIChcbiAgICAgICAgICA8UGFydENhcmRcbiAgICAgICAgICAgIGtleT17ZGlzcGxheWVkUGFydC5pZH1cbiAgICAgICAgICAgIHBhcnQ9e2Rpc3BsYXllZFBhcnR9XG4gICAgICAgICAgICBzZWxlY3RlZD17ZGlzcGxheWVkUGFydC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWR9XG4gICAgICAgICAgICBvblNlbGVjdD17KCkgPT4gb25TZWxlY3RQYXJ0KGRpc3BsYXllZFBhcnQuaWQpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtwYXJ0cy5sZW5ndGggPiAxICYmIChcbiAgICAgICAgPExpbmtcbiAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeS5pZH1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTIgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICBWaWV3IEFsbCAoe3BhcnRzLmxlbmd0aH0pXG4gICAgICAgIDwvTGluaz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiTGluayIsIlBhcnRDYXJkIiwiQ2F0ZWdvcnlDb2x1bW4iLCJjYXRlZ29yeSIsInBhcnRzIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJkaXNwbGF5ZWRQYXJ0IiwiZmluZCIsInAiLCJpZCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwibmFtZSIsImxlbmd0aCIsInBhcnQiLCJzZWxlY3RlZCIsIm9uU2VsZWN0IiwiaHJlZiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/CategoryColumn.tsx\n"); /***/ }), diff --git a/.next/server/vendor-chunks/next.js b/.next/server/vendor-chunks/next.js index 7c78788..1427964 100644 --- a/.next/server/vendor-chunks/next.js +++ b/.next/server/vendor-chunks/next.js @@ -1975,17 +1975,6 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n})); /***/ }), -/***/ "(rsc)/./node_modules/next/dist/api/link.js": -/*!********************************************!*\ - !*** ./node_modules/next/dist/api/link.js ***! - \********************************************/ -/***/ ((__unused_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\": () => (/* reexport default from dynamic */ _client_link__WEBPACK_IMPORTED_MODULE_0___default.a)\n/* harmony export */ });\n/* harmony import */ var _client_link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/link */ \"(rsc)/./node_modules/next/dist/client/link.js\");\n/* harmony import */ var _client_link__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_link__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _client_link__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _client_link__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n\n//# sourceMappingURL=link.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9saW5rLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF5QztBQUNWOztBQUUvQiIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvbGluay5qcz9lZmQ0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLi4vY2xpZW50L2xpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9jbGllbnQvbGlua1wiO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW5rLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/api/link.js\n"); - -/***/ }), - /***/ "(rsc)/./node_modules/next/dist/build/output/log.js": /*!****************************************************!*\ !*** ./node_modules/next/dist/build/output/log.js ***! @@ -2140,21 +2129,6 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n})); "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n StaticGenBailoutError: function() {\n return StaticGenBailoutError;\n },\n isStaticGenBailoutError: function() {\n return isStaticGenBailoutError;\n }\n});\nconst NEXT_STATIC_GEN_BAILOUT = \"NEXT_STATIC_GEN_BAILOUT\";\nclass StaticGenBailoutError extends Error {\n constructor(...args){\n super(...args);\n this.code = NEXT_STATIC_GEN_BAILOUT;\n }\n}\nfunction isStaticGenBailoutError(error) {\n if (typeof error !== \"object\" || error === null || !(\"code\" in error)) {\n return false;\n }\n return error.code === NEXT_STATIC_GEN_BAILOUT;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=static-generation-bailout.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLWJhaWxvdXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBRWFBLHVCQUFxQjtlQUFyQkE7O0lBSUdDLHlCQUF1QjtlQUF2QkE7OztBQU5oQixNQUFNQywwQkFBMEI7QUFFekIsTUFBTUYsOEJBQThCRzs7O2FBQ3pCQyxJQUFBQSxHQUFPRjs7QUFDekI7QUFFTyxTQUFTRCx3QkFDZEksS0FBYztJQUVkLElBQUksT0FBT0EsVUFBVSxZQUFZQSxVQUFVLFFBQVEsQ0FBRSxXQUFVQSxLQUFBQSxHQUFRO1FBQ3JFLE9BQU87SUFDVDtJQUVBLE9BQU9BLE1BQU1ELElBQUksS0FBS0Y7QUFDeEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uLi8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvc3RhdGljLWdlbmVyYXRpb24tYmFpbG91dC50cz80YzMxIl0sIm5hbWVzIjpbIlN0YXRpY0dlbkJhaWxvdXRFcnJvciIsImlzU3RhdGljR2VuQmFpbG91dEVycm9yIiwiTkVYVF9TVEFUSUNfR0VOX0JBSUxPVVQiLCJFcnJvciIsImNvZGUiLCJlcnJvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/static-generation-bailout.js\n"); -/***/ }), - -/***/ "(rsc)/./node_modules/next/dist/client/link.js": -/*!***********************************************!*\ - !*** ./node_modules/next/dist/client/link.js ***! - \***********************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -/* __next_internal_client_entry_do_not_use__ cjs */ -const { createProxy } = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js"); -module.exports = createProxy("/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/link.js"); - //# sourceMappingURL=link.js.map - - /***/ }), /***/ "(rsc)/./node_modules/next/dist/compiled/@opentelemetry/api/index.js": diff --git a/.next/server/webpack-runtime.js b/.next/server/webpack-runtime.js index 02d1398..d4644b9 100644 --- a/.next/server/webpack-runtime.js +++ b/.next/server/webpack-runtime.js @@ -125,7 +125,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("80f016d83872eba7") +/******/ __webpack_require__.h = () => ("df229d3c0d803b21") /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ diff --git a/.next/static/chunks/app/gunbuilder/page.js b/.next/static/chunks/app/gunbuilder/page.js index 5d8da7e..cb759c6 100644 --- a/.next/static/chunks/app/gunbuilder/page.js +++ b/.next/static/chunks/app/gunbuilder/page.js @@ -29,6 +29,17 @@ eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* har /***/ }), +/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/api/navigation.js ***! + \**************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzPzdkMGYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4uL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb25cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); + +/***/ }), + /***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": /*!*********************************!*\ !*** ./app/gunbuilder/page.tsx ***! @@ -36,7 +47,7 @@ eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* har /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\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 _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction GunbuilderPage() {\n _s();\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.CATEGORIES){\n grouped[category.id] = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.PARTS.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, []);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.PARTS.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 49,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 53,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 52,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Prices and links are mock data for now—but the flow is close to what the real tool will be.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 55,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 48,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 63,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 64,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 67,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 62,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 47,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_3__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 83,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 79,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 77,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 76,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 98,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 104,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_2__.PARTS.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 117,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 123,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 122,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 128,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 121,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 133,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 116,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 109,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 102,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 disabled:opacity-40 disabled:cursor-not-allowed\",\n disabled: selectedParts.length === 0,\n onClick: ()=>{\n console.log(\"Build:\", build);\n alert(\"Prototype only: in the real app this would go to a sharable build summary with affiliate links.\");\n },\n children: \"Continue to Buy (Prototype)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 145,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"In the production version, this will take you to a build page with retailer links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 158,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 144,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 97,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 74,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 45,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 44,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"svOkcQtDxbXWPTNUUMXQODeiitQ=\");\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRTBDO0FBQ2lCO0FBRUU7QUFJOUMsU0FBU0s7O0lBQ3RCLE1BQU0sQ0FBQ0MsT0FBT0MsU0FBUyxHQUFHTiwrQ0FBUUEsQ0FBYSxDQUFDO0lBRWhELE1BQU1PLGtCQUE4Q1IsOENBQU9BLENBQUM7UUFDMUQsTUFBTVMsVUFBVSxDQUFDO1FBQ2pCLEtBQUssTUFBTUMsWUFBWVIsNkRBQVVBLENBQUU7WUFDakNPLE9BQU8sQ0FBQ0MsU0FBU0MsRUFBRSxDQUFDLEdBQUdSLHdEQUFLQSxDQUFDUyxNQUFNLENBQ2pDLENBQUNDLElBQU1BLEVBQUVDLFVBQVUsS0FBS0osU0FBU0MsRUFBRTtRQUV2QztRQUNBLE9BQU9GO0lBQ1QsR0FBRyxFQUFFO0lBRUwsTUFBTU0sZ0JBQXdCZiw4Q0FBT0EsQ0FBQztRQUNwQyxPQUFPZ0IsT0FBT0MsT0FBTyxDQUFDWCxPQUNuQlksR0FBRyxDQUFDO2dCQUFDLENBQUNKLFlBQVlLLE9BQU87bUJBQ3hCaEIsd0RBQUtBLENBQUNpQixJQUFJLENBQUMsQ0FBQ1AsSUFBTUEsRUFBRUYsRUFBRSxLQUFLUSxVQUFVTixFQUFFQyxVQUFVLEtBQUtBO1dBRXZERixNQUFNLENBQUNTO0lBQ1osR0FBRztRQUFDZjtLQUFNO0lBRVYsTUFBTWdCLGFBQWF0Qiw4Q0FBT0EsQ0FDeEIsSUFBTWUsY0FBY1EsTUFBTSxDQUFDLENBQUNDLEtBQUtYLElBQU1XLE1BQU1YLEVBQUVZLEtBQUssRUFBRSxJQUN0RDtRQUFDVjtLQUFjO0lBR2pCLE1BQU1XLG1CQUFtQixDQUFDWixZQUF3Qks7UUFDaERaLFNBQVMsQ0FBQ29CLE9BQVU7Z0JBQ2xCLEdBQUdBLElBQUk7Z0JBQ1AsQ0FBQ2IsV0FBVyxFQUFFSztZQUNoQjtJQUNGO0lBRUEscUJBQ0UsOERBQUNTO1FBQUtDLFdBQVU7a0JBQ2QsNEVBQUNDO1lBQUlELFdBQVU7OzhCQUVi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S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3g/MDU0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENBVEVHT1JJRVMsIFBBUlRTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcbmltcG9ydCB7IENhdGVnb3J5Q29sdW1uIH0gZnJvbSBcIkAvY29tcG9uZW50cy9DYXRlZ29yeUNvbHVtblwiO1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3VuYnVpbGRlclBhZ2UoKSB7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oe30pO1xuXG4gIGNvbnN0IHBhcnRzQnlDYXRlZ29yeTogUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cGVkID0ge30gYXMgUmVjb3JkPENhdGVnb3J5SWQsIFBhcnRbXT47XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBDQVRFR09SSUVTKSB7XG4gICAgICBncm91cGVkW2NhdGVnb3J5LmlkXSA9IFBBUlRTLmZpbHRlcihcbiAgICAgICAgKHApID0+IHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnkuaWQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBlZDtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWlsZClcbiAgICAgIC5tYXAoKFtjYXRlZ29yeUlkLCBwYXJ0SWRdKSA9PlxuICAgICAgICBQQVJUUy5maW5kKChwKSA9PiBwLmlkID09PSBwYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeUlkKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUGFydFtdO1xuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNiBmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmZsZXgtcm93IG1kOml0ZW1zLWVuZCBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgIEd1bmJ1aWxkZXIgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5Qcm90b3R5cGU8L3NwYW4+XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgQ2hvb3NlIG9uZSBwYXJ0IHBlciBjYXRlZ29yeSB0byBhc3NlbWJsZSBhbiBBUi0xNSBidWlsZC4gUHJpY2VzXG4gICAgICAgICAgICAgIGFuZCBsaW5rcyBhcmUgbW9jayBkYXRhIGZvciBub3figJRidXQgdGhlIGZsb3cgaXMgY2xvc2UgdG8gd2hhdFxuICAgICAgICAgICAgICB0aGUgcmVhbCB0b29sIHdpbGwgYmUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMiBtZDpwLTMgYmctemluYy05NTAvNjBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzPXtwYXJ0c0J5Q2F0ZWdvcnlbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFBhcnQ9eyhwYXJ0SWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0UGFydChjYXRlZ29yeS5pZCwgcGFydElkKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IFBBUlRTLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYW1iZXItNDAwLzYwIGJnLWFtYmVyLTQwMC8xMCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTIwMCBob3ZlcjpiZy1hbWJlci00MDAvMTUgZGlzYWJsZWQ6b3BhY2l0eS00MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkJ1aWxkOlwiLCBidWlsZCk7XG4gICAgICAgICAgICAgICAgICBhbGVydChcbiAgICAgICAgICAgICAgICAgICAgXCJQcm90b3R5cGUgb25seTogaW4gdGhlIHJlYWwgYXBwIHRoaXMgd291bGQgZ28gdG8gYSBzaGFyYWJsZSBidWlsZCBzdW1tYXJ5IHdpdGggYWZmaWxpYXRlIGxpbmtzLlwiLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ29udGludWUgdG8gQnV5IChQcm90b3R5cGUpXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIEluIHRoZSBwcm9kdWN0aW9uIHZlcnNpb24sIHRoaXMgd2lsbCB0YWtlIHlvdSB0byBhIGJ1aWxkIHBhZ2Ugd2l0aFxuICAgICAgICAgICAgICAgIHJldGFpbGVyIGxpbmtzIGFuZCBzaGFyaW5nIG9wdGlvbnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufVxuIl0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkNBVEVHT1JJRVMiLCJQQVJUUyIsIkNhdGVnb3J5Q29sdW1uIiwiR3VuYnVpbGRlclBhZ2UiLCJidWlsZCIsInNldEJ1aWxkIiwicGFydHNCeUNhdGVnb3J5IiwiZ3JvdXBlZCIsImNhdGVnb3J5IiwiaWQiLCJmaWx0ZXIiLCJwIiwiY2F0ZWdvcnlJZCIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwicGFydElkIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwicHJpY2UiLCJoYW5kbGVTZWxlY3RQYXJ0IiwicHJldiIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJoMSIsInNwYW4iLCJ0b0ZpeGVkIiwibGVuZ3RoIiwic2VjdGlvbiIsInBhcnRzIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJhc2lkZSIsImgyIiwidWwiLCJjYXQiLCJwYXJ0IiwibGkiLCJuYW1lIiwiYnJhbmQiLCJidXR0b24iLCJ0eXBlIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiY29uc29sZSIsImxvZyIsImFsZXJ0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\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_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n // Initialize from localStorage if available\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n // Handle URL query parameter for part selection\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n // Persist to localStorage\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n // Remove query param from URL\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES){\n grouped[category.id] = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, []);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 95,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 99,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 98,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Prices and links are mock data for now—but the flow is close to what the real tool will be.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 101,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 94,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 109,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 110,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 113,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 108,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 93,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_4__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 129,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 125,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 123,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 122,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 144,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 150,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 163,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 169,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 168,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 167,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 162,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 155,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 148,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 disabled:opacity-40 disabled:cursor-not-allowed\",\n disabled: selectedParts.length === 0,\n onClick: ()=>{\n console.log(\"Build:\", build);\n alert(\"Prototype only: in the real app this would go to a sharable build summary with affiliate links.\");\n },\n children: \"Continue to Buy (Prototype)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 191,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"In the production version, this will take you to a build page with retailer links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 143,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 120,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 91,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 90,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"UcwNfiAgvkVgT2sjmQl74nmTISI=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUVxRDtBQUNRO0FBQ0Y7QUFFRTtBQUk3RCxNQUFNUSxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLGVBQWVQLGdFQUFlQTtJQUNwQyxNQUFNUSxTQUFTUCwwREFBU0E7SUFDeEIsTUFBTSxDQUFDUSxPQUFPQyxTQUFTLEdBQUdaLCtDQUFRQSxDQUFhO1FBQzdDLDRDQUE0QztRQUM1QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTWEsU0FBU0MsYUFBYUMsT0FBTyxDQUFDUjtZQUNwQyxJQUFJTSxRQUFRO2dCQUNWLElBQUk7b0JBQ0YsT0FBT0csS0FBS0MsS0FBSyxDQUFDSjtnQkFDcEIsRUFBRSxVQUFNO29CQUNOLE9BQU8sQ0FBQztnQkFDVjtZQUNGO1FBQ0Y7UUFDQSxPQUFPLENBQUM7SUFDVjtJQUVBLGdEQUFnRDtJQUNoRFosZ0RBQVNBLENBQUM7UUFDUixNQUFNaUIsY0FBY1QsYUFBYVUsR0FBRyxDQUFDO1FBQ3JDLElBQUlELGFBQWE7WUFDZixNQUFNLENBQUNFLFlBQVlDLE9BQU8sR0FBR0gsWUFBWUksS0FBSyxDQUFDO1lBQy9DLElBQUlGLGNBQWNDLFVBQVVqQiw2REFBVUEsQ0FBQ21CLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxFQUFFLEtBQUtMLGFBQWE7Z0JBQ3ZFUixTQUFTLENBQUNjO29CQUNSLE1BQU1DLFVBQVU7d0JBQ2QsR0FBR0QsSUFBSTt3QkFDUCxDQUFDTixXQUFXLEVBQUVDO29CQUNoQjtvQkFDQSwwQkFBMEI7b0JBQzFCUCxhQUFhYyxPQUFPLENBQUNyQixhQUFhUyxLQUFLYSxTQUFTLENBQUNGO29CQUNqRCxPQUFPQTtnQkFDVDtnQkFDQSw4QkFBOEI7Z0JBQzlCakIsT0FBT29CLE9BQU8sQ0FBQyxlQUFlO29CQUFFQyxRQUFRO2dCQUFNO1lBQ2hEO1FBQ0Y7SUFDRixHQUFHO1FBQUN0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QkMsc0RBQVNBOzs7S0FGRksiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3g/MDU0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTLCBQQVJUUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIC8vIEluaXRpYWxpemUgZnJvbSBsb2NhbFN0b3JhZ2UgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICAvLyBIYW5kbGUgVVJMIHF1ZXJ5IHBhcmFtZXRlciBmb3IgcGFydCBzZWxlY3Rpb25cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIFBlcnNpc3QgdG8gbG9jYWxTdG9yYWdlXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbSBmcm9tIFVSTFxuICAgICAgICByb3V0ZXIucmVwbGFjZShcIi9ndW5idWlsZGVyXCIsIHsgc2Nyb2xsOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXMsIHJvdXRlcl0pO1xuXG4gIC8vIFBlcnNpc3QgYnVpbGQgc3RhdGUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCBwYXJ0c0J5Q2F0ZWdvcnk6IFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZCA9IHt9IGFzIFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+O1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgQ0FURUdPUklFUykge1xuICAgICAgZ3JvdXBlZFtjYXRlZ29yeS5pZF0gPSBQQVJUUy5maWx0ZXIoXG4gICAgICAgIChwKSA9PiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH0sIFtdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgUEFSVFMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgdG90YWxQcmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRQYXJ0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5wcmljZSwgMCksXG4gICAgW3NlbGVjdGVkUGFydHNdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBHdW5idWlsZGVyIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UHJvdG90eXBlPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIENob29zZSBvbmUgcGFydCBwZXIgY2F0ZWdvcnkgdG8gYXNzZW1ibGUgYW4gQVItMTUgYnVpbGQuIFByaWNlc1xuICAgICAgICAgICAgICBhbmQgbGlua3MgYXJlIG1vY2sgZGF0YSBmb3Igbm934oCUYnV0IHRoZSBmbG93IGlzIGNsb3NlIHRvIHdoYXRcbiAgICAgICAgICAgICAgdGhlIHJlYWwgdG9vbCB3aWxsIGJlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdGVnb3J5KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTIgbWQ6cC0zIGJnLXppbmMtOTUwLzYwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9e2NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0PXsocGFydElkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBQQVJUUy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCdWlsZDpcIiwgYnVpbGQpO1xuICAgICAgICAgICAgICAgICAgYWxlcnQoXG4gICAgICAgICAgICAgICAgICAgIFwiUHJvdG90eXBlIG9ubHk6IGluIHRoZSByZWFsIGFwcCB0aGlzIHdvdWxkIGdvIHRvIGEgc2hhcmFibGUgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcy5cIixcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlIHRvIEJ1eSAoUHJvdG90eXBlKVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBJbiB0aGUgcHJvZHVjdGlvbiB2ZXJzaW9uLCB0aGlzIHdpbGwgdGFrZSB5b3UgdG8gYSBidWlsZCBwYWdlIHdpdGhcbiAgICAgICAgICAgICAgICByZXRhaWxlciBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiUEFSVFMiLCJDYXRlZ29yeUNvbHVtbiIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsInNlbGVjdFBhcmFtIiwiZ2V0IiwiY2F0ZWdvcnlJZCIsInBhcnRJZCIsInNwbGl0Iiwic29tZSIsImMiLCJpZCIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJmaWx0ZXIiLCJwIiwic2VsZWN0ZWRQYXJ0cyIsIk9iamVjdCIsImVudHJpZXMiLCJtYXAiLCJmaW5kIiwiQm9vbGVhbiIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJwcmljZSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwiaDEiLCJzcGFuIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJwYXJ0cyIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwibmFtZSIsImJyYW5kIiwiYnV0dG9uIiwidHlwZSIsImRpc2FibGVkIiwib25DbGljayIsImNvbnNvbGUiLCJsb2ciLCJhbGVydCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); /***/ }), @@ -47,7 +58,7 @@ eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* har /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CategoryColumn: function() { return /* binding */ CategoryColumn; }\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 next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var _components_PartCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/PartCard */ \"(app-pages-browser)/./components/PartCard.tsx\");\n/* __next_internal_client_entry_do_not_use__ CategoryColumn auto */ \n\n\nfunction CategoryColumn(param) {\n let { category, parts, selectedPartId, onSelectPart } = param;\n // Show selected part if available, otherwise show first part\n const displayedPart = selectedPartId ? parts.find((p)=>p.id === selectedPartId) || parts[0] : parts[0];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col h-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.15em] text-zinc-400 uppercase\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 28,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 27,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n parts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: \"No parts yet for this category.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 34,\n columnNumber: 11\n }, this),\n displayedPart && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_PartCard__WEBPACK_IMPORTED_MODULE_2__.PartCard, {\n part: displayedPart,\n selected: displayedPart.id === selectedPartId,\n onSelect: ()=>onSelectPart(displayedPart.id)\n }, displayedPart.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 37,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 32,\n columnNumber: 7\n }, this),\n parts.length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: \"/gunbuilder/\".concat(category.id),\n className: \"mt-2 w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: [\n \"View All (\",\n parts.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 46,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 26,\n columnNumber: 5\n }, this);\n}\n_c = CategoryColumn;\nvar _c;\n$RefreshReg$(_c, \"CategoryColumn\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW4udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRTZCO0FBRW9CO0FBUzFDLFNBQVNFLGVBQWUsS0FLVDtRQUxTLEVBQzdCQyxRQUFRLEVBQ1JDLEtBQUssRUFDTEMsY0FBYyxFQUNkQyxZQUFZLEVBQ1EsR0FMUztJQU03Qiw2REFBNkQ7SUFDN0QsTUFBTUMsZ0JBQWdCRixpQkFDbEJELE1BQU1JLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxFQUFFLEtBQUtMLG1CQUFtQkQsS0FBSyxDQUFDLEVBQUUsR0FDdERBLEtBQUssQ0FBQyxFQUFFO0lBRVoscUJBQ0UsOERBQUNPO1FBQUlDLFdBQVU7OzBCQUNiLDhEQUFDRDtnQkFBSUMsV0FBVTswQkFDYiw0RUFBQ0M7b0JBQUdELFdBQVU7OEJBQ1hULFNBQVNXLElBQUk7Ozs7Ozs7Ozs7OzBCQUdsQiw4REFBQ0g7Z0JBQUlDLFdBQVU7O29CQUNaUixNQUFNVyxNQUFNLEtBQUssbUJBQ2hCLDhEQUFDTjt3QkFBRUcsV0FBVTtrQ0FBd0I7Ozs7OztvQkFFdENMLCtCQUNDLDhEQUFDTiwwREFBUUE7d0JBRVBlLE1BQU1UO3dCQUNOVSxVQUFVVixjQUFjRyxFQUFFLEtBQUtMO3dCQUMvQmEsVUFBVSxJQUFNWixhQUFhQyxjQUFjRyxFQUFFO3VCQUh4Q0gsY0FBY0csRUFBRTs7Ozs7Ozs7Ozs7WUFPMUJOLE1BQU1XLE1BQU0sR0FBRyxtQkFDZCw4REFBQ2YsaURBQUlBO2dCQUNIbUIsTUFBTSxlQUEyQixPQUFaaEIsU0FBU08sRUFBRTtnQkFDaENFLFdBQVU7O29CQUNYO29CQUNZUixNQUFNVyxNQUFNO29CQUFDOzs7Ozs7Ozs7Ozs7O0FBS2xDO0tBekNnQmIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9DYXRlZ29yeUNvbHVtbi50c3g/OWMxOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeSwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcbmltcG9ydCB7IFBhcnRDYXJkIH0gZnJvbSBcIkAvY29tcG9uZW50cy9QYXJ0Q2FyZFwiO1xuXG5pbnRlcmZhY2UgQ2F0ZWdvcnlDb2x1bW5Qcm9wcyB7XG4gIGNhdGVnb3J5OiBDYXRlZ29yeTtcbiAgcGFydHM6IFBhcnRbXTtcbiAgc2VsZWN0ZWRQYXJ0SWQ/OiBzdHJpbmc7XG4gIG9uU2VsZWN0UGFydDogKHBhcnRJZDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2F0ZWdvcnlDb2x1bW4oe1xuICBjYXRlZ29yeSxcbiAgcGFydHMsXG4gIHNlbGVjdGVkUGFydElkLFxuICBvblNlbGVjdFBhcnQsXG59OiBDYXRlZ29yeUNvbHVtblByb3BzKSB7XG4gIC8vIFNob3cgc2VsZWN0ZWQgcGFydCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBzaG93IGZpcnN0IHBhcnRcbiAgY29uc3QgZGlzcGxheWVkUGFydCA9IHNlbGVjdGVkUGFydElkXG4gICAgPyBwYXJ0cy5maW5kKChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCkgfHwgcGFydHNbMF1cbiAgICA6IHBhcnRzWzBdO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0zXCI+XG4gICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC16aW5jLTQwMCB1cHBlcmNhc2VcIj5cbiAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAge3BhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+Tm8gcGFydHMgeWV0IGZvciB0aGlzIGNhdGVnb3J5LjwvcD5cbiAgICAgICAgKX1cbiAgICAgICAge2Rpc3BsYXllZFBhcnQgJiYgKFxuICAgICAgICAgIDxQYXJ0Q2FyZFxuICAgICAgICAgICAga2V5PXtkaXNwbGF5ZWRQYXJ0LmlkfVxuICAgICAgICAgICAgcGFydD17ZGlzcGxheWVkUGFydH1cbiAgICAgICAgICAgIHNlbGVjdGVkPXtkaXNwbGF5ZWRQYXJ0LmlkID09PSBzZWxlY3RlZFBhcnRJZH1cbiAgICAgICAgICAgIG9uU2VsZWN0PXsoKSA9PiBvblNlbGVjdFBhcnQoZGlzcGxheWVkUGFydC5pZCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAge3BhcnRzLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICA8TGlua1xuICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5LmlkfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPVwibXQtMiB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIFZpZXcgQWxsICh7cGFydHMubGVuZ3RofSlcbiAgICAgICAgPC9MaW5rPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJMaW5rIiwiUGFydENhcmQiLCJDYXRlZ29yeUNvbHVtbiIsImNhdGVnb3J5IiwicGFydHMiLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImRpc3BsYXllZFBhcnQiLCJmaW5kIiwicCIsImlkIiwiZGl2IiwiY2xhc3NOYW1lIiwiaDIiLCJuYW1lIiwibGVuZ3RoIiwicGFydCIsInNlbGVjdGVkIiwib25TZWxlY3QiLCJocmVmIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/CategoryColumn.tsx\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CategoryColumn: function() { return /* binding */ CategoryColumn; }\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 next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var _components_PartCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/PartCard */ \"(app-pages-browser)/./components/PartCard.tsx\");\n/* __next_internal_client_entry_do_not_use__ CategoryColumn auto */ \n\n\nfunction CategoryColumn(param) {\n let { category, parts, selectedPartId, onSelectPart } = param;\n // Show selected part if available, otherwise show placeholder\n const displayedPart = selectedPartId ? parts.find((p)=>p.id === selectedPartId) : null;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col h-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.15em] text-zinc-400 uppercase\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 28,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 27,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n parts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: \"No parts yet for this category.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 34,\n columnNumber: 11\n }, this),\n !displayedPart && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full border border-zinc-700 rounded-md p-3 mb-2 text-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Choose a Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 38,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 37,\n columnNumber: 11\n }, this),\n displayedPart && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_PartCard__WEBPACK_IMPORTED_MODULE_2__.PartCard, {\n part: displayedPart,\n selected: displayedPart.id === selectedPartId,\n onSelect: ()=>onSelectPart(displayedPart.id)\n }, displayedPart.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 42,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 32,\n columnNumber: 7\n }, this),\n parts.length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: \"/gunbuilder/\".concat(category.id),\n className: \"mt-2 w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: [\n \"View All (\",\n parts.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 51,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 26,\n columnNumber: 5\n }, this);\n}\n_c = CategoryColumn;\nvar _c;\n$RefreshReg$(_c, \"CategoryColumn\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW4udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRTZCO0FBRW9CO0FBUzFDLFNBQVNFLGVBQWUsS0FLVDtRQUxTLEVBQzdCQyxRQUFRLEVBQ1JDLEtBQUssRUFDTEMsY0FBYyxFQUNkQyxZQUFZLEVBQ1EsR0FMUztJQU03Qiw4REFBOEQ7SUFDOUQsTUFBTUMsZ0JBQWdCRixpQkFDbEJELE1BQU1JLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxFQUFFLEtBQUtMLGtCQUMzQjtJQUVKLHFCQUNFLDhEQUFDTTtRQUFJQyxXQUFVOzswQkFDYiw4REFBQ0Q7Z0JBQUlDLFdBQVU7MEJBQ2IsNEVBQUNDO29CQUFHRCxXQUFVOzhCQUNYVCxTQUFTVyxJQUFJOzs7Ozs7Ozs7OzswQkFHbEIsOERBQUNIO2dCQUFJQyxXQUFVOztvQkFDWlIsTUFBTVcsTUFBTSxLQUFLLG1CQUNoQiw4REFBQ047d0JBQUVHLFdBQVU7a0NBQXdCOzs7Ozs7b0JBRXRDLENBQUNMLGlCQUFpQkgsTUFBTVcsTUFBTSxHQUFHLG1CQUNoQyw4REFBQ0o7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNIOzRCQUFFRyxXQUFVO3NDQUF3Qjs7Ozs7Ozs7Ozs7b0JBR3hDTCwrQkFDQyw4REFBQ04sMERBQVFBO3dCQUVQZSxNQUFNVDt3QkFDTlUsVUFBVVYsY0FBY0csRUFBRSxLQUFLTDt3QkFDL0JhLFVBQVUsSUFBTVosYUFBYUMsY0FBY0csRUFBRTt1QkFIeENILGNBQWNHLEVBQUU7Ozs7Ozs7Ozs7O1lBTzFCTixNQUFNVyxNQUFNLEdBQUcsbUJBQ2QsOERBQUNmLGlEQUFJQTtnQkFDSG1CLE1BQU0sZUFBMkIsT0FBWmhCLFNBQVNPLEVBQUU7Z0JBQ2hDRSxXQUFVOztvQkFDWDtvQkFDWVIsTUFBTVcsTUFBTTtvQkFBQzs7Ozs7Ozs7Ozs7OztBQUtsQztLQTlDZ0JiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW4udHN4PzljMTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnksIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBQYXJ0Q2FyZCB9IGZyb20gXCJAL2NvbXBvbmVudHMvUGFydENhcmRcIjtcblxuaW50ZXJmYWNlIENhdGVnb3J5Q29sdW1uUHJvcHMge1xuICBjYXRlZ29yeTogQ2F0ZWdvcnk7XG4gIHBhcnRzOiBQYXJ0W107XG4gIHNlbGVjdGVkUGFydElkPzogc3RyaW5nO1xuICBvblNlbGVjdFBhcnQ6IChwYXJ0SWQ6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhdGVnb3J5Q29sdW1uKHtcbiAgY2F0ZWdvcnksXG4gIHBhcnRzLFxuICBzZWxlY3RlZFBhcnRJZCxcbiAgb25TZWxlY3RQYXJ0LFxufTogQ2F0ZWdvcnlDb2x1bW5Qcm9wcykge1xuICAvLyBTaG93IHNlbGVjdGVkIHBhcnQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2Ugc2hvdyBwbGFjZWhvbGRlclxuICBjb25zdCBkaXNwbGF5ZWRQYXJ0ID0gc2VsZWN0ZWRQYXJ0SWRcbiAgICA/IHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItM1wiPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE1ZW1dIHRleHQtemluYy00MDAgdXBwZXJjYXNlXCI+XG4gICAgICAgICAge2NhdGVnb3J5Lm5hbWV9XG4gICAgICAgIDwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgIHtwYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPk5vIHBhcnRzIHlldCBmb3IgdGhpcyBjYXRlZ29yeS48L3A+XG4gICAgICAgICl9XG4gICAgICAgIHshZGlzcGxheWVkUGFydCAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIG1iLTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkNob29zZSBhIFBhcnQ8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtkaXNwbGF5ZWRQYXJ0ICYmIChcbiAgICAgICAgICA8UGFydENhcmRcbiAgICAgICAgICAgIGtleT17ZGlzcGxheWVkUGFydC5pZH1cbiAgICAgICAgICAgIHBhcnQ9e2Rpc3BsYXllZFBhcnR9XG4gICAgICAgICAgICBzZWxlY3RlZD17ZGlzcGxheWVkUGFydC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWR9XG4gICAgICAgICAgICBvblNlbGVjdD17KCkgPT4gb25TZWxlY3RQYXJ0KGRpc3BsYXllZFBhcnQuaWQpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtwYXJ0cy5sZW5ndGggPiAxICYmIChcbiAgICAgICAgPExpbmtcbiAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeS5pZH1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTIgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICBWaWV3IEFsbCAoe3BhcnRzLmxlbmd0aH0pXG4gICAgICAgIDwvTGluaz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiTGluayIsIlBhcnRDYXJkIiwiQ2F0ZWdvcnlDb2x1bW4iLCJjYXRlZ29yeSIsInBhcnRzIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJkaXNwbGF5ZWRQYXJ0IiwiZmluZCIsInAiLCJpZCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwibmFtZSIsImxlbmd0aCIsInBhcnQiLCJzZWxlY3RlZCIsIm9uU2VsZWN0IiwiaHJlZiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/CategoryColumn.tsx\n")); /***/ }), diff --git a/.next/static/chunks/app/layout.js b/.next/static/chunks/app/layout.js index e677274..08c5260 100644 --- a/.next/static/chunks/app/layout.js +++ b/.next/static/chunks/app/layout.js @@ -25,7 +25,7 @@ eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpa /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"425db0a70c41\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI0MjVkYjBhNzBjNDFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"2205c020ffc8\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIyMjA1YzAyMGZmYzhcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/chunks/webpack.js b/.next/static/chunks/webpack.js index b7b1ee7..ab2643f 100644 --- a/.next/static/chunks/webpack.js +++ b/.next/static/chunks/webpack.js @@ -192,7 +192,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "5aa0f4b5d703f9bd"; } +/******/ __webpack_require__.h = function() { return "470106d2483fe157"; } /******/ }(); /******/ /******/ /* webpack/runtime/global */ diff --git a/.next/static/webpack/02985b2227e92138.webpack.hot-update.json b/.next/static/webpack/02985b2227e92138.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/.next/static/webpack/02985b2227e92138.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/223a54f5f9cb6c34.webpack.hot-update.json b/.next/static/webpack/223a54f5f9cb6c34.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/223a54f5f9cb6c34.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/5aa0f4b5d703f9bd.webpack.hot-update.json b/.next/static/webpack/5aa0f4b5d703f9bd.webpack.hot-update.json new file mode 100644 index 0000000..31f1cde --- /dev/null +++ b/.next/static/webpack/5aa0f4b5d703f9bd.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.223a54f5f9cb6c34.hot-update.js b/.next/static/webpack/app/gunbuilder/page.223a54f5f9cb6c34.hot-update.js new file mode 100644 index 0000000..df70c9e --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.223a54f5f9cb6c34.hot-update.js @@ -0,0 +1,32 @@ +"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/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/api/navigation.js ***! + \**************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzPzdkMGYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4uL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb25cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": +/*!*********************************!*\ + !*** ./app/gunbuilder/page.tsx ***! + \*********************************/ +/***/ (function(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\": function() { return /* binding */ GunbuilderPage; }\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_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n // Initialize from localStorage if available\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n // Handle URL query parameter for part selection\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n // Persist to localStorage\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n // Remove query param from URL\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES){\n grouped[category.id] = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, []);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 95,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 99,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 98,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Prices and links are mock data for now—but the flow is close to what the real tool will be.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 101,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 94,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 109,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 110,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 113,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 108,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 93,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_4__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 129,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 125,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 123,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 122,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 144,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 150,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.PARTS.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 163,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 169,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 168,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 167,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 162,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 155,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 148,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 disabled:opacity-40 disabled:cursor-not-allowed\",\n disabled: selectedParts.length === 0,\n onClick: ()=>{\n console.log(\"Build:\", build);\n alert(\"Prototype only: in the real app this would go to a sharable build summary with affiliate links.\");\n },\n children: \"Continue to Buy (Prototype)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 191,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"In the production version, this will take you to a build page with retailer links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 143,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 120,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 91,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 90,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"UcwNfiAgvkVgT2sjmQl74nmTISI=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUVxRDtBQUNRO0FBQ0Y7QUFFRTtBQUk3RCxNQUFNUSxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLGVBQWVQLGdFQUFlQTtJQUNwQyxNQUFNUSxTQUFTUCwwREFBU0E7SUFDeEIsTUFBTSxDQUFDUSxPQUFPQyxTQUFTLEdBQUdaLCtDQUFRQSxDQUFhO1FBQzdDLDRDQUE0QztRQUM1QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTWEsU0FBU0MsYUFBYUMsT0FBTyxDQUFDUjtZQUNwQyxJQUFJTSxRQUFRO2dCQUNWLElBQUk7b0JBQ0YsT0FBT0csS0FBS0MsS0FBSyxDQUFDSjtnQkFDcEIsRUFBRSxVQUFNO29CQUNOLE9BQU8sQ0FBQztnQkFDVjtZQUNGO1FBQ0Y7UUFDQSxPQUFPLENBQUM7SUFDVjtJQUVBLGdEQUFnRDtJQUNoRFosZ0RBQVNBLENBQUM7UUFDUixNQUFNaUIsY0FBY1QsYUFBYVUsR0FBRyxDQUFDO1FBQ3JDLElBQUlELGFBQWE7WUFDZixNQUFNLENBQUNFLFlBQVlDLE9BQU8sR0FBR0gsWUFBWUksS0FBSyxDQUFDO1lBQy9DLElBQUlGLGNBQWNDLFVBQVVqQiw2REFBVUEsQ0FBQ21CLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxFQUFFLEtBQUtMLGFBQWE7Z0JBQ3ZFUixTQUFTLENBQUNjO29CQUNSLE1BQU1DLFVBQVU7d0JBQ2QsR0FBR0QsSUFBSTt3QkFDUCxDQUFDTixXQUFXLEVBQUVDO29CQUNoQjtvQkFDQSwwQkFBMEI7b0JBQzFCUCxhQUFhYyxPQUFPLENBQUNyQixhQUFhUyxLQUFLYSxTQUFTLENBQUNGO29CQUNqRCxPQUFPQTtnQkFDVDtnQkFDQSw4QkFBOEI7Z0JBQzlCakIsT0FBT29CLE9BQU8sQ0FBQyxlQUFlO29CQUFFQyxRQUFRO2dCQUFNO1lBQ2hEO1FBQ0Y7SUFDRixHQUFHO1FBQUN0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QkMsc0RBQVNBOzs7S0FGRksiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3g/MDU0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTLCBQQVJUUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIC8vIEluaXRpYWxpemUgZnJvbSBsb2NhbFN0b3JhZ2UgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICAvLyBIYW5kbGUgVVJMIHF1ZXJ5IHBhcmFtZXRlciBmb3IgcGFydCBzZWxlY3Rpb25cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIFBlcnNpc3QgdG8gbG9jYWxTdG9yYWdlXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbSBmcm9tIFVSTFxuICAgICAgICByb3V0ZXIucmVwbGFjZShcIi9ndW5idWlsZGVyXCIsIHsgc2Nyb2xsOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXMsIHJvdXRlcl0pO1xuXG4gIC8vIFBlcnNpc3QgYnVpbGQgc3RhdGUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCBwYXJ0c0J5Q2F0ZWdvcnk6IFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZCA9IHt9IGFzIFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+O1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgQ0FURUdPUklFUykge1xuICAgICAgZ3JvdXBlZFtjYXRlZ29yeS5pZF0gPSBQQVJUUy5maWx0ZXIoXG4gICAgICAgIChwKSA9PiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH0sIFtdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgUEFSVFMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgdG90YWxQcmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRQYXJ0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5wcmljZSwgMCksXG4gICAgW3NlbGVjdGVkUGFydHNdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBHdW5idWlsZGVyIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UHJvdG90eXBlPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIENob29zZSBvbmUgcGFydCBwZXIgY2F0ZWdvcnkgdG8gYXNzZW1ibGUgYW4gQVItMTUgYnVpbGQuIFByaWNlc1xuICAgICAgICAgICAgICBhbmQgbGlua3MgYXJlIG1vY2sgZGF0YSBmb3Igbm934oCUYnV0IHRoZSBmbG93IGlzIGNsb3NlIHRvIHdoYXRcbiAgICAgICAgICAgICAgdGhlIHJlYWwgdG9vbCB3aWxsIGJlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdGVnb3J5KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTIgbWQ6cC0zIGJnLXppbmMtOTUwLzYwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9e2NhdGVnb3J5fVxuICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0PXsocGFydElkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBQQVJUUy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCdWlsZDpcIiwgYnVpbGQpO1xuICAgICAgICAgICAgICAgICAgYWxlcnQoXG4gICAgICAgICAgICAgICAgICAgIFwiUHJvdG90eXBlIG9ubHk6IGluIHRoZSByZWFsIGFwcCB0aGlzIHdvdWxkIGdvIHRvIGEgc2hhcmFibGUgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcy5cIixcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlIHRvIEJ1eSAoUHJvdG90eXBlKVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBJbiB0aGUgcHJvZHVjdGlvbiB2ZXJzaW9uLCB0aGlzIHdpbGwgdGFrZSB5b3UgdG8gYSBidWlsZCBwYWdlIHdpdGhcbiAgICAgICAgICAgICAgICByZXRhaWxlciBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiUEFSVFMiLCJDYXRlZ29yeUNvbHVtbiIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsInNlbGVjdFBhcmFtIiwiZ2V0IiwiY2F0ZWdvcnlJZCIsInBhcnRJZCIsInNwbGl0Iiwic29tZSIsImMiLCJpZCIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJmaWx0ZXIiLCJwIiwic2VsZWN0ZWRQYXJ0cyIsIk9iamVjdCIsImVudHJpZXMiLCJtYXAiLCJmaW5kIiwiQm9vbGVhbiIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJwcmljZSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwiaDEiLCJzcGFuIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJwYXJ0cyIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwibmFtZSIsImJyYW5kIiwiYnV0dG9uIiwidHlwZSIsImRpc2FibGVkIiwib25DbGljayIsImNvbnNvbGUiLCJsb2ciLCJhbGVydCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.5aa0f4b5d703f9bd.hot-update.js b/.next/static/webpack/app/gunbuilder/page.5aa0f4b5d703f9bd.hot-update.js new file mode 100644 index 0000000..a6d495f --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/page.5aa0f4b5d703f9bd.hot-update.js @@ -0,0 +1,22 @@ +"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/gunbuilder/page",{ + +/***/ "(app-pages-browser)/./components/CategoryColumn.tsx": +/*!***************************************!*\ + !*** ./components/CategoryColumn.tsx ***! + \***************************************/ +/***/ (function(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 */ CategoryColumn: function() { return /* binding */ CategoryColumn; }\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 next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var _components_PartCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/PartCard */ \"(app-pages-browser)/./components/PartCard.tsx\");\n/* __next_internal_client_entry_do_not_use__ CategoryColumn auto */ \n\n\nfunction CategoryColumn(param) {\n let { category, parts, selectedPartId, onSelectPart } = param;\n // Show selected part if available, otherwise show placeholder\n const displayedPart = selectedPartId ? parts.find((p)=>p.id === selectedPartId) : null;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col h-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.15em] text-zinc-400 uppercase\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 28,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 27,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n parts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: \"No parts yet for this category.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 34,\n columnNumber: 11\n }, this),\n !displayedPart && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full border border-zinc-700 rounded-md p-3 mb-2 text-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Choose a Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 38,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 37,\n columnNumber: 11\n }, this),\n displayedPart && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_PartCard__WEBPACK_IMPORTED_MODULE_2__.PartCard, {\n part: displayedPart,\n selected: displayedPart.id === selectedPartId,\n onSelect: ()=>onSelectPart(displayedPart.id)\n }, displayedPart.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 42,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 32,\n columnNumber: 7\n }, this),\n parts.length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: \"/gunbuilder/\".concat(category.id),\n className: \"mt-2 w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: [\n \"View All (\",\n parts.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 51,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx\",\n lineNumber: 26,\n columnNumber: 5\n }, this);\n}\n_c = CategoryColumn;\nvar _c;\n$RefreshReg$(_c, \"CategoryColumn\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW4udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRTZCO0FBRW9CO0FBUzFDLFNBQVNFLGVBQWUsS0FLVDtRQUxTLEVBQzdCQyxRQUFRLEVBQ1JDLEtBQUssRUFDTEMsY0FBYyxFQUNkQyxZQUFZLEVBQ1EsR0FMUztJQU03Qiw4REFBOEQ7SUFDOUQsTUFBTUMsZ0JBQWdCRixpQkFDbEJELE1BQU1JLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxFQUFFLEtBQUtMLGtCQUMzQjtJQUVKLHFCQUNFLDhEQUFDTTtRQUFJQyxXQUFVOzswQkFDYiw4REFBQ0Q7Z0JBQUlDLFdBQVU7MEJBQ2IsNEVBQUNDO29CQUFHRCxXQUFVOzhCQUNYVCxTQUFTVyxJQUFJOzs7Ozs7Ozs7OzswQkFHbEIsOERBQUNIO2dCQUFJQyxXQUFVOztvQkFDWlIsTUFBTVcsTUFBTSxLQUFLLG1CQUNoQiw4REFBQ047d0JBQUVHLFdBQVU7a0NBQXdCOzs7Ozs7b0JBRXRDLENBQUNMLGlCQUFpQkgsTUFBTVcsTUFBTSxHQUFHLG1CQUNoQyw4REFBQ0o7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNIOzRCQUFFRyxXQUFVO3NDQUF3Qjs7Ozs7Ozs7Ozs7b0JBR3hDTCwrQkFDQyw4REFBQ04sMERBQVFBO3dCQUVQZSxNQUFNVDt3QkFDTlUsVUFBVVYsY0FBY0csRUFBRSxLQUFLTDt3QkFDL0JhLFVBQVUsSUFBTVosYUFBYUMsY0FBY0csRUFBRTt1QkFIeENILGNBQWNHLEVBQUU7Ozs7Ozs7Ozs7O1lBTzFCTixNQUFNVyxNQUFNLEdBQUcsbUJBQ2QsOERBQUNmLGlEQUFJQTtnQkFDSG1CLE1BQU0sZUFBMkIsT0FBWmhCLFNBQVNPLEVBQUU7Z0JBQ2hDRSxXQUFVOztvQkFDWDtvQkFDWVIsTUFBTVcsTUFBTTtvQkFBQzs7Ozs7Ozs7Ozs7OztBQUtsQztLQTlDZ0JiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW4udHN4PzljMTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnksIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBQYXJ0Q2FyZCB9IGZyb20gXCJAL2NvbXBvbmVudHMvUGFydENhcmRcIjtcblxuaW50ZXJmYWNlIENhdGVnb3J5Q29sdW1uUHJvcHMge1xuICBjYXRlZ29yeTogQ2F0ZWdvcnk7XG4gIHBhcnRzOiBQYXJ0W107XG4gIHNlbGVjdGVkUGFydElkPzogc3RyaW5nO1xuICBvblNlbGVjdFBhcnQ6IChwYXJ0SWQ6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhdGVnb3J5Q29sdW1uKHtcbiAgY2F0ZWdvcnksXG4gIHBhcnRzLFxuICBzZWxlY3RlZFBhcnRJZCxcbiAgb25TZWxlY3RQYXJ0LFxufTogQ2F0ZWdvcnlDb2x1bW5Qcm9wcykge1xuICAvLyBTaG93IHNlbGVjdGVkIHBhcnQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2Ugc2hvdyBwbGFjZWhvbGRlclxuICBjb25zdCBkaXNwbGF5ZWRQYXJ0ID0gc2VsZWN0ZWRQYXJ0SWRcbiAgICA/IHBhcnRzLmZpbmQoKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItM1wiPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE1ZW1dIHRleHQtemluYy00MDAgdXBwZXJjYXNlXCI+XG4gICAgICAgICAge2NhdGVnb3J5Lm5hbWV9XG4gICAgICAgIDwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgIHtwYXJ0cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPk5vIHBhcnRzIHlldCBmb3IgdGhpcyBjYXRlZ29yeS48L3A+XG4gICAgICAgICl9XG4gICAgICAgIHshZGlzcGxheWVkUGFydCAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIG1iLTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkNob29zZSBhIFBhcnQ8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtkaXNwbGF5ZWRQYXJ0ICYmIChcbiAgICAgICAgICA8UGFydENhcmRcbiAgICAgICAgICAgIGtleT17ZGlzcGxheWVkUGFydC5pZH1cbiAgICAgICAgICAgIHBhcnQ9e2Rpc3BsYXllZFBhcnR9XG4gICAgICAgICAgICBzZWxlY3RlZD17ZGlzcGxheWVkUGFydC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWR9XG4gICAgICAgICAgICBvblNlbGVjdD17KCkgPT4gb25TZWxlY3RQYXJ0KGRpc3BsYXllZFBhcnQuaWQpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtwYXJ0cy5sZW5ndGggPiAxICYmIChcbiAgICAgICAgPExpbmtcbiAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeS5pZH1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTIgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICBWaWV3IEFsbCAoe3BhcnRzLmxlbmd0aH0pXG4gICAgICAgIDwvTGluaz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiTGluayIsIlBhcnRDYXJkIiwiQ2F0ZWdvcnlDb2x1bW4iLCJjYXRlZ29yeSIsInBhcnRzIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJkaXNwbGF5ZWRQYXJ0IiwiZmluZCIsInAiLCJpZCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwibmFtZSIsImxlbmd0aCIsInBhcnQiLCJzZWxlY3RlZCIsIm9uU2VsZWN0IiwiaHJlZiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/CategoryColumn.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.02985b2227e92138.hot-update.js b/.next/static/webpack/app/layout.02985b2227e92138.hot-update.js new file mode 100644 index 0000000..99af0aa --- /dev/null +++ b/.next/static/webpack/app/layout.02985b2227e92138.hot-update.js @@ -0,0 +1,22 @@ +"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/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"b78d2654cd4d\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJiNzhkMjY1NGNkNGRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.223a54f5f9cb6c34.hot-update.js b/.next/static/webpack/app/layout.223a54f5f9cb6c34.hot-update.js new file mode 100644 index 0000000..2e251cf --- /dev/null +++ b/.next/static/webpack/app/layout.223a54f5f9cb6c34.hot-update.js @@ -0,0 +1,22 @@ +"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/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"515f849d8fb0\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI1MTVmODQ5ZDhmYjBcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.5aa0f4b5d703f9bd.hot-update.js b/.next/static/webpack/app/layout.5aa0f4b5d703f9bd.hot-update.js new file mode 100644 index 0000000..64c93cf --- /dev/null +++ b/.next/static/webpack/app/layout.5aa0f4b5d703f9bd.hot-update.js @@ -0,0 +1,22 @@ +"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/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"f0ff7bd15da8\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJmMGZmN2JkMTVkYThcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.c52ce44877672471.hot-update.js b/.next/static/webpack/app/layout.c52ce44877672471.hot-update.js new file mode 100644 index 0000000..aa7c820 --- /dev/null +++ b/.next/static/webpack/app/layout.c52ce44877672471.hot-update.js @@ -0,0 +1,22 @@ +"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/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"75c6021d1d3d\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3NWM2MDIxZDFkM2RcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/c52ce44877672471.webpack.hot-update.json b/.next/static/webpack/c52ce44877672471.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/.next/static/webpack/c52ce44877672471.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/webpack.02985b2227e92138.hot-update.js b/.next/static/webpack/webpack.02985b2227e92138.hot-update.js new file mode 100644 index 0000000..f3930e9 --- /dev/null +++ b/.next/static/webpack/webpack.02985b2227e92138.hot-update.js @@ -0,0 +1,18 @@ +"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"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "e059b46eff1bf257"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.223a54f5f9cb6c34.hot-update.js b/.next/static/webpack/webpack.223a54f5f9cb6c34.hot-update.js new file mode 100644 index 0000000..e4a8fee --- /dev/null +++ b/.next/static/webpack/webpack.223a54f5f9cb6c34.hot-update.js @@ -0,0 +1,18 @@ +"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"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "02985b2227e92138"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.5aa0f4b5d703f9bd.hot-update.js b/.next/static/webpack/webpack.5aa0f4b5d703f9bd.hot-update.js new file mode 100644 index 0000000..b45f640 --- /dev/null +++ b/.next/static/webpack/webpack.5aa0f4b5d703f9bd.hot-update.js @@ -0,0 +1,18 @@ +"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"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "c52ce44877672471"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/static/webpack/webpack.c52ce44877672471.hot-update.js b/.next/static/webpack/webpack.c52ce44877672471.hot-update.js new file mode 100644 index 0000000..ef05f20 --- /dev/null +++ b/.next/static/webpack/webpack.c52ce44877672471.hot-update.js @@ -0,0 +1,18 @@ +"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"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "223a54f5f9cb6c34"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/trace b/.next/trace index c12a6fd..464fa0c 100644 --- a/.next/trace +++ b/.next/trace @@ -21,3 +21,9 @@ [{"name":"client-success","duration":2,"timestamp":472865948197,"id":1842,"parentId":3,"tags":{},"startTime":1764105511035,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":65000,"timestamp":472865901138,"id":1843,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/lower","isPageHidden":false},"startTime":1764105511053,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":195964,"timestamp":472865868950,"id":1768,"tags":{"url":"/gunbuilder/lower/lower-aero-m4e1?_rsc=uiigs","isTurbopack":false},"startTime":1764105510956,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472866064944,"id":1844,"parentId":1768,"tags":{"url":"/gunbuilder/lower/lower-aero-m4e1?_rsc=uiigs","memory.rss":"638353408","memory.heapUsed":"191912416","memory.heapTotal":"339771392"},"startTime":1764105511152,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5469,"timestamp":472866069829,"id":1845,"tags":{"url":"/gunbuilder/lower/lower-aero-m4e1?_rsc=rksw7","isTurbopack":false},"startTime":1764105511157,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472866075314,"id":1846,"parentId":1845,"tags":{"url":"/gunbuilder/lower/lower-aero-m4e1?_rsc=rksw7","memory.rss":"638353408","memory.heapUsed":"193046352","memory.heapTotal":"339771392"},"startTime":1764105511162,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":11459,"timestamp":472867575944,"id":1847,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=1o8dd","isTurbopack":false},"startTime":1764105512663,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472867587472,"id":1848,"parentId":1847,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=1o8dd","memory.rss":"638582784","memory.heapUsed":"194319344","memory.heapTotal":"340000768"},"startTime":1764105512674,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":7887,"timestamp":472867591364,"id":1849,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=1kfpz","isTurbopack":false},"startTime":1764105512678,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472867599281,"id":1850,"parentId":1849,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=1kfpz","memory.rss":"638582784","memory.heapUsed":"194946056","memory.heapTotal":"340000768"},"startTime":1764105512686,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":52076,"timestamp":472878494633,"id":1851,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764105523582,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472878546735,"id":1852,"parentId":1851,"tags":{"url":"/gunbuilder","memory.rss":"453656576","memory.heapUsed":"171341744","memory.heapTotal":"178110464"},"startTime":1764105523634,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":4,"timestamp":472878738437,"id":1853,"parentId":3,"tags":{},"startTime":1764105523825,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":21052,"timestamp":472880506271,"id":1854,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764105525593,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472880527362,"id":1855,"parentId":1854,"tags":{"url":"/gunbuilder","memory.rss":"454770688","memory.heapUsed":"171342192","memory.heapTotal":"177324032"},"startTime":1764105525614,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":3,"timestamp":472880723307,"id":1856,"parentId":3,"tags":{},"startTime":1764105525810,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":8032,"timestamp":472889040343,"id":1868,"parentId":1860,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":9219,"timestamp":472889040246,"id":1861,"parentId":1860,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":10787,"timestamp":472889040340,"id":1867,"parentId":1860,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":3988,"timestamp":472889047508,"id":1872,"parentId":1871,"tags":{},"startTime":1764105534134,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":4131,"timestamp":472889047368,"id":1871,"parentId":1870,"tags":{},"startTime":1764105534134,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":28183,"timestamp":472889047232,"id":1870,"parentId":1859,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764105534134,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":36244,"timestamp":472889040323,"id":1863,"parentId":1860,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js%22%2C%22ids%22%3A%5B%22*%22%5D%7D&server=false!"},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":36848,"timestamp":472889040332,"id":1865,"parentId":1860,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":37124,"timestamp":472889040316,"id":1862,"parentId":1860,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":38451,"timestamp":472889040337,"id":1866,"parentId":1860,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"read-resource","duration":379,"timestamp":472889128521,"id":1874,"parentId":1873,"tags":{},"startTime":1764105534215,"traceId":"e274ac96b05c42d4"},{"name":"postcss-process","duration":17840,"timestamp":472889128974,"id":1876,"parentId":1875,"tags":{},"startTime":1764105534216,"traceId":"e274ac96b05c42d4"},{"name":"postcss-loader","duration":18233,"timestamp":472889128912,"id":1875,"parentId":1873,"tags":{},"startTime":1764105534216,"traceId":"e274ac96b05c42d4"},{"name":"css-loader","duration":4625,"timestamp":472889147167,"id":1877,"parentId":1873,"tags":{"astUsed":"true"},"startTime":1764105534234,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":24662,"timestamp":472889128379,"id":1873,"parentId":1869,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764105534215,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":114774,"timestamp":472889046114,"id":1869,"parentId":1859,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764105534133,"traceId":"e274ac96b05c42d4"},{"name":"build-module","duration":30,"timestamp":472889160936,"id":1878,"parentId":1869,"tags":{},"startTime":1764105534248,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":120647,"timestamp":472889040329,"id":1864,"parentId":1860,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":121123,"timestamp":472889039860,"id":1860,"parentId":1859,"tags":{},"startTime":1764105534127,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":613,"timestamp":472889161691,"id":1880,"parentId":1879,"tags":{},"startTime":1764105534249,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":472889162313,"id":1882,"parentId":1879,"tags":{},"startTime":1764105534249,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":17,"timestamp":472889162320,"id":1883,"parentId":1879,"tags":{},"startTime":1764105534249,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":2,"timestamp":472889162342,"id":1884,"parentId":1879,"tags":{},"startTime":1764105534249,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":6,"timestamp":472889162353,"id":1885,"parentId":1879,"tags":{},"startTime":1764105534249,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":328,"timestamp":472889162311,"id":1881,"parentId":1879,"tags":{},"startTime":1764105534249,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":139,"timestamp":472889162969,"id":1886,"parentId":1879,"tags":{},"startTime":1764105534250,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":627,"timestamp":472889163112,"id":1887,"parentId":1879,"tags":{},"startTime":1764105534250,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":2140,"timestamp":472889164287,"id":1888,"parentId":1879,"tags":{},"startTime":1764105534251,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":94,"timestamp":472889166425,"id":1889,"parentId":1879,"tags":{},"startTime":1764105534253,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":37,"timestamp":472889166514,"id":1890,"parentId":1879,"tags":{},"startTime":1764105534253,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1798,"timestamp":472889166554,"id":1891,"parentId":1879,"tags":{},"startTime":1764105534253,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":48,"timestamp":472889168912,"id":1893,"parentId":1859,"tags":{},"startTime":1764105534256,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-createassets","duration":89,"timestamp":472889168876,"id":1892,"parentId":1859,"tags":{},"startTime":1764105534256,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":8294,"timestamp":472889161497,"id":1879,"parentId":1859,"tags":{},"startTime":1764105534248,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":130405,"timestamp":472889039412,"id":1859,"parentId":1857,"tags":{"name":"client"},"startTime":1764105534126,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":2171,"timestamp":472889169827,"id":1894,"parentId":1857,"tags":{},"startTime":1764105534257,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-client","duration":140782,"timestamp":472889031655,"id":1857,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764105534119,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":2,"timestamp":472889174125,"id":1897,"parentId":3,"tags":{},"startTime":1764105534261,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6332,"timestamp":472889174913,"id":1900,"parentId":1896,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764105534262,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6318,"timestamp":472889174931,"id":1901,"parentId":1896,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764105534262,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6689,"timestamp":472889174890,"id":1898,"parentId":1896,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764105534262,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":827,"timestamp":472889180947,"id":1904,"parentId":1903,"tags":{},"startTime":1764105534268,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":891,"timestamp":472889180886,"id":1903,"parentId":1902,"tags":{},"startTime":1764105534268,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":1614,"timestamp":472889180724,"id":1902,"parentId":1895,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764105534268,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":9552,"timestamp":472889174910,"id":1899,"parentId":1896,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764105534262,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1580,"timestamp":472889185982,"id":1919,"parentId":1918,"tags":{},"startTime":1764105534273,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1639,"timestamp":472889185924,"id":1918,"parentId":1917,"tags":{},"startTime":1764105534273,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":4289,"timestamp":472889185835,"id":1917,"parentId":1895,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764105534273,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":18744,"timestamp":472889173508,"id":1896,"parentId":1895,"tags":{},"startTime":1764105534260,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":1305,"timestamp":472889193329,"id":1921,"parentId":1920,"tags":{},"startTime":1764105534280,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":1,"timestamp":472889194645,"id":1923,"parentId":1920,"tags":{},"startTime":1764105534282,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":1105,"timestamp":472889194654,"id":1924,"parentId":1920,"tags":{},"startTime":1764105534282,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":3,"timestamp":472889195766,"id":1925,"parentId":1920,"tags":{},"startTime":1764105534283,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":472889195775,"id":1926,"parentId":1920,"tags":{},"startTime":1764105534283,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":1336,"timestamp":472889194641,"id":1922,"parentId":1920,"tags":{},"startTime":1764105534282,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":207,"timestamp":472889196399,"id":1927,"parentId":1920,"tags":{},"startTime":1764105534283,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":2445,"timestamp":472889196609,"id":1928,"parentId":1920,"tags":{},"startTime":1764105534284,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":666,"timestamp":472889199586,"id":1929,"parentId":1920,"tags":{},"startTime":1764105534286,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":58,"timestamp":472889200249,"id":1930,"parentId":1920,"tags":{},"startTime":1764105534287,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":33,"timestamp":472889200304,"id":1931,"parentId":1920,"tags":{},"startTime":1764105534287,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":700,"timestamp":472889200340,"id":1932,"parentId":1920,"tags":{},"startTime":1764105534287,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":159000,"timestamp":472889033442,"id":1933,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":false},"startTime":1764105534288,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":8909,"timestamp":472889193119,"id":1920,"parentId":1895,"tags":{},"startTime":1764105534280,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":30038,"timestamp":472889173344,"id":1895,"parentId":1858,"tags":{"name":"server"},"startTime":1764105534260,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":1206,"timestamp":472889203394,"id":1934,"parentId":1858,"tags":{},"startTime":1764105534290,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-server","duration":172942,"timestamp":472889032126,"id":1858,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764105534119,"traceId":"e274ac96b05c42d4"}] [{"name":"handle-request","duration":9133,"timestamp":472889208522,"id":1935,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764105534295,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472889217738,"id":1936,"parentId":1935,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"563183616","memory.heapUsed":"199423712","memory.heapTotal":"223248384"},"startTime":1764105534305,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6264,"timestamp":472891412043,"id":1942,"parentId":1940,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764105536499,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6280,"timestamp":472891412050,"id":1944,"parentId":1940,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764105536499,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6428,"timestamp":472891412047,"id":1943,"parentId":1940,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764105536499,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6721,"timestamp":472891411998,"id":1941,"parentId":1940,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764105536499,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1327,"timestamp":472891420800,"id":1959,"parentId":1958,"tags":{},"startTime":1764105536508,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1388,"timestamp":472891420744,"id":1958,"parentId":1957,"tags":{},"startTime":1764105536508,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":2726,"timestamp":472891420540,"id":1957,"parentId":1939,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx","layer":"ssr"},"startTime":1764105536507,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":14265,"timestamp":472891410891,"id":1940,"parentId":1939,"tags":{},"startTime":1764105536498,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":1153,"timestamp":472891426133,"id":1961,"parentId":1960,"tags":{},"startTime":1764105536513,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":472891427294,"id":1963,"parentId":1960,"tags":{},"startTime":1764105536514,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":1194,"timestamp":472891427302,"id":1964,"parentId":1960,"tags":{},"startTime":1764105536514,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":3,"timestamp":472891428504,"id":1965,"parentId":1960,"tags":{},"startTime":1764105536515,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":472891428514,"id":1966,"parentId":1960,"tags":{},"startTime":1764105536515,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":1353,"timestamp":472891427291,"id":1962,"parentId":1960,"tags":{},"startTime":1764105536514,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":169,"timestamp":472891430375,"id":1967,"parentId":1960,"tags":{},"startTime":1764105536517,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":508,"timestamp":472891430550,"id":1968,"parentId":1960,"tags":{},"startTime":1764105536517,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":740,"timestamp":472891431416,"id":1969,"parentId":1960,"tags":{},"startTime":1764105536518,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":35,"timestamp":472891432156,"id":1970,"parentId":1960,"tags":{},"startTime":1764105536519,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":18,"timestamp":472891432188,"id":1971,"parentId":1960,"tags":{},"startTime":1764105536519,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":429,"timestamp":472891432208,"id":1972,"parentId":1960,"tags":{},"startTime":1764105536519,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":7449,"timestamp":472891425937,"id":1960,"parentId":1939,"tags":{},"startTime":1764105536513,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":24014,"timestamp":472891410686,"id":1939,"parentId":1937,"tags":{"name":"server"},"startTime":1764105536498,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":1214,"timestamp":472891434710,"id":1973,"parentId":1937,"tags":{},"startTime":1764105536522,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-server","duration":32927,"timestamp":472891403157,"id":1937,"parentId":3,"tags":{"trigger":"components/CategoryColumn.tsx"},"startTime":1764105536490,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":1971,"timestamp":472891439695,"id":1983,"parentId":1975,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536527,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":2435,"timestamp":472891439658,"id":1976,"parentId":1975,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764105536527,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":2669,"timestamp":472891439693,"id":1982,"parentId":1975,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536527,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":2180,"timestamp":472891441953,"id":1987,"parentId":1986,"tags":{},"startTime":1764105536529,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":2243,"timestamp":472891441894,"id":1986,"parentId":1985,"tags":{},"startTime":1764105536529,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":3598,"timestamp":472891441816,"id":1985,"parentId":1974,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx","layer":"app-pages-browser"},"startTime":1764105536529,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6456,"timestamp":472891439686,"id":1978,"parentId":1975,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js%22%2C%22ids%22%3A%5B%22*%22%5D%7D&server=false!"},"startTime":1764105536527,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6628,"timestamp":472891439690,"id":1980,"parentId":1975,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536527,"traceId":"e274ac96b05c42d4"},{"name":"read-resource","duration":3832,"timestamp":472891442850,"id":1989,"parentId":1988,"tags":{},"startTime":1764105536530,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":8290,"timestamp":472891439683,"id":1977,"parentId":1975,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764105536527,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":8319,"timestamp":472891439692,"id":1981,"parentId":1975,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536527,"traceId":"e274ac96b05c42d4"},{"name":"postcss-process","duration":9099,"timestamp":472891446715,"id":1991,"parentId":1990,"tags":{},"startTime":1764105536534,"traceId":"e274ac96b05c42d4"},{"name":"postcss-loader","duration":9254,"timestamp":472891446699,"id":1990,"parentId":1988,"tags":{},"startTime":1764105536534,"traceId":"e274ac96b05c42d4"},{"name":"css-loader","duration":2807,"timestamp":472891455977,"id":1992,"parentId":1988,"tags":{"astUsed":"true"},"startTime":1764105536543,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":17826,"timestamp":472891442806,"id":1988,"parentId":1984,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764105536530,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":21578,"timestamp":472891440946,"id":1984,"parentId":1974,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764105536528,"traceId":"e274ac96b05c42d4"},{"name":"build-module","duration":15,"timestamp":472891462606,"id":1993,"parentId":1984,"tags":{},"startTime":1764105536550,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":22946,"timestamp":472891439688,"id":1979,"parentId":1975,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536527,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":25751,"timestamp":472891436896,"id":1975,"parentId":1974,"tags":{},"startTime":1764105536524,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":1152,"timestamp":472891463645,"id":1995,"parentId":1994,"tags":{},"startTime":1764105536551,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":472891464823,"id":1997,"parentId":1994,"tags":{},"startTime":1764105536552,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":43,"timestamp":472891464840,"id":1998,"parentId":1994,"tags":{},"startTime":1764105536552,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":5,"timestamp":472891464907,"id":1999,"parentId":1994,"tags":{},"startTime":1764105536552,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":472891464926,"id":2000,"parentId":1994,"tags":{},"startTime":1764105536552,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":406,"timestamp":472891464811,"id":1996,"parentId":1994,"tags":{},"startTime":1764105536552,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":360,"timestamp":472891465878,"id":2001,"parentId":1994,"tags":{},"startTime":1764105536553,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":1012,"timestamp":472891466247,"id":2002,"parentId":1994,"tags":{},"startTime":1764105536553,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":1619,"timestamp":472891467953,"id":2003,"parentId":1994,"tags":{},"startTime":1764105536555,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":94,"timestamp":472891469571,"id":2004,"parentId":1994,"tags":{},"startTime":1764105536556,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":29,"timestamp":472891469661,"id":2005,"parentId":1994,"tags":{},"startTime":1764105536557,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1902,"timestamp":472891469692,"id":2006,"parentId":1994,"tags":{},"startTime":1764105536557,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":39,"timestamp":472891472163,"id":2008,"parentId":1974,"tags":{},"startTime":1764105536559,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-createassets","duration":80,"timestamp":472891472126,"id":2007,"parentId":1974,"tags":{},"startTime":1764105536559,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":9768,"timestamp":472891463338,"id":1994,"parentId":1974,"tags":{},"startTime":1764105536550,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":36392,"timestamp":472891436733,"id":1974,"parentId":1938,"tags":{"name":"client"},"startTime":1764105536524,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":6585,"timestamp":472891473137,"id":2009,"parentId":1938,"tags":{},"startTime":1764105536560,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-client","duration":77115,"timestamp":472891403233,"id":1938,"parentId":3,"tags":{"trigger":"components/CategoryColumn.tsx"},"startTime":1764105536490,"traceId":"e274ac96b05c42d4"}] [{"name":"client-success","duration":2,"timestamp":472891481391,"id":2011,"parentId":3,"tags":{},"startTime":1764105536568,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":10387,"timestamp":472891482522,"id":2012,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764105536569,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472891492928,"id":2023,"parentId":2012,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"576634880","memory.heapUsed":"199422616","memory.heapTotal":"237355008"},"startTime":1764105536580,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4192,"timestamp":472891490500,"id":2022,"parentId":2014,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4489,"timestamp":472891490453,"id":2015,"parentId":2014,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4759,"timestamp":472891490498,"id":2021,"parentId":2014,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":5192,"timestamp":472891490496,"id":2020,"parentId":2014,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":5890,"timestamp":472891490491,"id":2017,"parentId":2014,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js%22%2C%22ids%22%3A%5B%22*%22%5D%7D&server=false!"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":5969,"timestamp":472891490494,"id":2019,"parentId":2014,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"read-resource","duration":669,"timestamp":472891495819,"id":2026,"parentId":2025,"tags":{},"startTime":1764105536583,"traceId":"e274ac96b05c42d4"},{"name":"postcss-process","duration":6618,"timestamp":472891496531,"id":2028,"parentId":2027,"tags":{},"startTime":1764105536583,"traceId":"e274ac96b05c42d4"},{"name":"postcss-loader","duration":6706,"timestamp":472891496511,"id":2027,"parentId":2025,"tags":{},"startTime":1764105536583,"traceId":"e274ac96b05c42d4"},{"name":"css-loader","duration":1875,"timestamp":472891503229,"id":2029,"parentId":2025,"tags":{"astUsed":"true"},"startTime":1764105536590,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":9864,"timestamp":472891495772,"id":2025,"parentId":2024,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764105536583,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":19000,"timestamp":472891481460,"id":2030,"parentId":3,"tags":{"updatedModules":["[project]/components/CategoryColumn.tsx"],"page":"/gunbuilder","isPageHidden":false},"startTime":1764105536593,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":16091,"timestamp":472891490487,"id":2016,"parentId":2014,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":14169,"timestamp":472891494022,"id":2024,"parentId":2013,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764105536581,"traceId":"e274ac96b05c42d4"},{"name":"build-module","duration":13,"timestamp":472891508404,"id":2031,"parentId":2024,"tags":{},"startTime":1764105536595,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":18067,"timestamp":472891490493,"id":2018,"parentId":2014,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":18266,"timestamp":472891490306,"id":2014,"parentId":2013,"tags":{},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":778,"timestamp":472891509567,"id":2033,"parentId":2032,"tags":{},"startTime":1764105536596,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":5,"timestamp":472891510373,"id":2035,"parentId":2032,"tags":{},"startTime":1764105536597,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":30,"timestamp":472891510385,"id":2036,"parentId":2032,"tags":{},"startTime":1764105536597,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":4,"timestamp":472891510420,"id":2037,"parentId":2032,"tags":{},"startTime":1764105536597,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":472891510431,"id":2038,"parentId":2032,"tags":{},"startTime":1764105536597,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":240,"timestamp":472891510370,"id":2034,"parentId":2032,"tags":{},"startTime":1764105536597,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":154,"timestamp":472891511069,"id":2039,"parentId":2032,"tags":{},"startTime":1764105536598,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":493,"timestamp":472891511227,"id":2040,"parentId":2032,"tags":{},"startTime":1764105536598,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":1516,"timestamp":472891512321,"id":2041,"parentId":2032,"tags":{},"startTime":1764105536599,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":64,"timestamp":472891513836,"id":2042,"parentId":2032,"tags":{},"startTime":1764105536601,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":39,"timestamp":472891513897,"id":2043,"parentId":2032,"tags":{},"startTime":1764105536601,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1165,"timestamp":472891513938,"id":2044,"parentId":2032,"tags":{},"startTime":1764105536601,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":28,"timestamp":472891515420,"id":2046,"parentId":2013,"tags":{},"startTime":1764105536602,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-createassets","duration":54,"timestamp":472891515397,"id":2045,"parentId":2013,"tags":{},"startTime":1764105536602,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":6823,"timestamp":472891509207,"id":2032,"parentId":2013,"tags":{},"startTime":1764105536596,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":25925,"timestamp":472891490116,"id":2013,"parentId":2010,"tags":{"name":"client"},"startTime":1764105536577,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":2374,"timestamp":472891516054,"id":2047,"parentId":2010,"tags":{},"startTime":1764105536603,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-client","duration":38215,"timestamp":472891481000,"id":2010,"parentId":3,"tags":{"trigger":"components"},"startTime":1764105536568,"traceId":"e274ac96b05c42d4"}] +[{"name":"client-success","duration":2,"timestamp":472891519851,"id":2048,"parentId":3,"tags":{},"startTime":1764105536607,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":4189,"timestamp":472891522165,"id":2049,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764105536609,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472891526366,"id":2050,"parentId":2049,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"586776576","memory.heapUsed":"221626192","memory.heapTotal":"247578624"},"startTime":1764105536613,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":47000,"timestamp":472891481518,"id":2051,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764105536615,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":29071,"timestamp":472893357790,"id":2052,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764105538445,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472893386887,"id":2053,"parentId":2052,"tags":{"url":"/gunbuilder","memory.rss":"587792384","memory.heapUsed":"200686536","memory.heapTotal":"248528896"},"startTime":1764105538474,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":2,"timestamp":472893590004,"id":2054,"parentId":3,"tags":{},"startTime":1764105538677,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":16629,"timestamp":472895893236,"id":2055,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764105540980,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472895909905,"id":2056,"parentId":2055,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"588447744","memory.heapUsed":"203384592","memory.heapTotal":"248725504"},"startTime":1764105540997,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5915,"timestamp":472895918327,"id":2057,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","isTurbopack":false},"startTime":1764105541005,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472895924262,"id":2058,"parentId":2057,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","memory.rss":"588464128","memory.heapUsed":"204271640","memory.heapTotal":"248725504"},"startTime":1764105541011,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":7215,"timestamp":472896917057,"id":2059,"tags":{"url":"/gunbuilder?select=barrel%3Abarrel-ba-13-9&_rsc=2t5kv","isTurbopack":false},"startTime":1764105542004,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472896924340,"id":2060,"parentId":2059,"tags":{"url":"/gunbuilder?select=barrel%3Abarrel-ba-13-9&_rsc=2t5kv","memory.rss":"588890112","memory.heapUsed":"204967328","memory.heapTotal":"248725504"},"startTime":1764105542011,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":7125,"timestamp":472896927433,"id":2061,"tags":{"url":"/gunbuilder?select=barrel%3Abarrel-ba-13-9&_rsc=bpw29","isTurbopack":false},"startTime":1764105542014,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472896934586,"id":2062,"parentId":2061,"tags":{"url":"/gunbuilder?select=barrel%3Abarrel-ba-13-9&_rsc=bpw29","memory.rss":"588955648","memory.heapUsed":"205622712","memory.heapTotal":"248725504"},"startTime":1764105542021,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":12869,"timestamp":472902838133,"id":2063,"tags":{"url":"/gunbuilder/handguard?_rsc=10u94","isTurbopack":false},"startTime":1764105547925,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472902851038,"id":2064,"parentId":2063,"tags":{"url":"/gunbuilder/handguard?_rsc=10u94","memory.rss":"527908864","memory.heapUsed":"179986640","memory.heapTotal":"187187200"},"startTime":1764105547938,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5805,"timestamp":472902855569,"id":2065,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","isTurbopack":false},"startTime":1764105547942,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472902861391,"id":2066,"parentId":2065,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","memory.rss":"528613376","memory.heapUsed":"180126048","memory.heapTotal":"187973632"},"startTime":1764105547948,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":10910,"timestamp":472904350973,"id":2067,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-centurion-c4&_rsc=1wjnh","isTurbopack":false},"startTime":1764105549438,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":2,"timestamp":472904361953,"id":2068,"parentId":2067,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-centurion-c4&_rsc=1wjnh","memory.rss":"528613376","memory.heapUsed":"180758976","memory.heapTotal":"187973632"},"startTime":1764105549449,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":8124,"timestamp":472904365390,"id":2069,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-centurion-c4&_rsc=de779","isTurbopack":false},"startTime":1764105549452,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472904373545,"id":2070,"parentId":2069,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-centurion-c4&_rsc=de779","memory.rss":"528629760","memory.heapUsed":"180623704","memory.heapTotal":"186925056"},"startTime":1764105549460,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":13125,"timestamp":472908252323,"id":2071,"tags":{"url":"/gunbuilder/handguard/hg-geissele-mk8?_rsc=1wjnh","isTurbopack":false},"startTime":1764105553339,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472908265490,"id":2072,"parentId":2071,"tags":{"url":"/gunbuilder/handguard/hg-geissele-mk8?_rsc=1wjnh","memory.rss":"480149504","memory.heapUsed":"181189016","memory.heapTotal":"186859520"},"startTime":1764105553352,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5062,"timestamp":472908269206,"id":2073,"tags":{"url":"/gunbuilder/handguard/hg-geissele-mk8?_rsc=14gmu","isTurbopack":false},"startTime":1764105553356,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":472908274287,"id":2074,"parentId":2073,"tags":{"url":"/gunbuilder/handguard/hg-geissele-mk8?_rsc=14gmu","memory.rss":"480083968","memory.heapUsed":"180452664","memory.heapTotal":"187973632"},"startTime":1764105553361,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":8225,"timestamp":472909426895,"id":2075,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-geissele-mk8&_rsc=1ivld","isTurbopack":false},"startTime":1764105554514,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":2,"timestamp":472909435186,"id":2076,"parentId":2075,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-geissele-mk8&_rsc=1ivld","memory.rss":"480116736","memory.heapUsed":"180520128","memory.heapTotal":"186925056"},"startTime":1764105554522,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":6673,"timestamp":472909437843,"id":2077,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-geissele-mk8&_rsc=5xggt","isTurbopack":false},"startTime":1764105554525,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472909444546,"id":2078,"parentId":2077,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-geissele-mk8&_rsc=5xggt","memory.rss":"480116736","memory.heapUsed":"181179128","memory.heapTotal":"186925056"},"startTime":1764105554531,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":10233,"timestamp":472915678422,"id":2079,"tags":{"url":"/gunbuilder/stock?_rsc=wvdsh","isTurbopack":false},"startTime":1764105560765,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472915688694,"id":2080,"parentId":2079,"tags":{"url":"/gunbuilder/stock?_rsc=wvdsh","memory.rss":"480165888","memory.heapUsed":"181314968","memory.heapTotal":"186662912"},"startTime":1764105560776,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5468,"timestamp":472915693041,"id":2081,"tags":{"url":"/gunbuilder/stock?_rsc=iik8j","isTurbopack":false},"startTime":1764105560780,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472915698533,"id":2082,"parentId":2081,"tags":{"url":"/gunbuilder/stock?_rsc=iik8j","memory.rss":"480182272","memory.heapUsed":"181401264","memory.heapTotal":"187973632"},"startTime":1764105560785,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":9850,"timestamp":472917044405,"id":2083,"tags":{"url":"/gunbuilder?select=stock%3Astock-b5-bravo&_rsc=g9x6a","isTurbopack":false},"startTime":1764105562131,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":472917054317,"id":2084,"parentId":2083,"tags":{"url":"/gunbuilder?select=stock%3Astock-b5-bravo&_rsc=g9x6a","memory.rss":"480198656","memory.heapUsed":"181321840","memory.heapTotal":"187187200"},"startTime":1764105562141,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":8341,"timestamp":472917057565,"id":2085,"tags":{"url":"/gunbuilder?select=stock%3Astock-b5-bravo&_rsc=16qd3","isTurbopack":false},"startTime":1764105562144,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":2,"timestamp":472917065941,"id":2086,"parentId":2085,"tags":{"url":"/gunbuilder?select=stock%3Astock-b5-bravo&_rsc=16qd3","memory.rss":"480215040","memory.heapUsed":"181197312","memory.heapTotal":"187711488"},"startTime":1764105562153,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":28328,"timestamp":473971405925,"id":2087,"tags":{"url":"/gunbuilder?select=stock:stock-b5-bravo","isTurbopack":false},"startTime":1764106616493,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":473971434294,"id":2088,"parentId":2087,"tags":{"url":"/gunbuilder?select=stock:stock-b5-bravo","memory.rss":"525942784","memory.heapUsed":"193917656","memory.heapTotal":"206520320"},"startTime":1764106616522,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":3,"timestamp":473971631416,"id":2089,"parentId":3,"tags":{},"startTime":1764106616719,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":9246,"timestamp":473973449525,"id":2090,"tags":{"url":"/gunbuilder/stock?_rsc=iik8j","isTurbopack":false},"startTime":1764106618537,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":473973458800,"id":2091,"parentId":2090,"tags":{"url":"/gunbuilder/stock?_rsc=iik8j","memory.rss":"531005440","memory.heapUsed":"196230024","memory.heapTotal":"207831040"},"startTime":1764106618546,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":8944,"timestamp":473974795476,"id":2092,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-geissele-mk8&_rsc=5xggt","isTurbopack":false},"startTime":1764106619883,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":473974804452,"id":2093,"parentId":2092,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-geissele-mk8&_rsc=5xggt","memory.rss":"532316160","memory.heapUsed":"197007640","memory.heapTotal":"208355328"},"startTime":1764106619892,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":17785,"timestamp":473977162459,"id":2094,"tags":{"url":"/","isTurbopack":false},"startTime":1764106622250,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":473977180302,"id":2095,"parentId":2094,"tags":{"url":"/","memory.rss":"533626880","memory.heapUsed":"198705760","memory.heapTotal":"209666048"},"startTime":1764106622268,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":3,"timestamp":473977377351,"id":2096,"parentId":3,"tags":{},"startTime":1764106622465,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":12347,"timestamp":473979818970,"id":2097,"tags":{"url":"/gunbuilder?_rsc=1wtp7","isTurbopack":false},"startTime":1764106624906,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":473979831359,"id":2098,"parentId":2097,"tags":{"url":"/gunbuilder?_rsc=1wtp7","memory.rss":"542457856","memory.heapUsed":"200164048","memory.heapTotal":"211501056"},"startTime":1764106624919,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":6740,"timestamp":473979838860,"id":2099,"tags":{"url":"/gunbuilder?_rsc=52fbb","isTurbopack":false},"startTime":1764106624926,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":473979845634,"id":2100,"parentId":2099,"tags":{"url":"/gunbuilder?_rsc=52fbb","memory.rss":"543080448","memory.heapUsed":"188015976","memory.heapTotal":"194985984"},"startTime":1764106624933,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":13694,"timestamp":474128301457,"id":2101,"tags":{"url":"/","isTurbopack":false},"startTime":1764106773389,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474128315182,"id":2102,"parentId":2101,"tags":{"url":"/","memory.rss":"543129600","memory.heapUsed":"189151552","memory.heapTotal":"196296704"},"startTime":1764106773402,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":2,"timestamp":474128512681,"id":2103,"parentId":3,"tags":{},"startTime":1764106773600,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":2,"timestamp":474128515767,"id":2104,"parentId":3,"tags":{},"startTime":1764106773603,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":4743,"timestamp":474129690170,"id":2105,"tags":{"url":"/gunbuilder?_rsc=1wtp7","isTurbopack":false},"startTime":1764106774777,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474129694953,"id":2106,"parentId":2105,"tags":{"url":"/gunbuilder?_rsc=1wtp7","memory.rss":"543588352","memory.heapUsed":"188218384","memory.heapTotal":"194461696"},"startTime":1764106774782,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5387,"timestamp":474129699296,"id":2107,"tags":{"url":"/gunbuilder?_rsc=52fbb","isTurbopack":false},"startTime":1764106774786,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474129704708,"id":2108,"parentId":2107,"tags":{"url":"/gunbuilder?_rsc=52fbb","memory.rss":"543588352","memory.heapUsed":"188857952","memory.heapTotal":"194461696"},"startTime":1764106774792,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":8880,"timestamp":474143030985,"id":2109,"tags":{"url":"/gunbuilder/upper?_rsc=1acsq","isTurbopack":false},"startTime":1764106788118,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474143039899,"id":2110,"parentId":2109,"tags":{"url":"/gunbuilder/upper?_rsc=1acsq","memory.rss":"543588352","memory.heapUsed":"188336328","memory.heapTotal":"194461696"},"startTime":1764106788127,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":3808,"timestamp":474143043618,"id":2111,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","isTurbopack":false},"startTime":1764106788131,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474143047448,"id":2112,"parentId":2111,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","memory.rss":"543588352","memory.heapUsed":"188358624","memory.heapTotal":"194723840"},"startTime":1764106788135,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":7717,"timestamp":474143945203,"id":2113,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=1d33p","isTurbopack":false},"startTime":1764106789032,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474143952961,"id":2114,"parentId":2113,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=1d33p","memory.rss":"543588352","memory.heapUsed":"189078128","memory.heapTotal":"195510272"},"startTime":1764106789040,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":6076,"timestamp":474143956451,"id":2115,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=nxvwl","isTurbopack":false},"startTime":1764106789044,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474143962555,"id":2116,"parentId":2115,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=nxvwl","memory.rss":"543588352","memory.heapUsed":"188956064","memory.heapTotal":"194461696"},"startTime":1764106789050,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6577,"timestamp":474194067868,"id":2128,"parentId":2120,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":7205,"timestamp":474194067808,"id":2121,"parentId":2120,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":7741,"timestamp":474194067866,"id":2127,"parentId":2120,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1870,"timestamp":474194074847,"id":2132,"parentId":2131,"tags":{},"startTime":1764106839162,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1950,"timestamp":474194074769,"id":2131,"parentId":2130,"tags":{},"startTime":1764106839162,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":5195,"timestamp":474194074666,"id":2130,"parentId":2119,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx","layer":"app-pages-browser"},"startTime":1764106839162,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":12903,"timestamp":474194067857,"id":2123,"parentId":2120,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js%22%2C%22ids%22%3A%5B%22*%22%5D%7D&server=false!"},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":14117,"timestamp":474194067862,"id":2125,"parentId":2120,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":14169,"timestamp":474194067864,"id":2126,"parentId":2120,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"read-resource","duration":5386,"timestamp":474194076655,"id":2134,"parentId":2133,"tags":{},"startTime":1764106839164,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":18691,"timestamp":474194067853,"id":2122,"parentId":2120,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"postcss-process","duration":14442,"timestamp":474194082123,"id":2136,"parentId":2135,"tags":{},"startTime":1764106839169,"traceId":"e274ac96b05c42d4"},{"name":"postcss-loader","duration":14835,"timestamp":474194082061,"id":2135,"parentId":2133,"tags":{},"startTime":1764106839169,"traceId":"e274ac96b05c42d4"},{"name":"css-loader","duration":3135,"timestamp":474194096939,"id":2137,"parentId":2133,"tags":{"astUsed":"true"},"startTime":1764106839184,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":24647,"timestamp":474194076569,"id":2133,"parentId":2129,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764106839164,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":31852,"timestamp":474194072222,"id":2129,"parentId":2119,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764106839159,"traceId":"e274ac96b05c42d4"},{"name":"build-module","duration":39,"timestamp":474194104206,"id":2138,"parentId":2129,"tags":{},"startTime":1764106839191,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":36406,"timestamp":474194067860,"id":2124,"parentId":2120,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":36783,"timestamp":474194067494,"id":2120,"parentId":2119,"tags":{},"startTime":1764106839155,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":14195,"timestamp":474194111361,"id":2140,"parentId":2139,"tags":{},"startTime":1764106839198,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":3,"timestamp":474194125575,"id":2142,"parentId":2139,"tags":{},"startTime":1764106839213,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":49,"timestamp":474194125617,"id":2143,"parentId":2139,"tags":{},"startTime":1764106839213,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":4,"timestamp":474194125694,"id":2144,"parentId":2139,"tags":{},"startTime":1764106839213,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":474194125718,"id":2145,"parentId":2139,"tags":{},"startTime":1764106839213,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":406,"timestamp":474194125567,"id":2141,"parentId":2139,"tags":{},"startTime":1764106839213,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":227,"timestamp":474194126366,"id":2146,"parentId":2139,"tags":{},"startTime":1764106839213,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":534,"timestamp":474194126597,"id":2147,"parentId":2139,"tags":{},"startTime":1764106839214,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":1425,"timestamp":474194127819,"id":2148,"parentId":2139,"tags":{},"startTime":1764106839215,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":57,"timestamp":474194129244,"id":2149,"parentId":2139,"tags":{},"startTime":1764106839216,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":25,"timestamp":474194129297,"id":2150,"parentId":2139,"tags":{},"startTime":1764106839216,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1449,"timestamp":474194129324,"id":2151,"parentId":2139,"tags":{},"startTime":1764106839216,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":53,"timestamp":474194131304,"id":2153,"parentId":2119,"tags":{},"startTime":1764106839218,"traceId":"e274ac96b05c42d4"}] +[{"name":"NextJsBuildManifest-createassets","duration":213,"timestamp":474194131279,"id":2152,"parentId":2119,"tags":{},"startTime":1764106839218,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":21126,"timestamp":474194111042,"id":2139,"parentId":2119,"tags":{},"startTime":1764106839198,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":65257,"timestamp":474194066923,"id":2119,"parentId":2117,"tags":{"name":"client"},"startTime":1764106839154,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":2777,"timestamp":474194132190,"id":2154,"parentId":2117,"tags":{},"startTime":1764106839219,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-client","duration":75360,"timestamp":474194060059,"id":2117,"parentId":3,"tags":{"trigger":"components/CategoryColumn.tsx"},"startTime":1764106839147,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":0,"timestamp":474194136933,"id":2157,"parentId":3,"tags":{},"startTime":1764106839224,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":0,"timestamp":474194136957,"id":2158,"parentId":3,"tags":{},"startTime":1764106839224,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":5084,"timestamp":474194138041,"id":2160,"parentId":2156,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106839225,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":82000,"timestamp":474194061410,"id":2161,"parentId":3,"tags":{"updatedModules":["[project]/components/CategoryColumn.tsx"],"page":"/gunbuilder","isPageHidden":false},"startTime":1764106839231,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":6618,"timestamp":474194138004,"id":2159,"parentId":2156,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106839225,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1172,"timestamp":474194146183,"id":2170,"parentId":2169,"tags":{},"startTime":1764106839233,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1243,"timestamp":474194146119,"id":2169,"parentId":2168,"tags":{},"startTime":1764106839233,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":3269,"timestamp":474194145931,"id":2168,"parentId":2155,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx","layer":"ssr"},"startTime":1764106839233,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":14810,"timestamp":474194136423,"id":2156,"parentId":2155,"tags":{},"startTime":1764106839223,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":814,"timestamp":474194157611,"id":2172,"parentId":2171,"tags":{},"startTime":1764106839245,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":474194158439,"id":2174,"parentId":2171,"tags":{},"startTime":1764106839245,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":879,"timestamp":474194158505,"id":2175,"parentId":2171,"tags":{},"startTime":1764106839246,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":4,"timestamp":474194159405,"id":2176,"parentId":2171,"tags":{},"startTime":1764106839246,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":474194159419,"id":2177,"parentId":2171,"tags":{},"startTime":1764106839246,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":1226,"timestamp":474194158434,"id":2173,"parentId":2171,"tags":{},"startTime":1764106839245,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":229,"timestamp":474194160217,"id":2178,"parentId":2171,"tags":{},"startTime":1764106839247,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":655,"timestamp":474194160453,"id":2179,"parentId":2171,"tags":{},"startTime":1764106839247,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":919,"timestamp":474194161756,"id":2180,"parentId":2171,"tags":{},"startTime":1764106839249,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":86,"timestamp":474194162674,"id":2181,"parentId":2171,"tags":{},"startTime":1764106839250,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":40,"timestamp":474194162749,"id":2182,"parentId":2171,"tags":{},"startTime":1764106839250,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":2106,"timestamp":474194162793,"id":2183,"parentId":2171,"tags":{},"startTime":1764106839250,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":93000,"timestamp":474194061465,"id":2184,"parentId":3,"tags":{"updatedModules":["[project]/components/CategoryColumn.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764106839253,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":8736,"timestamp":474194157301,"id":2171,"parentId":2155,"tags":{},"startTime":1764106839244,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":30662,"timestamp":474194136280,"id":2155,"parentId":2118,"tags":{"name":"server"},"startTime":1764106839223,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":2038,"timestamp":474194166974,"id":2185,"parentId":2118,"tags":{},"startTime":1764106839254,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-server","duration":109370,"timestamp":474194060234,"id":2118,"parentId":3,"tags":{"trigger":"components/CategoryColumn.tsx"},"startTime":1764106839147,"traceId":"e274ac96b05c42d4"}] +[{"name":"handle-request","duration":22676,"timestamp":474194178702,"id":2186,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=13jbp","isTurbopack":false},"startTime":1764106839266,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474194201402,"id":2188,"parentId":2186,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=13jbp","memory.rss":"561610752","memory.heapUsed":"191643768","memory.heapTotal":"213794816"},"startTime":1764106839288,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":22626,"timestamp":474194178913,"id":2187,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764106839266,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474194201548,"id":2189,"parentId":2187,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"561610752","memory.heapUsed":"191661200","memory.heapTotal":"213794816"},"startTime":1764106839289,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":3580,"timestamp":474202394466,"id":2201,"parentId":2193,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4175,"timestamp":474202394393,"id":2194,"parentId":2193,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4471,"timestamp":474202394464,"id":2200,"parentId":2193,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1635,"timestamp":474202398444,"id":2205,"parentId":2204,"tags":{},"startTime":1764106847485,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1732,"timestamp":474202398350,"id":2204,"parentId":2203,"tags":{},"startTime":1764106847485,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":4120,"timestamp":474202398249,"id":2203,"parentId":2192,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx","layer":"app-pages-browser"},"startTime":1764106847485,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":8378,"timestamp":474202394454,"id":2196,"parentId":2193,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js%22%2C%22ids%22%3A%5B%22*%22%5D%7D&server=false!"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":8542,"timestamp":474202394459,"id":2198,"parentId":2193,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"read-resource","duration":3864,"timestamp":474202399603,"id":2207,"parentId":2206,"tags":{},"startTime":1764106847487,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":11435,"timestamp":474202394462,"id":2199,"parentId":2193,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":11608,"timestamp":474202394448,"id":2195,"parentId":2193,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"postcss-process","duration":10114,"timestamp":474202403501,"id":2209,"parentId":2208,"tags":{},"startTime":1764106847491,"traceId":"e274ac96b05c42d4"},{"name":"postcss-loader","duration":10365,"timestamp":474202403483,"id":2208,"parentId":2206,"tags":{},"startTime":1764106847491,"traceId":"e274ac96b05c42d4"},{"name":"css-loader","duration":2352,"timestamp":474202413865,"id":2210,"parentId":2206,"tags":{"astUsed":"true"},"startTime":1764106847501,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":17236,"timestamp":474202399527,"id":2206,"parentId":2202,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764106847487,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":22360,"timestamp":474202397229,"id":2202,"parentId":2192,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764106847484,"traceId":"e274ac96b05c42d4"},{"name":"build-module","duration":12,"timestamp":474202419677,"id":2211,"parentId":2202,"tags":{},"startTime":1764106847507,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":25252,"timestamp":474202394457,"id":2197,"parentId":2193,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":25541,"timestamp":474202394176,"id":2193,"parentId":2192,"tags":{},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":667,"timestamp":474202420553,"id":2213,"parentId":2212,"tags":{},"startTime":1764106847508,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":474202421227,"id":2215,"parentId":2212,"tags":{},"startTime":1764106847508,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":18,"timestamp":474202421235,"id":2216,"parentId":2212,"tags":{},"startTime":1764106847508,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":3,"timestamp":474202421259,"id":2217,"parentId":2212,"tags":{},"startTime":1764106847508,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":474202421268,"id":2218,"parentId":2212,"tags":{},"startTime":1764106847508,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":297,"timestamp":474202421225,"id":2214,"parentId":2212,"tags":{},"startTime":1764106847508,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":170,"timestamp":474202421866,"id":2219,"parentId":2212,"tags":{},"startTime":1764106847509,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":412,"timestamp":474202422041,"id":2220,"parentId":2212,"tags":{},"startTime":1764106847509,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":1282,"timestamp":474202422843,"id":2221,"parentId":2212,"tags":{},"startTime":1764106847510,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":54,"timestamp":474202424125,"id":2222,"parentId":2212,"tags":{},"startTime":1764106847511,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":22,"timestamp":474202424176,"id":2223,"parentId":2212,"tags":{},"startTime":1764106847511,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1056,"timestamp":474202424200,"id":2224,"parentId":2212,"tags":{},"startTime":1764106847511,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":28,"timestamp":474202425630,"id":2226,"parentId":2192,"tags":{},"startTime":1764106847513,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-createassets","duration":71,"timestamp":474202425590,"id":2225,"parentId":2192,"tags":{},"startTime":1764106847513,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":6036,"timestamp":474202420326,"id":2212,"parentId":2192,"tags":{},"startTime":1764106847507,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":32435,"timestamp":474202393942,"id":2192,"parentId":2190,"tags":{"name":"client"},"startTime":1764106847481,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":1911,"timestamp":474202426387,"id":2227,"parentId":2190,"tags":{},"startTime":1764106847513,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-client","duration":41814,"timestamp":474202386831,"id":2190,"parentId":3,"tags":{"trigger":"components/CategoryColumn.tsx"},"startTime":1764106847474,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":1,"timestamp":474202431691,"id":2230,"parentId":3,"tags":{},"startTime":1764106847519,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":0,"timestamp":474202431722,"id":2231,"parentId":3,"tags":{},"startTime":1764106847519,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":49000,"timestamp":474202387020,"id":2234,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764106847523,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":5091,"timestamp":474202432850,"id":2233,"parentId":2229,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106847520,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":5509,"timestamp":474202432824,"id":2232,"parentId":2229,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106847520,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":52000,"timestamp":474202386779,"id":2244,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764106847527,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1173,"timestamp":474202439695,"id":2243,"parentId":2242,"tags":{},"startTime":1764106847527,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1231,"timestamp":474202439639,"id":2242,"parentId":2241,"tags":{},"startTime":1764106847527,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":2792,"timestamp":474202439481,"id":2241,"parentId":2228,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/components/CategoryColumn.tsx","layer":"ssr"},"startTime":1764106847527,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":14168,"timestamp":474202429865,"id":2229,"parentId":2228,"tags":{},"startTime":1764106847517,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":650,"timestamp":474202444794,"id":2246,"parentId":2245,"tags":{},"startTime":1764106847532,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":1,"timestamp":474202445451,"id":2248,"parentId":2245,"tags":{},"startTime":1764106847532,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":598,"timestamp":474202445459,"id":2249,"parentId":2245,"tags":{},"startTime":1764106847532,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":2,"timestamp":474202446063,"id":2250,"parentId":2245,"tags":{},"startTime":1764106847533,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":474202446071,"id":2251,"parentId":2245,"tags":{},"startTime":1764106847533,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":760,"timestamp":474202445448,"id":2247,"parentId":2245,"tags":{},"startTime":1764106847532,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":129,"timestamp":474202446588,"id":2252,"parentId":2245,"tags":{},"startTime":1764106847534,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":281,"timestamp":474202446721,"id":2253,"parentId":2245,"tags":{},"startTime":1764106847534,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":552,"timestamp":474202447265,"id":2254,"parentId":2245,"tags":{},"startTime":1764106847534,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":22,"timestamp":474202447818,"id":2255,"parentId":2245,"tags":{},"startTime":1764106847535,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":17,"timestamp":474202447838,"id":2256,"parentId":2245,"tags":{},"startTime":1764106847535,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":48,"timestamp":474202447857,"id":2257,"parentId":2245,"tags":{},"startTime":1764106847535,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":4772,"timestamp":474202444630,"id":2245,"parentId":2228,"tags":{},"startTime":1764106847532,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":20419,"timestamp":474202429685,"id":2228,"parentId":2191,"tags":{"name":"server"},"startTime":1764106847517,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":766,"timestamp":474202450118,"id":2258,"parentId":2191,"tags":{},"startTime":1764106847537,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-server","duration":64249,"timestamp":474202387070,"id":2191,"parentId":3,"tags":{"trigger":"components/CategoryColumn.tsx"},"startTime":1764106847474,"traceId":"e274ac96b05c42d4"}] +[{"name":"handle-request","duration":7618,"timestamp":474202453880,"id":2259,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=1jouf","isTurbopack":false},"startTime":1764106847541,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474202461522,"id":2261,"parentId":2259,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=1jouf","memory.rss":"567984128","memory.heapUsed":"203993072","memory.heapTotal":"231309312"},"startTime":1764106847549,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":8373,"timestamp":474202454063,"id":2260,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764106847541,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474202462451,"id":2262,"parentId":2260,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"567984128","memory.heapUsed":"204081000","memory.heapTotal":"231309312"},"startTime":1764106847549,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":9785,"timestamp":474210996553,"id":2263,"tags":{"url":"/gunbuilder/lower?_rsc=145qt","isTurbopack":false},"startTime":1764106856084,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474211006372,"id":2264,"parentId":2263,"tags":{"url":"/gunbuilder/lower?_rsc=145qt","memory.rss":"568459264","memory.heapUsed":"205643728","memory.heapTotal":"231768064"},"startTime":1764106856093,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5384,"timestamp":474211009503,"id":2265,"tags":{"url":"/gunbuilder/lower?_rsc=1o5jb","isTurbopack":false},"startTime":1764106856097,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474211014910,"id":2266,"parentId":2265,"tags":{"url":"/gunbuilder/lower?_rsc=1o5jb","memory.rss":"568459264","memory.heapUsed":"206469624","memory.heapTotal":"231768064"},"startTime":1764106856102,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":4442,"timestamp":474211672206,"id":2267,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=uiigs","isTurbopack":false},"startTime":1764106856759,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474211676686,"id":2268,"parentId":2267,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=uiigs","memory.rss":"568475648","memory.heapUsed":"207088744","memory.heapTotal":"231768064"},"startTime":1764106856764,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":4624,"timestamp":474211679429,"id":2269,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=1kfpz","isTurbopack":false},"startTime":1764106856766,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474211684074,"id":2270,"parentId":2269,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=1kfpz","memory.rss":"568508416","memory.heapUsed":"207732696","memory.heapTotal":"231768064"},"startTime":1764106856771,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5646,"timestamp":474261203330,"id":2271,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764106906290,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":2,"timestamp":474261209026,"id":2272,"parentId":2271,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"530071552","memory.heapUsed":"208567936","memory.heapTotal":"231768064"},"startTime":1764106906296,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4458,"timestamp":474276001741,"id":2278,"parentId":2276,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106921089,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1442,"timestamp":474276005770,"id":2281,"parentId":2280,"tags":{},"startTime":1764106921093,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1525,"timestamp":474276005689,"id":2280,"parentId":2279,"tags":{},"startTime":1764106921093,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":3211,"timestamp":474276005441,"id":2279,"parentId":2275,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764106921092,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":8306,"timestamp":474276001692,"id":2277,"parentId":2276,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106921089,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":2304,"timestamp":474276011184,"id":2290,"parentId":2289,"tags":{},"startTime":1764106921098,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":2370,"timestamp":474276011122,"id":2289,"parentId":2288,"tags":{},"startTime":1764106921098,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":6562,"timestamp":474276010998,"id":2288,"parentId":2275,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764106921098,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":47306,"timestamp":474276000575,"id":2276,"parentId":2275,"tags":{},"startTime":1764106921088,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":753,"timestamp":474276049209,"id":2292,"parentId":2291,"tags":{},"startTime":1764106921136,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":474276049972,"id":2294,"parentId":2291,"tags":{},"startTime":1764106921137,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":612,"timestamp":474276049983,"id":2295,"parentId":2291,"tags":{},"startTime":1764106921137,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":3,"timestamp":474276050606,"id":2296,"parentId":2291,"tags":{},"startTime":1764106921138,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":474276050618,"id":2297,"parentId":2291,"tags":{},"startTime":1764106921138,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":815,"timestamp":474276049969,"id":2293,"parentId":2291,"tags":{},"startTime":1764106921137,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":193,"timestamp":474276051155,"id":2298,"parentId":2291,"tags":{},"startTime":1764106921138,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":1244,"timestamp":474276051352,"id":2299,"parentId":2291,"tags":{},"startTime":1764106921138,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":862,"timestamp":474276053243,"id":2300,"parentId":2291,"tags":{},"startTime":1764106921140,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":58,"timestamp":474276054105,"id":2301,"parentId":2291,"tags":{},"startTime":1764106921141,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":42,"timestamp":474276054158,"id":2302,"parentId":2291,"tags":{},"startTime":1764106921141,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1295,"timestamp":474276054203,"id":2303,"parentId":2291,"tags":{},"startTime":1764106921141,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":7428,"timestamp":474276048949,"id":2291,"parentId":2275,"tags":{},"startTime":1764106921136,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":56990,"timestamp":474276000343,"id":2275,"parentId":2273,"tags":{"name":"server"},"startTime":1764106921087,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":1378,"timestamp":474276057356,"id":2304,"parentId":2273,"tags":{},"startTime":1764106921144,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-server","duration":65792,"timestamp":474275993167,"id":2273,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764106921080,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":3603,"timestamp":474276061800,"id":2314,"parentId":2306,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106921149,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":3923,"timestamp":474276061767,"id":2307,"parentId":2306,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764106921149,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4796,"timestamp":474276061799,"id":2313,"parentId":2306,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106921149,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":2626,"timestamp":474276064709,"id":2318,"parentId":2317,"tags":{},"startTime":1764106921152,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":2749,"timestamp":474276064587,"id":2317,"parentId":2316,"tags":{},"startTime":1764106921152,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":8365,"timestamp":474276064479,"id":2316,"parentId":2305,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764106921151,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":11492,"timestamp":474276061792,"id":2309,"parentId":2306,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js%22%2C%22ids%22%3A%5B%22*%22%5D%7D&server=false!"},"startTime":1764106921149,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":11616,"timestamp":474276061795,"id":2311,"parentId":2306,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106921149,"traceId":"e274ac96b05c42d4"},{"name":"read-resource","duration":6652,"timestamp":474276066767,"id":2320,"parentId":2319,"tags":{},"startTime":1764106921154,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":14304,"timestamp":474276061789,"id":2308,"parentId":2306,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764106921149,"traceId":"e274ac96b05c42d4"},{"name":"postcss-process","duration":13101,"timestamp":474276073442,"id":2322,"parentId":2321,"tags":{},"startTime":1764106921160,"traceId":"e274ac96b05c42d4"},{"name":"postcss-loader","duration":13321,"timestamp":474276073431,"id":2321,"parentId":2319,"tags":{},"startTime":1764106921160,"traceId":"e274ac96b05c42d4"},{"name":"css-loader","duration":2825,"timestamp":474276086776,"id":2323,"parentId":2319,"tags":{"astUsed":"true"},"startTime":1764106921174,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":23544,"timestamp":474276066698,"id":2319,"parentId":2315,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764106921154,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":35268,"timestamp":474276064230,"id":2315,"parentId":2305,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764106921151,"traceId":"e274ac96b05c42d4"},{"name":"build-module","duration":21,"timestamp":474276100443,"id":2324,"parentId":2315,"tags":{},"startTime":1764106921187,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":38684,"timestamp":474276061794,"id":2310,"parentId":2306,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106921149,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":44994,"timestamp":474276061797,"id":2312,"parentId":2306,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106921149,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":47054,"timestamp":474276059746,"id":2306,"parentId":2305,"tags":{},"startTime":1764106921147,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":688,"timestamp":474276107658,"id":2326,"parentId":2325,"tags":{},"startTime":1764106921195,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":3,"timestamp":474276108357,"id":2328,"parentId":2325,"tags":{},"startTime":1764106921195,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":17,"timestamp":474276108367,"id":2329,"parentId":2325,"tags":{},"startTime":1764106921195,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":3,"timestamp":474276108391,"id":2330,"parentId":2325,"tags":{},"startTime":1764106921195,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":474276108403,"id":2331,"parentId":2325,"tags":{},"startTime":1764106921195,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":261,"timestamp":474276108352,"id":2327,"parentId":2325,"tags":{},"startTime":1764106921195,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":193,"timestamp":474276108988,"id":2332,"parentId":2325,"tags":{},"startTime":1764106921196,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":767,"timestamp":474276109185,"id":2333,"parentId":2325,"tags":{},"startTime":1764106921196,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":1945,"timestamp":474276110788,"id":2334,"parentId":2325,"tags":{},"startTime":1764106921198,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":112,"timestamp":474276112730,"id":2335,"parentId":2325,"tags":{},"startTime":1764106921200,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":34,"timestamp":474276112834,"id":2336,"parentId":2325,"tags":{},"startTime":1764106921200,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1964,"timestamp":474276112874,"id":2337,"parentId":2325,"tags":{},"startTime":1764106921200,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":44,"timestamp":474276115331,"id":2339,"parentId":2305,"tags":{},"startTime":1764106921202,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-createassets","duration":81,"timestamp":474276115298,"id":2338,"parentId":2305,"tags":{},"startTime":1764106921202,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":8819,"timestamp":474276107416,"id":2325,"parentId":2305,"tags":{},"startTime":1764106921194,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":56642,"timestamp":474276059606,"id":2305,"parentId":2274,"tags":{"name":"client"},"startTime":1764106921147,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":10047,"timestamp":474276116257,"id":2340,"parentId":2274,"tags":{},"startTime":1764106921203,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-client","duration":133701,"timestamp":474275993229,"id":2274,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764106921080,"traceId":"e274ac96b05c42d4"}] +[{"name":"client-success","duration":7,"timestamp":474276127540,"id":2341,"parentId":3,"tags":{},"startTime":1764106921214,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":0,"timestamp":474276128709,"id":2343,"parentId":3,"tags":{},"startTime":1764106921216,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":10418,"timestamp":474276128129,"id":2342,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764106921215,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474276138572,"id":2345,"parentId":2342,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"570425344","memory.heapUsed":"196316408","memory.heapTotal":"228048896"},"startTime":1764106921226,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":145000,"timestamp":474275994552,"id":2346,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/next/dist/api/navigation.js","[project]/app/gunbuilder/[categoryId]/page.tsx","[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":false},"startTime":1764106921226,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":11258,"timestamp":474276130168,"id":2344,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764106921217,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474276141441,"id":2347,"parentId":2344,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"570425344","memory.heapUsed":"196908704","memory.heapTotal":"228048896"},"startTime":1764106921228,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":159000,"timestamp":474275994429,"id":2348,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/next/dist/api/navigation.js","[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764106921240,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":14245,"timestamp":474295440194,"id":2349,"tags":{"url":"/gunbuilder/lower?_rsc=fbwoq","isTurbopack":false},"startTime":1764106940527,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":2,"timestamp":474295454496,"id":2350,"parentId":2349,"tags":{"url":"/gunbuilder/lower?_rsc=fbwoq","memory.rss":"520355840","memory.heapUsed":"182505096","memory.heapTotal":"191250432"},"startTime":1764106940541,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":7390,"timestamp":474296040964,"id":2351,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=1kfpz","isTurbopack":false},"startTime":1764106941128,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":2,"timestamp":474296048400,"id":2352,"parentId":2351,"tags":{"url":"/gunbuilder?select=lower%3Alower-aero-m4e1&_rsc=1kfpz","memory.rss":"520470528","memory.heapUsed":"182465872","memory.heapTotal":"191512576"},"startTime":1764106941135,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":7736,"timestamp":474296058138,"id":2353,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764106941145,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474296065896,"id":2354,"parentId":2353,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"520470528","memory.heapUsed":"182427800","memory.heapTotal":"191512576"},"startTime":1764106941153,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":9633,"timestamp":474297703883,"id":2355,"tags":{"url":"/gunbuilder/upper?_rsc=1tdvv","isTurbopack":false},"startTime":1764106942791,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":3,"timestamp":474297713574,"id":2356,"parentId":2355,"tags":{"url":"/gunbuilder/upper?_rsc=1tdvv","memory.rss":"520470528","memory.heapUsed":"182579960","memory.heapTotal":"190464000"},"startTime":1764106942800,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":8415,"timestamp":474298393942,"id":2357,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=nxvwl","isTurbopack":false},"startTime":1764106943481,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474298402396,"id":2358,"parentId":2357,"tags":{"url":"/gunbuilder?select=upper%3Aupper-bcm-m4&_rsc=nxvwl","memory.rss":"520486912","memory.heapUsed":"182503936","memory.heapTotal":"191250432"},"startTime":1764106943489,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":7340,"timestamp":474299828959,"id":2359,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764106944916,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474299836345,"id":2360,"parentId":2359,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"520486912","memory.heapUsed":"182538424","memory.heapTotal":"190464000"},"startTime":1764106944923,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":6873,"timestamp":474299840985,"id":2361,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","isTurbopack":false},"startTime":1764106944928,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474299847896,"id":2362,"parentId":2361,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","memory.rss":"520486912","memory.heapUsed":"182641472","memory.heapTotal":"191250432"},"startTime":1764106944935,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":5305,"timestamp":474300820710,"id":2363,"tags":{"url":"/gunbuilder?select=barrel%3Abarrel-criterion-16&_rsc=2t5kv","isTurbopack":false},"startTime":1764106945908,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474300826068,"id":2364,"parentId":2363,"tags":{"url":"/gunbuilder?select=barrel%3Abarrel-criterion-16&_rsc=2t5kv","memory.rss":"520486912","memory.heapUsed":"182522752","memory.heapTotal":"190464000"},"startTime":1764106945913,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":6901,"timestamp":474300829423,"id":2365,"tags":{"url":"/gunbuilder?select=barrel%3Abarrel-criterion-16&_rsc=zfc1s","isTurbopack":false},"startTime":1764106945916,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474300836364,"id":2366,"parentId":2365,"tags":{"url":"/gunbuilder?select=barrel%3Abarrel-criterion-16&_rsc=zfc1s","memory.rss":"520552448","memory.heapUsed":"182304216","memory.heapTotal":"190726144"},"startTime":1764106945923,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":6519,"timestamp":474302344754,"id":2367,"tags":{"url":"/gunbuilder/handguard?_rsc=1acsq","isTurbopack":false},"startTime":1764106947432,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474302351312,"id":2368,"parentId":2367,"tags":{"url":"/gunbuilder/handguard?_rsc=1acsq","memory.rss":"505004032","memory.heapUsed":"182323312","memory.heapTotal":"191512576"},"startTime":1764106947438,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":3747,"timestamp":474302353812,"id":2369,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","isTurbopack":false},"startTime":1764106947441,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":1,"timestamp":474302357591,"id":2370,"parentId":2369,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","memory.rss":"505004032","memory.heapUsed":"182423968","memory.heapTotal":"191512576"},"startTime":1764106947444,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1369,"timestamp":474303755567,"id":2379,"parentId":2378,"tags":{},"startTime":1764106948842,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1535,"timestamp":474303755412,"id":2378,"parentId":2377,"tags":{},"startTime":1764106948842,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":3376,"timestamp":474303755075,"id":2377,"parentId":2373,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764106948842,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":10549,"timestamp":474303749136,"id":2375,"parentId":2374,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106948836,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":11955,"timestamp":474303749185,"id":2376,"parentId":2374,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106948836,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1892,"timestamp":474303762472,"id":2388,"parentId":2387,"tags":{},"startTime":1764106948849,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1977,"timestamp":474303762393,"id":2387,"parentId":2386,"tags":{},"startTime":1764106948849,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":7175,"timestamp":474303762290,"id":2386,"parentId":2373,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764106948849,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":25016,"timestamp":474303747836,"id":2374,"parentId":2373,"tags":{},"startTime":1764106948835,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":744,"timestamp":474303773919,"id":2390,"parentId":2389,"tags":{},"startTime":1764106948861,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":474303774672,"id":2392,"parentId":2389,"tags":{},"startTime":1764106948862,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":616,"timestamp":474303774694,"id":2393,"parentId":2389,"tags":{},"startTime":1764106948862,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":3,"timestamp":474303775320,"id":2394,"parentId":2389,"tags":{},"startTime":1764106948862,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":474303775335,"id":2395,"parentId":2389,"tags":{},"startTime":1764106948862,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":882,"timestamp":474303774669,"id":2391,"parentId":2389,"tags":{},"startTime":1764106948862,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":681,"timestamp":474303775954,"id":2396,"parentId":2389,"tags":{},"startTime":1764106948863,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":532,"timestamp":474303776661,"id":2397,"parentId":2389,"tags":{},"startTime":1764106948864,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":831,"timestamp":474303777751,"id":2398,"parentId":2389,"tags":{},"startTime":1764106948865,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":49,"timestamp":474303778581,"id":2399,"parentId":2389,"tags":{},"startTime":1764106948865,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":36,"timestamp":474303778621,"id":2400,"parentId":2389,"tags":{},"startTime":1764106948866,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":64,"timestamp":474303778659,"id":2401,"parentId":2389,"tags":{},"startTime":1764106948866,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":5782,"timestamp":474303773634,"id":2389,"parentId":2373,"tags":{},"startTime":1764106948861,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":32668,"timestamp":474303747622,"id":2373,"parentId":2371,"tags":{"name":"server"},"startTime":1764106948835,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":1029,"timestamp":474303780308,"id":2402,"parentId":2371,"tags":{},"startTime":1764106948867,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-server","duration":41609,"timestamp":474303740038,"id":2371,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764106948827,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":2636,"timestamp":474303785557,"id":2412,"parentId":2404,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106948872,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":2899,"timestamp":474303785516,"id":2405,"parentId":2404,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764106948872,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":3522,"timestamp":474303785551,"id":2411,"parentId":2404,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106948872,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4351,"timestamp":474303785544,"id":2407,"parentId":2404,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js%22%2C%22ids%22%3A%5B%22*%22%5D%7D&server=false!"},"startTime":1764106948872,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4430,"timestamp":474303785547,"id":2409,"parentId":2404,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106948872,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":2410,"timestamp":474303787660,"id":2416,"parentId":2415,"tags":{},"startTime":1764106948875,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":2463,"timestamp":474303787607,"id":2415,"parentId":2414,"tags":{},"startTime":1764106948875,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":6563,"timestamp":474303787538,"id":2414,"parentId":2403,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764106948874,"traceId":"e274ac96b05c42d4"},{"name":"read-resource","duration":4915,"timestamp":474303789200,"id":2418,"parentId":2417,"tags":{},"startTime":1764106948876,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":10710,"timestamp":474303785540,"id":2406,"parentId":2404,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764106948872,"traceId":"e274ac96b05c42d4"},{"name":"postcss-process","duration":13739,"timestamp":474303794138,"id":2420,"parentId":2419,"tags":{},"startTime":1764106948881,"traceId":"e274ac96b05c42d4"},{"name":"postcss-loader","duration":13984,"timestamp":474303794125,"id":2419,"parentId":2417,"tags":{},"startTime":1764106948881,"traceId":"e274ac96b05c42d4"},{"name":"css-loader","duration":3165,"timestamp":474303808132,"id":2421,"parentId":2417,"tags":{"astUsed":"true"},"startTime":1764106948895,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":23326,"timestamp":474303789149,"id":2417,"parentId":2413,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764106948876,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":26967,"timestamp":474303785550,"id":2410,"parentId":2404,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106948872,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":26894,"timestamp":474303787323,"id":2413,"parentId":2403,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764106948874,"traceId":"e274ac96b05c42d4"},{"name":"build-module","duration":15,"timestamp":474303814295,"id":2422,"parentId":2413,"tags":{},"startTime":1764106948901,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":28784,"timestamp":474303785546,"id":2408,"parentId":2404,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106948872,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":31597,"timestamp":474303782742,"id":2404,"parentId":2403,"tags":{},"startTime":1764106948870,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":745,"timestamp":474303815149,"id":2424,"parentId":2423,"tags":{},"startTime":1764106948902,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":474303815902,"id":2426,"parentId":2423,"tags":{},"startTime":1764106948903,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":29,"timestamp":474303815910,"id":2427,"parentId":2423,"tags":{},"startTime":1764106948903,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":7,"timestamp":474303815945,"id":2428,"parentId":2423,"tags":{},"startTime":1764106948903,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":474303815960,"id":2429,"parentId":2423,"tags":{},"startTime":1764106948903,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":370,"timestamp":474303815900,"id":2425,"parentId":2423,"tags":{},"startTime":1764106948903,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":156,"timestamp":474303816654,"id":2430,"parentId":2423,"tags":{},"startTime":1764106948904,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":410,"timestamp":474303816813,"id":2431,"parentId":2423,"tags":{},"startTime":1764106948904,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":1431,"timestamp":474303817644,"id":2432,"parentId":2423,"tags":{},"startTime":1764106948905,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":54,"timestamp":474303819075,"id":2433,"parentId":2423,"tags":{},"startTime":1764106948906,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":24,"timestamp":474303819125,"id":2434,"parentId":2423,"tags":{},"startTime":1764106948906,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1745,"timestamp":474303819151,"id":2435,"parentId":2423,"tags":{},"startTime":1764106948906,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":49,"timestamp":474303821260,"id":2437,"parentId":2403,"tags":{},"startTime":1764106948908,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-createassets","duration":83,"timestamp":474303821230,"id":2436,"parentId":2403,"tags":{},"startTime":1764106948908,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":7124,"timestamp":474303814918,"id":2423,"parentId":2403,"tags":{},"startTime":1764106948902,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":39566,"timestamp":474303782492,"id":2403,"parentId":2372,"tags":{"name":"client"},"startTime":1764106948869,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":2812,"timestamp":474303822070,"id":2438,"parentId":2372,"tags":{},"startTime":1764106948909,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-client","duration":85496,"timestamp":474303740103,"id":2372,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764106948827,"traceId":"e274ac96b05c42d4"}] +[{"name":"client-success","duration":1,"timestamp":474303826417,"id":2440,"parentId":3,"tags":{},"startTime":1764106948913,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":0,"timestamp":474303828300,"id":2441,"parentId":3,"tags":{},"startTime":1764106948915,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":89000,"timestamp":474303740370,"id":2443,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/handguard","isPageHidden":false},"startTime":1764106948921,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":11408,"timestamp":474303824396,"id":2439,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-centurion-c4&_rsc=1wjnh","isTurbopack":false},"startTime":1764106948911,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474303835822,"id":2444,"parentId":2439,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-centurion-c4&_rsc=1wjnh","memory.rss":"526188544","memory.heapUsed":"198505976","memory.heapTotal":"214384640"},"startTime":1764106948923,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":95000,"timestamp":474303740800,"id":2445,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764106948924,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":12326,"timestamp":474303828812,"id":2442,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764106948916,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474303841158,"id":2447,"parentId":2442,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"526237696","memory.heapUsed":"199856008","memory.heapTotal":"214384640"},"startTime":1764106948928,"traceId":"e274ac96b05c42d4"},{"name":"handle-request","duration":10008,"timestamp":474303836931,"id":2446,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-centurion-c4&_rsc=13zj1","isTurbopack":false},"startTime":1764106948924,"traceId":"e274ac96b05c42d4"},{"name":"memory-usage","duration":0,"timestamp":474303846956,"id":2448,"parentId":2446,"tags":{"url":"/gunbuilder?select=handguard%3Ahg-centurion-c4&_rsc=13zj1","memory.rss":"526286848","memory.heapUsed":"188992928","memory.heapTotal":"212811776"},"startTime":1764106948934,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":3817,"timestamp":474307369992,"id":2460,"parentId":2452,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4173,"timestamp":474307369937,"id":2453,"parentId":2452,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":4900,"timestamp":474307369990,"id":2459,"parentId":2452,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":2328,"timestamp":474307373144,"id":2464,"parentId":2463,"tags":{},"startTime":1764106952460,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":2416,"timestamp":474307373059,"id":2463,"parentId":2462,"tags":{},"startTime":1764106952460,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":6455,"timestamp":474307372957,"id":2462,"parentId":2451,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764106952460,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":10053,"timestamp":474307369981,"id":2455,"parentId":2452,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js%22%2C%22ids%22%3A%5B%22*%22%5D%7D&server=false!"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":10215,"timestamp":474307369985,"id":2457,"parentId":2452,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"read-resource","duration":5781,"timestamp":474307375045,"id":2466,"parentId":2465,"tags":{},"startTime":1764106952462,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":12460,"timestamp":474307369988,"id":2458,"parentId":2452,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":12490,"timestamp":474307369977,"id":2454,"parentId":2452,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"postcss-process","duration":10900,"timestamp":474307380856,"id":2468,"parentId":2467,"tags":{},"startTime":1764106952468,"traceId":"e274ac96b05c42d4"},{"name":"postcss-loader","duration":11186,"timestamp":474307380841,"id":2467,"parentId":2465,"tags":{},"startTime":1764106952468,"traceId":"e274ac96b05c42d4"},{"name":"css-loader","duration":2874,"timestamp":474307392047,"id":2469,"parentId":2465,"tags":{"astUsed":"true"},"startTime":1764106952479,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":20502,"timestamp":474307374980,"id":2465,"parentId":2461,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764106952462,"traceId":"e274ac96b05c42d4"},{"name":"build-module-css","duration":25850,"timestamp":474307372711,"id":2461,"parentId":2451,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764106952460,"traceId":"e274ac96b05c42d4"},{"name":"build-module","duration":12,"timestamp":474307398640,"id":2470,"parentId":2461,"tags":{},"startTime":1764106952486,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":28688,"timestamp":474307369983,"id":2456,"parentId":2452,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":28896,"timestamp":474307369784,"id":2452,"parentId":2451,"tags":{},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":655,"timestamp":474307399586,"id":2472,"parentId":2471,"tags":{},"startTime":1764106952486,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":2,"timestamp":474307400248,"id":2474,"parentId":2471,"tags":{},"startTime":1764106952487,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":17,"timestamp":474307400259,"id":2475,"parentId":2471,"tags":{},"startTime":1764106952487,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":2,"timestamp":474307400282,"id":2476,"parentId":2471,"tags":{},"startTime":1764106952487,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":474307400291,"id":2477,"parentId":2471,"tags":{},"startTime":1764106952487,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":264,"timestamp":474307400245,"id":2473,"parentId":2471,"tags":{},"startTime":1764106952487,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":165,"timestamp":474307400863,"id":2478,"parentId":2471,"tags":{},"startTime":1764106952488,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":525,"timestamp":474307401033,"id":2479,"parentId":2471,"tags":{},"startTime":1764106952488,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":1543,"timestamp":474307402037,"id":2480,"parentId":2471,"tags":{},"startTime":1764106952489,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":61,"timestamp":474307403580,"id":2481,"parentId":2471,"tags":{},"startTime":1764106952490,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":23,"timestamp":474307403636,"id":2482,"parentId":2471,"tags":{},"startTime":1764106952491,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":1395,"timestamp":474307403662,"id":2483,"parentId":2471,"tags":{},"startTime":1764106952491,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":29,"timestamp":474307405406,"id":2485,"parentId":2451,"tags":{},"startTime":1764106952492,"traceId":"e274ac96b05c42d4"},{"name":"NextJsBuildManifest-createassets","duration":56,"timestamp":474307405381,"id":2484,"parentId":2451,"tags":{},"startTime":1764106952492,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":6802,"timestamp":474307399319,"id":2471,"parentId":2451,"tags":{},"startTime":1764106952486,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":36530,"timestamp":474307369602,"id":2451,"parentId":2449,"tags":{"name":"client"},"startTime":1764106952457,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":1875,"timestamp":474307406141,"id":2486,"parentId":2449,"tags":{},"startTime":1764106952493,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-client","duration":45459,"timestamp":474307362903,"id":2449,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764106952450,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":1,"timestamp":474307411248,"id":2489,"parentId":3,"tags":{},"startTime":1764106952498,"traceId":"e274ac96b05c42d4"},{"name":"client-success","duration":0,"timestamp":474307411277,"id":2490,"parentId":3,"tags":{},"startTime":1764106952498,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":52000,"timestamp":474307363375,"id":2493,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764106952502,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":3799,"timestamp":474307412218,"id":2492,"parentId":2488,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106952499,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":949,"timestamp":474307415684,"id":2496,"parentId":2495,"tags":{},"startTime":1764106952503,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1008,"timestamp":474307415628,"id":2495,"parentId":2494,"tags":{},"startTime":1764106952503,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":1635,"timestamp":474307415471,"id":2494,"parentId":2487,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764106952502,"traceId":"e274ac96b05c42d4"},{"name":"add-entry","duration":5952,"timestamp":474307412198,"id":2491,"parentId":2488,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764106952499,"traceId":"e274ac96b05c42d4"},{"name":"client-hmr-latency","duration":55000,"timestamp":474307362619,"id":2503,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764106952506,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-transform","duration":1659,"timestamp":474307419144,"id":2506,"parentId":2505,"tags":{},"startTime":1764106952506,"traceId":"e274ac96b05c42d4"},{"name":"next-swc-loader","duration":1709,"timestamp":474307419095,"id":2505,"parentId":2504,"tags":{},"startTime":1764106952506,"traceId":"e274ac96b05c42d4"},{"name":"build-module-tsx","duration":4232,"timestamp":474307418999,"id":2504,"parentId":2487,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764106952506,"traceId":"e274ac96b05c42d4"},{"name":"make","duration":15785,"timestamp":474307409412,"id":2488,"parentId":2487,"tags":{},"startTime":1764106952496,"traceId":"e274ac96b05c42d4"},{"name":"chunk-graph","duration":664,"timestamp":474307426022,"id":2508,"parentId":2507,"tags":{},"startTime":1764106952513,"traceId":"e274ac96b05c42d4"},{"name":"optimize-modules","duration":1,"timestamp":474307426695,"id":2510,"parentId":2507,"tags":{},"startTime":1764106952514,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunks","duration":578,"timestamp":474307426702,"id":2511,"parentId":2507,"tags":{},"startTime":1764106952514,"traceId":"e274ac96b05c42d4"},{"name":"optimize-tree","duration":7,"timestamp":474307427285,"id":2512,"parentId":2507,"tags":{},"startTime":1764106952514,"traceId":"e274ac96b05c42d4"},{"name":"optimize-chunk-modules","duration":1,"timestamp":474307427296,"id":2513,"parentId":2507,"tags":{},"startTime":1764106952514,"traceId":"e274ac96b05c42d4"},{"name":"optimize","duration":763,"timestamp":474307426690,"id":2509,"parentId":2507,"tags":{},"startTime":1764106952514,"traceId":"e274ac96b05c42d4"},{"name":"module-hash","duration":190,"timestamp":474307427840,"id":2514,"parentId":2507,"tags":{},"startTime":1764106952515,"traceId":"e274ac96b05c42d4"},{"name":"code-generation","duration":355,"timestamp":474307428033,"id":2515,"parentId":2507,"tags":{},"startTime":1764106952515,"traceId":"e274ac96b05c42d4"},{"name":"hash","duration":593,"timestamp":474307428737,"id":2516,"parentId":2507,"tags":{},"startTime":1764106952516,"traceId":"e274ac96b05c42d4"},{"name":"code-generation-jobs","duration":34,"timestamp":474307429330,"id":2517,"parentId":2507,"tags":{},"startTime":1764106952516,"traceId":"e274ac96b05c42d4"},{"name":"module-assets","duration":14,"timestamp":474307429362,"id":2518,"parentId":2507,"tags":{},"startTime":1764106952516,"traceId":"e274ac96b05c42d4"},{"name":"create-chunk-assets","duration":57,"timestamp":474307429378,"id":2519,"parentId":2507,"tags":{},"startTime":1764106952516,"traceId":"e274ac96b05c42d4"},{"name":"seal","duration":4824,"timestamp":474307425852,"id":2507,"parentId":2487,"tags":{},"startTime":1764106952513,"traceId":"e274ac96b05c42d4"},{"name":"webpack-compilation","duration":22012,"timestamp":474307409262,"id":2487,"parentId":2450,"tags":{"name":"server"},"startTime":1764106952496,"traceId":"e274ac96b05c42d4"},{"name":"emit","duration":745,"timestamp":474307431286,"id":2520,"parentId":2450,"tags":{},"startTime":1764106952518,"traceId":"e274ac96b05c42d4"},{"name":"webpack-invalidated-server","duration":69354,"timestamp":474307363062,"id":2450,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764106952450,"traceId":"e274ac96b05c42d4"}] diff --git a/app/gunbuilder/page.tsx b/app/gunbuilder/page.tsx index 7023f81..73d6d60 100644 --- a/app/gunbuilder/page.tsx +++ b/app/gunbuilder/page.tsx @@ -1,14 +1,60 @@ "use client"; -import { useMemo, useState } from "react"; +import { useMemo, useState, useEffect } from "react"; +import { useSearchParams, useRouter } from "next/navigation"; import { CATEGORIES, PARTS } from "@/data/gunbuilderParts"; import type { CategoryId, Part } from "@/types/gunbuilder"; import { CategoryColumn } from "@/components/CategoryColumn"; type BuildState = Partial>; // categoryId -> partId +const STORAGE_KEY = "gunbuilder-build-state"; + export default function GunbuilderPage() { - const [build, setBuild] = useState({}); + const searchParams = useSearchParams(); + const router = useRouter(); + const [build, setBuild] = useState(() => { + // Initialize from localStorage if available + if (typeof window !== "undefined") { + const stored = localStorage.getItem(STORAGE_KEY); + if (stored) { + try { + return JSON.parse(stored); + } catch { + return {}; + } + } + } + return {}; + }); + + // Handle URL query parameter for part selection + useEffect(() => { + const selectParam = searchParams.get("select"); + if (selectParam) { + const [categoryId, partId] = selectParam.split(":"); + if (categoryId && partId && CATEGORIES.some((c) => c.id === categoryId)) { + setBuild((prev) => { + const updated = { + ...prev, + [categoryId]: partId, + }; + // Persist to localStorage + localStorage.setItem(STORAGE_KEY, JSON.stringify(updated)); + return updated; + }); + // Remove query param from URL + router.replace("/gunbuilder", { scroll: false }); + } + } + }, [searchParams, router]); + + // Persist build state to localStorage whenever it changes + useEffect(() => { + if (typeof window !== "undefined") { + localStorage.setItem(STORAGE_KEY, JSON.stringify(build)); + } + }, [build]); const partsByCategory: Record = useMemo(() => { const grouped = {} as Record; diff --git a/components/CategoryColumn.tsx b/components/CategoryColumn.tsx index 063a5d1..408eaec 100644 --- a/components/CategoryColumn.tsx +++ b/components/CategoryColumn.tsx @@ -17,10 +17,10 @@ export function CategoryColumn({ selectedPartId, onSelectPart, }: CategoryColumnProps) { - // Show selected part if available, otherwise show first part + // Show selected part if available, otherwise show placeholder const displayedPart = selectedPartId - ? parts.find((p) => p.id === selectedPartId) || parts[0] - : parts[0]; + ? parts.find((p) => p.id === selectedPartId) + : null; return (
@@ -33,6 +33,11 @@ export function CategoryColumn({ {parts.length === 0 && (

No parts yet for this category.

)} + {!displayedPart && parts.length > 0 && ( +
+

Choose a Part

+
+ )} {displayedPart && (