From 54541098585cf0f76ead5d45ee6b56ad01e49271 Mon Sep 17 00:00:00 2001 From: Dohyeon Date: Sun, 5 Apr 2026 16:52:41 +0900 Subject: [PATCH 1/5] =?UTF-8?q?chore:=20=EC=8A=A4=ED=86=A0=EB=A6=AC?= =?UTF-8?q?=EB=B6=81,=20Vitest=20=EC=84=A4=EC=A0=95=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 885 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 10 +- storybook/main.ts | 2 +- vite.config.ts | 30 ++ vitest.shims.d.ts | 1 + 5 files changed, 909 insertions(+), 19 deletions(-) create mode 100644 vitest.shims.d.ts diff --git a/package-lock.json b/package-lock.json index 56cfff2..492e65b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,17 +22,21 @@ "devDependencies": { "@eslint/js": "^9.39.1", "@storybook/addon-docs": "^10.3.1", + "@storybook/addon-vitest": "^10.3.4", "@storybook/react-vite": "^10.3.1", "@types/node": "^24.10.1", "@types/react": "^18.3.27", "@types/react-dom": "^18.3.7", "@vitejs/plugin-react": "^5.1.1", + "@vitest/browser-playwright": "^4.1.2", + "@vitest/coverage-v8": "^4.1.2", "autoprefixer": "^10.4.23", "eslint": "^9.39.1", "eslint-config-prettier": "^10.1.8", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "globals": "^16.5.0", + "playwright": "^1.59.1", "postcss": "^8.5.6", "prettier": "^3.7.4", "storybook": "^10.3.1", @@ -40,7 +44,8 @@ "typescript": "~5.9.3", "typescript-eslint": "^8.46.4", "vite": "^7.2.4", - "vite-plugin-svgr": "^4.5.0" + "vite-plugin-svgr": "^4.5.0", + "vitest": "^4.1.2" } }, "node_modules/@adobe/css-tools": { @@ -356,6 +361,23 @@ "node": ">=6.9.0" } }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@blazediff/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz", + "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==", + "dev": true, + "license": "MIT" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", @@ -1772,6 +1794,13 @@ "node": ">= 8" } }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -2547,6 +2576,13 @@ "win32" ] }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, "node_modules/@storybook/addon-docs": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.3.1.tgz", @@ -2570,6 +2606,42 @@ "storybook": "^10.3.1" } }, + "node_modules/@storybook/addon-vitest": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/@storybook/addon-vitest/-/addon-vitest-10.3.4.tgz", + "integrity": "sha512-lSn8opaHVzDxLtMy28FnSkyx6uP1oQVnGzodNunTjrbJ8Ue8JVK+fjWtC/JfErIio0avlq79mgC5tfHSWlPr9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0", + "@storybook/icons": "^2.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@vitest/browser": "^3.0.0 || ^4.0.0", + "@vitest/browser-playwright": "^4.0.0", + "@vitest/runner": "^3.0.0 || ^4.0.0", + "storybook": "^10.3.4", + "vitest": "^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/runner": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, "node_modules/@storybook/builder-vite": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.3.1.tgz", @@ -3460,6 +3532,170 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/@vitest/browser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.2.tgz", + "integrity": "sha512-CwdIf90LNf1Zitgqy63ciMAzmyb4oIGs8WZ40VGYrWkssQKeEKr32EzO8MKUrDPPcPVHFI9oQ5ni2Hp24NaNRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@blazediff/core": "1.9.1", + "@vitest/mocker": "4.1.2", + "@vitest/utils": "4.1.2", + "magic-string": "^0.30.21", + "pngjs": "^7.0.0", + "sirv": "^3.0.2", + "tinyrainbow": "^3.1.0", + "ws": "^8.19.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "4.1.2" + } + }, + "node_modules/@vitest/browser-playwright": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.2.tgz", + "integrity": "sha512-N0Z2HzMLvMR6k/tWPTS6Q/DaRscrkax/f2f9DIbNQr+Cd1l4W4wTf/I6S983PAMr0tNqqoTL+xNkLh9M5vbkLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/browser": "4.1.2", + "@vitest/mocker": "4.1.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "4.1.2" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": false + } + } + }, + "node_modules/@vitest/browser-playwright/node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@vitest/browser/node_modules/@vitest/pretty-format": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/browser/node_modules/@vitest/utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/browser/node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.2.tgz", + "integrity": "sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.1.2", + "ast-v8-to-istanbul": "^1.0.0", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.2.0", + "magicast": "^0.5.2", + "obug": "^2.1.1", + "std-env": "^4.0.0-rc.1", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "4.1.2", + "vitest": "4.1.2" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/coverage-v8/node_modules/@vitest/pretty-format": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/coverage-v8/node_modules/@vitest/utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/coverage-v8/node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@vitest/expect": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", @@ -3477,6 +3713,53 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/mocker": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", + "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.2", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/@vitest/spy": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", + "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/@vitest/pretty-format": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", @@ -3490,6 +3773,112 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/runner": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", + "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.2", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/@vitest/utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", + "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "@vitest/utils": "4.1.2", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/@vitest/utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@vitest/spy": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", @@ -3518,6 +3907,13 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@webcontainer/env": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webcontainer/env/-/env-1.1.1.tgz", + "integrity": "sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==", + "dev": true, + "license": "MIT" + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -3675,19 +4071,48 @@ "node": ">=4" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.23", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", - "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "node_modules/ast-v8-to-istanbul": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.0.tgz", + "integrity": "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==", "dev": true, - "funding": [ - { + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "dev": true, + "funding": [ + { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, @@ -4378,6 +4803,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -4690,6 +5122,16 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5205,6 +5647,13 @@ "hermes-estree": "0.25.1" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, "node_modules/http-parser-js": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", @@ -5400,6 +5849,45 @@ "dev": true, "license": "ISC" }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -5622,6 +6110,47 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -5732,6 +6261,16 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -5825,6 +6364,17 @@ "node": ">= 6" } }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, "node_modules/open": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", @@ -5990,6 +6540,13 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, "node_modules/pathval": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", @@ -6040,6 +6597,63 @@ "node": ">= 6" } }, + "node_modules/playwright": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.19.0" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -6783,6 +7397,28 @@ "node": ">=8" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -6814,10 +7450,24 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "dev": true, + "license": "MIT" + }, "node_modules/storybook": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.3.1.tgz", - "integrity": "sha512-i/CA1dUyVcF6cNL3tgPTQ/G6Evh6r3QdATuiiKObrA3QkEKmt3jrY+WeuQA7FCcmHk/vKabeliNrblaff8aY6Q==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.3.4.tgz", + "integrity": "sha512-866YXZy9k59tLPl9SN3KZZOFeBC/swxkuBVtW8iQjJIzfCrvk7zXQd8RSQ4ignmCdArVvY4lGMCAT4yNaZSt1g==", "dev": true, "license": "MIT", "dependencies": { @@ -6827,6 +7477,7 @@ "@testing-library/user-event": "^14.6.1", "@vitest/expect": "3.2.4", "@vitest/spy": "3.2.4", + "@webcontainer/env": "^1.1.1", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0", "open": "^10.2.0", "recast": "^0.23.5", @@ -7049,6 +7700,23 @@ "dev": true, "license": "MIT" }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -7099,6 +7767,16 @@ "node": ">=8.0" } }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ts-api-utils": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", @@ -7427,6 +8105,164 @@ "vite": ">=2.6.0" } }, + "node_modules/vitest": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", + "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.2", + "@vitest/mocker": "4.1.2", + "@vitest/pretty-format": "4.1.2", + "@vitest/runner": "4.1.2", + "@vitest/snapshot": "4.1.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.2", + "@vitest/browser-preview": "4.1.2", + "@vitest/browser-webdriverio": "4.1.2", + "@vitest/ui": "4.1.2", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/@vitest/expect": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", + "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/@vitest/pretty-format": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/@vitest/spy": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", + "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/@vitest/utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/vitest/node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/web-vitals": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", @@ -7479,6 +8315,23 @@ "node": ">= 8" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/package.json b/package.json index c4329b7..e3ba109 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css}\"", "preview": "vite preview", "storybook": "storybook dev -p 6006 --config-dir storybook", - "build-storybook": "storybook build --config-dir storybook" + "build-storybook": "storybook build --config-dir storybook", + "test:storybook": "vitest --project=storybook" }, "dependencies": { "@tanstack/react-query": "^5.90.21", @@ -29,6 +30,7 @@ "devDependencies": { "@eslint/js": "^9.39.1", "@storybook/addon-docs": "^10.3.1", + "@storybook/addon-vitest": "^10.3.4", "@storybook/react-vite": "^10.3.1", "@types/node": "^24.10.1", "@types/react": "^18.3.27", @@ -47,6 +49,10 @@ "typescript": "~5.9.3", "typescript-eslint": "^8.46.4", "vite": "^7.2.4", - "vite-plugin-svgr": "^4.5.0" + "vite-plugin-svgr": "^4.5.0", + "vitest": "^4.1.2", + "playwright": "^1.59.1", + "@vitest/browser-playwright": "^4.1.2", + "@vitest/coverage-v8": "^4.1.2" } } diff --git a/storybook/main.ts b/storybook/main.ts index 4aed413..c25a90f 100644 --- a/storybook/main.ts +++ b/storybook/main.ts @@ -8,7 +8,7 @@ const config: StorybookConfig = { './stories/**/*.mdx', './stories/**/*.stories.@(js|jsx|mjs|ts|tsx)', ], - addons: ['@storybook/addon-docs'], + addons: ['@storybook/addon-docs', '@storybook/addon-vitest'], framework: '@storybook/react-vite', } diff --git a/vite.config.ts b/vite.config.ts index bfa1264..1a9ee56 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,8 +1,11 @@ +/// import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import svgr from 'vite-plugin-svgr' import path from 'path' import { fileURLToPath } from 'node:url' +import { storybookTest } from '@storybook/addon-vitest/vitest-plugin' +import { playwright } from '@vitest/browser-playwright' const dirname = path.dirname(fileURLToPath(import.meta.url)) @@ -28,4 +31,31 @@ export default defineConfig({ }, }, }, + test: { + projects: [ + { + extends: true, + plugins: [ + // The plugin will run tests for the stories defined in your Storybook config + // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest + storybookTest({ + configDir: path.join(dirname, 'storybook'), + }), + ], + test: { + name: 'storybook', + browser: { + enabled: true, + headless: true, + provider: playwright({}), + instances: [ + { + browser: 'chromium', + }, + ], + }, + }, + }, + ], + }, }) diff --git a/vitest.shims.d.ts b/vitest.shims.d.ts new file mode 100644 index 0000000..7782f28 --- /dev/null +++ b/vitest.shims.d.ts @@ -0,0 +1 @@ +/// \ No newline at end of file From 4de6de91e20874762b64691ddd2d265cbe89147f Mon Sep 17 00:00:00 2001 From: Dohyeon Date: Sun, 5 Apr 2026 16:57:43 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20VItest=20=EC=95=A0=EB=93=9C?= =?UTF-8?q?=EC=98=A8=20=EB=B0=8F=20=EC=8A=A4=ED=86=A0=EB=A6=AC=20=EC=BB=A4?= =?UTF-8?q?=EB=B2=84=EB=A6=AC=EC=A7=80=20=EC=84=A4=EC=A0=95=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coverage/Code/alter-client.html | 154 ++++ .../manager/ui/StoreWorkerListItem.tsx.html | 280 ++++++++ .../home/manager/ui/TodayWorkerList.tsx.html | 253 +++++++ .../manager/ui/WorkspaceChangeCard.tsx.html | 331 +++++++++ .../manager/ui/WorkspaceChangeList.tsx.html | 202 ++++++ .../src/features/home/manager/ui/index.html | 161 +++++ .../home/user/constants/calendar.ts.html | 154 ++++ .../features/home/user/constants/index.html | 116 +++ .../src/features/home/user/hooks/index.html | 191 +++++ .../hooks/useDailyCalendarViewModel.ts.html | 394 ++++++++++ .../hooks/useMonthlyCalendarViewModel.ts.html | 502 +++++++++++++ .../hooks/useMonthlyDateCellsState.ts.html | 175 +++++ .../hooks/useWeeklyCalendarViewModel.ts.html | 277 ++++++++ .../useWorkingStoreCardViewModel.ts.html | 187 +++++ .../useWorkingStoresListViewModel.ts.html | 118 +++ .../src/features/home/user/lib/date.ts.html | 469 ++++++++++++ .../src/features/home/user/lib/index.html | 116 +++ .../home/user/ui/AppliedStoreCard.tsx.html | 196 +++++ .../home/user/ui/AppliedStoreList.tsx.html | 247 +++++++ .../home/user/ui/DailyCalendar.tsx.html | 370 ++++++++++ .../user/ui/HomeScheduleCalendar.tsx.html | 244 +++++++ .../home/user/ui/MonthlyCalendar.tsx.html | 340 +++++++++ .../home/user/ui/MonthlyDateCell.tsx.html | 217 ++++++ .../home/user/ui/MonthlyDateGauge.tsx.html | 244 +++++++ .../home/user/ui/WeeklyCalendar.tsx.html | 343 +++++++++ .../home/user/ui/WorkingStoreCard.tsx.html | 220 ++++++ .../home/user/ui/WorkingStoresList.tsx.html | 289 ++++++++ .../src/features/home/user/ui/index.html | 251 +++++++ .../alter-client/src/shared/lib/index.html | 116 +++ .../src/shared/lib/tokens.ts.html | 670 ++++++++++++++++++ .../alter-client/src/shared/stores/index.html | 116 +++ .../src/shared/stores/useDocStore.ts.html | 214 ++++++ .../src/shared/ui/MobileLayout.tsx.html | 157 ++++ .../src/shared/ui/Spinner.tsx.html | 130 ++++ .../src/shared/ui/common/AuthButton.tsx.html | 193 +++++ .../src/shared/ui/common/AuthInput.tsx.html | 187 +++++ .../src/shared/ui/common/Docbar.tsx.html | 472 ++++++++++++ .../src/shared/ui/common/MoreButton.tsx.html | 148 ++++ .../src/shared/ui/common/Navbar.tsx.html | 358 ++++++++++ .../src/shared/ui/common/index.html | 176 +++++ .../ui/home/ApplicationStatusBadge.tsx.html | 193 +++++ .../shared/ui/home/WorkCategoryBadge.tsx.html | 148 ++++ .../shared/ui/home/WorkerRoleBadge.tsx.html | 187 +++++ .../src/shared/ui/home/index.html | 146 ++++ .../alter-client/src/shared/ui/index.html | 131 ++++ .../ui/manager/OngoingPostingCard.tsx.html | 325 +++++++++ .../manager/SubstituteApprovalCard.tsx.html | 436 ++++++++++++ .../ui/manager/WorkerImageCard.tsx.html | 211 ++++++ .../shared/ui/manager/WorkerListItem.tsx.html | 328 +++++++++ .../ui/manager/alba-find/Albabox.tsx.html | 289 ++++++++ .../shared/ui/manager/alba-find/index.html | 116 +++ .../src/shared/ui/manager/index.html | 161 +++++ .../ui/manager/social/SocialCategory.tsx.html | 142 ++++ .../ui/manager/social/SocialList.tsx.html | 547 ++++++++++++++ .../src/shared/ui/manager/social/index.html | 131 ++++ coverage/Code/index.html | 116 +++ coverage/base.css | 224 ++++++ coverage/block-navigation.js | 87 +++ coverage/clover.xml | 520 ++++++++++++++ coverage/coverage-final.json | 43 ++ coverage/favicon.png | Bin 0 -> 445 bytes coverage/index.html | 311 ++++++++ coverage/prettify.css | 1 + coverage/prettify.js | 2 + coverage/sort-arrow-sprite.png | Bin 0 -> 138 bytes coverage/sorter.js | 210 ++++++ vite.config.ts | 15 + 67 files changed, 14998 insertions(+) create mode 100644 coverage/Code/alter-client.html create mode 100644 coverage/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/manager/ui/index.html create mode 100644 coverage/Code/alter-client/src/features/home/user/constants/calendar.ts.html create mode 100644 coverage/Code/alter-client/src/features/home/user/constants/index.html create mode 100644 coverage/Code/alter-client/src/features/home/user/hooks/index.html create mode 100644 coverage/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts.html create mode 100644 coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts.html create mode 100644 coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts.html create mode 100644 coverage/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts.html create mode 100644 coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts.html create mode 100644 coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts.html create mode 100644 coverage/Code/alter-client/src/features/home/user/lib/date.ts.html create mode 100644 coverage/Code/alter-client/src/features/home/user/lib/index.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx.html create mode 100644 coverage/Code/alter-client/src/features/home/user/ui/index.html create mode 100644 coverage/Code/alter-client/src/shared/lib/index.html create mode 100644 coverage/Code/alter-client/src/shared/lib/tokens.ts.html create mode 100644 coverage/Code/alter-client/src/shared/stores/index.html create mode 100644 coverage/Code/alter-client/src/shared/stores/useDocStore.ts.html create mode 100644 coverage/Code/alter-client/src/shared/ui/MobileLayout.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/Spinner.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/common/AuthButton.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/common/AuthInput.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/common/Docbar.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/common/MoreButton.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/common/Navbar.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/common/index.html create mode 100644 coverage/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/home/index.html create mode 100644 coverage/Code/alter-client/src/shared/ui/index.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/alba-find/index.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/index.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx.html create mode 100644 coverage/Code/alter-client/src/shared/ui/manager/social/index.html create mode 100644 coverage/Code/index.html create mode 100644 coverage/base.css create mode 100644 coverage/block-navigation.js create mode 100644 coverage/clover.xml create mode 100644 coverage/coverage-final.json create mode 100644 coverage/favicon.png create mode 100644 coverage/index.html create mode 100644 coverage/prettify.css create mode 100644 coverage/prettify.js create mode 100644 coverage/sort-arrow-sprite.png create mode 100644 coverage/sorter.js diff --git a/coverage/Code/alter-client.html b/coverage/Code/alter-client.html new file mode 100644 index 0000000..83cec83 --- /dev/null +++ b/coverage/Code/alter-client.html @@ -0,0 +1,154 @@ + + + + + + Code coverage report for Code/alter-client + + + + + + + + + +
+
+

All files / Code alter-client

+
+ +
+ 0% + Statements + 0/0 +
+ + +
+ 0% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/0 +
+ + +
+ 0% + Lines + 0/0 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +240 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0
Unable to lookup source: /Users/hyeon/Code/alter-client (EISDIR: illegal operation on a directory, read)
+Error: Unable to lookup source: /Users/hyeon/Code/alter-client (EISDIR: illegal operation on a directory, read)
+    at Context.defaultSourceLookup [as sourceFinder] (/Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/context.js:17:15)
+    at Context.getSource (/Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/context.js:71:21)
+    at annotateSourceCode (/Users/hyeon/Code/alter-client/node_modules/istanbul-reports/lib/html/annotator.js:249:40)
+    at HtmlReport.onDetail (/Users/hyeon/Code/alter-client/node_modules/istanbul-reports/lib/html/index.js:414:33)
+    at Visitor.value (/Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/tree.js:38:38)
+    at ReportNode.visit (/Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/tree.js:88:21)
+    at /Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/tree.js:92:19
+    at Array.forEach ()
+    at ReportNode.visit (/Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/tree.js:91:28)
+    at /Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/tree.js:92:19
+    at Array.forEach ()
+    at ReportNode.visit (/Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/tree.js:91:28)
+    at ReportTree.visit (/Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/tree.js:127:24)
+    at HtmlReport.execute (/Users/hyeon/Code/alter-client/node_modules/istanbul-lib-report/lib/report-base.js:12:44)
+    at V8CoverageProvider.generateReports (file:///Users/hyeon/Code/alter-client/node_modules/@vitest/coverage-v8/dist/provider.js:89:7)
+    at V8CoverageProvider.reportCoverage (file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/coverage.kqM80boz.js:772:14)
+    at Vitest.reportCoverage (file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:13867:32)
+    at file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:13573:17
+    at file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:13582:11
+    at file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:13444:19
+    at startVitest (file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:14494:8)
+    at start (file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cac.DRKYQDPl.js:2328:15)
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx.html b/coverage/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx.html new file mode 100644 index 0000000..6b18c3a --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx.html @@ -0,0 +1,280 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/manager/ui StoreWorkerListItem.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 66.66% + Branches + 2/3 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import MoreVerticalIcon from '@/assets/icons/home/more-vertical.svg'
+import {
+  WorkerRoleBadge,
+  type WorkerRoleBadgeProps,
+} from '@/shared/ui/home/WorkerRoleBadge'
+ 
+type StoreWorkerRole = WorkerRoleBadgeProps['role']
+ 
+interface StoreWorkerListItemProps {
+  name: string
+  role: StoreWorkerRole
+  nextWorkDate: string
+  profileImageUrl?: string
+  onOptions?: () => void
+  className?: string
+}
+ 
+export function StoreWorkerListItem({
+  name,
+  role,
+  nextWorkDate,
+  profileImageUrl,
+  onOptions,
+  className = '',
+}: StoreWorkerListItemProps) {
+  return (
+    <div
+      className={`flex h-[60px] items-center justify-between rounded-lg bg-white px-3 py-1 ${className}`}
+    >
+      <div className="flex items-center gap-4">
+        <div className="h-[38px] w-[38px] overflow-hidden rounded-full bg-bg-dark">
+          {profileImageUrl ? (
+            <img
+              src={profileImageUrl}
+              alt={name}
+              className="h-full w-full object-cover"
+            />
+          ) : null}
+        </div>
+ 
+        <div className="flex flex-col gap-1">
+          <div className="flex items-center gap-1">
+            <p className="typography-body01-semibold text-text-100">{name}</p>
+            <WorkerRoleBadge role={role} />
+          </div>
+          <p className="flex items-center gap-2 typography-doc text-text-70">
+            <span>다음 근무 예정일</span>
+            <span>{nextWorkDate}</span>
+          </p>
+        </div>
+      </div>
+ 
+      <button
+        type="button"
+        onClick={onOptions}
+        className="flex h-7 w-7 items-center justify-center"
+        aria-label="더보기"
+      >
+        <img src={MoreVerticalIcon} alt="더보기" className="h-7 w-7" />
+      </button>
+    </div>
+  )
+}
+ 
+export type { StoreWorkerListItemProps, StoreWorkerRole }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx.html b/coverage/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx.html new file mode 100644 index 0000000..6832b03 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx.html @@ -0,0 +1,253 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/manager/ui TodayWorkerList.tsx

+
+ +
+ 100% + Statements + 4/4 +
+ + +
+ 66.66% + Branches + 2/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 4/4 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57  +  +  +  +  +  +  +  +  +  +  +  +  +3x +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +3x +  +  +  +  +  +  +  +  + 
interface TodayWorkerItem {
+  id: number | string
+  name: string
+  workTime: string
+  profileImageUrl?: string
+}
+ 
+interface TodayWorkerListProps {
+  workers: TodayWorkerItem[]
+  className?: string
+}
+ 
+function TodayWorkerCard({ worker }: { worker: TodayWorkerItem }) {
+  return (
+    <div className="h-[188px] w-[148px] rounded-2xl border border-line-1 bg-white px-[30px] py-6">
+      <div className="h-[88px] w-[88px] overflow-hidden rounded-full bg-bg-dark">
+        {worker.profileImageUrl ? (
+          <img
+            src={worker.profileImageUrl}
+            alt={worker.name}
+            className="h-full w-full object-cover"
+          />
+        ) : null}
+      </div>
+      <p className="mt-3 text-center typography-body02-semibold text-text-100">
+        {worker.name}
+      </p>
+      <p className="mt-1 text-center typography-body03-regular text-text-70">
+        {worker.workTime}
+      </p>
+    </div>
+  )
+}
+ 
+export function TodayWorkerList({
+  workers,
+  className = '',
+}: TodayWorkerListProps) {
+  return (
+    <section className={className}>
+      <h3 className="typography-headline01 text-text-100">
+        오늘 근무자는 <span className="text-sub">{workers.length}</span>명이에요
+      </h3>
+ 
+      <div className="mt-3 overflow-x-auto scrollbar-hide">
+        <div className="flex min-w-max gap-3">
+          {workers.map(worker => (
+            <TodayWorkerCard key={worker.id} worker={worker} />
+          ))}
+        </div>
+      </div>
+    </section>
+  )
+}
+ 
+export type { TodayWorkerItem, TodayWorkerListProps }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx.html b/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx.html new file mode 100644 index 0000000..511e093 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx.html @@ -0,0 +1,331 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/manager/ui WorkspaceChangeCard.tsx

+
+ +
+ 40% + Statements + 2/5 +
+ + +
+ 88.88% + Branches + 8/9 +
+ + +
+ 33.33% + Functions + 1/3 +
+ + +
+ 40% + Lines + 2/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import EditIcon from '@/assets/icons/home/edit.svg'
+import { WorkCategoryBadge } from '@/shared/ui/home/WorkCategoryBadge'
+ 
+interface WorkspaceStatus {
+  value: string
+  description: string
+}
+ 
+interface WorkspaceChangeItem {
+  id: number
+  businessName: string
+  fullAddress: string
+  createdAt: string
+  status: WorkspaceStatus
+}
+ 
+interface WorkspaceChangeCardProps {
+  workspace: WorkspaceChangeItem
+  isSelected?: boolean
+  categoryLabel?: string
+  className?: string
+  onEdit?: (workspaceId: number) => void
+  onClick?: (workspaceId: number) => void
+}
+ 
+export function WorkspaceChangeCard({
+  workspace,
+  isSelected = false,
+  categoryLabel = '',
+  className = '',
+  onEdit,
+  onClick,
+}: WorkspaceChangeCardProps) {
+  return (
+    <div
+      onClick={() => onClick?.(workspace.id)}
+      className={`flex h-[86px] w-[310px] relative items-start rounded-2xl px-4 py-4 text-left ${
+        isSelected ? 'border border-sub bg-sub-300' : 'bg-bg-dark'
+      } ${onClick ? 'cursor-pointer' : ''} ${className}`}
+    >
+      <div className="flex min-w-0 flex-1 flex-col gap-2 pr-10">
+        <div className="flex min-w-0 items-center gap-2">
+          <p className="line-clamp-1 typography-headline03 text-text-100">
+            {workspace.businessName}
+          </p>
+          <WorkCategoryBadge label={categoryLabel} className="" />
+        </div>
+ 
+        <div className="flex min-w-0 items-center gap-2 typography-body02-regular text-text-100">
+          <span className="whitespace-nowrap" title={workspace.fullAddress}>
+            {workspace.fullAddress}
+          </span>
+          <span
+            className={`h-4 w-px shrink-0 ${
+              isSelected ? 'bg-sub' : 'bg-line-2'
+            }`}
+            aria-hidden
+          />
+          <span
+            className="min-w-0 flex-1 truncate"
+            title={workspace.businessName}
+          >
+            {workspace.businessName}
+          </span>
+        </div>
+      </div>
+      <button
+        type="button"
+        onClick={event => {
+          event.stopPropagation()
+          onEdit?.(workspace.id)
+        }}
+        className="absolute right-4 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center"
+        aria-label="업장 정보 수정"
+      >
+        <img src={EditIcon} alt="수정" className="h-6 w-6" />
+      </button>
+    </div>
+  )
+}
+ 
+export type { WorkspaceChangeCardProps, WorkspaceChangeItem, WorkspaceStatus }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx.html b/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx.html new file mode 100644 index 0000000..33a5809 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx.html @@ -0,0 +1,202 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/manager/ui WorkspaceChangeList.tsx

+
+ +
+ 100% + Statements + 3/3 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {
+  WorkspaceChangeCard,
+  type WorkspaceChangeItem,
+} from './WorkspaceChangeCard'
+ 
+interface WorkspaceChangeListProps {
+  workspaces: WorkspaceChangeItem[]
+  selectedWorkspaceId?: number
+  categoryLabel?: string
+  className?: string
+  onSelectWorkspace?: (workspaceId: number) => void
+  onEditWorkspace?: (workspaceId: number) => void
+}
+ 
+export function WorkspaceChangeList({
+  workspaces,
+  selectedWorkspaceId,
+  categoryLabel = '',
+  className = '',
+  onSelectWorkspace,
+  onEditWorkspace,
+}: WorkspaceChangeListProps) {
+  return (
+    <div className={`flex flex-col gap-2 ${className}`}>
+      {workspaces.map(workspace => (
+        <WorkspaceChangeCard
+          key={workspace.id}
+          workspace={workspace}
+          categoryLabel={categoryLabel}
+          isSelected={workspace.id === selectedWorkspaceId}
+          onClick={onSelectWorkspace}
+          onEdit={onEditWorkspace}
+        />
+      ))}
+    </div>
+  )
+}
+ 
+export type { WorkspaceChangeListProps }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/index.html b/coverage/Code/alter-client/src/features/home/manager/ui/index.html new file mode 100644 index 0000000..427ed61 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/manager/ui/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/manager/ui + + + + + + + + + +
+
+

All files Code/alter-client/src/features/home/manager/ui

+
+ +
+ 78.57% + Statements + 11/14 +
+ + +
+ 82.35% + Branches + 14/17 +
+ + +
+ 77.77% + Functions + 7/9 +
+ + +
+ 76.92% + Lines + 10/13 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
StoreWorkerListItem.tsx +
+
100%2/266.66%2/3100%1/1100%2/2
TodayWorkerList.tsx +
+
100%4/466.66%2/3100%3/3100%4/4
WorkspaceChangeCard.tsx +
+
40%2/588.88%8/933.33%1/340%2/5
WorkspaceChangeList.tsx +
+
100%3/3100%2/2100%2/2100%2/2
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/constants/calendar.ts.html b/coverage/Code/alter-client/src/features/home/user/constants/calendar.ts.html new file mode 100644 index 0000000..7720eda --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/constants/calendar.ts.html @@ -0,0 +1,154 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/constants/calendar.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/constants calendar.ts

+
+ +
+ 100% + Statements + 7/7 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +241x +  +  +  +  +  +  +  +  +  +1x +1x +  +1x +1x +1x +  +1x +  +  +  +  +  + 
export const WEEKDAY_LABELS = [
+  '일',
+  '월',
+  '화',
+  '수',
+  '목',
+  '금',
+  '토',
+] as const
+ 
+export const DATE_KEY_FORMAT = 'yyyy-MM-dd'
+export const MONTH_LABEL_FORMAT = 'yyyy년 M월'
+ 
+export const DAILY_TIMELINE_HEIGHT = 322
+export const DAILY_TIMELINE_START_HOUR = 1
+export const DAILY_TIMELINE_END_HOUR = 8
+ 
+export const DAILY_STATUS_STYLE_MAP: Record<string, string> = {
+  PLANNED: 'bg-main-300/70',
+  CONFIRMED: 'bg-main/70',
+  CANCELLED: 'bg-bg-dark',
+  DELETED: 'bg-bg-dark/80',
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/constants/index.html b/coverage/Code/alter-client/src/features/home/user/constants/index.html new file mode 100644 index 0000000..0cfa2f1 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/constants/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/constants + + + + + + + + + +
+
+

All files Code/alter-client/src/features/home/user/constants

+
+ +
+ 100% + Statements + 7/7 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
calendar.ts +
+
100%7/7100%0/0100%0/0100%7/7
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/index.html b/coverage/Code/alter-client/src/features/home/user/hooks/index.html new file mode 100644 index 0000000..4308f2e --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/hooks/index.html @@ -0,0 +1,191 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/hooks + + + + + + + + + +
+
+

All files Code/alter-client/src/features/home/user/hooks

+
+ +
+ 85.82% + Statements + 115/134 +
+ + +
+ 66.66% + Branches + 38/57 +
+ + +
+ 97.05% + Functions + 33/34 +
+ + +
+ 90.24% + Lines + 111/123 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
useDailyCalendarViewModel.ts +
+
100%25/2562.5%5/8100%7/7100%25/25
useMonthlyCalendarViewModel.ts +
+
82.14%46/5676.19%16/2190%9/1084.31%43/51
useMonthlyDateCellsState.ts +
+
100%10/10100%8/8100%3/3100%10/10
useWeeklyCalendarViewModel.ts +
+
95%19/2060%6/10100%8/8100%19/19
useWorkingStoreCardViewModel.ts +
+
60%12/2030%3/10100%4/473.33%11/15
useWorkingStoresListViewModel.ts +
+
100%3/3100%0/0100%2/2100%3/3
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts.html new file mode 100644 index 0000000..bd83054 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts.html @@ -0,0 +1,394 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/hooks useDailyCalendarViewModel.ts

+
+ +
+ 100% + Statements + 25/25 +
+ + +
+ 62.5% + Branches + 5/8 +
+ + +
+ 100% + Functions + 7/7 +
+ + +
+ 100% + Lines + 25/25 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +5x +5x +  +5x +  +5x +  +  +5x +5x +5x +  +5x +5x +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +2x +2x +2x +  +2x +14x +14x +14x +  +  +2x +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  + 
import { format } from 'date-fns'
+import { useMemo } from 'react'
+import {
+  DAILY_STATUS_STYLE_MAP,
+  DAILY_TIMELINE_END_HOUR,
+  DAILY_TIMELINE_HEIGHT,
+  DAILY_TIMELINE_START_HOUR,
+} from '@/features/home/user/constants/calendar'
+import type {
+  DailyCalendarPropsBase,
+  DailyCalendarViewModel,
+} from '@/features/home/user/types/dailyCalendar'
+import type { CalendarEvent } from '@/features/home/user/types/schedule'
+ 
+function getStatusStyle(status: string) {
+  return DAILY_STATUS_STYLE_MAP[status] ?? 'bg-bg-dark text-text-90'
+}
+ 
+function sortByStartTime(
+  a: { startDateTime: string },
+  b: { startDateTime: string }
+) {
+  return a.startDateTime.localeCompare(b.startDateTime)
+}
+ 
+function buildDailyEventBlocks({
+  events,
+  timelineHeight,
+  timelineStartHour,
+  totalMinutes,
+}: {
+  events: CalendarEvent[]
+  timelineHeight: number
+  timelineStartHour: number
+  totalMinutes: number
+}) {
+  return [...events].sort(sortByStartTime).map(event => {
+    const startDate = new Date(event.startDateTime)
+    const endDate = new Date(event.endDateTime)
+ 
+    const startMinutesRaw =
+      (startDate.getHours() - timelineStartHour) * 60 + startDate.getMinutes()
+    const endMinutesRaw =
+      (endDate.getHours() - timelineStartHour) * 60 + endDate.getMinutes()
+ 
+    const startMinutes = Math.max(0, Math.min(totalMinutes, startMinutesRaw))
+    const endMinutes = Math.max(0, Math.min(totalMinutes, endMinutesRaw))
+    const durationMinutes = Math.max(endMinutes - startMinutes, 20)
+ 
+    const top = (startMinutes / totalMinutes) * timelineHeight
+    const height = Math.min(
+      (durationMinutes / totalMinutes) * timelineHeight,
+      timelineHeight - top
+    )
+ 
+    return {
+      key: event.shiftId,
+      workspaceName: event.workspaceName,
+      timeLabel: `${event.startTimeLabel} - ${event.endTimeLabel}`,
+      statusClassName: getStatusStyle(event.status),
+      top,
+      height,
+    }
+  })
+}
+ 
+export function useDailyCalendarViewModel({
+  baseDate,
+  data,
+  workspaceName,
+}: DailyCalendarPropsBase): DailyCalendarViewModel {
+  return useMemo(() => {
+    const timelineHeight = DAILY_TIMELINE_HEIGHT
+    const timelineStartHour = DAILY_TIMELINE_START_HOUR
+    const timelineEndHour = DAILY_TIMELINE_END_HOUR
+    const totalMinutes = (timelineEndHour - timelineStartHour) * 60
+ 
+    const timelineLines = Array.from({ length: 7 }, (_, idx) => {
+      const label = String(idx + 1).padStart(2, '0')
+      const top = ((idx + 1) / 8) * timelineHeight
+      return { label, top }
+    })
+ 
+    const eventBlocks = buildDailyEventBlocks({
+      events: data?.events ?? [],
+      timelineHeight,
+      timelineStartHour,
+      totalMinutes,
+    })
+ 
+    return {
+      title: workspaceName ?? '오늘의 아르바이트',
+      dateLabel: format(baseDate, 'yyyy년 M월 d일'),
+      totalWorkHoursText: String(data?.summary.totalWorkHours ?? 0).padStart(
+        2,
+        '0'
+      ),
+      timelineHeight,
+      timelineLines,
+      eventBlocks,
+    }
+  }, [baseDate, data, workspaceName])
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts.html new file mode 100644 index 0000000..24bbfa0 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts.html @@ -0,0 +1,502 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/hooks useMonthlyCalendarViewModel.ts

+
+ +
+ 82.14% + Statements + 46/56 +
+ + +
+ 76.19% + Branches + 16/21 +
+ + +
+ 90% + Functions + 9/10 +
+ + +
+ 84.31% + Lines + 43/51 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +2x +2x +  +2x +70x +  +  +  +  +  +  +  +  +  +  +  +5x +5x +5x +5x +  +5x +  +  +  +  +  +  +  +  +  +  +5x +5x +  +  +  +2x +  +2x +5x +5x +  +5x +  +  +  +  +  +  +  +5x +5x +  +5x +5x +5x +5x +  +5x +5x +5x +5x +5x +5x +  +  +5x +  +  +  +2x +  +5x +5x +5x +5x +5x +  +  +  +  +  +  +  +  +  +  +  +2x +2x +  +2x +  +2x +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  + 
import {
+  addDays,
+  eachDayOfInterval,
+  endOfMonth,
+  endOfWeek,
+  format,
+  isSameMonth,
+  startOfDay,
+  startOfMonth,
+  startOfWeek,
+} from 'date-fns'
+import { useMemo } from 'react'
+import {
+  DATE_KEY_FORMAT,
+  MONTH_LABEL_FORMAT,
+  WEEKDAY_LABELS,
+} from '@/features/home/user/constants/calendar'
+import { useMonthlyDateCellsState } from '@/features/home/user/hooks/useMonthlyDateCellsState'
+import type {
+  MonthlyCalendarViewModel,
+  MonthlyCellInput,
+  MonthlyDayMetrics,
+  MonthlyCalendarPropsBase,
+} from '@/features/home/user/types/monthlyCalendar'
+import type { CalendarViewData } from '@/features/home/user/types/schedule'
+ 
+function getMonthlyCells(baseDate: Date): MonthlyCellInput[] {
+  const monthStart = startOfMonth(baseDate)
+  const monthEnd = endOfMonth(baseDate)
+  const intervalStart = startOfWeek(monthStart, { weekStartsOn: 0 })
+  const intervalEnd = endOfWeek(monthEnd, { weekStartsOn: 0 })
+ 
+  return eachDayOfInterval({ start: intervalStart, end: intervalEnd }).map(
+    date => ({
+      dateKey: format(date, DATE_KEY_FORMAT),
+      dayText: format(date, 'd'),
+      isCurrentMonth: isSameMonth(date, baseDate),
+      weekDay: date.getDay(),
+    })
+  )
+}
+ 
+type MinuteRange = [number, number]
+ 
+function mergeMinuteRanges(ranges: MinuteRange[]) {
+  Iif (ranges.length === 0) return 0
+  const sorted = [...ranges].sort((a, b) => a[0] - b[0])
+  let [currentStart, currentEnd] = sorted[0]
+  let total = 0
+ 
+  for (let idx = 1; idx < sorted.length; idx += 1) {
+    const [nextStart, nextEnd] = sorted[idx]
+    if (nextStart <= currentEnd) {
+      currentEnd = Math.max(currentEnd, nextEnd)
+      continue
+    }
+    total += currentEnd - currentStart
+    currentStart = nextStart
+    currentEnd = nextEnd
+  }
+ 
+  total += currentEnd - currentStart
+  return total
+}
+ 
+function getDayMetricsByDate(data: CalendarViewData | null) {
+  const rangesByDate: Record<string, MinuteRange[]> = {}
+ 
+  ;(data?.events ?? []).forEach(event => {
+    const start = new Date(event.startDateTime)
+    const end = new Date(event.endDateTime)
+ 
+    Iif (
+      Number.isNaN(start.getTime()) ||
+      Number.isNaN(end.getTime()) ||
+      end <= start
+    ) {
+      return
+    }
+ 
+    let cursor = startOfDay(start)
+    const lastDay = startOfDay(end)
+ 
+    while (cursor <= lastDay) {
+      const nextDay = addDays(cursor, 1)
+      const clipStart = Math.max(start.getTime(), cursor.getTime())
+      const clipEnd = Math.min(end.getTime(), nextDay.getTime())
+ 
+      Eif (clipEnd > clipStart) {
+        const dayKey = format(cursor, DATE_KEY_FORMAT)
+        const startMinute = (clipStart - cursor.getTime()) / (1000 * 60)
+        const endMinute = (clipEnd - cursor.getTime()) / (1000 * 60)
+        rangesByDate[dayKey] = rangesByDate[dayKey] ?? []
+        rangesByDate[dayKey].push([startMinute, endMinute])
+      }
+ 
+      cursor = nextDay
+    }
+  })
+ 
+  return Object.entries(rangesByDate).reduce<Record<string, MonthlyDayMetrics>>(
+    (acc, [dateKey, ranges]) => {
+      const occupiedMinutes = mergeMinuteRanges(ranges)
+      const dayHours = Number((occupiedMinutes / 60).toFixed(1))
+      const dayProgress = Math.min(Math.max(occupiedMinutes / (24 * 60), 0), 1)
+      acc[dateKey] = { dayHours, dayProgress }
+      return acc
+    },
+    {}
+  )
+}
+ 
+export function useMonthlyCalendarViewModel({
+  baseDate,
+  data,
+  workspaceName,
+  selectedDateKey,
+}: MonthlyCalendarPropsBase): MonthlyCalendarViewModel {
+  const cells = useMemo(() => getMonthlyCells(baseDate), [baseDate])
+  const selectedKey = selectedDateKey ?? format(baseDate, DATE_KEY_FORMAT)
+ 
+  const dayMetricsByDate = useMemo(() => getDayMetricsByDate(data), [data])
+ 
+  const monthlyDateCellsState = useMonthlyDateCellsState({
+    cells,
+    dayMetricsByDate,
+    selectedKey,
+  })
+ 
+  return {
+    title: workspaceName ?? '월간 아르바이트',
+    monthLabel: format(baseDate, MONTH_LABEL_FORMAT),
+    totalWorkHoursText: String(
+      Math.round(data?.summary.totalWorkHours ?? 0)
+    ).padStart(2, '0'),
+    weekdayLabels: WEEKDAY_LABELS,
+    monthlyDateCellsState,
+  }
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts.html new file mode 100644 index 0000000..bf4e18f --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts.html @@ -0,0 +1,175 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/hooks useMonthlyDateCellsState.ts

+
+ +
+ 100% + Statements + 10/10 +
+ + +
+ 100% + Branches + 8/8 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 10/10 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +311x +  +  +  +  +  +  +  +2x +  +2x +70x +70x +70x +70x +70x +70x +  +70x +  +  +  +  +  +  +  +  +  +  +  + 
import { useMemo } from 'react'
+import type { UseMonthlyDateCellsStateParams } from '@/features/home/user/types/monthlyCalendar'
+ 
+export function useMonthlyDateCellsState({
+  cells,
+  dayMetricsByDate,
+  selectedKey,
+}: UseMonthlyDateCellsStateParams) {
+  return useMemo(
+    () =>
+      cells.map(cell => {
+        const dayMetrics = dayMetricsByDate[cell.dateKey]
+        const dayHours = dayMetrics?.dayHours ?? 0
+        const dayProgress = dayMetrics?.dayProgress ?? 0
+        const isWeekend = cell.weekDay === 0 || cell.weekDay === 6
+        const isSelected = cell.dateKey === selectedKey
+        const isActiveDay = dayHours > 0 && cell.isCurrentMonth
+ 
+        return {
+          ...cell,
+          dayHours,
+          dayProgress,
+          isWeekend,
+          isSelected,
+          isActiveDay,
+        }
+      }),
+    [cells, dayMetricsByDate, selectedKey]
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts.html new file mode 100644 index 0000000..b6e7bc5 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts.html @@ -0,0 +1,277 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/hooks useWeeklyCalendarViewModel.ts

+
+ +
+ 95% + Statements + 19/20 +
+ + +
+ 60% + Branches + 6/10 +
+ + +
+ 100% + Functions + 8/8 +
+ + +
+ 100% + Lines + 19/19 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65  +1x +  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +14x +14x +  +70x +10x +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +7x +  +  +  +1x +7x +7x +7x +7x +  +7x +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  + 
import { format } from 'date-fns'
+import { useMemo } from 'react'
+import { getWeeklyDateCells } from '@/features/home/user/lib/date'
+import type {
+  WeeklyCalendarPropsBase,
+  WeeklyCalendarViewModel,
+} from '@/features/home/user/types/weeklyCalendar'
+ 
+function getSelectedDayIndex(baseDate: Date) {
+  const day = baseDate.getDay()
+  return day === 0 ? 6 : day - 1
+}
+ 
+function getDayTotalHours(
+  dateKey: string,
+  data: WeeklyCalendarPropsBase['data']
+) {
+  Iif (!data) return 0
+  return Number(
+    data.events
+      .filter(event => event.dateKey === dateKey)
+      .reduce((acc, cur) => acc + cur.durationHours, 0)
+      .toFixed(1)
+  )
+}
+ 
+export function useWeeklyCalendarViewModel({
+  baseDate,
+  data,
+  workspaceName,
+}: WeeklyCalendarPropsBase): WeeklyCalendarViewModel {
+  return useMemo(() => {
+    const cells = getWeeklyDateCells(baseDate)
+    const selectedDayIndex = getSelectedDayIndex(baseDate)
+    const maxHours = Math.max(
+      ...cells.map(cell => getDayTotalHours(cell.dateKey, data)),
+      1
+    )
+ 
+    const dayCells = cells.map((cell, index) => {
+      const totalHours = getDayTotalHours(cell.dateKey, data)
+      const heightPercent = Math.max((totalHours / maxHours) * 100, 0)
+      const primaryHeight = Math.max((heightPercent / 100) * 320, 0)
+      const secondaryHeight = Math.max(primaryHeight * 0.78, 0)
+ 
+      return {
+        dateKey: cell.dateKey,
+        dayLabel: cell.dayLabel,
+        totalHours,
+        isSelected: index === selectedDayIndex,
+        isPrimaryBar: index % 2 === 1,
+        primaryHeight,
+        secondaryHeight,
+        showSecondary: index !== 0 && totalHours > 0,
+      }
+    })
+ 
+    return {
+      title: workspaceName ?? `${format(baseDate, 'M월')} 주간 아르바이트`,
+      totalWorkHoursText: String(Math.round(data?.summary.totalWorkHours ?? 0)),
+      dayCells,
+    }
+  }, [baseDate, data, workspaceName])
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts.html new file mode 100644 index 0000000..c32641d --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts.html @@ -0,0 +1,187 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/hooks useWorkingStoreCardViewModel.ts

+
+ +
+ 60% + Statements + 12/20 +
+ + +
+ 30% + Branches + 3/10 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 73.33% + Lines + 11/15 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35  +1x +  +  +  +6x +6x +6x +  +  +  +6x +6x +  +6x +6x +  +6x +  +  +  +  +  +  +  +  +6x +6x +  +  +  +  +  +  + 
import { differenceInCalendarDays, format, parseISO } from 'date-fns'
+import { useMemo } from 'react'
+import type { WorkingStoreItem } from '@/features/home/user/ui/WorkingStoreCard'
+ 
+function formatNextShiftDate(nextShiftDateTime: string) {
+  const date = parseISO(nextShiftDateTime)
+  Iif (Number.isNaN(date.getTime())) return '-'
+  return format(date, 'yyyy.MM.dd')
+}
+ 
+function getDueText(nextShiftDateTime: string) {
+  const nextDate = parseISO(nextShiftDateTime)
+  Iif (Number.isNaN(nextDate.getTime())) return '-'
+ 
+  const today = new Date()
+  const diffDays = differenceInCalendarDays(nextDate, today)
+ 
+  Eif (diffDays <= 0) return '오늘'
+  if (diffDays === 1) return '내일'
+  if (diffDays < 30) return `${diffDays}일 후`
+ 
+  const monthDiff = Math.round(diffDays / 30)
+  return `${monthDiff}달 후`
+}
+ 
+export function useWorkingStoreCardViewModel(store: WorkingStoreItem) {
+  return useMemo(
+    () => ({
+      nextWorkDate: formatNextShiftDate(store.nextShiftDateTime),
+      dueText: getDueText(store.nextShiftDateTime),
+    }),
+    [store.nextShiftDateTime]
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts.html new file mode 100644 index 0000000..e243343 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/hooks useWorkingStoresListViewModel.ts

+
+ +
+ 100% + Statements + 3/3 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 3/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +121x +  +  +  +2x +2x +  +  +  +  +  + 
import { useMemo } from 'react'
+import type { WorkingStoreItem } from '@/features/home/user/ui/WorkingStoreCard'
+ 
+export function useWorkingStoresListViewModel(stores: WorkingStoreItem[]) {
+  return useMemo(
+    () => ({
+      visibleStores: stores.slice(0, 3),
+    }),
+    [stores]
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/lib/date.ts.html b/coverage/Code/alter-client/src/features/home/user/lib/date.ts.html new file mode 100644 index 0000000..60df2d3 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/lib/date.ts.html @@ -0,0 +1,469 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/lib/date.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/lib date.ts

+
+ +
+ 17.94% + Statements + 7/39 +
+ + +
+ 0% + Branches + 0/10 +
+ + +
+ 13.33% + Functions + 2/15 +
+ + +
+ 15.78% + Lines + 6/38 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +7x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {
+  addDays,
+  addMonths,
+  eachDayOfInterval,
+  endOfMonth,
+  endOfWeek,
+  format,
+  isSameMonth,
+  startOfMonth,
+  startOfWeek,
+} from 'date-fns'
+import { ko } from 'date-fns/locale'
+import type { ScheduleDataDto } from '@/features/home/user/types/schedule'
+import type { HomeCalendarMode } from '@/features/home/user/types/schedule'
+ 
+const ISO_DATE_LENGTH = 10
+const ISO_TIME_START = 11
+const ISO_TIME_END = 16
+ 
+export function toDateKey(iso: string) {
+  return iso.slice(0, ISO_DATE_LENGTH)
+}
+ 
+export function toTimeLabel(iso: string) {
+  return iso.slice(ISO_TIME_START, ISO_TIME_END)
+}
+ 
+export function getDurationHours(startIso: string, endIso: string) {
+  const start = new Date(startIso).getTime()
+  const end = new Date(endIso).getTime()
+  const diffHours = Math.max((end - start) / (1000 * 60 * 60), 0)
+  return Number(diffHours.toFixed(1))
+}
+ 
+export function getMonthlyDateCells(baseDate: Date) {
+  const monthStart = startOfMonth(baseDate)
+  const monthEnd = endOfMonth(baseDate)
+  const intervalStart = startOfWeek(monthStart, { weekStartsOn: 1 })
+  const intervalEnd = endOfWeek(monthEnd, { weekStartsOn: 1 })
+ 
+  return eachDayOfInterval({ start: intervalStart, end: intervalEnd }).map(
+    date => ({
+      date,
+      dateKey: format(date, 'yyyy-MM-dd'),
+      day: format(date, 'd'),
+      isCurrentMonth: isSameMonth(date, baseDate),
+      isToday: format(date, 'yyyy-MM-dd') === format(new Date(), 'yyyy-MM-dd'),
+    })
+  )
+}
+ 
+export function getWeeklyDateCells(baseDate: Date) {
+  const weekStart = startOfWeek(baseDate, { weekStartsOn: 1 })
+  const weekEnd = endOfWeek(baseDate, { weekStartsOn: 1 })
+ 
+  return eachDayOfInterval({ start: weekStart, end: weekEnd }).map(date => ({
+    date,
+    dateKey: format(date, 'yyyy-MM-dd'),
+    dayLabel: format(date, 'EEE', { locale: ko }),
+    day: format(date, 'd'),
+    isToday: format(date, 'yyyy-MM-dd') === format(new Date(), 'yyyy-MM-dd'),
+  }))
+}
+ 
+export function getDayHours(
+  events: ScheduleDataDto['schedules'],
+  dateKey: string
+) {
+  return events
+    .filter(item => toDateKey(item.startDateTime) === dateKey)
+    .reduce(
+      (acc, cur) => acc + getDurationHours(cur.startDateTime, cur.endDateTime),
+      0
+    )
+}
+ 
+export function getWeekRangeLabel(baseDate: Date) {
+  const weekStart = startOfWeek(baseDate, { weekStartsOn: 1 })
+  const weekEnd = endOfWeek(baseDate, { weekStartsOn: 1 })
+  return `${format(weekStart, 'M/d')} - ${format(weekEnd, 'M/d')}`
+}
+ 
+export function getDailyHourTicks() {
+  return Array.from(
+    { length: 24 },
+    (_, idx) => `${idx.toString().padStart(2, '0')}:00`
+  )
+}
+ 
+export function getRangeParamsByMode(baseDate: Date, mode: HomeCalendarMode) {
+  if (mode === 'monthly') {
+    return {
+      startDate: format(startOfMonth(baseDate), 'yyyy-MM-dd'),
+      endDate: format(endOfMonth(baseDate), 'yyyy-MM-dd'),
+    }
+  }
+ 
+  if (mode === 'weekly') {
+    return {
+      startDate: format(
+        startOfWeek(baseDate, { weekStartsOn: 1 }),
+        'yyyy-MM-dd'
+      ),
+      endDate: format(endOfWeek(baseDate, { weekStartsOn: 1 }), 'yyyy-MM-dd'),
+    }
+  }
+ 
+  const day = format(baseDate, 'yyyy-MM-dd')
+  return {
+    startDate: day,
+    endDate: day,
+  }
+}
+ 
+export function moveDateByMode(
+  baseDate: Date,
+  direction: 'prev' | 'next',
+  mode: 'monthly' | 'weekly' | 'daily'
+) {
+  const unit = direction === 'next' ? 1 : -1
+  if (mode === 'monthly') {
+    return addMonths(baseDate, unit)
+  }
+  if (mode === 'weekly') {
+    return addDays(baseDate, 7 * unit)
+  }
+  return addDays(baseDate, unit)
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/lib/index.html b/coverage/Code/alter-client/src/features/home/user/lib/index.html new file mode 100644 index 0000000..dfb0031 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/lib/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/lib + + + + + + + + + +
+
+

All files Code/alter-client/src/features/home/user/lib

+
+ +
+ 17.94% + Statements + 7/39 +
+ + +
+ 0% + Branches + 0/10 +
+ + +
+ 13.33% + Functions + 2/15 +
+ + +
+ 15.78% + Lines + 6/38 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
date.ts +
+
17.94%7/390%0/1013.33%2/1515.78%6/38
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx.html new file mode 100644 index 0000000..2f216cf --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx.html @@ -0,0 +1,196 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui AppliedStoreCard.tsx

+
+ +
+ 100% + Statements + 3/3 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 3/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38  +  +  +  +  +  +  +  +  +  +  +7x +  +7x +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { ApplicationStatusBadge } from '@/shared/ui/home/ApplicationStatusBadge'
+ 
+interface AppliedStoreCardProps {
+  storeName: string
+  status?: 'applied' | 'rejected'
+}
+ 
+export function AppliedStoreCard({
+  storeName,
+  status = 'applied',
+}: AppliedStoreCardProps) {
+  const isRejected = status === 'rejected'
+ 
+  return (
+    <div
+      className={`relative h-[156px] w-[130px] overflow-hidden rounded-2xl ${
+        isRejected
+          ? 'bg-[linear-gradient(152deg,#3a9982_5.7%,#9dccc1_92.6%)]'
+          : 'bg-[linear-gradient(152deg,#2ce283_5.7%,#c0f7da_92.6%)]'
+      }`}
+    >
+      <p
+        className={`absolute left-3 top-3 max-w-16 whitespace-normal break-words line-clamp-4 typography-body02-semibold ${
+          isRejected ? 'text-white' : 'text-text-100'
+        }`}
+      >
+        {storeName}
+      </p>
+      <ApplicationStatusBadge
+        status={status}
+        className="absolute bottom-3 right-[10px]"
+      />
+    </div>
+  )
+}
+ 
+export type { AppliedStoreCardProps }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx.html new file mode 100644 index 0000000..1df7d3f --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx.html @@ -0,0 +1,247 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui AppliedStoreList.tsx

+
+ +
+ 100% + Statements + 5/5 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 5/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x +  +  +1x +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { MoreButton } from '@/shared/ui/common/MoreButton'
+import { AppliedStoreCard } from '@/features/home/user/ui/AppliedStoreCard'
+ 
+interface AppliedStoreItem {
+  id: number | string
+  storeName: string
+  status: 'applied' | 'rejected'
+}
+ 
+interface AppliedStoreListProps {
+  title?: string
+  recentLabel?: string
+  stores: AppliedStoreItem[]
+  onMoreClick?: () => void
+}
+ 
+export function AppliedStoreList({
+  title = '내가 지원한 가게',
+  recentLabel,
+  stores,
+  onMoreClick,
+}: AppliedStoreListProps) {
+  const visibleStores = stores.slice(0, 5)
+  const rightLabel = recentLabel ?? `최근 지원한 ${visibleStores.length}개`
+ 
+  return (
+    <section className="w-full rounded-2xl bg-white py-6">
+      <div className="flex justify-between px-6">
+        <h3 className="typography-headline01 text-text-100">{title}</h3>
+        <p className="typography-body02-regular text-text-50 mt-2 mb-[3px]">
+          {rightLabel}
+        </p>
+      </div>
+ 
+      <div className="mt-4 overflow-x-auto scrollbar-hide px-6">
+        <div className="flex min-w-max gap-3">
+          {visibleStores.map(store => (
+            <AppliedStoreCard
+              key={store.id}
+              storeName={store.storeName}
+              status={store.status}
+            />
+          ))}
+        </div>
+      </div>
+ 
+      <div className="mt-4 px-6">
+        <MoreButton onClick={onMoreClick} />
+      </div>
+    </section>
+  )
+}
+ 
+export type { AppliedStoreListProps, AppliedStoreItem }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx.html new file mode 100644 index 0000000..e819f0d --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx.html @@ -0,0 +1,370 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui DailyCalendar.tsx

+
+ +
+ 85.71% + Statements + 6/7 +
+ + +
+ 66.66% + Branches + 2/3 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 85.71% + Lines + 6/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +2x +  +  +1x +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +14x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import DownIcon from '@/assets/icons/home/chevron-down.svg?react'
+import { useDailyCalendarViewModel } from '@/features/home/user/hooks/useDailyCalendarViewModel'
+import type { DailyCalendarPropsBase } from '@/features/home/user/types/dailyCalendar'
+ 
+interface DailyCalendarProps extends DailyCalendarPropsBase {
+  isLoading?: boolean
+}
+ 
+export function DailyCalendar({
+  baseDate,
+  data,
+  workspaceName,
+  isLoading = false,
+}: DailyCalendarProps) {
+  const {
+    title,
+    dateLabel,
+    totalWorkHoursText,
+    timelineHeight,
+    timelineLines,
+    eventBlocks,
+  } = useDailyCalendarViewModel({
+    baseDate,
+    data,
+    workspaceName,
+  })
+ 
+  Iif (isLoading) {
+    return (
+      <div className="rounded-2xl bg-white p-6">
+        <p className="text-text-70 text-3">금일 일정을 불러오는 중...</p>
+      </div>
+    )
+  }
+ 
+  return (
+    <section>
+      <div className="px-[13px]">
+        <h3 className="typography-headline01 mb-3">{title}</h3>
+        <button type="button" className="flex items-center gap-1">
+          <p className="typography-body01-regular text-text-90">{dateLabel}</p>
+          <DownIcon className="h-4 w-4 text-text-90" />
+        </button>
+        <div className="flex items-center gap-2 py-1 mt-5">
+          <span className="typography-display text-text-100">
+            {totalWorkHoursText}
+          </span>
+          <span className="typography-body01-semibold text-text-90">
+            시간 근무해요
+          </span>
+        </div>
+      </div>
+ 
+      <div className="mt-4 border-t border-line-2">
+        <div className="relative" style={{ height: `${timelineHeight}px` }}>
+          <div className="absolute left-[18px] top-0 h-full w-px bg-line-2" />
+ 
+          {timelineLines.map(line => {
+            return (
+              <div key={line.label}>
+                <p
+                  className="absolute left-0 -translate-y-1/2 typography-doc-non text-text-50"
+                  style={{ top: line.top }}
+                >
+                  {line.label}
+                </p>
+                <div
+                  className="absolute left-[18px] right-0 border-t border-dashed border-line-2"
+                  style={{ top: line.top }}
+                />
+              </div>
+            )
+          })}
+ 
+          {eventBlocks.map(block => {
+            return (
+              <div
+                key={block.key}
+                className={`absolute left-[20px] right-0 rounded-2xl p-4 ${block.statusClassName}`}
+                style={{ top: block.top, height: block.height }}
+              >
+                <p className="typography-body03-semibold text-text-100">
+                  {block.workspaceName}
+                </p>
+                <p className="typography-doc-non text-text-90 mt-1">
+                  {block.timeLabel}
+                </p>
+              </div>
+            )
+          })}
+        </div>
+      </div>
+    </section>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx.html new file mode 100644 index 0000000..afaa93c --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx.html @@ -0,0 +1,244 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui HomeScheduleCalendar.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import type {
+  CalendarViewData,
+  HomeCalendarMode,
+} from '@/features/home/user/types/schedule'
+import { DailyCalendar } from '@/features/home/user/ui/DailyCalendar'
+import { MonthlyCalendar } from '@/features/home/user/ui/MonthlyCalendar'
+import { WeeklyCalendar } from '@/features/home/user/ui/WeeklyCalendar'
+ 
+interface HomeScheduleCalendarProps {
+  mode: HomeCalendarMode
+  baseDate: Date
+  data: CalendarViewData | null
+  workspaceName?: string
+  isLoading?: boolean
+  onDateChange: (nextDate: Date) => void
+}
+ 
+export function HomeScheduleCalendar({
+  mode,
+  baseDate,
+  data,
+  workspaceName,
+  isLoading = false,
+}: HomeScheduleCalendarProps) {
+  return (
+    <section className="rounded-2xl bg-white px-[11px] py-6 w-[358px]">
+      {mode === 'monthly' && (
+        <MonthlyCalendar
+          baseDate={baseDate}
+          data={data}
+          workspaceName={workspaceName}
+          isLoading={isLoading}
+        />
+      )}
+      {mode === 'weekly' && (
+        <WeeklyCalendar
+          baseDate={baseDate}
+          data={data}
+          workspaceName={workspaceName}
+          isLoading={isLoading}
+        />
+      )}
+      {mode === 'daily' && (
+        <DailyCalendar
+          baseDate={baseDate}
+          data={data}
+          workspaceName={workspaceName}
+          isLoading={isLoading}
+        />
+      )}
+    </section>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx.html new file mode 100644 index 0000000..d1e644e --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx.html @@ -0,0 +1,340 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui MonthlyCalendar.tsx

+
+ +
+ 100% + Statements + 7/7 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +2x +1x +  +1x +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +7x +  +  +  +  +  +  +  +  +  +  +35x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import DownIcon from '@/assets/icons/home/chevron-down.svg?react'
+import { useMonthlyCalendarViewModel } from '@/features/home/user/hooks/useMonthlyCalendarViewModel'
+import type { MonthlyCalendarPropsBase } from '@/features/home/user/types/monthlyCalendar'
+import { MonthlyDateCell } from '@/features/home/user/ui/MonthlyDateCell'
+ 
+interface MonthlyCalendarProps extends MonthlyCalendarPropsBase {
+  isLoading?: boolean
+}
+ 
+export function MonthlyCalendar({
+  baseDate,
+  data,
+  workspaceName,
+  isLoading = false,
+  selectedDateKey,
+}: MonthlyCalendarProps) {
+  const {
+    title,
+    monthLabel,
+    totalWorkHoursText,
+    weekdayLabels,
+    monthlyDateCellsState,
+  } = useMonthlyCalendarViewModel({
+    baseDate,
+    data,
+    workspaceName,
+    selectedDateKey,
+  })
+ 
+  if (isLoading) {
+    return (
+      <div className="rounded-2xl bg-white p-6">
+        <p className="text-text-70 text-3">월간 일정을 불러오는 중...</p>
+      </div>
+    )
+  }
+ 
+  return (
+    <section className="rounded-2xl bg-white">
+      <div className="px-[13px] gap-2">
+        <h3 className="typography-headline01 mb-4">{title}</h3>
+        <button
+          type="button"
+          className="flex items-center gap-1 typography-body01-regular text-text-90"
+        >
+          {monthLabel}
+          <DownIcon className="w-4 h-4" />
+        </button>
+        <div className="flex items-center gap-2 py-1">
+          <span className="typography-display">{totalWorkHoursText}</span>
+          <span className="typography-body02-semibold">시간 근무해요</span>
+        </div>
+      </div>
+ 
+      <section className="mt-4">
+        <div className="grid grid-cols-7 text-center">
+          {weekdayLabels.map((label, index) => (
+            <span
+              key={label}
+              className={`w-12 typography-body03-regular ${index === 0 || index === 6 ? 'text-[#DC0000]' : 'text-text-50'}`}
+            >
+              {label}
+            </span>
+          ))}
+        </div>
+ 
+        <div className="grid grid-cols-7 gap-y-2">
+          {monthlyDateCellsState.map(cell => {
+            return (
+              <MonthlyDateCell
+                key={cell.dateKey}
+                dayText={cell.dayText}
+                isCurrentMonth={cell.isCurrentMonth}
+                isWeekend={cell.isWeekend}
+                isSelected={cell.isSelected}
+                isActiveDay={cell.isActiveDay}
+                gaugeRatio={cell.dayProgress}
+              />
+            )
+          })}
+        </div>
+      </section>
+    </section>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx.html new file mode 100644 index 0000000..9d98043 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx.html @@ -0,0 +1,217 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui MonthlyDateCell.tsx

+
+ +
+ 100% + Statements + 3/3 +
+ + +
+ 100% + Branches + 9/9 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 3/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +40x +  +  +  +  +  +40x +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  + 
import { MonthlyDateGauge } from '@/features/home/user/ui/MonthlyDateGauge'
+ 
+interface MonthlyDateCellProps {
+  dayText: string
+  isCurrentMonth: boolean
+  isWeekend: boolean
+  isSelected: boolean
+  isActiveDay: boolean
+  gaugeRatio?: number
+}
+ 
+export function MonthlyDateCell({
+  dayText,
+  isCurrentMonth,
+  isWeekend,
+  isSelected,
+  isActiveDay,
+  gaugeRatio = 0,
+}: MonthlyDateCellProps) {
+  const dayTextColor = !isCurrentMonth
+    ? 'text-text-50'
+    : isWeekend
+      ? 'text-[#DC0000]'
+      : 'text-text-50'
+ 
+  return (
+    <div
+      className={`mx-auto flex h-12 w-12 items-center justify-center ${
+        isSelected ? 'bg-bg-light' : ''
+      }`}
+    >
+      {isActiveDay ? (
+        <div className="relative flex h-8 w-8 items-center justify-center">
+          <MonthlyDateGauge gaugeRatio={gaugeRatio} />
+          <span className="typography-body03-semibold text-text-100">
+            {dayText}
+          </span>
+        </div>
+      ) : (
+        <p className={`typography-body03-regular ${dayTextColor}`}>{dayText}</p>
+      )}
+    </div>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx.html new file mode 100644 index 0000000..f2cc418 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx.html @@ -0,0 +1,244 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui MonthlyDateGauge.tsx

+
+ +
+ 100% + Statements + 7/7 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +6x +6x +6x +6x +  +6x +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
interface MonthlyDateGaugeProps {
+  gaugeRatio: number
+  size?: number
+  strokeWidth?: number
+  backgroundStroke?: string
+  progressStroke?: string
+}
+ 
+export function MonthlyDateGauge({
+  gaugeRatio,
+  size = 32,
+  strokeWidth = 4,
+  backgroundStroke = '#EFEFEF',
+  progressStroke = '#2CE283',
+}: MonthlyDateGaugeProps) {
+  const normalizedRatio = Math.min(Math.max(gaugeRatio, 0), 1)
+  const center = size / 2
+  const radius = (size - strokeWidth) / 2
+  const circumference = 2 * Math.PI * radius
+  const progressLength = circumference * normalizedRatio
+ 
+  return (
+    <svg
+      className="absolute inset-0"
+      width={size}
+      height={size}
+      viewBox={`0 0 ${size} ${size}`}
+      aria-hidden="true"
+    >
+      <g transform={`rotate(35 ${center} ${center})`}>
+        <circle
+          cx={center}
+          cy={center}
+          r={radius}
+          fill="none"
+          stroke={backgroundStroke}
+          strokeWidth={strokeWidth}
+        />
+        <circle
+          cx={center}
+          cy={center}
+          r={radius}
+          fill="none"
+          stroke={progressStroke}
+          strokeWidth={strokeWidth}
+          strokeLinecap="square"
+          strokeDasharray={`${progressLength} ${circumference}`}
+          transform={`translate(${size} 0) scale(-1 1)`}
+        />
+      </g>
+    </svg>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx.html new file mode 100644 index 0000000..c7b24b9 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx.html @@ -0,0 +1,343 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui WeeklyCalendar.tsx

+
+ +
+ 85.71% + Statements + 6/7 +
+ + +
+ 90.9% + Branches + 10/11 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 85.71% + Lines + 6/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +1x +  +  +1x +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +7x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +7x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { useWeeklyCalendarViewModel } from '@/features/home/user/hooks/useWeeklyCalendarViewModel'
+import type { WeeklyCalendarPropsBase } from '@/features/home/user/types/weeklyCalendar'
+ 
+interface WeeklyCalendarProps extends WeeklyCalendarPropsBase {
+  isLoading?: boolean
+}
+ 
+export function WeeklyCalendar({
+  baseDate,
+  data,
+  workspaceName,
+  isLoading = false,
+}: WeeklyCalendarProps) {
+  const { title, totalWorkHoursText, dayCells } = useWeeklyCalendarViewModel({
+    baseDate,
+    data,
+    workspaceName,
+  })
+ 
+  Iif (isLoading) {
+    return (
+      <div className="rounded-2xl bg-white p-6">
+        <p className="text-text-70 text-3">주간 일정을 불러오는 중...</p>
+      </div>
+    )
+  }
+ 
+  return (
+    <section>
+      <div className="px-[13px] gap-2">
+        <h3 className="typography-headline01 mb-4">{title}</h3>
+        <div className="flex items-center gap-2 py-1">
+          <span className="typography-body01-semibold text-text-90">주</span>
+          <span className="typography-display text-text-100">
+            {totalWorkHoursText}
+          </span>
+          <span className="typography-body01-semibold text-text-90">
+            시간 근무해요
+          </span>
+        </div>
+      </div>
+ 
+      <div className="mt-2 grid grid-cols-7">
+        {dayCells.map(cell => (
+          <div
+            key={cell.dateKey}
+            className={`mx-auto flex h-[46px] w-[46px] items-center justify-center rounded-2xl ${
+              cell.isSelected ? 'bg-sub-300' : 'bg-white'
+            }`}
+          >
+            <span
+              className={`typography-body03-regular ${
+                cell.isSelected ? 'text-text-100' : 'text-text-50'
+              }`}
+            >
+              {cell.dayLabel}
+            </span>
+          </div>
+        ))}
+      </div>
+ 
+      <div className="mt-2 h-[320px] rounded-2xl bg-bg-light px-0.5">
+        <div className="flex h-full items-end gap-0">
+          {dayCells.map(cell => {
+            return (
+              <div key={cell.dateKey} className="relative h-full w-[44px]">
+                {cell.showSecondary && (
+                  <div
+                    className="absolute bottom-0 left-0 w-full rounded-2xl bg-main-300/65"
+                    style={{ height: `${cell.secondaryHeight}px` }}
+                  />
+                )}
+                <div
+                  className={`absolute bottom-0 left-0 w-full rounded-2xl ${
+                    cell.isPrimaryBar ? 'bg-main' : 'bg-main/85'
+                  }`}
+                  style={{ height: `${cell.primaryHeight}px` }}
+                />
+              </div>
+            )
+          })}
+        </div>
+      </div>
+    </section>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx.html new file mode 100644 index 0000000..b1d8db6 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx.html @@ -0,0 +1,220 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui WorkingStoreCard.tsx

+
+ +
+ 100% + Statements + 3/3 +
+ + +
+ 50% + Branches + 1/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 3/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +6x +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { useWorkingStoreCardViewModel } from '@/features/home/user/hooks/useWorkingStoreCardViewModel'
+ 
+export interface WorkingStoreItem {
+  workspaceId: number
+  businessName: string
+  employedAt: string
+  nextShiftDateTime: string
+  thumbnailUrl?: string
+}
+ 
+interface WorkingStoreCardProps {
+  store: WorkingStoreItem
+}
+ 
+export function WorkingStoreCard({ store }: WorkingStoreCardProps) {
+  const { dueText, nextWorkDate } = useWorkingStoreCardViewModel(store)
+ 
+  return (
+    <div className="flex h-[72px] items-center px-6">
+      <div className="h-12 w-12 overflow-hidden rounded-[70px] bg-bg-dark">
+        {store.thumbnailUrl ? (
+          <img
+            src={store.thumbnailUrl}
+            alt={store.businessName}
+            className="h-full w-full object-cover"
+          />
+        ) : null}
+      </div>
+      <div className="ml-4 min-w-0 flex-1">
+        <p className="typography-headline03 truncate text-text-90">
+          {store.businessName}
+        </p>
+        <div className="mt-0.5 flex items-center gap-1">
+          <p className="typography-body02-regular text-text-70">
+            다음 근무 예정일
+          </p>
+          <p className="typography-body02-regular text-text-70">
+            {nextWorkDate}
+          </p>
+        </div>
+      </div>
+      <p className="typography-headline03 text-sub truncate">{dueText}</p>
+    </div>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx.html new file mode 100644 index 0000000..0bfaaaa --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx.html @@ -0,0 +1,289 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/features/home/user/ui WorkingStoresList.tsx

+
+ +
+ 100% + Statements + 4/4 +
+ + +
+ 100% + Branches + 10/10 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 4/4 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +2x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { MoreButton } from '@/shared/ui/common/MoreButton'
+import { useWorkingStoresListViewModel } from '@/features/home/user/hooks/useWorkingStoresListViewModel'
+import {
+  WorkingStoreCard,
+  type WorkingStoreItem,
+} from '@/features/home/user/ui/WorkingStoreCard'
+ 
+interface WorkingStoresListProps {
+  title?: string
+  sortLabelLeft?: string
+  sortLabelRight?: string
+  selectedSort?: 'left' | 'right'
+  stores: WorkingStoreItem[]
+  onMoreClick?: () => void
+}
+ 
+export function WorkingStoresList({
+  title = '근무중인 가게',
+  sortLabelLeft = '이름 순',
+  sortLabelRight = '근무 예정 순',
+  selectedSort = 'right',
+  stores,
+  onMoreClick,
+}: WorkingStoresListProps) {
+  const { visibleStores } = useWorkingStoresListViewModel(stores)
+ 
+  return (
+    <section className="w-full rounded-2xl bg-white py-6">
+      <div className="flex items-center justify-between px-6">
+        <h3 className="typography-headline01 text-text-100">{title}</h3>
+        <div className="flex items-center gap-1">
+          <p
+            className={`typography-body02-regular ${
+              selectedSort === 'left' ? 'text-text-90' : 'text-text-50'
+            }`}
+          >
+            {sortLabelLeft}
+          </p>
+          <p className="typography-body02-regular text-text-50">|</p>
+          <p
+            className={`typography-body02-semibold ${
+              selectedSort === 'right' ? 'text-text-90' : 'text-text-50'
+            }`}
+          >
+            {sortLabelRight}
+          </p>
+        </div>
+      </div>
+ 
+      <div className="mt-4">
+        {visibleStores.map((store, index) => (
+          <div key={store.workspaceId}>
+            <WorkingStoreCard store={store} />
+            {index < visibleStores.length - 1 ? (
+              <div className="mx-1 h-px bg-line-1" />
+            ) : null}
+          </div>
+        ))}
+      </div>
+ 
+      <div className="mt-6 px-6">
+        <MoreButton onClick={onMoreClick} />
+      </div>
+    </section>
+  )
+}
+ 
+export type { WorkingStoresListProps, WorkingStoreItem }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/index.html b/coverage/Code/alter-client/src/features/home/user/ui/index.html new file mode 100644 index 0000000..b514f45 --- /dev/null +++ b/coverage/Code/alter-client/src/features/home/user/ui/index.html @@ -0,0 +1,251 @@ + + + + + + Code coverage report for Code/alter-client/src/features/home/user/ui + + + + + + + + + +
+
+

All files Code/alter-client/src/features/home/user/ui

+
+ +
+ 95.83% + Statements + 46/48 +
+ + +
+ 95.08% + Branches + 58/61 +
+ + +
+ 100% + Functions + 18/18 +
+ + +
+ 95.83% + Lines + 46/48 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
AppliedStoreCard.tsx +
+
100%3/3100%5/5100%1/1100%3/3
AppliedStoreList.tsx +
+
100%5/5100%3/3100%2/2100%5/5
DailyCalendar.tsx +
+
85.71%6/766.66%2/3100%3/385.71%6/7
HomeScheduleCalendar.tsx +
+
100%2/2100%7/7100%1/1100%2/2
MonthlyCalendar.tsx +
+
100%7/7100%7/7100%3/3100%7/7
MonthlyDateCell.tsx +
+
100%3/3100%9/9100%1/1100%3/3
MonthlyDateGauge.tsx +
+
100%7/7100%4/4100%1/1100%7/7
WeeklyCalendar.tsx +
+
85.71%6/790.9%10/11100%3/385.71%6/7
WorkingStoreCard.tsx +
+
100%3/350%1/2100%1/1100%3/3
WorkingStoresList.tsx +
+
100%4/4100%10/10100%2/2100%4/4
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/lib/index.html b/coverage/Code/alter-client/src/shared/lib/index.html new file mode 100644 index 0000000..564e68b --- /dev/null +++ b/coverage/Code/alter-client/src/shared/lib/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/lib + + + + + + + + + +
+
+

All files Code/alter-client/src/shared/lib

+
+ +
+ 100% + Statements + 7/7 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
tokens.ts +
+
100%7/7100%0/0100%0/0100%7/7
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/lib/tokens.ts.html b/coverage/Code/alter-client/src/shared/lib/tokens.ts.html new file mode 100644 index 0000000..fbd1798 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/lib/tokens.ts.html @@ -0,0 +1,670 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/lib/tokens.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/lib tokens.ts

+
+ +
+ 100% + Statements + 7/7 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +4x +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
/**
+ * 디자인 토큰 타입 정의
+ */
+ 
+// 색상 토큰
+export const colors = {
+  error: '#dc0000',
+  bgLight: '#f4f4f4',
+  bgDark: '#efefef',
+  text: {
+    100: '#232323',
+    90: '#5f5f5f',
+    70: '#828282',
+    50: '#a3a3a3',
+  },
+  line: {
+    1: '#f1f1f1',
+    2: '#e5e5e5',
+    3: '#232323',
+  },
+  main: {
+    DEFAULT: '#2ce283',
+    700: '#6ceba9',
+    500: '#96f1c1',
+    300: '#c0f7da',
+    100: '#eafdf3',
+  },
+  sub: {
+    DEFAULT: '#3a9982',
+    900: '#4ea48f',
+    700: '#76b8a8',
+    500: '#9dccc1',
+    300: '#c4e1da',
+  },
+} as const
+ 
+// 폰트 패밀리
+export const fontFamilies = {
+  rixyeoljeongdo: 'RixYeoljeongdo_Pro',
+  pretendard: 'Pretendard',
+} as const
+ 
+// 폰트 사이즈
+export const fontSizes = {
+  0: '11px',
+  1: '12px',
+  2: '13px',
+  3: '14px',
+  4: '16px',
+  5: '18px',
+  6: '20px',
+  7: '22px',
+  8: '28px',
+  9: '32px',
+} as const
+ 
+// 라인 높이
+export const lineHeights = {
+  0: '140%',
+  1: '140%',
+  2: '140%',
+  3: '140%',
+  4: '140%',
+  5: '140%',
+  6: '140%',
+  7: '140%',
+  8: '140%',
+  9: '140%',
+  10: '140%',
+  11: '140%',
+  12: '100%',
+  13: '100%',
+  14: '100%',
+} as const
+ 
+// 레터 스페이싱
+export const letterSpacing = {
+  0: '-0.01em',
+  1: '0',
+} as const
+ 
+// 폰트 웨이트
+export const fontWeights = {
+  regular: 400,
+  semibold: 600,
+} as const
+ 
+// 타이포그래피 스타일
+export const typography = {
+  display: {
+    fontFamily: fontFamilies.rixyeoljeongdo,
+    fontWeight: fontWeights.regular,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[9],
+    letterSpacing: letterSpacing[0],
+  },
+  headline01: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.semibold,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[7],
+    letterSpacing: letterSpacing[0],
+  },
+  headline02: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.semibold,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[6],
+    letterSpacing: letterSpacing[0],
+  },
+  headline03: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.semibold,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[5],
+    letterSpacing: letterSpacing[0],
+  },
+  body01Semibold: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.semibold,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[4],
+    letterSpacing: letterSpacing[0],
+  },
+  body01Regular: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.regular,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[4],
+    letterSpacing: letterSpacing[0],
+  },
+  body02Semibold: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.semibold,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[3],
+    letterSpacing: letterSpacing[0],
+  },
+  body02Regular: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.regular,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[3],
+    letterSpacing: letterSpacing[0],
+  },
+  body03Semibold: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.semibold,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[2],
+    letterSpacing: letterSpacing[0],
+  },
+  body03Regular: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.regular,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[2],
+    letterSpacing: letterSpacing[0],
+  },
+  bt: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.semibold,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[3],
+    letterSpacing: letterSpacing[0],
+  },
+  bg: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.semibold,
+    lineHeight: lineHeights[0],
+    fontSize: fontSizes[0],
+    letterSpacing: letterSpacing[0],
+  },
+  doc: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.regular,
+    lineHeight: lineHeights[12],
+    fontSize: fontSizes[1],
+    letterSpacing: letterSpacing[0],
+  },
+  docNon: {
+    fontFamily: fontFamilies.pretendard,
+    fontWeight: fontWeights.regular,
+    lineHeight: lineHeights[12],
+    fontSize: fontSizes[1],
+    letterSpacing: letterSpacing[0],
+  },
+  logo: {
+    fontFamily: fontFamilies.rixyeoljeongdo,
+    fontWeight: fontWeights.regular,
+    lineHeight: lineHeights[12],
+    fontSize: fontSizes[8],
+    letterSpacing: letterSpacing[1],
+  },
+} as const
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/stores/index.html b/coverage/Code/alter-client/src/shared/stores/index.html new file mode 100644 index 0000000..d16d3e5 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/stores/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/stores + + + + + + + + + +
+
+

All files Code/alter-client/src/shared/stores

+
+ +
+ 55.55% + Statements + 5/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 40% + Functions + 2/5 +
+ + +
+ 42.85% + Lines + 3/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
useDocStore.ts +
+
55.55%5/9100%0/040%2/542.85%3/7
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/stores/useDocStore.ts.html b/coverage/Code/alter-client/src/shared/stores/useDocStore.ts.html new file mode 100644 index 0000000..79de1b2 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/stores/useDocStore.ts.html @@ -0,0 +1,214 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/stores/useDocStore.ts + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/stores useDocStore.ts

+
+ +
+ 55.55% + Statements + 5/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 40% + Functions + 2/5 +
+ + +
+ 42.85% + Lines + 3/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44  +  +  +1x +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  + 
import { create } from 'zustand'
+import type { TabKey } from '@/shared/types/tab'
+ 
+const PATHNAME_TAB_MAP: Array<{ matcher: RegExp; tab: TabKey }> = [
+  { matcher: /(^|\/)home(\/|$)/, tab: 'home' },
+  { matcher: /(^|\/)my(\/|$)/, tab: 'my' },
+  { matcher: /(^|\/)message(\/|$)/, tab: 'message' },
+  { matcher: /(^|\/)repute(\/|$)/, tab: 'repute' },
+  { matcher: /(^|\/)search(\/|$)/, tab: 'search' },
+  { matcher: /^\/manager\/home/, tab: 'home' },
+  { matcher: /^\/job-lookup-map/, tab: 'search' },
+]
+ 
+const createSelectedTab = (activeTab?: TabKey) => ({
+  home: activeTab === 'home',
+  my: activeTab === 'my',
+  message: activeTab === 'message',
+  repute: activeTab === 'repute',
+  search: activeTab === 'search',
+})
+ 
+interface DocStoreState {
+  selectedTab: {
+    home: boolean
+    my: boolean
+    message: boolean
+    repute: boolean
+    search: boolean
+  }
+  setSelectedTab: (selectedTab: DocStoreState['selectedTab']) => void
+  setSelectedTabByPathname: (pathname: string) => void
+}
+ 
+export const useDocStore = create<DocStoreState>(set => ({
+  selectedTab: createSelectedTab(),
+  setSelectedTab: selectedTab => set({ selectedTab }),
+  setSelectedTabByPathname: pathname => {
+    const matchedTab = PATHNAME_TAB_MAP.find(({ matcher }) =>
+      matcher.test(pathname)
+    )?.tab
+    set({ selectedTab: createSelectedTab(matchedTab) })
+  },
+}))
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/MobileLayout.tsx.html b/coverage/Code/alter-client/src/shared/ui/MobileLayout.tsx.html new file mode 100644 index 0000000..6c5cf84 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/MobileLayout.tsx.html @@ -0,0 +1,157 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/MobileLayout.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui MobileLayout.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x +  +  +  +  +  +  +  +  + 
import type { ReactNode } from 'react'
+ 
+interface MobileLayoutProps {
+  children: ReactNode
+  className?: string
+  maxWidth?: string
+}
+ 
+export function MobileLayout({
+  children,
+  className = '',
+  maxWidth = '428px',
+}: MobileLayoutProps) {
+  return (
+    <div className="flex w-full justify-center bg-white">
+      <div
+        className={`mobile-layout-container relative mx-auto w-full ${className}`}
+        style={{ maxWidth }}
+      >
+        {children}
+      </div>
+    </div>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/Spinner.tsx.html b/coverage/Code/alter-client/src/shared/ui/Spinner.tsx.html new file mode 100644 index 0000000..ff12d21 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/Spinner.tsx.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/Spinner.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui Spinner.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16  +  +  +  +  +  +3x +1x +  +  +  +  +  +  +  + 
interface SpinnerProps {
+  size?: number
+  className?: string
+}
+ 
+export function Spinner({ size = 40, className = '' }: SpinnerProps) {
+  return (
+    <div
+      role="status"
+      aria-label="로딩 중"
+      className={`rounded-full border-[3px] border-black/20 border-t-black animate-spin ${className}`}
+      style={{ width: size, height: size }}
+    />
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/AuthButton.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/AuthButton.tsx.html new file mode 100644 index 0000000..8102efb --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/common/AuthButton.tsx.html @@ -0,0 +1,193 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/common/AuthButton.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/common AuthButton.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37  +  +  +  +  +  +  +  +  +  +2x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import type { ButtonHTMLAttributes } from 'react'
+import { colors, fontFamilies, fontSizes, fontWeights } from '../../lib/tokens'
+ 
+type AuthButtonProps = ButtonHTMLAttributes<HTMLButtonElement>
+ 
+export function AuthButton({
+  className = '',
+  children,
+  ...props
+}: AuthButtonProps) {
+  return (
+    <button
+      className={className}
+      style={{
+        width: '100%',
+        height: '56px',
+        border: 'none',
+        background: colors.main.DEFAULT,
+        color: '#ffffff',
+        fontSize: fontSizes[5],
+        fontFamily: fontFamilies.pretendard,
+        fontWeight: fontWeights.semibold,
+        borderRadius: '12px',
+        cursor: props.disabled ? 'not-allowed' : 'pointer',
+        transition: 'all 0.2s ease',
+        boxShadow: props.disabled
+          ? 'none'
+          : '0 2px 8px rgba(45, 226, 131, 0.3)',
+        opacity: props.disabled ? 0.6 : 1,
+      }}
+      {...props}
+    >
+      {children}
+    </button>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/AuthInput.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/AuthInput.tsx.html new file mode 100644 index 0000000..165f807 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/common/AuthInput.tsx.html @@ -0,0 +1,187 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/common/AuthInput.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/common AuthInput.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35  +  +  +  +  +  +  +  +  +  +  +  +3x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import type { InputHTMLAttributes } from 'react'
+import { colors, fontFamilies, fontSizes, fontWeights } from '../../lib/tokens'
+ 
+interface AuthInputProps extends InputHTMLAttributes<HTMLInputElement> {
+  borderColor?: string
+}
+ 
+export function AuthInput({
+  borderColor,
+  className = '',
+  ...props
+}: AuthInputProps) {
+  return (
+    <input
+      className={className}
+      style={{
+        width: '100%',
+        height: '56px',
+        padding: '0 16px',
+        border: borderColor || `1px solid ${colors.line[2]}`,
+        borderRadius: '12px',
+        fontFamily: fontFamilies.pretendard,
+        fontSize: fontSizes[4],
+        fontWeight: fontWeights.regular,
+        color: colors.text[100],
+        backgroundColor: '#ffffff',
+        outline: 'none',
+        transition: 'border-color 0.2s ease',
+        boxSizing: 'border-box',
+      }}
+      {...props}
+    />
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/Docbar.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/Docbar.tsx.html new file mode 100644 index 0000000..2117760 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/common/Docbar.tsx.html @@ -0,0 +1,472 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/common/Docbar.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/common Docbar.tsx

+
+ +
+ 22.72% + Statements + 5/22 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 16.66% + Functions + 2/12 +
+ + +
+ 23.8% + Lines + 5/21 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +15x +  +15x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import HomeIcon from '@/assets/icons/doc/Home.svg?react'
+import MYIcon from '@/assets/icons/doc/MY.svg?react'
+import MessageIcon from '@/assets/icons/doc/Message.svg?react'
+import ReputeIcon from '@/assets/icons/doc/Repute.svg?react'
+import SearchIcon from '@/assets/icons/doc/Search.svg?react'
+import type { ComponentType, SVGProps } from 'react'
+import { useEffect } from 'react'
+import { useLocation, useNavigate } from 'react-router-dom'
+import { useDocStore } from '@/shared/stores/useDocStore'
+import { typography } from '@/shared/lib/tokens'
+import { TAB_TITLE_MAP, type TabKey } from '@/shared/types/tab'
+ 
+function DocContent({
+  icon,
+  alt,
+  isSelected,
+  titleKey,
+  onClick,
+}: {
+  icon: ComponentType<SVGProps<SVGSVGElement>>
+  alt: string
+  isSelected: boolean
+  titleKey: TabKey
+  onClick: () => void
+}) {
+  const Icon = icon
+ 
+  return (
+    <button
+      type="button"
+      className="flex flex-col items-center gap-1 cursor-pointer w-[78px] h-[78px] pt-2.5 pb-3"
+      onClick={onClick}
+    >
+      <Icon
+        className={`${isSelected ? 'text-text-100' : 'text-text-50'} h-6 w-6 [&_*]:!fill-current [&_*]:!stroke-current`}
+        aria-label={alt}
+      />
+      <p
+        className={isSelected ? 'text-text-100' : 'text-text-50'}
+        style={{
+          fontSize: typography.doc.fontSize,
+          fontWeight: typography.doc.fontWeight,
+          lineHeight: typography.doc.lineHeight,
+          letterSpacing: typography.doc.letterSpacing,
+        }}
+      >
+        {TAB_TITLE_MAP[titleKey]}
+      </p>
+    </button>
+  )
+}
+ 
+export type DocbarSelectedTab = Record<TabKey, boolean>
+ 
+interface DocbarViewProps {
+  selectedTab: DocbarSelectedTab
+  onTabClick: (tab: TabKey) => void
+}
+ 
+export function DocbarView({ selectedTab, onTabClick }: DocbarViewProps) {
+  return (
+    <div className="flex items-center justify-between w-full px-4 bg-white shadow-[0px_-4px_10px_rgba(0,_0,_0,_0.1)]">
+      <div className="flex items-center justify-between w-full">
+        <DocContent
+          icon={HomeIcon}
+          alt="Home"
+          isSelected={selectedTab.home}
+          titleKey="home"
+          onClick={() => onTabClick('home')}
+        />
+        <DocContent
+          icon={SearchIcon}
+          alt="Search"
+          isSelected={selectedTab.search}
+          titleKey="search"
+          onClick={() => onTabClick('search')}
+        />
+        <DocContent
+          icon={MessageIcon}
+          alt="Message"
+          isSelected={selectedTab.message}
+          titleKey="message"
+          onClick={() => onTabClick('message')}
+        />
+        <DocContent
+          icon={ReputeIcon}
+          alt="Repute"
+          isSelected={selectedTab.repute}
+          titleKey="repute"
+          onClick={() => onTabClick('repute')}
+        />
+        <DocContent
+          icon={MYIcon}
+          alt="MY"
+          isSelected={selectedTab.my}
+          titleKey="my"
+          onClick={() => onTabClick('my')}
+        />
+      </div>
+    </div>
+  )
+}
+ 
+export function Docbar() {
+  const navigate = useNavigate()
+  const { pathname } = useLocation()
+  const selectedTab = useDocStore(state => state.selectedTab)
+  const setSelectedTabByPathname = useDocStore(
+    state => state.setSelectedTabByPathname
+  )
+ 
+  useEffect(() => {
+    setSelectedTabByPathname(pathname)
+  }, [pathname, setSelectedTabByPathname])
+ 
+  const pathByTab: Record<TabKey, string> = {
+    home: '/manager/home',
+    search: '/job-lookup-map',
+    message: '/message',
+    repute: '/repute',
+    my: '/my',
+  }
+ 
+  const onTabClick = (tab: TabKey) => {
+    navigate(pathByTab[tab])
+  }
+ 
+  return <DocbarView selectedTab={selectedTab} onTabClick={onTabClick} />
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/MoreButton.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/MoreButton.tsx.html new file mode 100644 index 0000000..dec9640 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/common/MoreButton.tsx.html @@ -0,0 +1,148 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/common/MoreButton.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/common MoreButton.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22  +  +  +  +  +  +  +  +  +  +  +3x +2x +  +  +  +  +  +  +  +  + 
import type { ButtonHTMLAttributes } from 'react'
+ 
+interface MoreButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
+  label?: string
+}
+ 
+export function MoreButton({
+  label = '더보기',
+  className = '',
+  ...props
+}: MoreButtonProps) {
+  return (
+    <button
+      type="button"
+      className={`h-12 w-full rounded-lg border border-line-2 typography-bt text-text-70 ${className}`}
+      {...props}
+    >
+      {label}
+    </button>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/Navbar.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/Navbar.tsx.html new file mode 100644 index 0000000..5fcb7ad --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/common/Navbar.tsx.html @@ -0,0 +1,358 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/common/Navbar.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/common Navbar.tsx

+
+ +
+ 55.55% + Statements + 5/9 +
+ + +
+ 80% + Branches + 8/10 +
+ + +
+ 50% + Functions + 1/2 +
+ + +
+ 55.55% + Lines + 5/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +  +2x +  +  +  +  +  +  +  +2x +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import AlterLogo from '@/assets/Alter-logo.png'
+import BellIcon from '@/assets/icons/nav/bell.svg'
+import MenuIcon from '@/assets/icons/nav/menu.svg'
+import ChevronLeftIcon from '@/assets/icons/nav/chevron-left.svg'
+import { typography } from '@/shared/lib/tokens'
+import { useNavigate } from 'react-router-dom'
+ 
+type NavbarVariant = 'main' | 'detail'
+ 
+interface NavbarProps {
+  variant?: NavbarVariant
+  title?: string
+  onBackClick?: () => void
+}
+ 
+export function Navbar({
+  variant = 'main',
+  title = '',
+  onBackClick,
+}: NavbarProps) {
+  const navigate = useNavigate()
+  const isMain = variant === 'main'
+ 
+  const handleBackClick = () => {
+    if (onBackClick) {
+      onBackClick()
+      return
+    }
+    navigate(-1)
+  }
+ 
+  return (
+    <header className="relative flex h-14 w-full items-center border-b border-line-2 bg-white px-4 py-3.5">
+      <div className="flex min-w-[84px] items-center">
+        {isMain ? (
+          <div className="flex items-center gap-2">
+            <img src={AlterLogo} alt="Alter logo" className="h-7 w-7" />
+            <span className="typography-logo">알터</span>
+          </div>
+        ) : (
+          <button
+            type="button"
+            aria-label="뒤로가기"
+            onClick={handleBackClick}
+            className="flex h-6 w-6 items-center justify-center"
+          >
+            <img src={ChevronLeftIcon} alt="Back" className="h-6 w-6" />
+          </button>
+        )}
+      </div>
+ 
+      <div className="absolute left-1/2 -translate-x-1/2">
+        {!isMain && (
+          <span
+            className="text-text-100 whitespace-nowrap"
+            style={{
+              fontFamily: typography.body01Semibold.fontFamily,
+              fontSize: typography.body01Semibold.fontSize,
+              fontWeight: typography.body01Semibold.fontWeight,
+              lineHeight: typography.body01Semibold.lineHeight,
+              letterSpacing: typography.body01Semibold.letterSpacing,
+            }}
+          >
+            {title}
+          </span>
+        )}
+      </div>
+ 
+      <div className="ml-auto flex min-w-[84px] items-center justify-end gap-4">
+        {isMain && (
+          <>
+            <button
+              type="button"
+              aria-label="알림"
+              className="flex h-6 w-6 items-center justify-center"
+            >
+              <img src={BellIcon} alt="Bell" className="h-6 w-6" />
+            </button>
+            <button
+              type="button"
+              aria-label="메뉴"
+              className="flex h-6 w-6 items-center justify-center"
+            >
+              <img src={MenuIcon} alt="Menu" className="h-6 w-6" />
+            </button>
+          </>
+        )}
+      </div>
+    </header>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/index.html b/coverage/Code/alter-client/src/shared/ui/common/index.html new file mode 100644 index 0000000..1059617 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/common/index.html @@ -0,0 +1,176 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/common + + + + + + + + + +
+
+

All files Code/alter-client/src/shared/ui/common

+
+ +
+ 43.24% + Statements + 16/37 +
+ + +
+ 92.3% + Branches + 24/26 +
+ + +
+ 35.29% + Functions + 6/17 +
+ + +
+ 44.44% + Lines + 16/36 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
AuthButton.tsx +
+
100%2/2100%7/7100%1/1100%2/2
AuthInput.tsx +
+
100%2/2100%3/3100%1/1100%2/2
Docbar.tsx +
+
22.72%5/22100%4/416.66%2/1223.8%5/21
MoreButton.tsx +
+
100%2/2100%2/2100%1/1100%2/2
Navbar.tsx +
+
55.55%5/980%8/1050%1/255.55%5/9
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx.html b/coverage/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx.html new file mode 100644 index 0000000..f696b3b --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx.html @@ -0,0 +1,193 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/home ApplicationStatusBadge.tsx

+
+ +
+ 100% + Statements + 4/4 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 4/4 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37  +  +  +  +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +9x +  +9x +  +  +  +3x +  +  +  +  +  +  +  + 
interface ApplicationStatusBadgeProps {
+  status: 'applied' | 'rejected'
+  className?: string
+}
+ 
+const BADGE_STYLE_MAP = {
+  applied: {
+    label: '지원중',
+    containerClassName: 'bg-white border border-line-1',
+    textClassName: 'text-text-50',
+  },
+  rejected: {
+    label: '불합격',
+    containerClassName: 'bg-error border border-error',
+    textClassName: 'text-white',
+  },
+} as const
+ 
+export function ApplicationStatusBadge({
+  status,
+  className = '',
+}: ApplicationStatusBadgeProps) {
+  const style = BADGE_STYLE_MAP[status]
+ 
+  return (
+    <div
+      className={`inline-flex items-center justify-center rounded-[50px] px-2 py-1 shadow-[1px_1px_4px_0px_rgba(0,0,0,0.16)] ${style.containerClassName} ${className}`}
+    >
+      <span className={`typography-bg ${style.textClassName}`}>
+        {style.label}
+      </span>
+    </div>
+  )
+}
+ 
+export type { ApplicationStatusBadgeProps }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx.html b/coverage/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx.html new file mode 100644 index 0000000..27e8033 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx.html @@ -0,0 +1,148 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/home WorkCategoryBadge.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22  +  +  +  +  +  +  +  +  +3x +  +  +  +2x +  +  +  +  +  +  +  + 
interface WorkCategoryBadgeProps {
+  label?: string
+  className?: string
+}
+ 
+export function WorkCategoryBadge({
+  label = '',
+  className = '',
+}: WorkCategoryBadgeProps) {
+  return (
+    <div
+      className={`inline-flex h-6 items-center justify-center rounded-[50px] border border-line-1 bg-white px-2 py-1 shadow-[1px_1px_4px_0px_rgba(0,0,0,0.16)] ${className}`}
+    >
+      <span className="typography-bg text-text-100 whitespace-nowrap">
+        {label}
+      </span>
+    </div>
+  )
+}
+ 
+export type { WorkCategoryBadgeProps }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx.html b/coverage/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx.html new file mode 100644 index 0000000..ebe8d56 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx.html @@ -0,0 +1,187 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/home WorkerRoleBadge.tsx

+
+ +
+ 100% + Statements + 4/4 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 4/4 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +4x +  +  +  +2x +  +  +  +  +  + 
type WorkerRole = 'staff' | 'manager'
+ 
+interface WorkerRoleBadgeProps {
+  role: WorkerRole
+  className?: string
+}
+ 
+const ROLE_STYLE_MAP = {
+  staff: {
+    label: '알바',
+    containerClassName: 'bg-main-300',
+  },
+  manager: {
+    label: '매니저',
+    containerClassName: 'bg-main-700',
+  },
+} as const
+ 
+export function WorkerRoleBadge({
+  role,
+  className = '',
+}: WorkerRoleBadgeProps) {
+  const style = ROLE_STYLE_MAP[role]
+ 
+  return (
+    <div
+      className={`inline-flex h-5 items-center rounded-[80px] px-2 py-0.5 ${style.containerClassName} ${className}`}
+    >
+      <span className="typography-bg text-text-90">{style.label}</span>
+    </div>
+  )
+}
+ 
+export type { WorkerRoleBadgeProps, WorkerRole }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/home/index.html b/coverage/Code/alter-client/src/shared/ui/home/index.html new file mode 100644 index 0000000..86db620 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/home/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/home + + + + + + + + + +
+
+

All files Code/alter-client/src/shared/ui/home

+
+ +
+ 100% + Statements + 10/10 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 10/10 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ApplicationStatusBadge.tsx +
+
100%4/4100%1/1100%1/1100%4/4
WorkCategoryBadge.tsx +
+
100%2/2100%2/2100%1/1100%2/2
WorkerRoleBadge.tsx +
+
100%4/4100%1/1100%1/1100%4/4
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/index.html b/coverage/Code/alter-client/src/shared/ui/index.html new file mode 100644 index 0000000..8d9f4ac --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui + + + + + + + + + +
+
+

All files Code/alter-client/src/shared/ui

+
+ +
+ 100% + Statements + 4/4 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 4/4 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
MobileLayout.tsx +
+
100%2/2100%2/2100%1/1100%2/2
Spinner.tsx +
+
100%2/2100%2/2100%1/1100%2/2
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx.html new file mode 100644 index 0000000..bbbb290 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx.html @@ -0,0 +1,325 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/manager OngoingPostingCard.tsx

+
+ +
+ 80% + Statements + 4/5 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 75% + Functions + 3/4 +
+ + +
+ 80% + Lines + 4/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
// 진행 중인 공고 카드
+ 
+export interface JobPostingItem {
+  id: string
+  dDay: string
+  title: string
+  wage: string
+  workHours: string
+  workDays: string
+}
+ 
+interface OngoingPostingCardProps {
+  postings: JobPostingItem[]
+  onViewMore?: () => void
+  onPostingClick?: (posting: JobPostingItem) => void
+}
+ 
+function PostingRow({
+  posting,
+  onClick,
+  isLast,
+}: {
+  posting: JobPostingItem
+  onClick?: () => void
+  isLast: boolean
+}) {
+  return (
+    <button
+      type="button"
+      onClick={onClick}
+      className={`w-full text-left py-4 hover:bg-gray-50/50 transition-colors ${!isLast ? 'border-b border-gray-100' : ''}`}
+    >
+      <div className="flex items-center gap-2 mb-1">
+        <span className="inline-flex items-center px-2 py-0.5 rounded-full bg-[#D0F2E5] text-gray-800 typography-bg">
+          {posting.dDay}
+        </span>
+        <span className="typography-body01-semibold text-gray-900 line-clamp-1">
+          {posting.title}
+        </span>
+      </div>
+      <p className="typography-body02-regular text-gray-900 mb-1">
+        {posting.wage}
+      </p>
+      <div className="flex flex-wrap gap-x-4 gap-y-0.5 typography-body03-regular text-gray-900">
+        <span className="flex items-center gap-1.5">{posting.workHours}</span>
+        <span className="flex items-center gap-1.5">{posting.workDays}</span>
+      </div>
+    </button>
+  )
+}
+ 
+export function OngoingPostingCard({
+  postings,
+  onViewMore,
+  onPostingClick,
+}: OngoingPostingCardProps) {
+  return (
+    <div className="bg-white rounded-[16px] shadow-sm overflow-hidden flex flex-col py-4">
+      <div className="px-4">
+        {postings.map((posting, index) => (
+          <PostingRow
+            key={posting.id}
+            posting={posting}
+            onClick={() => onPostingClick?.(posting)}
+            isLast={index === postings.length - 1}
+          />
+        ))}
+      </div>
+      <div className="px-4 pb-4 pt-1">
+        <button
+          type="button"
+          onClick={onViewMore}
+          className="w-full py-3 rounded-[8px] border border-gray-200 bg-white typography-body02-semibold text-gray-900 hover:bg-gray-50 transition-colors"
+        >
+          더보기
+        </button>
+      </div>
+    </div>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx.html new file mode 100644 index 0000000..5e5a5b0 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx.html @@ -0,0 +1,436 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/manager SubstituteApprovalCard.tsx

+
+ +
+ 85.71% + Statements + 6/7 +
+ + +
+ 75% + Branches + 3/4 +
+ + +
+ 75% + Functions + 3/4 +
+ + +
+ 85.71% + Lines + 6/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +  +3x +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
// 대타 승인 요청 카드
+ 
+export type SubstituteRequestStatus = 'accepted' | 'pending'
+ 
+export interface SubstituteRequestItem {
+  id: string
+  name: string
+  role: string
+  dateRange: string
+  status: SubstituteRequestStatus
+  imageUrl?: string | null
+}
+ 
+interface SubstituteApprovalCardProps {
+  requests: SubstituteRequestItem[]
+  onViewMore?: () => void
+  onRequestClick?: (item: SubstituteRequestItem) => void
+}
+ 
+const statusConfig: Record<
+  SubstituteRequestStatus,
+  { label: string; className: string }
+> = {
+  accepted: {
+    label: '수락됨',
+    className:
+      'bg-[#E8F5F1] border-[#3A9982]/30 text-[#3A9982] typography-body03-semibold',
+  },
+  pending: {
+    label: '대기중',
+    className:
+      'bg-amber-50 border-amber-300/50 text-amber-700 typography-body03-semibold',
+  },
+}
+ 
+function RequestRow({
+  item,
+  onClick,
+  isLast,
+}: {
+  item: SubstituteRequestItem
+  onClick?: () => void
+  isLast: boolean
+}) {
+  const config = statusConfig[item.status]
+ 
+  return (
+    <button
+      type="button"
+      onClick={onClick}
+      className={`w-full flex items-center gap-3 py-4 text-left hover:bg-gray-50/50 transition-colors ${!isLast ? 'border-b border-gray-100' : ''}`}
+    >
+      <div className="w-10 h-10 rounded-full overflow-hidden bg-gray-100 border border-gray-200 shrink-0 flex items-center justify-center">
+        {item.imageUrl ? (
+          <img
+            src={item.imageUrl}
+            alt={item.name}
+            className="w-full h-full object-cover"
+          />
+        ) : (
+          <div
+            className="w-full h-full bg-[repeating-conic-gradient(#e5e7eb_0%_25%,transparent_0%_50%)] [background-size:8px_8px]"
+            aria-hidden
+          />
+        )}
+      </div>
+      <div className="flex-1 min-w-0">
+        <div className="flex items-center gap-2 flex-wrap">
+          <span className="typography-body01-semibold text-gray-900">
+            {item.name}
+          </span>
+          <span className="inline-flex items-center px-2 py-0.5 rounded-md bg-[#E0F2E0] text-gray-900 typography-bg">
+            {item.role}
+          </span>
+        </div>
+        <p className="typography-body03-regular text-gray-500 mt-0.5">
+          {item.dateRange}
+        </p>
+      </div>
+      <span
+        className={`shrink-0 px-3 py-1.5 rounded-lg border ${config.className}`}
+      >
+        {config.label}
+      </span>
+    </button>
+  )
+}
+ 
+export function SubstituteApprovalCard({
+  requests,
+  onViewMore,
+  onRequestClick,
+}: SubstituteApprovalCardProps) {
+  return (
+    <div className="bg-white rounded-[16px] shadow-sm overflow-hidden flex flex-col">
+      <div className="px-4">
+        {requests.map((item, index) => (
+          <RequestRow
+            key={item.id}
+            item={item}
+            onClick={() => onRequestClick?.(item)}
+            isLast={index === requests.length - 1}
+          />
+        ))}
+      </div>
+      <div className="px-4 pb-4 pt-1">
+        <button
+          type="button"
+          onClick={onViewMore}
+          className="w-full py-3 rounded-[8px] border border-gray-200 bg-white typography-body02-semibold text-gray-900 hover:bg-gray-50 transition-colors"
+        >
+          더보기
+        </button>
+      </div>
+    </div>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx.html new file mode 100644 index 0000000..0ef726f --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx.html @@ -0,0 +1,211 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/manager WorkerImageCard.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
// 사장님 홈 - 근무자 카드 (원형 이미지 + 이름 + 시간대)
+ 
+interface WorkerImageCardProps {
+  name: string
+  timeRange: string
+  imageUrl?: string | null
+  className?: string
+}
+ 
+export function WorkerImageCard({
+  name,
+  timeRange,
+  imageUrl,
+  className = '',
+}: WorkerImageCardProps) {
+  return (
+    <div
+      className={`flex flex-col items-center rounded-xl bg-white p-4 shadow-sm min-w-[140px] shrink-0 ${className}`}
+    >
+      <div className="w-20 h-20 rounded-full overflow-hidden bg-gray-100 border border-gray-200 flex items-center justify-center">
+        {imageUrl ? (
+          <img
+            src={imageUrl}
+            alt={name}
+            className="w-full h-full object-cover"
+          />
+        ) : (
+          <div
+            className="w-full h-full bg-[repeating-conic-gradient(#e5e7eb_0%_25%,transparent_0%_50%)] [background-size:12px_12px]"
+            aria-hidden
+          />
+        )}
+      </div>
+      <p className="typography-body02-semibold text-gray-900 mt-3 text-center">
+        {name}
+      </p>
+      <p className="typography-body03-regular text-gray-500 mt-1 text-center">
+        {timeRange}
+      </p>
+    </div>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx.html new file mode 100644 index 0000000..8cf74ed --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx.html @@ -0,0 +1,328 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/manager WorkerListItem.tsx

+
+ +
+ 100% + Statements + 3/3 +
+ + +
+ 50% + Branches + 1/2 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 3/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
// 근무자 목록
+ 
+export type WorkerRole = '매니저' | '알바'
+ 
+export interface WorkerListItemProps {
+  name: string
+  role: WorkerRole
+  nextWorkDate: string
+  imageUrl?: string | null
+  onOptions?: () => void
+}
+ 
+export interface WorkerListItemData extends WorkerListItemProps {
+  id: string
+}
+ 
+function EllipsisIcon() {
+  return (
+    <svg
+      width="24"
+      height="24"
+      viewBox="0 0 24 24"
+      fill="none"
+      xmlns="http://www.w3.org/2000/svg"
+      className="text-gray-600"
+      aria-hidden
+    >
+      <circle cx="12" cy="6" r="1.5" fill="currentColor" />
+      <circle cx="12" cy="12" r="1.5" fill="currentColor" />
+      <circle cx="12" cy="18" r="1.5" fill="currentColor" />
+    </svg>
+  )
+}
+ 
+export function WorkerListItem({
+  name,
+  role,
+  nextWorkDate,
+  imageUrl,
+  onOptions,
+}: WorkerListItemProps) {
+  return (
+    <div className="flex items-center gap-3 py-3 bg-white">
+      <div className="w-12 h-12 rounded-full overflow-hidden bg-gray-100 border border-gray-200 shrink-0 flex items-center justify-center">
+        {imageUrl ? (
+          <img
+            src={imageUrl}
+            alt={name}
+            className="w-full h-full object-cover"
+          />
+        ) : (
+          <div
+            className="w-full h-full bg-[repeating-conic-gradient(#e5e7eb_0%_25%,transparent_0%_50%)] [background-size:8px_8px]"
+            aria-hidden
+          />
+        )}
+      </div>
+      <div className="flex-1 min-w-0">
+        <div className="flex items-center gap-2 flex-wrap">
+          <span className="typography-body01-semibold text-gray-900">
+            {name}
+          </span>
+          <span className="inline-flex items-center px-2 py-0.5 rounded-md bg-[#E0F2E0] text-gray-900 typography-bg">
+            {role}
+          </span>
+        </div>
+        <p className="typography-body03-regular text-gray-500 mt-0.5">
+          다음 근무 예정일 {nextWorkDate}
+        </p>
+      </div>
+      <button
+        type="button"
+        onClick={onOptions}
+        className="p-1 shrink-0 -m-1 rounded cursor-pointer"
+        aria-label="더보기"
+      >
+        <EllipsisIcon />
+      </button>
+    </div>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx.html new file mode 100644 index 0000000..e6fc92d --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx.html @@ -0,0 +1,289 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/manager/alba-find Albabox.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import BookmarkIcon from '@/assets/icons/alba/Bookmark.svg?react'
+ 
+export type AlbaboxProps = {
+  storeName: string
+  title: string
+  wageAmount: string
+  timeRange: string
+  workDays: string
+  distance: string
+  postedAgo: string
+  saved: boolean
+  likeCount?: string
+  onBookmarkClick?: () => void
+}
+ 
+export function Albabox({
+  storeName,
+  title,
+  wageAmount,
+  timeRange,
+  workDays,
+  distance,
+  postedAgo,
+  saved,
+  likeCount,
+  onBookmarkClick,
+}: AlbaboxProps) {
+  return (
+    <article className="flex flex-col gap-3 rounded-2xl border border-line-2 bg-white py-4">
+      <div className="flex items-start justify-between gap-3 px-4">
+        <p className="typography-body02-semibold text-text-100">{storeName}</p>
+        <button
+          type="button"
+          onClick={onBookmarkClick}
+          aria-label={saved ? '북마크 해제' : '북마크'}
+          className={`shrink-0 p-1 -m-1 rounded-md transition-colors ${
+            saved
+              ? 'text-main [&_path]:fill-main [&_path]:stroke-main'
+              : 'text-text-50 hover:text-text-70'
+          }`}
+        >
+          <BookmarkIcon className="h-5 w-4" aria-hidden />
+        </button>
+      </div>
+ 
+      <h3 className="typography-body01-semibold text-text-100 line-clamp-2 px-4">
+        {title}
+      </h3>
+ 
+      <p className="typography-headline03 text-text-100 px-4">
+        시급 {wageAmount}원
+      </p>
+ 
+      <div className="flex flex-wrap gap-x-3 gap-y-1 typography-body03-regular text-text-70 px-4">
+        <span>{timeRange}</span>
+        <span>{workDays}</span>
+        <span>{distance}</span>
+      </div>
+ 
+      <div className="flex items-center justify-between gap-2 border-t border-line-2 px-4 pt-3 typography-body03-regular text-text-50">
+        <span>{postedAgo}</span>
+        {likeCount != null && likeCount !== '' && (
+          <span className="text-text-70">좋아요 {likeCount}</span>
+        )}
+      </div>
+    </article>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/alba-find/index.html b/coverage/Code/alter-client/src/shared/ui/manager/alba-find/index.html new file mode 100644 index 0000000..64f3149 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/alba-find/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/alba-find + + + + + + + + + +
+
+

All files Code/alter-client/src/shared/ui/manager/alba-find

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
Albabox.tsx +
+
100%2/2100%7/7100%1/1100%2/2
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/index.html b/coverage/Code/alter-client/src/shared/ui/manager/index.html new file mode 100644 index 0000000..4a11359 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager + + + + + + + + + +
+
+

All files Code/alter-client/src/shared/ui/manager

+
+ +
+ 88.23% + Statements + 15/17 +
+ + +
+ 81.81% + Branches + 9/11 +
+ + +
+ 81.81% + Functions + 9/11 +
+ + +
+ 88.23% + Lines + 15/17 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
OngoingPostingCard.tsx +
+
80%4/5100%2/275%3/480%4/5
SubstituteApprovalCard.tsx +
+
85.71%6/775%3/475%3/485.71%6/7
WorkerImageCard.tsx +
+
100%2/2100%3/3100%1/1100%2/2
WorkerListItem.tsx +
+
100%3/350%1/2100%2/2100%3/3
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx.html new file mode 100644 index 0000000..c34527d --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx.html @@ -0,0 +1,142 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/manager/social SocialCategory.tsx

+
+ +
+ 100% + Statements + 2/2 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 2/2 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +2x +1x +  +  +  +  +  +  +  +  +  +  +  + 
interface SocialCategoryProps {
+  label: string
+  active?: boolean
+}
+ 
+export function SocialCategory({ label, active = false }: SocialCategoryProps) {
+  return (
+    <button
+      type="button"
+      className={`h-[30px] rounded-full px-4 typography-body03-semibold transition-colors ${
+        active
+          ? 'bg-main text-text-100'
+          : 'bg-[#e9e9e9] text-text-90 hover:bg-[#dfdfdf]'
+      }`}
+    >
+      {label}
+    </button>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx.html new file mode 100644 index 0000000..384cbf3 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx.html @@ -0,0 +1,547 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/social/SocialList.tsx + + + + + + + + + +
+
+

All files / Code/alter-client/src/shared/ui/manager/social SocialList.tsx

+
+ +
+ 14.28% + Statements + 5/35 +
+ + +
+ 21.42% + Branches + 3/14 +
+ + +
+ 11.11% + Functions + 1/9 +
+ + +
+ 15.62% + Lines + 5/32 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +1551x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +3x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { useRef, useState, type PointerEventHandler } from 'react'
+ 
+interface SocialProfileProps {
+  name: string
+  message: string
+  timeAgo: string
+  unread?: boolean
+}
+ 
+interface SocialActionProps {
+  onRead?: () => void
+  onDelete?: () => void
+}
+ 
+interface SwipeableSocialItemProps extends SocialProfileProps {
+  onRead?: () => void
+  onDelete?: () => void
+}
+ 
+const ACTION_WIDTH = 160
+const OPEN_THRESHOLD = ACTION_WIDTH * 0.45
+ 
+export function SocialList({
+  name,
+  message,
+  timeAgo,
+  unread = false,
+}: SocialProfileProps) {
+  return (
+    <div className="flex items-center gap-3 border-b border-line-1 py-3">
+      <div className="h-12 w-12 shrink-0 rounded-full bg-[#efefef]" />
+ 
+      <div className="w-full flex flex-col gap-1">
+        <div className="flex justify-between ">
+          <div className="typography-body01-semibold text-text-100">{name}</div>
+          <div className="typography-body03-regular text-text-70">
+            {timeAgo}
+          </div>
+        </div>
+ 
+        <div className="flex justify-between">
+          <div className=" typography-body02-semibold text-text-100">
+            {message}
+          </div>
+          <div
+            className={`h-3 w-3 rounded-full ${unread ? 'bg-error' : 'bg-transparent'}`}
+          />
+        </div>
+      </div>
+    </div>
+  )
+}
+ 
+export function SwipeableSocialItem({
+  name,
+  message,
+  timeAgo,
+  unread = false,
+  onRead,
+  onDelete,
+}: SwipeableSocialItemProps) {
+  const [translateX, setTranslateX] = useState(0)
+  const [isDragging, setIsDragging] = useState(false)
+ 
+  const pointerIdRef = useRef<number | null>(null)
+  const startXRef = useRef(0)
+  const startTranslateXRef = useRef(0)
+ 
+  const handlePointerDown: PointerEventHandler<HTMLDivElement> = event => {
+    pointerIdRef.current = event.pointerId
+    startXRef.current = event.clientX
+    startTranslateXRef.current = translateX
+    setIsDragging(true)
+    event.currentTarget.setPointerCapture(event.pointerId)
+  }
+ 
+  const handlePointerMove: PointerEventHandler<HTMLDivElement> = event => {
+    if (!isDragging || pointerIdRef.current !== event.pointerId) return
+ 
+    const deltaX = event.clientX - startXRef.current
+    const nextTranslateX = Math.min(
+      0,
+      Math.max(-ACTION_WIDTH, startTranslateXRef.current + deltaX)
+    )
+    setTranslateX(nextTranslateX)
+  }
+ 
+  const finishDrag = (pointerId: number) => {
+    if (pointerIdRef.current !== pointerId) return
+ 
+    pointerIdRef.current = null
+    setIsDragging(false)
+    setTranslateX(prev => (Math.abs(prev) > OPEN_THRESHOLD ? -ACTION_WIDTH : 0))
+  }
+ 
+  const handlePointerUp: PointerEventHandler<HTMLDivElement> = event => {
+    finishDrag(event.pointerId)
+  }
+ 
+  const handlePointerCancel: PointerEventHandler<HTMLDivElement> = event => {
+    finishDrag(event.pointerId)
+  }
+ 
+  return (
+    <div className="relative  overflow-hidden">
+      <div className="absolute right-0 top-0 h-full flex items-center">
+        <SocialAction onRead={onRead} onDelete={onDelete} />
+      </div>
+ 
+      <div
+        className="bg-white"
+        onPointerDown={handlePointerDown}
+        onPointerMove={handlePointerMove}
+        onPointerUp={handlePointerUp}
+        onPointerCancel={handlePointerCancel}
+        style={{
+          touchAction: 'pan-y',
+          transform: `translateX(${translateX}px)`,
+          transition: isDragging ? 'none' : 'transform 180ms ease-out',
+        }}
+      >
+        <div className="px-4">
+          <SocialList
+            name={name}
+            message={message}
+            timeAgo={timeAgo}
+            unread={unread}
+          />
+        </div>
+      </div>
+    </div>
+  )
+}
+ 
+export function SocialAction({ onRead, onDelete }: SocialActionProps) {
+  return (
+    <div className="flex h-[64px] w-[160px] shrink-0 overflow-hidden rounded-[2px]">
+      <button
+        type="button"
+        onClick={onRead}
+        className="w-1/2 bg-[#e3e3e3] typography-body01-regular text-text-90"
+      >
+        읽음
+      </button>
+      <button
+        type="button"
+        onClick={onDelete}
+        className="w-1/2 bg-error typography-body01-regular text-white"
+      >
+        삭제
+      </button>
+    </div>
+  )
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/social/index.html b/coverage/Code/alter-client/src/shared/ui/manager/social/index.html new file mode 100644 index 0000000..cd56572 --- /dev/null +++ b/coverage/Code/alter-client/src/shared/ui/manager/social/index.html @@ -0,0 +1,131 @@ + + + + + + Code coverage report for Code/alter-client/src/shared/ui/manager/social + + + + + + + + + +
+
+

All files Code/alter-client/src/shared/ui/manager/social

+
+ +
+ 18.91% + Statements + 7/37 +
+ + +
+ 35.29% + Branches + 6/17 +
+ + +
+ 20% + Functions + 2/10 +
+ + +
+ 20.58% + Lines + 7/34 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
SocialCategory.tsx +
+
100%2/2100%3/3100%1/1100%2/2
SocialList.tsx +
+
14.28%5/3521.42%3/1411.11%1/915.62%5/32
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/Code/index.html b/coverage/Code/index.html new file mode 100644 index 0000000..7734c57 --- /dev/null +++ b/coverage/Code/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for Code + + + + + + + + + +
+
+

All files Code

+
+ +
+ 0% + Statements + 0/0 +
+ + +
+ 0% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/0 +
+ + +
+ 0% + Lines + 0/0 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
alter-client +
+
0%0/00%0/00%0/00%0/0
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/base.css b/coverage/base.css new file mode 100644 index 0000000..f418035 --- /dev/null +++ b/coverage/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/coverage/block-navigation.js b/coverage/block-navigation.js new file mode 100644 index 0000000..530d1ed --- /dev/null +++ b/coverage/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selector that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/coverage/clover.xml b/coverage/clover.xml new file mode 100644 index 0000000..2008901 --- /dev/null +++ b/coverage/clover.xml @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 0000000..d449641 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,43 @@ +{"/Users/hyeon/Code/alter-client": {"path":"/Users/hyeon/Code/alter-client","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} +,"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx","statementMap":{"0":{"start":{"line":33,"column":12},"end":{"line":33,"column":13}},"1":{"start":{"line":26,"column":2},"end":{"line":61,"column":null}}},"fnMap":{"0":{"name":"StoreWorkerListItem","decl":{"start":{"line":18,"column":16},"end":{"line":18,"column":36}},"loc":{"start":{"line":25,"column":29},"end":{"line":63,"column":null}},"line":25}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":2},"end":{"line":24,"column":null}},"type":"default-arg","locations":[{"start":{"line":24,"column":14},"end":{"line":24,"column":null}}],"line":24},"1":{"loc":{"start":{"line":32,"column":11},"end":{"line":38,"column":null}},"type":"cond-expr","locations":[{"start":{"line":33,"column":12},"end":{"line":37,"column":null}},{"start":{"line":38,"column":14},"end":{"line":38,"column":null}}],"line":32}},"s":{"0":1,"1":2},"f":{"0":2},"b":{"0":[2],"1":[0,2]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:33:12:33:13":0,"f:18:16:18:36":0,"b:24:14:24:Infinity":0,"s:26:2:61:Infinity":1,"b:33:12:37:Infinity:38:14:38:Infinity":1}}} +,"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx","statementMap":{"0":{"start":{"line":18,"column":10},"end":{"line":18,"column":11}},"1":{"start":{"line":14,"column":2},"end":{"line":31,"column":null}},"2":{"start":{"line":39,"column":2},"end":{"line":52,"column":null}},"3":{"start":{"line":48,"column":12},"end":{"line":48,"column":null}}},"fnMap":{"0":{"name":"TodayWorkerCard","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":25}},"loc":{"start":{"line":13,"column":66},"end":{"line":33,"column":null}},"line":13},"1":{"name":"TodayWorkerList","decl":{"start":{"line":35,"column":16},"end":{"line":35,"column":32}},"loc":{"start":{"line":38,"column":25},"end":{"line":54,"column":null}},"line":38},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":23},"end":{"line":47,"column":null}},"loc":{"start":{"line":48,"column":12},"end":{"line":48,"column":null}},"line":48}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":9},"end":{"line":23,"column":null}},"type":"cond-expr","locations":[{"start":{"line":18,"column":10},"end":{"line":22,"column":null}},{"start":{"line":23,"column":12},"end":{"line":23,"column":null}}],"line":17},"1":{"loc":{"start":{"line":37,"column":2},"end":{"line":37,"column":null}},"type":"default-arg","locations":[{"start":{"line":37,"column":14},"end":{"line":37,"column":null}}],"line":37}},"s":{"0":1,"1":3,"2":1,"3":3},"f":{"0":3,"1":1,"2":3},"b":{"0":[0,3],"1":[1]},"meta":{"lastBranch":2,"lastFunction":3,"lastStatement":4,"seen":{"s:18:10:18:11":0,"f:13:9:13:25":0,"s:14:2:31:Infinity":1,"b:18:10:22:Infinity:23:12:23:Infinity":0,"f:35:16:35:32":1,"b:37:14:37:Infinity":1,"s:39:2:52:Infinity":2,"f:47:23:47:Infinity":2,"s:48:12:48:Infinity":3}}} +,"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx","statementMap":{"0":{"start":{"line":43,"column":10},"end":{"line":43,"column":11}},"1":{"start":{"line":34,"column":2},"end":{"line":78,"column":null}},"2":{"start":{"line":36,"column":21},"end":{"line":36,"column":null}},"3":{"start":{"line":70,"column":10},"end":{"line":70,"column":null}},"4":{"start":{"line":71,"column":10},"end":{"line":71,"column":null}}},"fnMap":{"0":{"name":"WorkspaceChangeCard","decl":{"start":{"line":26,"column":16},"end":{"line":26,"column":36}},"loc":{"start":{"line":33,"column":29},"end":{"line":80,"column":null}},"line":33},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":15},"end":{"line":36,"column":21}},"loc":{"start":{"line":36,"column":21},"end":{"line":36,"column":null}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":17},"end":{"line":69,"column":26}},"loc":{"start":{"line":69,"column":26},"end":{"line":72,"column":null}},"line":69}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":null}},"type":"default-arg","locations":[{"start":{"line":28,"column":15},"end":{"line":28,"column":null}}],"line":28},"1":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":null}},"type":"default-arg","locations":[{"start":{"line":29,"column":18},"end":{"line":29,"column":null}}],"line":29},"2":{"loc":{"start":{"line":30,"column":2},"end":{"line":30,"column":null}},"type":"default-arg","locations":[{"start":{"line":30,"column":14},"end":{"line":30,"column":null}}],"line":30},"3":{"loc":{"start":{"line":38,"column":8},"end":{"line":38,"column":null}},"type":"cond-expr","locations":[{"start":{"line":38,"column":21},"end":{"line":38,"column":54}},{"start":{"line":38,"column":54},"end":{"line":38,"column":null}}],"line":38},"4":{"loc":{"start":{"line":39,"column":10},"end":{"line":39,"column":41}},"type":"cond-expr","locations":[{"start":{"line":39,"column":20},"end":{"line":39,"column":39}},{"start":{"line":39,"column":39},"end":{"line":39,"column":41}}],"line":39},"5":{"loc":{"start":{"line":55,"column":14},"end":{"line":55,"column":null}},"type":"cond-expr","locations":[{"start":{"line":55,"column":27},"end":{"line":55,"column":38}},{"start":{"line":55,"column":38},"end":{"line":55,"column":null}}],"line":55}},"s":{"0":1,"1":2,"2":0,"3":0,"4":0},"f":{"0":2,"1":0,"2":0},"b":{"0":[2],"1":[2],"2":[2],"3":[1,1],"4":[0,2],"5":[1,1]},"meta":{"lastBranch":6,"lastFunction":3,"lastStatement":5,"seen":{"s:43:10:43:11":0,"f:26:16:26:36":0,"b:28:15:28:Infinity":0,"b:29:18:29:Infinity":1,"b:30:14:30:Infinity":2,"s:34:2:78:Infinity":1,"f:36:15:36:21":1,"s:36:21:36:Infinity":2,"b:38:21:38:54:38:54:38:Infinity":3,"b:39:20:39:39:39:39:39:41":4,"b:55:27:55:38:55:38:55:Infinity":5,"f:69:17:69:26":2,"s:70:10:70:Infinity":3,"s:71:10:71:Infinity":4}}} +,"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx","statementMap":{"0":{"start":{"line":26,"column":8},"end":{"line":26,"column":9}},"1":{"start":{"line":23,"column":2},"end":{"line":35,"column":null}},"2":{"start":{"line":26,"column":8},"end":{"line":33,"column":null}}},"fnMap":{"0":{"name":"WorkspaceChangeList","decl":{"start":{"line":15,"column":16},"end":{"line":15,"column":36}},"loc":{"start":{"line":22,"column":29},"end":{"line":37,"column":null}},"line":22},"1":{"name":"(anonymous_1)","decl":{"start":{"line":25,"column":22},"end":{"line":25,"column":null}},"loc":{"start":{"line":26,"column":8},"end":{"line":33,"column":null}},"line":26}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":18},"end":{"line":18,"column":null}}],"line":18},"1":{"loc":{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},"type":"default-arg","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":null}}],"line":19}},"s":{"0":1,"1":1,"2":2},"f":{"0":1,"1":2},"b":{"0":[1],"1":[1]},"meta":{"lastBranch":2,"lastFunction":2,"lastStatement":3,"seen":{"s:26:8:26:9":0,"f:15:16:15:36":0,"b:18:18:18:Infinity":0,"b:19:14:19:Infinity":1,"s:23:2:35:Infinity":1,"f:25:22:25:Infinity":1,"s:26:8:33:Infinity":2}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/constants/calendar.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/constants/calendar.ts","statementMap":{"0":{"start":{"line":1,"column":30},"end":{"line":9,"column":null}},"1":{"start":{"line":11,"column":31},"end":{"line":11,"column":null}},"2":{"start":{"line":12,"column":34},"end":{"line":12,"column":null}},"3":{"start":{"line":14,"column":37},"end":{"line":14,"column":null}},"4":{"start":{"line":15,"column":41},"end":{"line":15,"column":null}},"5":{"start":{"line":16,"column":39},"end":{"line":16,"column":null}},"6":{"start":{"line":18,"column":62},"end":{"line":23,"column":null}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":7,"seen":{"s:1:30:9:Infinity":0,"s:11:31:11:Infinity":1,"s:12:34:12:Infinity":2,"s:14:37:14:Infinity":3,"s:15:41:15:Infinity":4,"s:16:39:16:Infinity":5,"s:18:62:23:Infinity":6}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts","statementMap":{"0":{"start":{"line":2,"column":24},"end":{"line":2,"column":null}},"1":{"start":{"line":16,"column":2},"end":{"line":16,"column":null}},"2":{"start":{"line":23,"column":2},"end":{"line":23,"column":null}},"3":{"start":{"line":37,"column":2},"end":{"line":64,"column":null}},"4":{"start":{"line":38,"column":22},"end":{"line":38,"column":null}},"5":{"start":{"line":39,"column":20},"end":{"line":39,"column":null}},"6":{"start":{"line":41,"column":10},"end":{"line":42,"column":null}},"7":{"start":{"line":43,"column":10},"end":{"line":44,"column":null}},"8":{"start":{"line":46,"column":25},"end":{"line":46,"column":null}},"9":{"start":{"line":47,"column":23},"end":{"line":47,"column":null}},"10":{"start":{"line":48,"column":28},"end":{"line":48,"column":null}},"11":{"start":{"line":50,"column":17},"end":{"line":50,"column":null}},"12":{"start":{"line":51,"column":19},"end":{"line":54,"column":null}},"13":{"start":{"line":56,"column":4},"end":{"line":63,"column":null}},"14":{"start":{"line":72,"column":2},"end":{"line":102,"column":null}},"15":{"start":{"line":73,"column":27},"end":{"line":73,"column":null}},"16":{"start":{"line":74,"column":30},"end":{"line":74,"column":null}},"17":{"start":{"line":75,"column":28},"end":{"line":75,"column":null}},"18":{"start":{"line":76,"column":10},"end":{"line":76,"column":null}},"19":{"start":{"line":78,"column":26},"end":{"line":82,"column":null}},"20":{"start":{"line":79,"column":20},"end":{"line":79,"column":null}},"21":{"start":{"line":80,"column":12},"end":{"line":80,"column":null}},"22":{"start":{"line":81,"column":6},"end":{"line":81,"column":null}},"23":{"start":{"line":84,"column":24},"end":{"line":89,"column":null}},"24":{"start":{"line":91,"column":4},"end":{"line":101,"column":null}}},"fnMap":{"0":{"name":"getStatusStyle","decl":{"start":{"line":15,"column":9},"end":{"line":15,"column":24}},"loc":{"start":{"line":15,"column":40},"end":{"line":17,"column":null}},"line":15},"1":{"name":"sortByStartTime","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":null}},"loc":{"start":{"line":22,"column":2},"end":{"line":24,"column":null}},"line":22},"2":{"name":"buildDailyEventBlocks","decl":{"start":{"line":26,"column":9},"end":{"line":26,"column":31}},"loc":{"start":{"line":36,"column":3},"end":{"line":65,"column":null}},"line":36},"3":{"name":"(anonymous_3)","decl":{"start":{"line":37,"column":47},"end":{"line":37,"column":56}},"loc":{"start":{"line":37,"column":56},"end":{"line":64,"column":3}},"line":37},"4":{"name":"useDailyCalendarViewModel","decl":{"start":{"line":67,"column":16},"end":{"line":67,"column":42}},"loc":{"start":{"line":71,"column":51},"end":{"line":103,"column":null}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":72,"column":17},"end":{"line":72,"column":23}},"loc":{"start":{"line":72,"column":23},"end":{"line":102,"column":5}},"line":72},"6":{"name":"(anonymous_6)","decl":{"start":{"line":78,"column":52},"end":{"line":78,"column":53}},"loc":{"start":{"line":78,"column":64},"end":{"line":82,"column":5}},"line":78}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":9},"end":{"line":16,"column":null}},"type":"binary-expr","locations":[{"start":{"line":16,"column":9},"end":{"line":16,"column":43}},{"start":{"line":16,"column":43},"end":{"line":16,"column":null}}],"line":16},"1":{"loc":{"start":{"line":85,"column":14},"end":{"line":85,"column":null}},"type":"binary-expr","locations":[{"start":{"line":85,"column":14},"end":{"line":85,"column":30}},{"start":{"line":85,"column":30},"end":{"line":85,"column":null}}],"line":85},"2":{"loc":{"start":{"line":92,"column":13},"end":{"line":92,"column":null}},"type":"binary-expr","locations":[{"start":{"line":92,"column":13},"end":{"line":92,"column":30}},{"start":{"line":92,"column":30},"end":{"line":92,"column":null}}],"line":92},"3":{"loc":{"start":{"line":94,"column":33},"end":{"line":94,"column":66}},"type":"binary-expr","locations":[{"start":{"line":94,"column":33},"end":{"line":94,"column":65}},{"start":{"line":94,"column":65},"end":{"line":94,"column":66}}],"line":94}},"s":{"0":1,"1":5,"2":6,"3":2,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5,"10":5,"11":5,"12":5,"13":5,"14":2,"15":2,"16":2,"17":2,"18":2,"19":2,"20":14,"21":14,"22":14,"23":2,"24":2},"f":{"0":5,"1":6,"2":2,"3":5,"4":2,"5":2,"6":14},"b":{"0":[5,0],"1":[2,0],"2":[2,1],"3":[2,0]},"meta":{"lastBranch":4,"lastFunction":7,"lastStatement":25,"seen":{"s:2:24:2:Infinity":0,"f:15:9:15:24":0,"s:16:2:16:Infinity":1,"b:16:9:16:43:16:43:16:Infinity":0,"f:19:9:19:Infinity":1,"s:23:2:23:Infinity":2,"f:26:9:26:31":2,"s:37:2:64:Infinity":3,"f:37:47:37:56":3,"s:38:22:38:Infinity":4,"s:39:20:39:Infinity":5,"s:41:10:42:Infinity":6,"s:43:10:44:Infinity":7,"s:46:25:46:Infinity":8,"s:47:23:47:Infinity":9,"s:48:28:48:Infinity":10,"s:50:17:50:Infinity":11,"s:51:19:54:Infinity":12,"s:56:4:63:Infinity":13,"f:67:16:67:42":4,"s:72:2:102:Infinity":14,"f:72:17:72:23":5,"s:73:27:73:Infinity":15,"s:74:30:74:Infinity":16,"s:75:28:75:Infinity":17,"s:76:10:76:Infinity":18,"s:78:26:82:Infinity":19,"f:78:52:78:53":6,"s:79:20:79:Infinity":20,"s:80:12:80:Infinity":21,"s:81:6:81:Infinity":22,"s:84:24:89:Infinity":23,"b:85:14:85:30:85:30:85:Infinity":1,"s:91:4:101:Infinity":24,"b:92:13:92:30:92:30:92:Infinity":2,"b:94:33:94:65:94:65:94:66":3}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts","statementMap":{"0":{"start":{"line":12,"column":24},"end":{"line":12,"column":null}},"1":{"start":{"line":28,"column":21},"end":{"line":28,"column":null}},"2":{"start":{"line":29,"column":19},"end":{"line":29,"column":null}},"3":{"start":{"line":30,"column":24},"end":{"line":30,"column":null}},"4":{"start":{"line":31,"column":22},"end":{"line":31,"column":null}},"5":{"start":{"line":33,"column":2},"end":{"line":40,"column":null}},"6":{"start":{"line":34,"column":13},"end":{"line":39,"column":null}},"7":{"start":{"line":46,"column":2},"end":{"line":46,"column":null}},"8":{"start":{"line":46,"column":27},"end":{"line":46,"column":null}},"9":{"start":{"line":47,"column":17},"end":{"line":47,"column":null}},"10":{"start":{"line":47,"column":44},"end":{"line":47,"column":55}},"11":{"start":{"line":48,"column":35},"end":{"line":48,"column":null}},"12":{"start":{"line":49,"column":14},"end":{"line":49,"column":null}},"13":{"start":{"line":51,"column":2},"end":{"line":60,"column":null}},"14":{"start":{"line":51,"column":17},"end":{"line":51,"column":20}},"15":{"start":{"line":52,"column":33},"end":{"line":52,"column":null}},"16":{"start":{"line":53,"column":4},"end":{"line":56,"column":null}},"17":{"start":{"line":54,"column":6},"end":{"line":54,"column":null}},"18":{"start":{"line":55,"column":6},"end":{"line":55,"column":null}},"19":{"start":{"line":57,"column":4},"end":{"line":57,"column":null}},"20":{"start":{"line":58,"column":4},"end":{"line":58,"column":null}},"21":{"start":{"line":59,"column":4},"end":{"line":59,"column":null}},"22":{"start":{"line":62,"column":2},"end":{"line":62,"column":null}},"23":{"start":{"line":63,"column":2},"end":{"line":63,"column":null}},"24":{"start":{"line":67,"column":54},"end":{"line":67,"column":null}},"25":{"start":{"line":69,"column":3},"end":{"line":99,"column":null}},"26":{"start":{"line":70,"column":18},"end":{"line":70,"column":null}},"27":{"start":{"line":71,"column":16},"end":{"line":71,"column":null}},"28":{"start":{"line":73,"column":4},"end":{"line":79,"column":null}},"29":{"start":{"line":78,"column":6},"end":{"line":78,"column":null}},"30":{"start":{"line":81,"column":17},"end":{"line":81,"column":null}},"31":{"start":{"line":82,"column":20},"end":{"line":82,"column":null}},"32":{"start":{"line":84,"column":4},"end":{"line":98,"column":null}},"33":{"start":{"line":85,"column":22},"end":{"line":85,"column":null}},"34":{"start":{"line":86,"column":24},"end":{"line":86,"column":null}},"35":{"start":{"line":87,"column":22},"end":{"line":87,"column":null}},"36":{"start":{"line":89,"column":6},"end":{"line":95,"column":null}},"37":{"start":{"line":90,"column":23},"end":{"line":90,"column":null}},"38":{"start":{"line":91,"column":14},"end":{"line":91,"column":null}},"39":{"start":{"line":92,"column":14},"end":{"line":92,"column":null}},"40":{"start":{"line":93,"column":8},"end":{"line":93,"column":null}},"41":{"start":{"line":94,"column":8},"end":{"line":94,"column":null}},"42":{"start":{"line":97,"column":6},"end":{"line":97,"column":null}},"43":{"start":{"line":101,"column":2},"end":{"line":110,"column":null}},"44":{"start":{"line":103,"column":30},"end":{"line":103,"column":null}},"45":{"start":{"line":104,"column":23},"end":{"line":104,"column":null}},"46":{"start":{"line":105,"column":26},"end":{"line":105,"column":null}},"47":{"start":{"line":106,"column":6},"end":{"line":106,"column":null}},"48":{"start":{"line":107,"column":6},"end":{"line":107,"column":null}},"49":{"start":{"line":119,"column":16},"end":{"line":119,"column":null}},"50":{"start":{"line":119,"column":30},"end":{"line":119,"column":57}},"51":{"start":{"line":120,"column":22},"end":{"line":120,"column":null}},"52":{"start":{"line":122,"column":27},"end":{"line":122,"column":null}},"53":{"start":{"line":122,"column":41},"end":{"line":122,"column":68}},"54":{"start":{"line":124,"column":32},"end":{"line":128,"column":null}},"55":{"start":{"line":130,"column":2},"end":{"line":138,"column":null}}},"fnMap":{"0":{"name":"getMonthlyCells","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":25}},"loc":{"start":{"line":27,"column":61},"end":{"line":41,"column":null}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":34,"column":4},"end":{"line":34,"column":13}},"loc":{"start":{"line":34,"column":13},"end":{"line":39,"column":null}},"line":34},"2":{"name":"mergeMinuteRanges","decl":{"start":{"line":45,"column":9},"end":{"line":45,"column":27}},"loc":{"start":{"line":45,"column":50},"end":{"line":64,"column":null}},"line":45},"3":{"name":"(anonymous_3)","decl":{"start":{"line":47,"column":34},"end":{"line":47,"column":35}},"loc":{"start":{"line":47,"column":44},"end":{"line":47,"column":55}},"line":47},"4":{"name":"getDayMetricsByDate","decl":{"start":{"line":66,"column":9},"end":{"line":66,"column":29}},"loc":{"start":{"line":66,"column":60},"end":{"line":111,"column":null}},"line":66},"5":{"name":"(anonymous_5)","decl":{"start":{"line":69,"column":32},"end":{"line":69,"column":41}},"loc":{"start":{"line":69,"column":41},"end":{"line":99,"column":3}},"line":69},"6":{"name":"(anonymous_6)","decl":{"start":{"line":102,"column":4},"end":{"line":102,"column":5}},"loc":{"start":{"line":102,"column":32},"end":{"line":108,"column":null}},"line":102},"7":{"name":"useMonthlyCalendarViewModel","decl":{"start":{"line":113,"column":16},"end":{"line":113,"column":44}},"loc":{"start":{"line":118,"column":55},"end":{"line":139,"column":null}},"line":118},"8":{"name":"(anonymous_8)","decl":{"start":{"line":119,"column":24},"end":{"line":119,"column":30}},"loc":{"start":{"line":119,"column":30},"end":{"line":119,"column":57}},"line":119},"9":{"name":"(anonymous_9)","decl":{"start":{"line":122,"column":35},"end":{"line":122,"column":41}},"loc":{"start":{"line":122,"column":41},"end":{"line":122,"column":68}},"line":122}},"branchMap":{"0":{"loc":{"start":{"line":46,"column":2},"end":{"line":46,"column":null}},"type":"if","locations":[{"start":{"line":46,"column":2},"end":{"line":46,"column":null}},{"start":{},"end":{}}],"line":46},"1":{"loc":{"start":{"line":53,"column":4},"end":{"line":56,"column":null}},"type":"if","locations":[{"start":{"line":53,"column":4},"end":{"line":56,"column":null}},{"start":{},"end":{}}],"line":53},"2":{"loc":{"start":{"line":69,"column":4},"end":{"line":69,"column":24}},"type":"binary-expr","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":20}},{"start":{"line":69,"column":20},"end":{"line":69,"column":24}}],"line":69},"3":{"loc":{"start":{"line":73,"column":4},"end":{"line":79,"column":null}},"type":"if","locations":[{"start":{"line":73,"column":4},"end":{"line":79,"column":null}},{"start":{},"end":{}}],"line":73},"4":{"loc":{"start":{"line":74,"column":6},"end":{"line":76,"column":null}},"type":"binary-expr","locations":[{"start":{"line":74,"column":6},"end":{"line":74,"column":null}},{"start":{"line":75,"column":6},"end":{"line":75,"column":null}},{"start":{"line":76,"column":6},"end":{"line":76,"column":null}}],"line":74},"5":{"loc":{"start":{"line":89,"column":6},"end":{"line":95,"column":null}},"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":95,"column":null}},{"start":{},"end":{}}],"line":89},"6":{"loc":{"start":{"line":93,"column":31},"end":{"line":93,"column":null}},"type":"binary-expr","locations":[{"start":{"line":93,"column":31},"end":{"line":93,"column":55}},{"start":{"line":93,"column":55},"end":{"line":93,"column":null}}],"line":93},"7":{"loc":{"start":{"line":120,"column":22},"end":{"line":120,"column":null}},"type":"binary-expr","locations":[{"start":{"line":120,"column":22},"end":{"line":120,"column":41}},{"start":{"line":120,"column":41},"end":{"line":120,"column":null}}],"line":120},"8":{"loc":{"start":{"line":131,"column":11},"end":{"line":131,"column":null}},"type":"binary-expr","locations":[{"start":{"line":131,"column":11},"end":{"line":131,"column":28}},{"start":{"line":131,"column":28},"end":{"line":131,"column":null}}],"line":131},"9":{"loc":{"start":{"line":134,"column":17},"end":{"line":134,"column":50}},"type":"binary-expr","locations":[{"start":{"line":134,"column":17},"end":{"line":134,"column":49}},{"start":{"line":134,"column":49},"end":{"line":134,"column":50}}],"line":134}},"s":{"0":1,"1":2,"2":2,"3":2,"4":2,"5":2,"6":70,"7":5,"8":0,"9":5,"10":0,"11":5,"12":5,"13":5,"14":5,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":5,"23":5,"24":2,"25":2,"26":5,"27":5,"28":5,"29":0,"30":5,"31":5,"32":5,"33":5,"34":5,"35":5,"36":5,"37":5,"38":5,"39":5,"40":5,"41":5,"42":5,"43":2,"44":5,"45":5,"46":5,"47":5,"48":5,"49":2,"50":2,"51":2,"52":2,"53":2,"54":2,"55":2},"f":{"0":2,"1":70,"2":5,"3":0,"4":2,"5":5,"6":5,"7":2,"8":2,"9":2},"b":{"0":[0,5],"1":[0,0],"2":[2,1],"3":[0,5],"4":[5,5,5],"5":[5,0],"6":[5,5],"7":[2,2],"8":[2,1],"9":[2,1]},"meta":{"lastBranch":10,"lastFunction":10,"lastStatement":56,"seen":{"s:12:24:12:Infinity":0,"f:27:9:27:25":0,"s:28:21:28:Infinity":1,"s:29:19:29:Infinity":2,"s:30:24:30:Infinity":3,"s:31:22:31:Infinity":4,"s:33:2:40:Infinity":5,"f:34:4:34:13":1,"s:34:13:39:Infinity":6,"f:45:9:45:27":2,"b:46:2:46:Infinity:undefined:undefined:undefined:undefined":0,"s:46:2:46:Infinity":7,"s:46:27:46:Infinity":8,"s:47:17:47:Infinity":9,"f:47:34:47:35":3,"s:47:44:47:55":10,"s:48:35:48:Infinity":11,"s:49:14:49:Infinity":12,"s:51:2:60:Infinity":13,"s:51:17:51:20":14,"s:52:33:52:Infinity":15,"b:53:4:56:Infinity:undefined:undefined:undefined:undefined":1,"s:53:4:56:Infinity":16,"s:54:6:54:Infinity":17,"s:55:6:55:Infinity":18,"s:57:4:57:Infinity":19,"s:58:4:58:Infinity":20,"s:59:4:59:Infinity":21,"s:62:2:62:Infinity":22,"s:63:2:63:Infinity":23,"f:66:9:66:29":4,"s:67:54:67:Infinity":24,"s:69:3:99:Infinity":25,"b:69:4:69:20:69:20:69:24":2,"f:69:32:69:41":5,"s:70:18:70:Infinity":26,"s:71:16:71:Infinity":27,"b:73:4:79:Infinity:undefined:undefined:undefined:undefined":3,"s:73:4:79:Infinity":28,"b:74:6:74:Infinity:75:6:75:Infinity:76:6:76:Infinity":4,"s:78:6:78:Infinity":29,"s:81:17:81:Infinity":30,"s:82:20:82:Infinity":31,"s:84:4:98:Infinity":32,"s:85:22:85:Infinity":33,"s:86:24:86:Infinity":34,"s:87:22:87:Infinity":35,"b:89:6:95:Infinity:undefined:undefined:undefined:undefined":5,"s:89:6:95:Infinity":36,"s:90:23:90:Infinity":37,"s:91:14:91:Infinity":38,"s:92:14:92:Infinity":39,"s:93:8:93:Infinity":40,"b:93:31:93:55:93:55:93:Infinity":6,"s:94:8:94:Infinity":41,"s:97:6:97:Infinity":42,"s:101:2:110:Infinity":43,"f:102:4:102:5":6,"s:103:30:103:Infinity":44,"s:104:23:104:Infinity":45,"s:105:26:105:Infinity":46,"s:106:6:106:Infinity":47,"s:107:6:107:Infinity":48,"f:113:16:113:44":7,"s:119:16:119:Infinity":49,"f:119:24:119:30":8,"s:119:30:119:57":50,"s:120:22:120:Infinity":51,"b:120:22:120:41:120:41:120:Infinity":7,"s:122:27:122:Infinity":52,"f:122:35:122:41":9,"s:122:41:122:68":53,"s:124:32:128:Infinity":54,"s:130:2:138:Infinity":55,"b:131:11:131:28:131:28:131:Infinity":8,"b:134:17:134:49:134:49:134:50":9}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts","statementMap":{"0":{"start":{"line":1,"column":24},"end":{"line":1,"column":null}},"1":{"start":{"line":9,"column":2},"end":{"line":29,"column":null}},"2":{"start":{"line":11,"column":6},"end":{"line":27,"column":null}},"3":{"start":{"line":12,"column":27},"end":{"line":12,"column":null}},"4":{"start":{"line":13,"column":25},"end":{"line":13,"column":null}},"5":{"start":{"line":14,"column":28},"end":{"line":14,"column":null}},"6":{"start":{"line":15,"column":26},"end":{"line":15,"column":null}},"7":{"start":{"line":16,"column":27},"end":{"line":16,"column":null}},"8":{"start":{"line":17,"column":28},"end":{"line":17,"column":null}},"9":{"start":{"line":19,"column":8},"end":{"line":26,"column":null}}},"fnMap":{"0":{"name":"useMonthlyDateCellsState","decl":{"start":{"line":4,"column":16},"end":{"line":4,"column":41}},"loc":{"start":{"line":8,"column":35},"end":{"line":30,"column":null}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":4},"end":{"line":10,"column":null}},"loc":{"start":{"line":11,"column":6},"end":{"line":27,"column":null}},"line":11},"2":{"name":"(anonymous_2)","decl":{"start":{"line":11,"column":16},"end":{"line":11,"column":24}},"loc":{"start":{"line":11,"column":24},"end":{"line":27,"column":7}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":25},"end":{"line":13,"column":null}},"type":"binary-expr","locations":[{"start":{"line":13,"column":25},"end":{"line":13,"column":49}},{"start":{"line":13,"column":49},"end":{"line":13,"column":null}}],"line":13},"1":{"loc":{"start":{"line":14,"column":28},"end":{"line":14,"column":null}},"type":"binary-expr","locations":[{"start":{"line":14,"column":28},"end":{"line":14,"column":55}},{"start":{"line":14,"column":55},"end":{"line":14,"column":null}}],"line":14},"2":{"loc":{"start":{"line":15,"column":26},"end":{"line":15,"column":null}},"type":"binary-expr","locations":[{"start":{"line":15,"column":26},"end":{"line":15,"column":48}},{"start":{"line":15,"column":48},"end":{"line":15,"column":null}}],"line":15},"3":{"loc":{"start":{"line":17,"column":28},"end":{"line":17,"column":null}},"type":"binary-expr","locations":[{"start":{"line":17,"column":28},"end":{"line":17,"column":44}},{"start":{"line":17,"column":44},"end":{"line":17,"column":null}}],"line":17}},"s":{"0":1,"1":2,"2":2,"3":70,"4":70,"5":70,"6":70,"7":70,"8":70,"9":70},"f":{"0":2,"1":2,"2":70},"b":{"0":[70,65],"1":[70,65],"2":[70,60],"3":[70,5]},"meta":{"lastBranch":4,"lastFunction":3,"lastStatement":10,"seen":{"s:1:24:1:Infinity":0,"f:4:16:4:41":0,"s:9:2:29:Infinity":1,"f:10:4:10:Infinity":1,"s:11:6:27:Infinity":2,"f:11:16:11:24":2,"s:12:27:12:Infinity":3,"s:13:25:13:Infinity":4,"b:13:25:13:49:13:49:13:Infinity":0,"s:14:28:14:Infinity":5,"b:14:28:14:55:14:55:14:Infinity":1,"s:15:26:15:Infinity":6,"b:15:26:15:48:15:48:15:Infinity":2,"s:16:27:16:Infinity":7,"s:17:28:17:Infinity":8,"b:17:28:17:44:17:44:17:Infinity":3,"s:19:8:26:Infinity":9}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts","statementMap":{"0":{"start":{"line":2,"column":24},"end":{"line":2,"column":null}},"1":{"start":{"line":10,"column":14},"end":{"line":10,"column":null}},"2":{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},"3":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"4":{"start":{"line":18,"column":13},"end":{"line":18,"column":null}},"5":{"start":{"line":19,"column":2},"end":{"line":24,"column":null}},"6":{"start":{"line":21,"column":23},"end":{"line":21,"column":48}},"7":{"start":{"line":22,"column":28},"end":{"line":22,"column":53}},"8":{"start":{"line":32,"column":2},"end":{"line":63,"column":null}},"9":{"start":{"line":33,"column":18},"end":{"line":33,"column":null}},"10":{"start":{"line":34,"column":29},"end":{"line":34,"column":null}},"11":{"start":{"line":35,"column":21},"end":{"line":38,"column":null}},"12":{"start":{"line":36,"column":27},"end":{"line":36,"column":63}},"13":{"start":{"line":40,"column":21},"end":{"line":56,"column":null}},"14":{"start":{"line":41,"column":25},"end":{"line":41,"column":null}},"15":{"start":{"line":42,"column":28},"end":{"line":42,"column":null}},"16":{"start":{"line":43,"column":28},"end":{"line":43,"column":null}},"17":{"start":{"line":44,"column":30},"end":{"line":44,"column":null}},"18":{"start":{"line":46,"column":6},"end":{"line":55,"column":null}},"19":{"start":{"line":58,"column":4},"end":{"line":62,"column":null}}},"fnMap":{"0":{"name":"getSelectedDayIndex","decl":{"start":{"line":9,"column":9},"end":{"line":9,"column":29}},"loc":{"start":{"line":9,"column":45},"end":{"line":12,"column":null}},"line":9},"1":{"name":"getDayTotalHours","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":null}},"loc":{"start":{"line":17,"column":2},"end":{"line":25,"column":null}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":21,"column":14},"end":{"line":21,"column":23}},"loc":{"start":{"line":21,"column":23},"end":{"line":21,"column":48}},"line":21},"3":{"name":"(anonymous_3)","decl":{"start":{"line":22,"column":14},"end":{"line":22,"column":15}},"loc":{"start":{"line":22,"column":28},"end":{"line":22,"column":53}},"line":22},"4":{"name":"useWeeklyCalendarViewModel","decl":{"start":{"line":27,"column":16},"end":{"line":27,"column":43}},"loc":{"start":{"line":31,"column":53},"end":{"line":64,"column":null}},"line":31},"5":{"name":"(anonymous_5)","decl":{"start":{"line":32,"column":17},"end":{"line":32,"column":23}},"loc":{"start":{"line":32,"column":23},"end":{"line":63,"column":5}},"line":32},"6":{"name":"(anonymous_6)","decl":{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},"loc":{"start":{"line":36,"column":27},"end":{"line":36,"column":63}},"line":36},"7":{"name":"(anonymous_7)","decl":{"start":{"line":40,"column":31},"end":{"line":40,"column":32}},"loc":{"start":{"line":40,"column":48},"end":{"line":56,"column":5}},"line":40}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":9},"end":{"line":11,"column":null}},"type":"cond-expr","locations":[{"start":{"line":11,"column":21},"end":{"line":11,"column":25}},{"start":{"line":11,"column":25},"end":{"line":11,"column":null}}],"line":11},"1":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},{"start":{},"end":{}}],"line":18},"2":{"loc":{"start":{"line":54,"column":23},"end":{"line":54,"column":null}},"type":"binary-expr","locations":[{"start":{"line":54,"column":23},"end":{"line":54,"column":38}},{"start":{"line":54,"column":38},"end":{"line":54,"column":null}}],"line":54},"3":{"loc":{"start":{"line":59,"column":13},"end":{"line":59,"column":null}},"type":"binary-expr","locations":[{"start":{"line":59,"column":13},"end":{"line":59,"column":30}},{"start":{"line":59,"column":30},"end":{"line":59,"column":null}}],"line":59},"4":{"loc":{"start":{"line":60,"column":44},"end":{"line":60,"column":77}},"type":"binary-expr","locations":[{"start":{"line":60,"column":44},"end":{"line":60,"column":76}},{"start":{"line":60,"column":76},"end":{"line":60,"column":77}}],"line":60}},"s":{"0":1,"1":1,"2":1,"3":14,"4":0,"5":14,"6":70,"7":10,"8":1,"9":1,"10":1,"11":1,"12":7,"13":1,"14":7,"15":7,"16":7,"17":7,"18":7,"19":1},"f":{"0":1,"1":14,"2":70,"3":10,"4":1,"5":1,"6":7,"7":7},"b":{"0":[0,1],"1":[0,14],"2":[7,6],"3":[1,0],"4":[1,0]},"meta":{"lastBranch":5,"lastFunction":8,"lastStatement":20,"seen":{"s:2:24:2:Infinity":0,"f:9:9:9:29":0,"s:10:14:10:Infinity":1,"s:11:2:11:Infinity":2,"b:11:21:11:25:11:25:11:Infinity":0,"f:14:9:14:Infinity":1,"b:18:2:18:Infinity:undefined:undefined:undefined:undefined":1,"s:18:2:18:Infinity":3,"s:18:13:18:Infinity":4,"s:19:2:24:Infinity":5,"f:21:14:21:23":2,"s:21:23:21:48":6,"f:22:14:22:15":3,"s:22:28:22:53":7,"f:27:16:27:43":4,"s:32:2:63:Infinity":8,"f:32:17:32:23":5,"s:33:18:33:Infinity":9,"s:34:29:34:Infinity":10,"s:35:21:38:Infinity":11,"f:36:19:36:27":6,"s:36:27:36:63":12,"s:40:21:56:Infinity":13,"f:40:31:40:32":7,"s:41:25:41:Infinity":14,"s:42:28:42:Infinity":15,"s:43:28:43:Infinity":16,"s:44:30:44:Infinity":17,"s:46:6:55:Infinity":18,"b:54:23:54:38:54:38:54:Infinity":2,"s:58:4:62:Infinity":19,"b:59:13:59:30:59:30:59:Infinity":3,"b:60:44:60:76:60:76:60:77":4}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts","statementMap":{"0":{"start":{"line":2,"column":24},"end":{"line":2,"column":null}},"1":{"start":{"line":6,"column":15},"end":{"line":6,"column":null}},"2":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"3":{"start":{"line":7,"column":36},"end":{"line":7,"column":null}},"4":{"start":{"line":8,"column":2},"end":{"line":8,"column":null}},"5":{"start":{"line":12,"column":19},"end":{"line":12,"column":null}},"6":{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},"7":{"start":{"line":13,"column":40},"end":{"line":13,"column":null}},"8":{"start":{"line":15,"column":16},"end":{"line":15,"column":null}},"9":{"start":{"line":16,"column":19},"end":{"line":16,"column":null}},"10":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"11":{"start":{"line":18,"column":21},"end":{"line":18,"column":null}},"12":{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},"13":{"start":{"line":19,"column":22},"end":{"line":19,"column":null}},"14":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},"15":{"start":{"line":20,"column":21},"end":{"line":20,"column":null}},"16":{"start":{"line":22,"column":20},"end":{"line":22,"column":null}},"17":{"start":{"line":23,"column":2},"end":{"line":23,"column":null}},"18":{"start":{"line":27,"column":2},"end":{"line":33,"column":null}},"19":{"start":{"line":28,"column":11},"end":{"line":31,"column":null}}},"fnMap":{"0":{"name":"formatNextShiftDate","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":29}},"loc":{"start":{"line":5,"column":56},"end":{"line":9,"column":null}},"line":5},"1":{"name":"getDueText","decl":{"start":{"line":11,"column":9},"end":{"line":11,"column":20}},"loc":{"start":{"line":11,"column":47},"end":{"line":24,"column":null}},"line":11},"2":{"name":"useWorkingStoreCardViewModel","decl":{"start":{"line":26,"column":16},"end":{"line":26,"column":45}},"loc":{"start":{"line":26,"column":70},"end":{"line":34,"column":null}},"line":26},"3":{"name":"(anonymous_3)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":11}},"loc":{"start":{"line":28,"column":11},"end":{"line":31,"column":null}},"line":28}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"type":"if","locations":[{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},{"start":{},"end":{}}],"line":7},"1":{"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},{"start":{},"end":{}}],"line":13},"2":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},{"start":{},"end":{}}],"line":18},"3":{"loc":{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},"type":"if","locations":[{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},{"start":{},"end":{}}],"line":19},"4":{"loc":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},{"start":{},"end":{}}],"line":20}},"s":{"0":1,"1":6,"2":6,"3":0,"4":6,"5":6,"6":6,"7":0,"8":6,"9":6,"10":6,"11":6,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":6,"19":6},"f":{"0":6,"1":6,"2":6,"3":6},"b":{"0":[0,6],"1":[0,6],"2":[6,0],"3":[0,0],"4":[0,0]},"meta":{"lastBranch":5,"lastFunction":4,"lastStatement":20,"seen":{"s:2:24:2:Infinity":0,"f:5:9:5:29":0,"s:6:15:6:Infinity":1,"b:7:2:7:Infinity:undefined:undefined:undefined:undefined":0,"s:7:2:7:Infinity":2,"s:7:36:7:Infinity":3,"s:8:2:8:Infinity":4,"f:11:9:11:20":1,"s:12:19:12:Infinity":5,"b:13:2:13:Infinity:undefined:undefined:undefined:undefined":1,"s:13:2:13:Infinity":6,"s:13:40:13:Infinity":7,"s:15:16:15:Infinity":8,"s:16:19:16:Infinity":9,"b:18:2:18:Infinity:undefined:undefined:undefined:undefined":2,"s:18:2:18:Infinity":10,"s:18:21:18:Infinity":11,"b:19:2:19:Infinity:undefined:undefined:undefined:undefined":3,"s:19:2:19:Infinity":12,"s:19:22:19:Infinity":13,"b:20:2:20:Infinity:undefined:undefined:undefined:undefined":4,"s:20:2:20:Infinity":14,"s:20:21:20:Infinity":15,"s:22:20:22:Infinity":16,"s:23:2:23:Infinity":17,"f:26:16:26:45":2,"s:27:2:33:Infinity":18,"f:28:4:28:11":3,"s:28:11:31:Infinity":19}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts","statementMap":{"0":{"start":{"line":1,"column":24},"end":{"line":1,"column":null}},"1":{"start":{"line":5,"column":2},"end":{"line":10,"column":null}},"2":{"start":{"line":6,"column":11},"end":{"line":8,"column":null}}},"fnMap":{"0":{"name":"useWorkingStoresListViewModel","decl":{"start":{"line":4,"column":16},"end":{"line":4,"column":46}},"loc":{"start":{"line":4,"column":74},"end":{"line":11,"column":null}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":4},"end":{"line":6,"column":11}},"loc":{"start":{"line":6,"column":11},"end":{"line":8,"column":null}},"line":6}},"branchMap":{},"s":{"0":1,"1":2,"2":2},"f":{"0":2,"1":2},"b":{},"meta":{"lastBranch":0,"lastFunction":2,"lastStatement":3,"seen":{"s:1:24:1:Infinity":0,"f:4:16:4:46":0,"s:5:2:10:Infinity":1,"f:6:4:6:11":1,"s:6:11:8:Infinity":2}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/lib/date.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/lib/date.ts","statementMap":{"0":{"start":{"line":16,"column":24},"end":{"line":16,"column":null}},"1":{"start":{"line":17,"column":23},"end":{"line":17,"column":null}},"2":{"start":{"line":18,"column":21},"end":{"line":18,"column":null}},"3":{"start":{"line":21,"column":2},"end":{"line":21,"column":null}},"4":{"start":{"line":25,"column":2},"end":{"line":25,"column":null}},"5":{"start":{"line":29,"column":16},"end":{"line":29,"column":null}},"6":{"start":{"line":30,"column":14},"end":{"line":30,"column":null}},"7":{"start":{"line":31,"column":20},"end":{"line":31,"column":null}},"8":{"start":{"line":32,"column":2},"end":{"line":32,"column":null}},"9":{"start":{"line":36,"column":21},"end":{"line":36,"column":null}},"10":{"start":{"line":37,"column":19},"end":{"line":37,"column":null}},"11":{"start":{"line":38,"column":24},"end":{"line":38,"column":null}},"12":{"start":{"line":39,"column":22},"end":{"line":39,"column":null}},"13":{"start":{"line":41,"column":2},"end":{"line":49,"column":null}},"14":{"start":{"line":42,"column":13},"end":{"line":48,"column":null}},"15":{"start":{"line":53,"column":20},"end":{"line":53,"column":null}},"16":{"start":{"line":54,"column":18},"end":{"line":54,"column":null}},"17":{"start":{"line":56,"column":2},"end":{"line":62,"column":null}},"18":{"start":{"line":56,"column":76},"end":{"line":62,"column":4}},"19":{"start":{"line":69,"column":2},"end":{"line":74,"column":null}},"20":{"start":{"line":70,"column":20},"end":{"line":70,"column":61}},"21":{"start":{"line":72,"column":20},"end":{"line":72,"column":null}},"22":{"start":{"line":78,"column":20},"end":{"line":78,"column":null}},"23":{"start":{"line":79,"column":18},"end":{"line":79,"column":null}},"24":{"start":{"line":80,"column":2},"end":{"line":80,"column":null}},"25":{"start":{"line":84,"column":2},"end":{"line":87,"column":null}},"26":{"start":{"line":86,"column":16},"end":{"line":86,"column":null}},"27":{"start":{"line":91,"column":2},"end":{"line":96,"column":null}},"28":{"start":{"line":92,"column":4},"end":{"line":95,"column":null}},"29":{"start":{"line":98,"column":2},"end":{"line":106,"column":null}},"30":{"start":{"line":99,"column":4},"end":{"line":105,"column":null}},"31":{"start":{"line":108,"column":14},"end":{"line":108,"column":null}},"32":{"start":{"line":109,"column":2},"end":{"line":112,"column":null}},"33":{"start":{"line":120,"column":15},"end":{"line":120,"column":null}},"34":{"start":{"line":121,"column":2},"end":{"line":123,"column":null}},"35":{"start":{"line":122,"column":4},"end":{"line":122,"column":null}},"36":{"start":{"line":124,"column":2},"end":{"line":126,"column":null}},"37":{"start":{"line":125,"column":4},"end":{"line":125,"column":null}},"38":{"start":{"line":127,"column":2},"end":{"line":127,"column":null}}},"fnMap":{"0":{"name":"toDateKey","decl":{"start":{"line":20,"column":16},"end":{"line":20,"column":26}},"loc":{"start":{"line":20,"column":39},"end":{"line":22,"column":null}},"line":20},"1":{"name":"toTimeLabel","decl":{"start":{"line":24,"column":16},"end":{"line":24,"column":28}},"loc":{"start":{"line":24,"column":41},"end":{"line":26,"column":null}},"line":24},"2":{"name":"getDurationHours","decl":{"start":{"line":28,"column":16},"end":{"line":28,"column":33}},"loc":{"start":{"line":28,"column":67},"end":{"line":33,"column":null}},"line":28},"3":{"name":"getMonthlyDateCells","decl":{"start":{"line":35,"column":16},"end":{"line":35,"column":36}},"loc":{"start":{"line":35,"column":52},"end":{"line":50,"column":null}},"line":35},"4":{"name":"(anonymous_4)","decl":{"start":{"line":42,"column":4},"end":{"line":42,"column":13}},"loc":{"start":{"line":42,"column":13},"end":{"line":48,"column":null}},"line":42},"5":{"name":"getWeeklyDateCells","decl":{"start":{"line":52,"column":16},"end":{"line":52,"column":35}},"loc":{"start":{"line":52,"column":51},"end":{"line":63,"column":null}},"line":52},"6":{"name":"(anonymous_6)","decl":{"start":{"line":56,"column":67},"end":{"line":56,"column":76}},"loc":{"start":{"line":56,"column":76},"end":{"line":62,"column":4}},"line":56},"7":{"name":"getDayHours","decl":{"start":{"line":65,"column":16},"end":{"line":65,"column":null}},"loc":{"start":{"line":68,"column":2},"end":{"line":75,"column":null}},"line":68},"8":{"name":"(anonymous_8)","decl":{"start":{"line":70,"column":12},"end":{"line":70,"column":20}},"loc":{"start":{"line":70,"column":20},"end":{"line":70,"column":61}},"line":70},"9":{"name":"(anonymous_9)","decl":{"start":{"line":72,"column":6},"end":{"line":72,"column":7}},"loc":{"start":{"line":72,"column":20},"end":{"line":72,"column":null}},"line":72},"10":{"name":"getWeekRangeLabel","decl":{"start":{"line":77,"column":16},"end":{"line":77,"column":34}},"loc":{"start":{"line":77,"column":50},"end":{"line":81,"column":null}},"line":77},"11":{"name":"getDailyHourTicks","decl":{"start":{"line":83,"column":16},"end":{"line":83,"column":36}},"loc":{"start":{"line":83,"column":36},"end":{"line":88,"column":null}},"line":83},"12":{"name":"(anonymous_12)","decl":{"start":{"line":86,"column":4},"end":{"line":86,"column":5}},"loc":{"start":{"line":86,"column":16},"end":{"line":86,"column":null}},"line":86},"13":{"name":"getRangeParamsByMode","decl":{"start":{"line":90,"column":16},"end":{"line":90,"column":37}},"loc":{"start":{"line":90,"column":77},"end":{"line":113,"column":null}},"line":90},"14":{"name":"moveDateByMode","decl":{"start":{"line":115,"column":16},"end":{"line":115,"column":null}},"loc":{"start":{"line":119,"column":2},"end":{"line":128,"column":null}},"line":119}},"branchMap":{"0":{"loc":{"start":{"line":91,"column":2},"end":{"line":96,"column":null}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":96,"column":null}},{"start":{},"end":{}}],"line":91},"1":{"loc":{"start":{"line":98,"column":2},"end":{"line":106,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":106,"column":null}},{"start":{},"end":{}}],"line":98},"2":{"loc":{"start":{"line":120,"column":15},"end":{"line":120,"column":null}},"type":"cond-expr","locations":[{"start":{"line":120,"column":38},"end":{"line":120,"column":42}},{"start":{"line":120,"column":42},"end":{"line":120,"column":null}}],"line":120},"3":{"loc":{"start":{"line":121,"column":2},"end":{"line":123,"column":null}},"type":"if","locations":[{"start":{"line":121,"column":2},"end":{"line":123,"column":null}},{"start":{},"end":{}}],"line":121},"4":{"loc":{"start":{"line":124,"column":2},"end":{"line":126,"column":null}},"type":"if","locations":[{"start":{"line":124,"column":2},"end":{"line":126,"column":null}},{"start":{},"end":{}}],"line":124}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":1,"16":1,"17":1,"18":7,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":1,"6":7,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"meta":{"lastBranch":5,"lastFunction":15,"lastStatement":39,"seen":{"s:16:24:16:Infinity":0,"s:17:23:17:Infinity":1,"s:18:21:18:Infinity":2,"f:20:16:20:26":0,"s:21:2:21:Infinity":3,"f:24:16:24:28":1,"s:25:2:25:Infinity":4,"f:28:16:28:33":2,"s:29:16:29:Infinity":5,"s:30:14:30:Infinity":6,"s:31:20:31:Infinity":7,"s:32:2:32:Infinity":8,"f:35:16:35:36":3,"s:36:21:36:Infinity":9,"s:37:19:37:Infinity":10,"s:38:24:38:Infinity":11,"s:39:22:39:Infinity":12,"s:41:2:49:Infinity":13,"f:42:4:42:13":4,"s:42:13:48:Infinity":14,"f:52:16:52:35":5,"s:53:20:53:Infinity":15,"s:54:18:54:Infinity":16,"s:56:2:62:Infinity":17,"f:56:67:56:76":6,"s:56:76:62:4":18,"f:65:16:65:Infinity":7,"s:69:2:74:Infinity":19,"f:70:12:70:20":8,"s:70:20:70:61":20,"f:72:6:72:7":9,"s:72:20:72:Infinity":21,"f:77:16:77:34":10,"s:78:20:78:Infinity":22,"s:79:18:79:Infinity":23,"s:80:2:80:Infinity":24,"f:83:16:83:36":11,"s:84:2:87:Infinity":25,"f:86:4:86:5":12,"s:86:16:86:Infinity":26,"f:90:16:90:37":13,"b:91:2:96:Infinity:undefined:undefined:undefined:undefined":0,"s:91:2:96:Infinity":27,"s:92:4:95:Infinity":28,"b:98:2:106:Infinity:undefined:undefined:undefined:undefined":1,"s:98:2:106:Infinity":29,"s:99:4:105:Infinity":30,"s:108:14:108:Infinity":31,"s:109:2:112:Infinity":32,"f:115:16:115:Infinity":14,"s:120:15:120:Infinity":33,"b:120:38:120:42:120:42:120:Infinity":2,"b:121:2:123:Infinity:undefined:undefined:undefined:undefined":3,"s:121:2:123:Infinity":34,"s:122:4:122:Infinity":35,"b:124:2:126:Infinity:undefined:undefined:undefined:undefined":4,"s:124:2:126:Infinity":36,"s:125:4:125:Infinity":37,"s:127:2:127:Infinity":38}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx","statementMap":{"0":{"start":{"line":22,"column":6},"end":{"line":22,"column":7}},"1":{"start":{"line":12,"column":21},"end":{"line":12,"column":null}},"2":{"start":{"line":14,"column":2},"end":{"line":33,"column":null}}},"fnMap":{"0":{"name":"AppliedStoreCard","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":33}},"loc":{"start":{"line":11,"column":26},"end":{"line":35,"column":null}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":2},"end":{"line":10,"column":null}},"type":"default-arg","locations":[{"start":{"line":10,"column":11},"end":{"line":10,"column":null}}],"line":10},"1":{"loc":{"start":{"line":17,"column":8},"end":{"line":19,"column":null}},"type":"cond-expr","locations":[{"start":{"line":18,"column":12},"end":{"line":18,"column":null}},{"start":{"line":19,"column":12},"end":{"line":19,"column":null}}],"line":17},"2":{"loc":{"start":{"line":24,"column":10},"end":{"line":24,"column":null}},"type":"cond-expr","locations":[{"start":{"line":24,"column":23},"end":{"line":24,"column":38}},{"start":{"line":24,"column":38},"end":{"line":24,"column":null}}],"line":24}},"s":{"0":2,"1":7,"2":7},"f":{"0":7},"b":{"0":[7],"1":[3,4],"2":[3,4]},"meta":{"lastBranch":3,"lastFunction":1,"lastStatement":3,"seen":{"s:22:6:22:7":0,"f:8:16:8:33":0,"b:10:11:10:Infinity":0,"s:12:21:12:Infinity":1,"s:14:2:33:Infinity":2,"b:18:12:18:Infinity:19:12:19:Infinity":1,"b:24:23:24:38:24:38:24:Infinity":2}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx","statementMap":{"0":{"start":{"line":29,"column":8},"end":{"line":29,"column":9}},"1":{"start":{"line":23,"column":24},"end":{"line":23,"column":null}},"2":{"start":{"line":24,"column":21},"end":{"line":24,"column":null}},"3":{"start":{"line":26,"column":2},"end":{"line":50,"column":null}},"4":{"start":{"line":38,"column":12},"end":{"line":42,"column":null}}},"fnMap":{"0":{"name":"AppliedStoreList","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":33}},"loc":{"start":{"line":22,"column":26},"end":{"line":52,"column":null}},"line":22},"1":{"name":"(anonymous_1)","decl":{"start":{"line":37,"column":29},"end":{"line":37,"column":null}},"loc":{"start":{"line":38,"column":12},"end":{"line":42,"column":null}},"line":38}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":null}}],"line":18},"1":{"loc":{"start":{"line":24,"column":21},"end":{"line":24,"column":null}},"type":"binary-expr","locations":[{"start":{"line":24,"column":21},"end":{"line":24,"column":36}},{"start":{"line":24,"column":36},"end":{"line":24,"column":null}}],"line":24}},"s":{"0":1,"1":1,"2":1,"3":1,"4":5},"f":{"0":1,"1":5},"b":{"0":[1],"1":[1,1]},"meta":{"lastBranch":2,"lastFunction":2,"lastStatement":5,"seen":{"s:29:8:29:9":0,"f:17:16:17:33":0,"b:18:10:18:Infinity":0,"s:23:24:23:Infinity":1,"s:24:21:24:Infinity":2,"b:24:21:24:36:24:36:24:Infinity":1,"s:26:2:50:Infinity":3,"f:37:29:37:Infinity":1,"s:38:12:42:Infinity":4}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx","statementMap":{"0":{"start":{"line":31,"column":8},"end":{"line":31,"column":9}},"1":{"start":{"line":22,"column":6},"end":{"line":26,"column":null}},"2":{"start":{"line":28,"column":2},"end":{"line":34,"column":null}},"3":{"start":{"line":29,"column":4},"end":{"line":32,"column":null}},"4":{"start":{"line":36,"column":2},"end":{"line":93,"column":null}},"5":{"start":{"line":59,"column":12},"end":{"line":71,"column":null}},"6":{"start":{"line":76,"column":12},"end":{"line":88,"column":null}}},"fnMap":{"0":{"name":"DailyCalendar","decl":{"start":{"line":9,"column":16},"end":{"line":9,"column":30}},"loc":{"start":{"line":14,"column":23},"end":{"line":95,"column":null}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":58,"column":29},"end":{"line":58,"column":37}},"loc":{"start":{"line":58,"column":37},"end":{"line":73,"column":11}},"line":58},"2":{"name":"(anonymous_2)","decl":{"start":{"line":75,"column":27},"end":{"line":75,"column":36}},"loc":{"start":{"line":75,"column":36},"end":{"line":90,"column":11}},"line":75}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},"type":"default-arg","locations":[{"start":{"line":13,"column":14},"end":{"line":13,"column":null}}],"line":13},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":34,"column":null}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":34,"column":null}},{"start":{},"end":{}}],"line":28}},"s":{"0":1,"1":2,"2":2,"3":0,"4":2,"5":14,"6":5},"f":{"0":2,"1":14,"2":5},"b":{"0":[2],"1":[0,2]},"meta":{"lastBranch":2,"lastFunction":3,"lastStatement":7,"seen":{"s:31:8:31:9":0,"f:9:16:9:30":0,"b:13:14:13:Infinity":0,"s:22:6:26:Infinity":1,"b:28:2:34:Infinity:undefined:undefined:undefined:undefined":1,"s:28:2:34:Infinity":2,"s:29:4:32:Infinity":3,"s:36:2:93:Infinity":4,"f:58:29:58:37":1,"s:59:12:71:Infinity":5,"f:75:27:75:36":2,"s:76:12:88:Infinity":6}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx","statementMap":{"0":{"start":{"line":28,"column":8},"end":{"line":28,"column":9}},"1":{"start":{"line":25,"column":2},"end":{"line":51,"column":null}}},"fnMap":{"0":{"name":"HomeScheduleCalendar","decl":{"start":{"line":18,"column":16},"end":{"line":18,"column":37}},"loc":{"start":{"line":24,"column":30},"end":{"line":53,"column":null}},"line":24}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":2},"end":{"line":23,"column":null}},"type":"default-arg","locations":[{"start":{"line":23,"column":14},"end":{"line":23,"column":null}}],"line":23},"1":{"loc":{"start":{"line":27,"column":7},"end":{"line":33,"column":null}},"type":"binary-expr","locations":[{"start":{"line":27,"column":7},"end":{"line":27,"column":null}},{"start":{"line":28,"column":8},"end":{"line":33,"column":null}}],"line":27},"2":{"loc":{"start":{"line":35,"column":7},"end":{"line":41,"column":null}},"type":"binary-expr","locations":[{"start":{"line":35,"column":7},"end":{"line":35,"column":null}},{"start":{"line":36,"column":8},"end":{"line":41,"column":null}}],"line":35},"3":{"loc":{"start":{"line":43,"column":7},"end":{"line":49,"column":null}},"type":"binary-expr","locations":[{"start":{"line":43,"column":7},"end":{"line":43,"column":null}},{"start":{"line":44,"column":8},"end":{"line":49,"column":null}}],"line":43}},"s":{"0":1,"1":5},"f":{"0":5},"b":{"0":[5],"1":[5,2],"2":[5,1],"3":[5,2]},"meta":{"lastBranch":4,"lastFunction":1,"lastStatement":2,"seen":{"s:28:8:28:9":0,"f:18:16:18:37":0,"b:23:14:23:Infinity":0,"s:25:2:51:Infinity":1,"b:27:7:27:Infinity:28:8:33:Infinity":1,"b:35:7:35:Infinity:36:8:41:Infinity":2,"b:43:7:43:Infinity:44:8:49:Infinity":3}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx","statementMap":{"0":{"start":{"line":33,"column":8},"end":{"line":33,"column":9}},"1":{"start":{"line":23,"column":6},"end":{"line":28,"column":null}},"2":{"start":{"line":30,"column":2},"end":{"line":36,"column":null}},"3":{"start":{"line":31,"column":4},"end":{"line":34,"column":null}},"4":{"start":{"line":38,"column":2},"end":{"line":83,"column":null}},"5":{"start":{"line":58,"column":12},"end":{"line":63,"column":null}},"6":{"start":{"line":69,"column":12},"end":{"line":78,"column":null}}},"fnMap":{"0":{"name":"MonthlyCalendar","decl":{"start":{"line":10,"column":16},"end":{"line":10,"column":32}},"loc":{"start":{"line":16,"column":25},"end":{"line":85,"column":null}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":57,"column":29},"end":{"line":57,"column":30}},"loc":{"start":{"line":58,"column":12},"end":{"line":63,"column":null}},"line":58},"2":{"name":"(anonymous_2)","decl":{"start":{"line":68,"column":37},"end":{"line":68,"column":45}},"loc":{"start":{"line":68,"column":45},"end":{"line":80,"column":11}},"line":68}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"type":"default-arg","locations":[{"start":{"line":14,"column":14},"end":{"line":14,"column":null}}],"line":14},"1":{"loc":{"start":{"line":30,"column":2},"end":{"line":36,"column":null}},"type":"if","locations":[{"start":{"line":30,"column":2},"end":{"line":36,"column":null}},{"start":{},"end":{}}],"line":30},"2":{"loc":{"start":{"line":60,"column":59},"end":{"line":60,"column":121}},"type":"cond-expr","locations":[{"start":{"line":60,"column":88},"end":{"line":60,"column":107}},{"start":{"line":60,"column":107},"end":{"line":60,"column":121}}],"line":60},"3":{"loc":{"start":{"line":60,"column":59},"end":{"line":60,"column":88}},"type":"binary-expr","locations":[{"start":{"line":60,"column":59},"end":{"line":60,"column":74}},{"start":{"line":60,"column":74},"end":{"line":60,"column":88}}],"line":60}},"s":{"0":1,"1":2,"2":2,"3":1,"4":1,"5":7,"6":35},"f":{"0":2,"1":7,"2":35},"b":{"0":[2],"1":[1,1],"2":[2,5],"3":[7,6]},"meta":{"lastBranch":4,"lastFunction":3,"lastStatement":7,"seen":{"s:33:8:33:9":0,"f:10:16:10:32":0,"b:14:14:14:Infinity":0,"s:23:6:28:Infinity":1,"b:30:2:36:Infinity:undefined:undefined:undefined:undefined":1,"s:30:2:36:Infinity":2,"s:31:4:34:Infinity":3,"s:38:2:83:Infinity":4,"f:57:29:57:30":1,"s:58:12:63:Infinity":5,"b:60:88:60:107:60:107:60:121":2,"b:60:59:60:74:60:74:60:88":3,"f:68:37:68:45":2,"s:69:12:78:Infinity":6}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx","statementMap":{"0":{"start":{"line":34,"column":10},"end":{"line":34,"column":11}},"1":{"start":{"line":20,"column":23},"end":{"line":24,"column":null}},"2":{"start":{"line":26,"column":2},"end":{"line":42,"column":null}}},"fnMap":{"0":{"name":"MonthlyDateCell","decl":{"start":{"line":12,"column":16},"end":{"line":12,"column":32}},"loc":{"start":{"line":19,"column":25},"end":{"line":44,"column":null}},"line":19}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":15},"end":{"line":18,"column":null}}],"line":18},"1":{"loc":{"start":{"line":20,"column":23},"end":{"line":24,"column":null}},"type":"cond-expr","locations":[{"start":{"line":21,"column":6},"end":{"line":21,"column":null}},{"start":{"line":22,"column":6},"end":{"line":24,"column":null}}],"line":20},"2":{"loc":{"start":{"line":22,"column":6},"end":{"line":24,"column":null}},"type":"cond-expr","locations":[{"start":{"line":23,"column":8},"end":{"line":23,"column":null}},{"start":{"line":24,"column":8},"end":{"line":24,"column":null}}],"line":22},"3":{"loc":{"start":{"line":29,"column":8},"end":{"line":29,"column":null}},"type":"cond-expr","locations":[{"start":{"line":29,"column":21},"end":{"line":29,"column":37}},{"start":{"line":29,"column":37},"end":{"line":29,"column":null}}],"line":29},"4":{"loc":{"start":{"line":32,"column":7},"end":{"line":40,"column":null}},"type":"cond-expr","locations":[{"start":{"line":33,"column":8},"end":{"line":38,"column":null}},{"start":{"line":40,"column":8},"end":{"line":40,"column":null}}],"line":32}},"s":{"0":2,"1":40,"2":40},"f":{"0":40},"b":{"0":[40],"1":[5,35],"2":[10,25],"3":[2,38],"4":[6,34]},"meta":{"lastBranch":5,"lastFunction":1,"lastStatement":3,"seen":{"s:34:10:34:11":0,"f:12:16:12:32":0,"b:18:15:18:Infinity":0,"s:20:23:24:Infinity":1,"b:21:6:21:Infinity:22:6:24:Infinity":1,"b:23:8:23:Infinity:24:8:24:Infinity":2,"s:26:2:42:Infinity":2,"b:29:21:29:37:29:37:29:Infinity":3,"b:33:8:38:Infinity:40:8:40:Infinity":4}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx","statementMap":{"0":{"start":{"line":31,"column":8},"end":{"line":31,"column":9}},"1":{"start":{"line":16,"column":26},"end":{"line":16,"column":null}},"2":{"start":{"line":17,"column":17},"end":{"line":17,"column":null}},"3":{"start":{"line":18,"column":8},"end":{"line":18,"column":null}},"4":{"start":{"line":19,"column":24},"end":{"line":19,"column":null}},"5":{"start":{"line":20,"column":25},"end":{"line":20,"column":null}},"6":{"start":{"line":22,"column":2},"end":{"line":51,"column":null}}},"fnMap":{"0":{"name":"MonthlyDateGauge","decl":{"start":{"line":9,"column":16},"end":{"line":9,"column":33}},"loc":{"start":{"line":15,"column":26},"end":{"line":53,"column":null}},"line":15}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},"type":"default-arg","locations":[{"start":{"line":11,"column":9},"end":{"line":11,"column":null}}],"line":11},"1":{"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}},"type":"default-arg","locations":[{"start":{"line":12,"column":16},"end":{"line":12,"column":null}}],"line":12},"2":{"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},"type":"default-arg","locations":[{"start":{"line":13,"column":21},"end":{"line":13,"column":null}}],"line":13},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"type":"default-arg","locations":[{"start":{"line":14,"column":19},"end":{"line":14,"column":null}}],"line":14}},"s":{"0":2,"1":6,"2":6,"3":6,"4":6,"5":6,"6":6},"f":{"0":6},"b":{"0":[6],"1":[6],"2":[6],"3":[6]},"meta":{"lastBranch":4,"lastFunction":1,"lastStatement":7,"seen":{"s:31:8:31:9":0,"f:9:16:9:33":0,"b:11:9:11:Infinity":0,"b:12:16:12:Infinity":1,"b:13:21:13:Infinity":2,"b:14:19:14:Infinity":3,"s:16:26:16:Infinity":1,"s:17:17:17:Infinity":2,"s:18:8:18:Infinity":3,"s:19:24:19:Infinity":4,"s:20:25:20:Infinity":5,"s:22:2:51:Infinity":6}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx","statementMap":{"0":{"start":{"line":23,"column":8},"end":{"line":23,"column":9}},"1":{"start":{"line":14,"column":50},"end":{"line":18,"column":null}},"2":{"start":{"line":20,"column":2},"end":{"line":26,"column":null}},"3":{"start":{"line":21,"column":4},"end":{"line":24,"column":null}},"4":{"start":{"line":28,"column":2},"end":{"line":84,"column":null}},"5":{"start":{"line":45,"column":10},"end":{"line":58,"column":null}},"6":{"start":{"line":65,"column":12},"end":{"line":79,"column":null}}},"fnMap":{"0":{"name":"WeeklyCalendar","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":31}},"loc":{"start":{"line":13,"column":24},"end":{"line":86,"column":null}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":44,"column":22},"end":{"line":44,"column":null}},"loc":{"start":{"line":45,"column":10},"end":{"line":58,"column":null}},"line":45},"2":{"name":"(anonymous_2)","decl":{"start":{"line":64,"column":24},"end":{"line":64,"column":32}},"loc":{"start":{"line":64,"column":32},"end":{"line":81,"column":11}},"line":64}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}},"type":"default-arg","locations":[{"start":{"line":12,"column":14},"end":{"line":12,"column":null}}],"line":12},"1":{"loc":{"start":{"line":20,"column":2},"end":{"line":26,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":2},"end":{"line":26,"column":null}},{"start":{},"end":{}}],"line":20},"2":{"loc":{"start":{"line":48,"column":14},"end":{"line":48,"column":null}},"type":"cond-expr","locations":[{"start":{"line":48,"column":32},"end":{"line":48,"column":47}},{"start":{"line":48,"column":47},"end":{"line":48,"column":null}}],"line":48},"3":{"loc":{"start":{"line":53,"column":16},"end":{"line":53,"column":null}},"type":"cond-expr","locations":[{"start":{"line":53,"column":34},"end":{"line":53,"column":52}},{"start":{"line":53,"column":52},"end":{"line":53,"column":null}}],"line":53},"4":{"loc":{"start":{"line":67,"column":17},"end":{"line":71,"column":null}},"type":"binary-expr","locations":[{"start":{"line":67,"column":17},"end":{"line":67,"column":null}},{"start":{"line":68,"column":18},"end":{"line":71,"column":null}}],"line":67},"5":{"loc":{"start":{"line":75,"column":20},"end":{"line":75,"column":null}},"type":"cond-expr","locations":[{"start":{"line":75,"column":40},"end":{"line":75,"column":52}},{"start":{"line":75,"column":52},"end":{"line":75,"column":null}}],"line":75}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1,"5":7,"6":7},"f":{"0":1,"1":7,"2":7},"b":{"0":[1],"1":[0,1],"2":[1,6],"3":[1,6],"4":[7,4],"5":[3,4]},"meta":{"lastBranch":6,"lastFunction":3,"lastStatement":7,"seen":{"s:23:8:23:9":0,"f:8:16:8:31":0,"b:12:14:12:Infinity":0,"s:14:50:18:Infinity":1,"b:20:2:26:Infinity:undefined:undefined:undefined:undefined":1,"s:20:2:26:Infinity":2,"s:21:4:24:Infinity":3,"s:28:2:84:Infinity":4,"f:44:22:44:Infinity":1,"s:45:10:58:Infinity":5,"b:48:32:48:47:48:47:48:Infinity":2,"b:53:34:53:52:53:52:53:Infinity":3,"f:64:24:64:32":2,"s:65:12:79:Infinity":6,"b:67:17:67:Infinity:68:18:71:Infinity":4,"b:75:40:75:52:75:52:75:Infinity":5}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx","statementMap":{"0":{"start":{"line":22,"column":10},"end":{"line":22,"column":11}},"1":{"start":{"line":16,"column":36},"end":{"line":16,"column":null}},"2":{"start":{"line":18,"column":2},"end":{"line":43,"column":null}}},"fnMap":{"0":{"name":"WorkingStoreCard","decl":{"start":{"line":15,"column":16},"end":{"line":15,"column":33}},"loc":{"start":{"line":15,"column":67},"end":{"line":45,"column":null}},"line":15}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":9},"end":{"line":27,"column":null}},"type":"cond-expr","locations":[{"start":{"line":22,"column":10},"end":{"line":26,"column":null}},{"start":{"line":27,"column":12},"end":{"line":27,"column":null}}],"line":21}},"s":{"0":1,"1":6,"2":6},"f":{"0":6},"b":{"0":[0,6]},"meta":{"lastBranch":1,"lastFunction":1,"lastStatement":3,"seen":{"s:22:10:22:11":0,"f:15:16:15:33":0,"s:16:36:16:Infinity":1,"s:18:2:43:Infinity":2,"b:22:10:26:Infinity:27:12:27:Infinity":0}}} +,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx","statementMap":{"0":{"start":{"line":30,"column":8},"end":{"line":30,"column":9}},"1":{"start":{"line":25,"column":28},"end":{"line":25,"column":null}},"2":{"start":{"line":27,"column":2},"end":{"line":64,"column":null}},"3":{"start":{"line":52,"column":10},"end":{"line":57,"column":null}}},"fnMap":{"0":{"name":"WorkingStoresList","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":34}},"loc":{"start":{"line":24,"column":27},"end":{"line":66,"column":null}},"line":24},"1":{"name":"(anonymous_1)","decl":{"start":{"line":51,"column":27},"end":{"line":51,"column":28}},"loc":{"start":{"line":52,"column":10},"end":{"line":57,"column":null}},"line":52}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":null}}],"line":18},"1":{"loc":{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},"type":"default-arg","locations":[{"start":{"line":19,"column":18},"end":{"line":19,"column":null}}],"line":19},"2":{"loc":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},"type":"default-arg","locations":[{"start":{"line":20,"column":19},"end":{"line":20,"column":null}}],"line":20},"3":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":null}},"type":"default-arg","locations":[{"start":{"line":21,"column":17},"end":{"line":21,"column":null}}],"line":21},"4":{"loc":{"start":{"line":34,"column":14},"end":{"line":34,"column":null}},"type":"cond-expr","locations":[{"start":{"line":34,"column":40},"end":{"line":34,"column":57}},{"start":{"line":34,"column":57},"end":{"line":34,"column":null}}],"line":34},"5":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":null}},"type":"cond-expr","locations":[{"start":{"line":42,"column":41},"end":{"line":42,"column":58}},{"start":{"line":42,"column":58},"end":{"line":42,"column":null}}],"line":42},"6":{"loc":{"start":{"line":54,"column":13},"end":{"line":56,"column":null}},"type":"cond-expr","locations":[{"start":{"line":55,"column":14},"end":{"line":55,"column":null}},{"start":{"line":56,"column":16},"end":{"line":56,"column":null}}],"line":54}},"s":{"0":1,"1":2,"2":2,"3":6},"f":{"0":2,"1":6},"b":{"0":[2],"1":[2],"2":[2],"3":[2],"4":[1,1],"5":[1,1],"6":[4,2]},"meta":{"lastBranch":7,"lastFunction":2,"lastStatement":4,"seen":{"s:30:8:30:9":0,"f:17:16:17:34":0,"b:18:10:18:Infinity":0,"b:19:18:19:Infinity":1,"b:20:19:20:Infinity":2,"b:21:17:21:Infinity":3,"s:25:28:25:Infinity":1,"s:27:2:64:Infinity":2,"b:34:40:34:57:34:57:34:Infinity":4,"b:42:41:42:58:42:58:42:Infinity":5,"f:51:27:51:28":1,"s:52:10:57:Infinity":3,"b:55:14:55:Infinity:56:16:56:Infinity":6}}} +,"/Users/hyeon/Code/alter-client/src/shared/lib/tokens.ts": {"path":"/Users/hyeon/Code/alter-client/src/shared/lib/tokens.ts","statementMap":{"0":{"start":{"line":6,"column":22},"end":{"line":35,"column":null}},"1":{"start":{"line":38,"column":28},"end":{"line":41,"column":null}},"2":{"start":{"line":44,"column":25},"end":{"line":55,"column":null}},"3":{"start":{"line":58,"column":27},"end":{"line":74,"column":null}},"4":{"start":{"line":77,"column":29},"end":{"line":80,"column":null}},"5":{"start":{"line":83,"column":27},"end":{"line":86,"column":null}},"6":{"start":{"line":89,"column":26},"end":{"line":195,"column":null}}},"fnMap":{},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":4},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":7,"seen":{"s:6:22:35:Infinity":0,"s:38:28:41:Infinity":1,"s:44:25:55:Infinity":2,"s:58:27:74:Infinity":3,"s:77:29:80:Infinity":4,"s:83:27:86:Infinity":5,"s:89:26:195:Infinity":6}}} +,"/Users/hyeon/Code/alter-client/src/shared/stores/useDocStore.ts": {"path":"/Users/hyeon/Code/alter-client/src/shared/stores/useDocStore.ts","statementMap":{"0":{"start":{"line":4,"column":66},"end":{"line":12,"column":null}},"1":{"start":{"line":14,"column":26},"end":{"line":20,"column":null}},"2":{"start":{"line":14,"column":51},"end":{"line":20,"column":null}},"3":{"start":{"line":34,"column":27},"end":{"line":43,"column":null}},"4":{"start":{"line":34,"column":57},"end":{"line":43,"column":2}},"5":{"start":{"line":36,"column":33},"end":{"line":36,"column":null}},"6":{"start":{"line":38,"column":23},"end":{"line":40,"column":null}},"7":{"start":{"line":39,"column":6},"end":{"line":39,"column":null}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":null}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":26},"end":{"line":14,"column":27}},"loc":{"start":{"line":14,"column":51},"end":{"line":20,"column":null}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":34,"column":49},"end":{"line":34,"column":57}},"loc":{"start":{"line":34,"column":57},"end":{"line":43,"column":2}},"line":34},"2":{"name":"(anonymous_2)","decl":{"start":{"line":36,"column":18},"end":{"line":36,"column":33}},"loc":{"start":{"line":36,"column":33},"end":{"line":36,"column":null}},"line":36},"3":{"name":"(anonymous_3)","decl":{"start":{"line":37,"column":28},"end":{"line":37,"column":40}},"loc":{"start":{"line":37,"column":40},"end":{"line":42,"column":null}},"line":37},"4":{"name":"(anonymous_4)","decl":{"start":{"line":38,"column":45},"end":{"line":38,"column":46}},"loc":{"start":{"line":39,"column":6},"end":{"line":39,"column":null}},"line":39}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":0,"6":0,"7":0,"8":0},"f":{"0":1,"1":1,"2":0,"3":0,"4":0},"b":{},"meta":{"lastBranch":0,"lastFunction":5,"lastStatement":9,"seen":{"s:4:66:12:Infinity":0,"s:14:26:20:Infinity":1,"f:14:26:14:27":0,"s:14:51:20:Infinity":2,"s:34:27:43:Infinity":3,"f:34:49:34:57":1,"s:34:57:43:2":4,"f:36:18:36:33":2,"s:36:33:36:Infinity":5,"f:37:28:37:40":3,"s:38:23:40:Infinity":6,"f:38:45:38:46":4,"s:39:6:39:Infinity":7,"s:41:4:41:Infinity":8}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/MobileLayout.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/MobileLayout.tsx","statementMap":{"0":{"start":{"line":16,"column":6},"end":{"line":16,"column":7}},"1":{"start":{"line":14,"column":2},"end":{"line":22,"column":null}}},"fnMap":{"0":{"name":"MobileLayout","decl":{"start":{"line":9,"column":16},"end":{"line":9,"column":29}},"loc":{"start":{"line":13,"column":22},"end":{"line":24,"column":null}},"line":13}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},"type":"default-arg","locations":[{"start":{"line":11,"column":14},"end":{"line":11,"column":null}}],"line":11},"1":{"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}},"type":"default-arg","locations":[{"start":{"line":12,"column":13},"end":{"line":12,"column":null}}],"line":12}},"s":{"0":1,"1":1},"f":{"0":1},"b":{"0":[1],"1":[1]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:16:6:16:7":0,"f:9:16:9:29":0,"b:11:14:11:Infinity":0,"b:12:13:12:Infinity":1,"s:14:2:22:Infinity":1}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/Spinner.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/Spinner.tsx","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":5}},"1":{"start":{"line":7,"column":2},"end":{"line":13,"column":null}}},"fnMap":{"0":{"name":"Spinner","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":24}},"loc":{"start":{"line":6,"column":69},"end":{"line":15,"column":null}},"line":6}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":26},"end":{"line":6,"column":37}},"type":"default-arg","locations":[{"start":{"line":6,"column":33},"end":{"line":6,"column":37}}],"line":6},"1":{"loc":{"start":{"line":6,"column":37},"end":{"line":6,"column":52}},"type":"default-arg","locations":[{"start":{"line":6,"column":49},"end":{"line":6,"column":52}}],"line":6}},"s":{"0":1,"1":3},"f":{"0":3},"b":{"0":[3],"1":[3]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:8:4:8:5":0,"f:6:16:6:24":0,"b:6:33:6:37":0,"b:6:49:6:52":1,"s:7:2:13:Infinity":1}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/common/AuthButton.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/AuthButton.tsx","statementMap":{"0":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"1":{"start":{"line":11,"column":2},"end":{"line":34,"column":null}}},"fnMap":{"0":{"name":"AuthButton","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":27}},"loc":{"start":{"line":10,"column":20},"end":{"line":36,"column":null}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"type":"default-arg","locations":[{"start":{"line":7,"column":14},"end":{"line":7,"column":null}}],"line":7},"1":{"loc":{"start":{"line":24,"column":16},"end":{"line":24,"column":null}},"type":"cond-expr","locations":[{"start":{"line":24,"column":33},"end":{"line":24,"column":49}},{"start":{"line":24,"column":49},"end":{"line":24,"column":null}}],"line":24},"2":{"loc":{"start":{"line":26,"column":19},"end":{"line":28,"column":null}},"type":"cond-expr","locations":[{"start":{"line":27,"column":12},"end":{"line":27,"column":null}},{"start":{"line":28,"column":12},"end":{"line":28,"column":null}}],"line":26},"3":{"loc":{"start":{"line":29,"column":17},"end":{"line":29,"column":null}},"type":"cond-expr","locations":[{"start":{"line":29,"column":34},"end":{"line":29,"column":40}},{"start":{"line":29,"column":40},"end":{"line":29,"column":null}}],"line":29}},"s":{"0":1,"1":2},"f":{"0":2},"b":{"0":[2],"1":[1,1],"2":[1,1],"3":[1,1]},"meta":{"lastBranch":4,"lastFunction":1,"lastStatement":2,"seen":{"s:12:4:12:5":0,"f:6:16:6:27":0,"b:7:14:7:Infinity":0,"s:11:2:34:Infinity":1,"b:24:33:24:49:24:49:24:Infinity":1,"b:27:12:27:Infinity:28:12:28:Infinity":2,"b:29:34:29:40:29:40:29:Infinity":3}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/common/AuthInput.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/AuthInput.tsx","statementMap":{"0":{"start":{"line":14,"column":4},"end":{"line":14,"column":5}},"1":{"start":{"line":13,"column":2},"end":{"line":32,"column":null}}},"fnMap":{"0":{"name":"AuthInput","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":26}},"loc":{"start":{"line":12,"column":19},"end":{"line":34,"column":null}},"line":12}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":2},"end":{"line":10,"column":null}},"type":"default-arg","locations":[{"start":{"line":10,"column":14},"end":{"line":10,"column":null}}],"line":10},"1":{"loc":{"start":{"line":20,"column":16},"end":{"line":20,"column":null}},"type":"binary-expr","locations":[{"start":{"line":20,"column":16},"end":{"line":20,"column":31}},{"start":{"line":20,"column":31},"end":{"line":20,"column":null}}],"line":20}},"s":{"0":1,"1":3},"f":{"0":3},"b":{"0":[3],"1":[3,3]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:14:4:14:5":0,"f:8:16:8:26":0,"b:10:14:10:Infinity":0,"s:13:2:32:Infinity":1,"b:20:16:20:31:20:31:20:Infinity":1}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/common/Docbar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/Docbar.tsx","statementMap":{"0":{"start":{"line":34,"column":6},"end":{"line":34,"column":7}},"1":{"start":{"line":7,"column":26},"end":{"line":7,"column":null}},"2":{"start":{"line":26,"column":15},"end":{"line":26,"column":null}},"3":{"start":{"line":28,"column":2},"end":{"line":49,"column":null}},"4":{"start":{"line":61,"column":2},"end":{"line":100,"column":null}},"5":{"start":{"line":69,"column":25},"end":{"line":69,"column":null}},"6":{"start":{"line":76,"column":25},"end":{"line":76,"column":null}},"7":{"start":{"line":83,"column":25},"end":{"line":83,"column":null}},"8":{"start":{"line":90,"column":25},"end":{"line":90,"column":null}},"9":{"start":{"line":97,"column":25},"end":{"line":97,"column":null}},"10":{"start":{"line":105,"column":19},"end":{"line":105,"column":null}},"11":{"start":{"line":106,"column":23},"end":{"line":106,"column":null}},"12":{"start":{"line":107,"column":22},"end":{"line":107,"column":null}},"13":{"start":{"line":107,"column":43},"end":{"line":107,"column":60}},"14":{"start":{"line":108,"column":35},"end":{"line":110,"column":null}},"15":{"start":{"line":109,"column":13},"end":{"line":109,"column":null}},"16":{"start":{"line":112,"column":2},"end":{"line":114,"column":null}},"17":{"start":{"line":113,"column":4},"end":{"line":113,"column":null}},"18":{"start":{"line":116,"column":44},"end":{"line":122,"column":null}},"19":{"start":{"line":124,"column":21},"end":{"line":126,"column":null}},"20":{"start":{"line":125,"column":4},"end":{"line":125,"column":null}},"21":{"start":{"line":128,"column":2},"end":{"line":128,"column":null}}},"fnMap":{"0":{"name":"DocContent","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":25,"column":3},"end":{"line":51,"column":null}},"line":25},"1":{"name":"DocbarView","decl":{"start":{"line":60,"column":16},"end":{"line":60,"column":27}},"loc":{"start":{"line":60,"column":73},"end":{"line":102,"column":null}},"line":60},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":19},"end":{"line":69,"column":25}},"loc":{"start":{"line":69,"column":25},"end":{"line":69,"column":null}},"line":69},"3":{"name":"(anonymous_3)","decl":{"start":{"line":76,"column":19},"end":{"line":76,"column":25}},"loc":{"start":{"line":76,"column":25},"end":{"line":76,"column":null}},"line":76},"4":{"name":"(anonymous_4)","decl":{"start":{"line":83,"column":19},"end":{"line":83,"column":25}},"loc":{"start":{"line":83,"column":25},"end":{"line":83,"column":null}},"line":83},"5":{"name":"(anonymous_5)","decl":{"start":{"line":90,"column":19},"end":{"line":90,"column":25}},"loc":{"start":{"line":90,"column":25},"end":{"line":90,"column":null}},"line":90},"6":{"name":"(anonymous_6)","decl":{"start":{"line":97,"column":19},"end":{"line":97,"column":25}},"loc":{"start":{"line":97,"column":25},"end":{"line":97,"column":null}},"line":97},"7":{"name":"Docbar","decl":{"start":{"line":104,"column":16},"end":{"line":104,"column":25}},"loc":{"start":{"line":104,"column":25},"end":{"line":129,"column":null}},"line":104},"8":{"name":"(anonymous_8)","decl":{"start":{"line":107,"column":34},"end":{"line":107,"column":43}},"loc":{"start":{"line":107,"column":43},"end":{"line":107,"column":60}},"line":107},"9":{"name":"(anonymous_9)","decl":{"start":{"line":109,"column":4},"end":{"line":109,"column":13}},"loc":{"start":{"line":109,"column":13},"end":{"line":109,"column":null}},"line":109},"10":{"name":"(anonymous_10)","decl":{"start":{"line":112,"column":12},"end":{"line":112,"column":18}},"loc":{"start":{"line":112,"column":18},"end":{"line":114,"column":5}},"line":112},"11":{"name":"(anonymous_11)","decl":{"start":{"line":124,"column":21},"end":{"line":124,"column":22}},"loc":{"start":{"line":124,"column":38},"end":{"line":126,"column":null}},"line":124}},"branchMap":{"0":{"loc":{"start":{"line":35,"column":22},"end":{"line":35,"column":67}},"type":"cond-expr","locations":[{"start":{"line":35,"column":35},"end":{"line":35,"column":53}},{"start":{"line":35,"column":53},"end":{"line":35,"column":67}}],"line":35},"1":{"loc":{"start":{"line":39,"column":19},"end":{"line":39,"column":null}},"type":"cond-expr","locations":[{"start":{"line":39,"column":32},"end":{"line":39,"column":50}},{"start":{"line":39,"column":50},"end":{"line":39,"column":null}}],"line":39}},"s":{"0":1,"1":1,"2":15,"3":15,"4":3,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},"f":{"0":15,"1":3,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"b":{"0":[3,12],"1":[3,12]},"meta":{"lastBranch":2,"lastFunction":12,"lastStatement":22,"seen":{"s:34:6:34:7":0,"s:7:26:7:Infinity":1,"f:13:9:13:20":0,"s:26:15:26:Infinity":2,"s:28:2:49:Infinity":3,"b:35:35:35:53:35:53:35:67":0,"b:39:32:39:50:39:50:39:Infinity":1,"f:60:16:60:27":1,"s:61:2:100:Infinity":4,"f:69:19:69:25":2,"s:69:25:69:Infinity":5,"f:76:19:76:25":3,"s:76:25:76:Infinity":6,"f:83:19:83:25":4,"s:83:25:83:Infinity":7,"f:90:19:90:25":5,"s:90:25:90:Infinity":8,"f:97:19:97:25":6,"s:97:25:97:Infinity":9,"f:104:16:104:25":7,"s:105:19:105:Infinity":10,"s:106:23:106:Infinity":11,"s:107:22:107:Infinity":12,"f:107:34:107:43":8,"s:107:43:107:60":13,"s:108:35:110:Infinity":14,"f:109:4:109:13":9,"s:109:13:109:Infinity":15,"s:112:2:114:Infinity":16,"f:112:12:112:18":10,"s:113:4:113:Infinity":17,"s:116:44:122:Infinity":18,"s:124:21:126:Infinity":19,"f:124:21:124:22":11,"s:125:4:125:Infinity":20,"s:128:2:128:Infinity":21}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/common/MoreButton.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/MoreButton.tsx","statementMap":{"0":{"start":{"line":13,"column":4},"end":{"line":13,"column":5}},"1":{"start":{"line":12,"column":2},"end":{"line":19,"column":null}}},"fnMap":{"0":{"name":"MoreButton","decl":{"start":{"line":7,"column":16},"end":{"line":7,"column":27}},"loc":{"start":{"line":11,"column":20},"end":{"line":21,"column":null}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":2},"end":{"line":8,"column":null}},"type":"default-arg","locations":[{"start":{"line":8,"column":10},"end":{"line":8,"column":null}}],"line":8},"1":{"loc":{"start":{"line":9,"column":2},"end":{"line":9,"column":null}},"type":"default-arg","locations":[{"start":{"line":9,"column":14},"end":{"line":9,"column":null}}],"line":9}},"s":{"0":2,"1":3},"f":{"0":3},"b":{"0":[3],"1":[3]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:13:4:13:5":0,"f:7:16:7:27":0,"b:8:10:8:Infinity":0,"b:9:14:9:Infinity":1,"s:12:2:19:Infinity":1}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/common/Navbar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/Navbar.tsx","statementMap":{"0":{"start":{"line":37,"column":12},"end":{"line":37,"column":13}},"1":{"start":{"line":21,"column":19},"end":{"line":21,"column":null}},"2":{"start":{"line":22,"column":17},"end":{"line":22,"column":null}},"3":{"start":{"line":24,"column":26},"end":{"line":30,"column":null}},"4":{"start":{"line":25,"column":4},"end":{"line":28,"column":null}},"5":{"start":{"line":26,"column":6},"end":{"line":26,"column":null}},"6":{"start":{"line":27,"column":6},"end":{"line":27,"column":null}},"7":{"start":{"line":29,"column":4},"end":{"line":29,"column":null}},"8":{"start":{"line":32,"column":2},"end":{"line":89,"column":null}}},"fnMap":{"0":{"name":"Navbar","decl":{"start":{"line":16,"column":16},"end":{"line":16,"column":23}},"loc":{"start":{"line":20,"column":16},"end":{"line":91,"column":null}},"line":20},"1":{"name":"(anonymous_1)","decl":{"start":{"line":24,"column":26},"end":{"line":24,"column":32}},"loc":{"start":{"line":24,"column":32},"end":{"line":30,"column":null}},"line":24}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":17,"column":null}},"type":"default-arg","locations":[{"start":{"line":17,"column":12},"end":{"line":17,"column":null}}],"line":17},"1":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":null}}],"line":18},"2":{"loc":{"start":{"line":25,"column":4},"end":{"line":28,"column":null}},"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":28,"column":null}},{"start":{},"end":{}}],"line":25},"3":{"loc":{"start":{"line":35,"column":9},"end":{"line":48,"column":null}},"type":"cond-expr","locations":[{"start":{"line":36,"column":10},"end":{"line":39,"column":null}},{"start":{"line":41,"column":10},"end":{"line":48,"column":null}}],"line":35},"4":{"loc":{"start":{"line":53,"column":9},"end":{"line":65,"column":null}},"type":"binary-expr","locations":[{"start":{"line":53,"column":9},"end":{"line":53,"column":null}},{"start":{"line":54,"column":10},"end":{"line":65,"column":null}}],"line":53},"5":{"loc":{"start":{"line":70,"column":9},"end":{"line":86,"column":null}},"type":"binary-expr","locations":[{"start":{"line":70,"column":9},"end":{"line":70,"column":null}},{"start":{"line":71,"column":10},"end":{"line":86,"column":null}}],"line":70}},"s":{"0":1,"1":2,"2":2,"3":2,"4":0,"5":0,"6":0,"7":0,"8":2},"f":{"0":2,"1":0},"b":{"0":[2],"1":[2],"2":[0,0],"3":[1,1],"4":[2,1],"5":[2,1]},"meta":{"lastBranch":6,"lastFunction":2,"lastStatement":9,"seen":{"s:37:12:37:13":0,"f:16:16:16:23":0,"b:17:12:17:Infinity":0,"b:18:10:18:Infinity":1,"s:21:19:21:Infinity":1,"s:22:17:22:Infinity":2,"s:24:26:30:Infinity":3,"f:24:26:24:32":1,"b:25:4:28:Infinity:undefined:undefined:undefined:undefined":2,"s:25:4:28:Infinity":4,"s:26:6:26:Infinity":5,"s:27:6:27:Infinity":6,"s:29:4:29:Infinity":7,"s:32:2:89:Infinity":8,"b:36:10:39:Infinity:41:10:48:Infinity":3,"b:53:9:53:Infinity:54:10:65:Infinity":4,"b:70:9:70:Infinity:71:10:86:Infinity":5}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx","statementMap":{"0":{"start":{"line":29,"column":6},"end":{"line":29,"column":7}},"1":{"start":{"line":6,"column":24},"end":{"line":17,"column":null}},"2":{"start":{"line":23,"column":16},"end":{"line":23,"column":null}},"3":{"start":{"line":25,"column":2},"end":{"line":32,"column":null}}},"fnMap":{"0":{"name":"ApplicationStatusBadge","decl":{"start":{"line":19,"column":16},"end":{"line":19,"column":39}},"loc":{"start":{"line":22,"column":32},"end":{"line":34,"column":null}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":null}},"type":"default-arg","locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":null}}],"line":21}},"s":{"0":3,"1":3,"2":9,"3":9},"f":{"0":9},"b":{"0":[9]},"meta":{"lastBranch":1,"lastFunction":1,"lastStatement":4,"seen":{"s:29:6:29:7":0,"s:6:24:17:Infinity":1,"f:19:16:19:39":0,"b:21:14:21:Infinity":0,"s:23:16:23:Infinity":2,"s:25:2:32:Infinity":3}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx","statementMap":{"0":{"start":{"line":14,"column":6},"end":{"line":14,"column":7}},"1":{"start":{"line":10,"column":2},"end":{"line":17,"column":null}}},"fnMap":{"0":{"name":"WorkCategoryBadge","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":34}},"loc":{"start":{"line":9,"column":27},"end":{"line":19,"column":null}},"line":9}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"type":"default-arg","locations":[{"start":{"line":7,"column":10},"end":{"line":7,"column":null}}],"line":7},"1":{"loc":{"start":{"line":8,"column":2},"end":{"line":8,"column":null}},"type":"default-arg","locations":[{"start":{"line":8,"column":14},"end":{"line":8,"column":null}}],"line":8}},"s":{"0":2,"1":3},"f":{"0":3},"b":{"0":[3],"1":[3]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:14:6:14:7":0,"f:6:16:6:34":0,"b:7:10:7:Infinity":0,"b:8:14:8:Infinity":1,"s:10:2:17:Infinity":1}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx","statementMap":{"0":{"start":{"line":29,"column":6},"end":{"line":29,"column":7}},"1":{"start":{"line":8,"column":23},"end":{"line":17,"column":null}},"2":{"start":{"line":23,"column":16},"end":{"line":23,"column":null}},"3":{"start":{"line":25,"column":2},"end":{"line":30,"column":null}}},"fnMap":{"0":{"name":"WorkerRoleBadge","decl":{"start":{"line":19,"column":16},"end":{"line":19,"column":32}},"loc":{"start":{"line":22,"column":25},"end":{"line":32,"column":null}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":null}},"type":"default-arg","locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":null}}],"line":21}},"s":{"0":2,"1":2,"2":4,"3":4},"f":{"0":4},"b":{"0":[4]},"meta":{"lastBranch":1,"lastFunction":1,"lastStatement":4,"seen":{"s:29:6:29:7":0,"s:8:23:17:Infinity":1,"f:19:16:19:32":0,"b:21:14:21:Infinity":0,"s:23:16:23:Infinity":2,"s:25:2:30:Infinity":3}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx","statementMap":{"0":{"start":{"line":34,"column":8},"end":{"line":34,"column":9}},"1":{"start":{"line":27,"column":2},"end":{"line":48,"column":null}},"2":{"start":{"line":57,"column":2},"end":{"line":78,"column":null}},"3":{"start":{"line":61,"column":10},"end":{"line":66,"column":null}},"4":{"start":{"line":64,"column":27},"end":{"line":64,"column":null}}},"fnMap":{"0":{"name":"PostingRow","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":20}},"loc":{"start":{"line":26,"column":3},"end":{"line":50,"column":null}},"line":26},"1":{"name":"OngoingPostingCard","decl":{"start":{"line":52,"column":16},"end":{"line":52,"column":35}},"loc":{"start":{"line":56,"column":28},"end":{"line":80,"column":null}},"line":56},"2":{"name":"(anonymous_2)","decl":{"start":{"line":60,"column":22},"end":{"line":60,"column":23}},"loc":{"start":{"line":61,"column":10},"end":{"line":66,"column":null}},"line":61},"3":{"name":"(anonymous_3)","decl":{"start":{"line":64,"column":21},"end":{"line":64,"column":27}},"loc":{"start":{"line":64,"column":27},"end":{"line":64,"column":null}},"line":64}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":80},"end":{"line":31,"column":121}},"type":"cond-expr","locations":[{"start":{"line":31,"column":90},"end":{"line":31,"column":119}},{"start":{"line":31,"column":119},"end":{"line":31,"column":121}}],"line":31}},"s":{"0":1,"1":3,"2":2,"3":3,"4":0},"f":{"0":3,"1":2,"2":3,"3":0},"b":{"0":[1,2]},"meta":{"lastBranch":1,"lastFunction":4,"lastStatement":5,"seen":{"s:34:8:34:9":0,"f:18:9:18:20":0,"s:27:2:48:Infinity":1,"b:31:90:31:119:31:119:31:121":0,"f:52:16:52:35":1,"s:57:2:78:Infinity":2,"f:60:22:60:23":2,"s:61:10:66:Infinity":3,"f:64:21:64:27":3,"s:64:27:64:Infinity":4}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx","statementMap":{"0":{"start":{"line":55,"column":10},"end":{"line":55,"column":11}},"1":{"start":{"line":23,"column":4},"end":{"line":34,"column":null}},"2":{"start":{"line":45,"column":17},"end":{"line":45,"column":null}},"3":{"start":{"line":47,"column":2},"end":{"line":85,"column":null}},"4":{"start":{"line":94,"column":2},"end":{"line":115,"column":null}},"5":{"start":{"line":98,"column":10},"end":{"line":103,"column":null}},"6":{"start":{"line":101,"column":27},"end":{"line":101,"column":null}}},"fnMap":{"0":{"name":"RequestRow","decl":{"start":{"line":36,"column":9},"end":{"line":36,"column":20}},"loc":{"start":{"line":44,"column":3},"end":{"line":87,"column":null}},"line":44},"1":{"name":"SubstituteApprovalCard","decl":{"start":{"line":89,"column":16},"end":{"line":89,"column":39}},"loc":{"start":{"line":93,"column":32},"end":{"line":117,"column":null}},"line":93},"2":{"name":"(anonymous_2)","decl":{"start":{"line":97,"column":22},"end":{"line":97,"column":23}},"loc":{"start":{"line":98,"column":10},"end":{"line":103,"column":null}},"line":98},"3":{"name":"(anonymous_3)","decl":{"start":{"line":101,"column":21},"end":{"line":101,"column":27}},"loc":{"start":{"line":101,"column":27},"end":{"line":101,"column":null}},"line":101}},"branchMap":{"0":{"loc":{"start":{"line":51,"column":104},"end":{"line":51,"column":145}},"type":"cond-expr","locations":[{"start":{"line":51,"column":114},"end":{"line":51,"column":143}},{"start":{"line":51,"column":143},"end":{"line":51,"column":145}}],"line":51},"1":{"loc":{"start":{"line":54,"column":9},"end":{"line":64,"column":null}},"type":"cond-expr","locations":[{"start":{"line":55,"column":10},"end":{"line":59,"column":null}},{"start":{"line":61,"column":10},"end":{"line":64,"column":null}}],"line":54}},"s":{"0":1,"1":1,"2":3,"3":3,"4":1,"5":3,"6":0},"f":{"0":3,"1":1,"2":3,"3":0},"b":{"0":[2,1],"1":[0,3]},"meta":{"lastBranch":2,"lastFunction":4,"lastStatement":7,"seen":{"s:55:10:55:11":0,"s:23:4:34:Infinity":1,"f:36:9:36:20":0,"s:45:17:45:Infinity":2,"s:47:2:85:Infinity":3,"b:51:114:51:143:51:143:51:145":0,"b:55:10:59:Infinity:61:10:64:Infinity":1,"f:89:16:89:39":1,"s:94:2:115:Infinity":4,"f:97:22:97:23":2,"s:98:10:103:Infinity":5,"f:101:21:101:27":3,"s:101:27:101:Infinity":6}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx","statementMap":{"0":{"start":{"line":22,"column":10},"end":{"line":22,"column":11}},"1":{"start":{"line":16,"column":2},"end":{"line":40,"column":null}}},"fnMap":{"0":{"name":"WorkerImageCard","decl":{"start":{"line":10,"column":16},"end":{"line":10,"column":32}},"loc":{"start":{"line":15,"column":25},"end":{"line":42,"column":null}},"line":15}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"type":"default-arg","locations":[{"start":{"line":14,"column":14},"end":{"line":14,"column":null}}],"line":14},"1":{"loc":{"start":{"line":21,"column":9},"end":{"line":31,"column":null}},"type":"cond-expr","locations":[{"start":{"line":22,"column":10},"end":{"line":26,"column":null}},{"start":{"line":28,"column":10},"end":{"line":31,"column":null}}],"line":21}},"s":{"0":1,"1":2},"f":{"0":2},"b":{"0":[2],"1":[1,1]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:22:10:22:11":0,"f:10:16:10:32":0,"b:14:14:14:Infinity":0,"s:16:2:40:Infinity":1,"b:22:10:26:Infinity:28:10:31:Infinity":1}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx","statementMap":{"0":{"start":{"line":28,"column":6},"end":{"line":28,"column":7}},"1":{"start":{"line":18,"column":2},"end":{"line":31,"column":null}},"2":{"start":{"line":42,"column":2},"end":{"line":79,"column":null}}},"fnMap":{"0":{"name":"EllipsisIcon","decl":{"start":{"line":17,"column":9},"end":{"line":17,"column":24}},"loc":{"start":{"line":17,"column":24},"end":{"line":33,"column":null}},"line":17},"1":{"name":"WorkerListItem","decl":{"start":{"line":35,"column":16},"end":{"line":35,"column":31}},"loc":{"start":{"line":41,"column":24},"end":{"line":81,"column":null}},"line":41}},"branchMap":{"0":{"loc":{"start":{"line":45,"column":9},"end":{"line":55,"column":null}},"type":"cond-expr","locations":[{"start":{"line":46,"column":10},"end":{"line":50,"column":null}},{"start":{"line":52,"column":10},"end":{"line":55,"column":null}}],"line":45}},"s":{"0":1,"1":2,"2":2},"f":{"0":2,"1":2},"b":{"0":[0,2]},"meta":{"lastBranch":1,"lastFunction":2,"lastStatement":3,"seen":{"s:28:6:28:7":0,"f:17:9:17:24":0,"s:18:2:31:Infinity":1,"f:35:16:35:31":1,"s:42:2:79:Infinity":2,"b:46:10:50:Infinity:52:10:55:Infinity":0}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx","statementMap":{"0":{"start":{"line":31,"column":8},"end":{"line":31,"column":9}},"1":{"start":{"line":28,"column":2},"end":{"line":66,"column":null}}},"fnMap":{"0":{"name":"Albabox","decl":{"start":{"line":16,"column":16},"end":{"line":16,"column":24}},"loc":{"start":{"line":27,"column":17},"end":{"line":68,"column":null}},"line":27}},"branchMap":{"0":{"loc":{"start":{"line":35,"column":22},"end":{"line":35,"column":null}},"type":"cond-expr","locations":[{"start":{"line":35,"column":30},"end":{"line":35,"column":41}},{"start":{"line":35,"column":41},"end":{"line":35,"column":null}}],"line":35},"1":{"loc":{"start":{"line":37,"column":12},"end":{"line":39,"column":null}},"type":"cond-expr","locations":[{"start":{"line":38,"column":16},"end":{"line":38,"column":null}},{"start":{"line":39,"column":16},"end":{"line":39,"column":null}}],"line":37},"2":{"loc":{"start":{"line":62,"column":9},"end":{"line":63,"column":null}},"type":"binary-expr","locations":[{"start":{"line":62,"column":9},"end":{"line":62,"column":30}},{"start":{"line":62,"column":30},"end":{"line":62,"column":null}},{"start":{"line":63,"column":10},"end":{"line":63,"column":null}}],"line":62}},"s":{"0":1,"1":3},"f":{"0":3},"b":{"0":[1,2],"1":[1,2],"2":[3,2,2]},"meta":{"lastBranch":3,"lastFunction":1,"lastStatement":2,"seen":{"s:31:8:31:9":0,"f:16:16:16:24":0,"s:28:2:66:Infinity":1,"b:35:30:35:41:35:41:35:Infinity":0,"b:38:16:38:Infinity:39:16:39:Infinity":1,"b:62:9:62:30:62:30:62:Infinity:63:10:63:Infinity":2}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":5}},"1":{"start":{"line":7,"column":2},"end":{"line":17,"column":null}}},"fnMap":{"0":{"name":"SocialCategory","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":31}},"loc":{"start":{"line":6,"column":79},"end":{"line":19,"column":null}},"line":6}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":40},"end":{"line":6,"column":55}},"type":"default-arg","locations":[{"start":{"line":6,"column":49},"end":{"line":6,"column":55}}],"line":6},"1":{"loc":{"start":{"line":11,"column":8},"end":{"line":13,"column":null}},"type":"cond-expr","locations":[{"start":{"line":12,"column":12},"end":{"line":12,"column":null}},{"start":{"line":13,"column":12},"end":{"line":13,"column":null}}],"line":11}},"s":{"0":1,"1":2},"f":{"0":2},"b":{"0":[2],"1":[1,1]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:8:4:8:5":0,"f:6:16:6:31":0,"b:6:49:6:55":0,"s:7:2:17:Infinity":1,"b:12:12:12:Infinity:13:12:13:Infinity":1}}} +,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx","statementMap":{"0":{"start":{"line":31,"column":6},"end":{"line":31,"column":7}},"1":{"start":{"line":1,"column":59},"end":{"line":1,"column":null}},"2":{"start":{"line":20,"column":21},"end":{"line":20,"column":null}},"3":{"start":{"line":21,"column":23},"end":{"line":21,"column":null}},"4":{"start":{"line":29,"column":2},"end":{"line":50,"column":null}},"5":{"start":{"line":62,"column":38},"end":{"line":62,"column":null}},"6":{"start":{"line":63,"column":38},"end":{"line":63,"column":null}},"7":{"start":{"line":65,"column":23},"end":{"line":65,"column":null}},"8":{"start":{"line":66,"column":20},"end":{"line":66,"column":null}},"9":{"start":{"line":67,"column":29},"end":{"line":67,"column":null}},"10":{"start":{"line":69,"column":65},"end":{"line":75,"column":null}},"11":{"start":{"line":70,"column":4},"end":{"line":70,"column":null}},"12":{"start":{"line":71,"column":4},"end":{"line":71,"column":null}},"13":{"start":{"line":72,"column":4},"end":{"line":72,"column":null}},"14":{"start":{"line":73,"column":4},"end":{"line":73,"column":null}},"15":{"start":{"line":74,"column":4},"end":{"line":74,"column":null}},"16":{"start":{"line":77,"column":65},"end":{"line":86,"column":null}},"17":{"start":{"line":78,"column":4},"end":{"line":78,"column":null}},"18":{"start":{"line":78,"column":65},"end":{"line":78,"column":null}},"19":{"start":{"line":80,"column":19},"end":{"line":80,"column":null}},"20":{"start":{"line":81,"column":27},"end":{"line":84,"column":null}},"21":{"start":{"line":85,"column":4},"end":{"line":85,"column":null}},"22":{"start":{"line":88,"column":21},"end":{"line":94,"column":null}},"23":{"start":{"line":89,"column":4},"end":{"line":89,"column":null}},"24":{"start":{"line":89,"column":44},"end":{"line":89,"column":null}},"25":{"start":{"line":91,"column":4},"end":{"line":91,"column":null}},"26":{"start":{"line":92,"column":4},"end":{"line":92,"column":null}},"27":{"start":{"line":93,"column":4},"end":{"line":93,"column":null}},"28":{"start":{"line":93,"column":27},"end":{"line":93,"column":79}},"29":{"start":{"line":96,"column":63},"end":{"line":98,"column":null}},"30":{"start":{"line":97,"column":4},"end":{"line":97,"column":null}},"31":{"start":{"line":100,"column":67},"end":{"line":102,"column":null}},"32":{"start":{"line":101,"column":4},"end":{"line":101,"column":null}},"33":{"start":{"line":104,"column":2},"end":{"line":131,"column":null}},"34":{"start":{"line":136,"column":2},"end":{"line":152,"column":null}}},"fnMap":{"0":{"name":"SocialList","decl":{"start":{"line":23,"column":16},"end":{"line":23,"column":27}},"loc":{"start":{"line":28,"column":23},"end":{"line":52,"column":null}},"line":28},"1":{"name":"SwipeableSocialItem","decl":{"start":{"line":54,"column":16},"end":{"line":54,"column":36}},"loc":{"start":{"line":61,"column":29},"end":{"line":133,"column":null}},"line":61},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":65},"end":{"line":69,"column":74}},"loc":{"start":{"line":69,"column":74},"end":{"line":75,"column":null}},"line":69},"3":{"name":"(anonymous_3)","decl":{"start":{"line":77,"column":65},"end":{"line":77,"column":74}},"loc":{"start":{"line":77,"column":74},"end":{"line":86,"column":null}},"line":77},"4":{"name":"(anonymous_4)","decl":{"start":{"line":88,"column":21},"end":{"line":88,"column":22}},"loc":{"start":{"line":88,"column":44},"end":{"line":94,"column":null}},"line":88},"5":{"name":"(anonymous_5)","decl":{"start":{"line":93,"column":18},"end":{"line":93,"column":27}},"loc":{"start":{"line":93,"column":27},"end":{"line":93,"column":79}},"line":93},"6":{"name":"(anonymous_6)","decl":{"start":{"line":96,"column":63},"end":{"line":96,"column":72}},"loc":{"start":{"line":96,"column":72},"end":{"line":98,"column":null}},"line":96},"7":{"name":"(anonymous_7)","decl":{"start":{"line":100,"column":67},"end":{"line":100,"column":76}},"loc":{"start":{"line":100,"column":76},"end":{"line":102,"column":null}},"line":100},"8":{"name":"SocialAction","decl":{"start":{"line":135,"column":16},"end":{"line":135,"column":29}},"loc":{"start":{"line":135,"column":70},"end":{"line":154,"column":null}},"line":135}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":null}},"type":"default-arg","locations":[{"start":{"line":27,"column":11},"end":{"line":27,"column":null}}],"line":27},"1":{"loc":{"start":{"line":46,"column":47},"end":{"line":46,"column":85}},"type":"cond-expr","locations":[{"start":{"line":46,"column":56},"end":{"line":46,"column":69}},{"start":{"line":46,"column":69},"end":{"line":46,"column":85}}],"line":46},"2":{"loc":{"start":{"line":58,"column":2},"end":{"line":58,"column":null}},"type":"default-arg","locations":[{"start":{"line":58,"column":11},"end":{"line":58,"column":null}}],"line":58},"3":{"loc":{"start":{"line":78,"column":4},"end":{"line":78,"column":null}},"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":78,"column":null}},{"start":{},"end":{}}],"line":78},"4":{"loc":{"start":{"line":78,"column":8},"end":{"line":78,"column":65}},"type":"binary-expr","locations":[{"start":{"line":78,"column":8},"end":{"line":78,"column":23}},{"start":{"line":78,"column":23},"end":{"line":78,"column":65}}],"line":78},"5":{"loc":{"start":{"line":89,"column":4},"end":{"line":89,"column":null}},"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":89,"column":null}},{"start":{},"end":{}}],"line":89},"6":{"loc":{"start":{"line":93,"column":27},"end":{"line":93,"column":79}},"type":"cond-expr","locations":[{"start":{"line":93,"column":61},"end":{"line":93,"column":77}},{"start":{"line":93,"column":77},"end":{"line":93,"column":79}}],"line":93},"7":{"loc":{"start":{"line":119,"column":22},"end":{"line":119,"column":null}},"type":"cond-expr","locations":[{"start":{"line":119,"column":35},"end":{"line":119,"column":44}},{"start":{"line":119,"column":44},"end":{"line":119,"column":null}}],"line":119}},"s":{"0":1,"1":1,"2":1,"3":1,"4":3,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0},"f":{"0":3,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"0":[3],"1":[2,1],"2":[0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0]},"meta":{"lastBranch":8,"lastFunction":9,"lastStatement":35,"seen":{"s:31:6:31:7":0,"s:1:59:1:Infinity":1,"s:20:21:20:Infinity":2,"s:21:23:21:Infinity":3,"f:23:16:23:27":0,"b:27:11:27:Infinity":0,"s:29:2:50:Infinity":4,"b:46:56:46:69:46:69:46:85":1,"f:54:16:54:36":1,"b:58:11:58:Infinity":2,"s:62:38:62:Infinity":5,"s:63:38:63:Infinity":6,"s:65:23:65:Infinity":7,"s:66:20:66:Infinity":8,"s:67:29:67:Infinity":9,"s:69:65:75:Infinity":10,"f:69:65:69:74":2,"s:70:4:70:Infinity":11,"s:71:4:71:Infinity":12,"s:72:4:72:Infinity":13,"s:73:4:73:Infinity":14,"s:74:4:74:Infinity":15,"s:77:65:86:Infinity":16,"f:77:65:77:74":3,"b:78:4:78:Infinity:undefined:undefined:undefined:undefined":3,"s:78:4:78:Infinity":17,"b:78:8:78:23:78:23:78:65":4,"s:78:65:78:Infinity":18,"s:80:19:80:Infinity":19,"s:81:27:84:Infinity":20,"s:85:4:85:Infinity":21,"s:88:21:94:Infinity":22,"f:88:21:88:22":4,"b:89:4:89:Infinity:undefined:undefined:undefined:undefined":5,"s:89:4:89:Infinity":23,"s:89:44:89:Infinity":24,"s:91:4:91:Infinity":25,"s:92:4:92:Infinity":26,"s:93:4:93:Infinity":27,"f:93:18:93:27":5,"s:93:27:93:79":28,"b:93:61:93:77:93:77:93:79":6,"s:96:63:98:Infinity":29,"f:96:63:96:72":6,"s:97:4:97:Infinity":30,"s:100:67:102:Infinity":31,"f:100:67:100:76":7,"s:101:4:101:Infinity":32,"s:104:2:131:Infinity":33,"b:119:35:119:44:119:44:119:Infinity":7,"f:135:16:135:29":8,"s:136:2:152:Infinity":34}}} +} diff --git a/coverage/favicon.png b/coverage/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1525b811a167671e9de1fa78aab9f5c0b61cef7 GIT binary patch literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 69.04% + Statements + 252/365 +
+ + +
+ 76.63% + Branches + 164/214 +
+ + +
+ 68% + Functions + 85/125 +
+ + +
+ 70.52% + Lines + 244/346 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
Code +
+
0%0/00%0/00%0/00%0/0
Code/alter-client/src/features/home/manager/ui +
+
78.57%11/1482.35%14/1777.77%7/976.92%10/13
Code/alter-client/src/features/home/user/constants +
+
100%7/7100%0/0100%0/0100%7/7
Code/alter-client/src/features/home/user/hooks +
+
85.82%115/13466.66%38/5797.05%33/3490.24%111/123
Code/alter-client/src/features/home/user/lib +
+
17.94%7/390%0/1013.33%2/1515.78%6/38
Code/alter-client/src/features/home/user/ui +
+
95.83%46/4895.08%58/61100%18/1895.83%46/48
Code/alter-client/src/shared/lib +
+
100%7/7100%0/0100%0/0100%7/7
Code/alter-client/src/shared/stores +
+
55.55%5/9100%0/040%2/542.85%3/7
Code/alter-client/src/shared/ui +
+
100%4/4100%4/4100%2/2100%4/4
Code/alter-client/src/shared/ui/common +
+
43.24%16/3792.3%24/2635.29%6/1744.44%16/36
Code/alter-client/src/shared/ui/home +
+
100%10/10100%4/4100%3/3100%10/10
Code/alter-client/src/shared/ui/manager +
+
88.23%15/1781.81%9/1181.81%9/1188.23%15/17
Code/alter-client/src/shared/ui/manager/alba-find +
+
100%2/2100%7/7100%1/1100%2/2
Code/alter-client/src/shared/ui/manager/social +
+
18.91%7/3735.29%6/1720%2/1020.58%7/34
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/prettify.css b/coverage/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/prettify.js b/coverage/prettify.js new file mode 100644 index 0000000..b322523 --- /dev/null +++ b/coverage/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/sort-arrow-sprite.png b/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed68316eb3f65dec9063332d2f69bf3093bbfab GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc literal 0 HcmV?d00001 diff --git a/coverage/sorter.js b/coverage/sorter.js new file mode 100644 index 0000000..4ed70ae --- /dev/null +++ b/coverage/sorter.js @@ -0,0 +1,210 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + + // Try to create a RegExp from the searchValue. If it fails (invalid regex), + // it will be treated as a plain text search + let searchRegex; + try { + searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive + } catch (error) { + searchRegex = null; + } + + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + let isMatch = false; + + if (searchRegex) { + // If a valid regex was created, use it for matching + isMatch = searchRegex.test(row.textContent); + } else { + // Otherwise, fall back to the original plain text search + isMatch = row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()); + } + + row.style.display = isMatch ? '' : 'none'; + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/vite.config.ts b/vite.config.ts index 1a9ee56..fd8c0f8 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -32,6 +32,21 @@ export default defineConfig({ }, }, test: { + // 브라우저 커버리지: 리맵 후 exclude를 다시 적용해 CSS·정적 자산·Storybook preview 등을 리포트에서 제외 + coverage: { + provider: 'v8', + excludeAfterRemap: true, + exclude: [ + 'src/**/*.stories.{ts,tsx}', + 'src/**/*.mdx', + 'src/**/*.d.ts', + 'src/assets/**', + 'src/app/styles/**', + 'src/**/types/**', + 'storybook/**', + '**/*.{css,png,jpg,jpeg,gif,webp,svg,ico}', + ], + }, projects: [ { extends: true, From f52b83021fd0085246929564f49cc3f2840cd026 Mon Sep 17 00:00:00 2001 From: Dohyeon Date: Sun, 5 Apr 2026 17:01:02 +0900 Subject: [PATCH 3/5] =?UTF-8?q?test:=20=EC=BA=98=EB=A6=B0=EB=8D=94=20date?= =?UTF-8?q?=20=EC=9C=A0=ED=8B=B8=20=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=8F=20Vitest=20unit=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EC=A0=9D=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coverage/Code/alter-client.html | 9 +- .../manager/ui/StoreWorkerListItem.tsx.html | 2 +- .../home/manager/ui/TodayWorkerList.tsx.html | 2 +- .../manager/ui/WorkspaceChangeCard.tsx.html | 2 +- .../manager/ui/WorkspaceChangeList.tsx.html | 2 +- .../src/features/home/manager/ui/index.html | 2 +- .../home/user/constants/calendar.ts.html | 2 +- .../features/home/user/constants/index.html | 2 +- .../src/features/home/user/hooks/index.html | 2 +- .../hooks/useDailyCalendarViewModel.ts.html | 2 +- .../hooks/useMonthlyCalendarViewModel.ts.html | 2 +- .../hooks/useMonthlyDateCellsState.ts.html | 2 +- .../hooks/useWeeklyCalendarViewModel.ts.html | 2 +- .../useWorkingStoreCardViewModel.ts.html | 2 +- .../useWorkingStoresListViewModel.ts.html | 2 +- .../src/features/home/user/lib/date.ts.html | 178 +++++++++--------- .../src/features/home/user/lib/index.html | 42 ++--- .../home/user/ui/AppliedStoreCard.tsx.html | 2 +- .../home/user/ui/AppliedStoreList.tsx.html | 2 +- .../home/user/ui/DailyCalendar.tsx.html | 2 +- .../user/ui/HomeScheduleCalendar.tsx.html | 2 +- .../home/user/ui/MonthlyCalendar.tsx.html | 2 +- .../home/user/ui/MonthlyDateCell.tsx.html | 2 +- .../home/user/ui/MonthlyDateGauge.tsx.html | 2 +- .../home/user/ui/WeeklyCalendar.tsx.html | 2 +- .../home/user/ui/WorkingStoreCard.tsx.html | 2 +- .../home/user/ui/WorkingStoresList.tsx.html | 2 +- .../src/features/home/user/ui/index.html | 2 +- .../alter-client/src/shared/lib/index.html | 2 +- .../src/shared/lib/tokens.ts.html | 2 +- .../alter-client/src/shared/stores/index.html | 2 +- .../src/shared/stores/useDocStore.ts.html | 2 +- .../src/shared/ui/MobileLayout.tsx.html | 2 +- .../src/shared/ui/Spinner.tsx.html | 2 +- .../src/shared/ui/common/AuthButton.tsx.html | 2 +- .../src/shared/ui/common/AuthInput.tsx.html | 2 +- .../src/shared/ui/common/Docbar.tsx.html | 2 +- .../src/shared/ui/common/MoreButton.tsx.html | 2 +- .../src/shared/ui/common/Navbar.tsx.html | 2 +- .../src/shared/ui/common/index.html | 2 +- .../ui/home/ApplicationStatusBadge.tsx.html | 2 +- .../shared/ui/home/WorkCategoryBadge.tsx.html | 2 +- .../shared/ui/home/WorkerRoleBadge.tsx.html | 2 +- .../src/shared/ui/home/index.html | 2 +- .../alter-client/src/shared/ui/index.html | 2 +- .../ui/manager/OngoingPostingCard.tsx.html | 2 +- .../manager/SubstituteApprovalCard.tsx.html | 2 +- .../ui/manager/WorkerImageCard.tsx.html | 2 +- .../shared/ui/manager/WorkerListItem.tsx.html | 2 +- .../ui/manager/alba-find/Albabox.tsx.html | 2 +- .../shared/ui/manager/alba-find/index.html | 2 +- .../src/shared/ui/manager/index.html | 2 +- .../ui/manager/social/SocialCategory.tsx.html | 2 +- .../ui/manager/social/SocialList.tsx.html | 2 +- .../src/shared/ui/manager/social/index.html | 2 +- coverage/Code/index.html | 2 +- coverage/clover.xml | 86 ++++----- coverage/coverage-final.json | 2 +- coverage/index.html | 40 ++-- package.json | 1 + src/features/home/user/lib/date.test.ts | 175 +++++++++++++++++ vite.config.ts | 8 + 62 files changed, 417 insertions(+), 230 deletions(-) create mode 100644 src/features/home/user/lib/date.test.ts diff --git a/coverage/Code/alter-client.html b/coverage/Code/alter-client.html index 83cec83..7e966f9 100644 --- a/coverage/Code/alter-client.html +++ b/coverage/Code/alter-client.html @@ -86,7 +86,9 @@

All files / Code alter- 21 22 23 -240 +24 +250 +0 0 0 0 @@ -132,14 +134,15 @@

All files / Code alter- at file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:13582:11 at file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:13444:19 at startVitest (file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:14494:8) - at start (file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cac.DRKYQDPl.js:2328:15) + at start (file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cac.DRKYQDPl.js:2328:15) + at CAC.run (file:///Users/hyeon/Code/alter-client/node_modules/vitest/dist/chunks/cac.DRKYQDPl.js:2306:2)
- - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx.html b/coverage/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx.html deleted file mode 100644 index 28e67f4..0000000 --- a/coverage/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/manager/ui StoreWorkerListItem.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 66.66% - Branches - 2/3 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import MoreVerticalIcon from '@/assets/icons/home/more-vertical.svg'
-import {
-  WorkerRoleBadge,
-  type WorkerRoleBadgeProps,
-} from '@/shared/ui/home/WorkerRoleBadge'
- 
-type StoreWorkerRole = WorkerRoleBadgeProps['role']
- 
-interface StoreWorkerListItemProps {
-  name: string
-  role: StoreWorkerRole
-  nextWorkDate: string
-  profileImageUrl?: string
-  onOptions?: () => void
-  className?: string
-}
- 
-export function StoreWorkerListItem({
-  name,
-  role,
-  nextWorkDate,
-  profileImageUrl,
-  onOptions,
-  className = '',
-}: StoreWorkerListItemProps) {
-  return (
-    <div
-      className={`flex h-[60px] items-center justify-between rounded-lg bg-white px-3 py-1 ${className}`}
-    >
-      <div className="flex items-center gap-4">
-        <div className="h-[38px] w-[38px] overflow-hidden rounded-full bg-bg-dark">
-          {profileImageUrl ? (
-            <img
-              src={profileImageUrl}
-              alt={name}
-              className="h-full w-full object-cover"
-            />
-          ) : null}
-        </div>
- 
-        <div className="flex flex-col gap-1">
-          <div className="flex items-center gap-1">
-            <p className="typography-body01-semibold text-text-100">{name}</p>
-            <WorkerRoleBadge role={role} />
-          </div>
-          <p className="flex items-center gap-2 typography-doc text-text-70">
-            <span>다음 근무 예정일</span>
-            <span>{nextWorkDate}</span>
-          </p>
-        </div>
-      </div>
- 
-      <button
-        type="button"
-        onClick={onOptions}
-        className="flex h-7 w-7 items-center justify-center"
-        aria-label="더보기"
-      >
-        <img src={MoreVerticalIcon} alt="더보기" className="h-7 w-7" />
-      </button>
-    </div>
-  )
-}
- 
-export type { StoreWorkerListItemProps, StoreWorkerRole }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx.html b/coverage/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx.html deleted file mode 100644 index 35875de..0000000 --- a/coverage/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/manager/ui TodayWorkerList.tsx

-
- -
- 100% - Statements - 4/4 -
- - -
- 66.66% - Branches - 2/3 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 4/4 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57  -  -  -  -  -  -  -  -  -  -  -  -  -3x -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -3x -  -  -  -  -  -  -  -  - 
interface TodayWorkerItem {
-  id: number | string
-  name: string
-  workTime: string
-  profileImageUrl?: string
-}
- 
-interface TodayWorkerListProps {
-  workers: TodayWorkerItem[]
-  className?: string
-}
- 
-function TodayWorkerCard({ worker }: { worker: TodayWorkerItem }) {
-  return (
-    <div className="h-[188px] w-[148px] rounded-2xl border border-line-1 bg-white px-[30px] py-6">
-      <div className="h-[88px] w-[88px] overflow-hidden rounded-full bg-bg-dark">
-        {worker.profileImageUrl ? (
-          <img
-            src={worker.profileImageUrl}
-            alt={worker.name}
-            className="h-full w-full object-cover"
-          />
-        ) : null}
-      </div>
-      <p className="mt-3 text-center typography-body02-semibold text-text-100">
-        {worker.name}
-      </p>
-      <p className="mt-1 text-center typography-body03-regular text-text-70">
-        {worker.workTime}
-      </p>
-    </div>
-  )
-}
- 
-export function TodayWorkerList({
-  workers,
-  className = '',
-}: TodayWorkerListProps) {
-  return (
-    <section className={className}>
-      <h3 className="typography-headline01 text-text-100">
-        오늘 근무자는 <span className="text-sub">{workers.length}</span>명이에요
-      </h3>
- 
-      <div className="mt-3 overflow-x-auto scrollbar-hide">
-        <div className="flex min-w-max gap-3">
-          {workers.map(worker => (
-            <TodayWorkerCard key={worker.id} worker={worker} />
-          ))}
-        </div>
-      </div>
-    </section>
-  )
-}
- 
-export type { TodayWorkerItem, TodayWorkerListProps }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx.html b/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx.html deleted file mode 100644 index 78983b0..0000000 --- a/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/manager/ui WorkspaceChangeCard.tsx

-
- -
- 40% - Statements - 2/5 -
- - -
- 88.88% - Branches - 8/9 -
- - -
- 33.33% - Functions - 1/3 -
- - -
- 40% - Lines - 2/5 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import EditIcon from '@/assets/icons/home/edit.svg'
-import { WorkCategoryBadge } from '@/shared/ui/home/WorkCategoryBadge'
- 
-interface WorkspaceStatus {
-  value: string
-  description: string
-}
- 
-interface WorkspaceChangeItem {
-  id: number
-  businessName: string
-  fullAddress: string
-  createdAt: string
-  status: WorkspaceStatus
-}
- 
-interface WorkspaceChangeCardProps {
-  workspace: WorkspaceChangeItem
-  isSelected?: boolean
-  categoryLabel?: string
-  className?: string
-  onEdit?: (workspaceId: number) => void
-  onClick?: (workspaceId: number) => void
-}
- 
-export function WorkspaceChangeCard({
-  workspace,
-  isSelected = false,
-  categoryLabel = '',
-  className = '',
-  onEdit,
-  onClick,
-}: WorkspaceChangeCardProps) {
-  return (
-    <div
-      onClick={() => onClick?.(workspace.id)}
-      className={`flex h-[86px] w-[310px] relative items-start rounded-2xl px-4 py-4 text-left ${
-        isSelected ? 'border border-sub bg-sub-300' : 'bg-bg-dark'
-      } ${onClick ? 'cursor-pointer' : ''} ${className}`}
-    >
-      <div className="flex min-w-0 flex-1 flex-col gap-2 pr-10">
-        <div className="flex min-w-0 items-center gap-2">
-          <p className="line-clamp-1 typography-headline03 text-text-100">
-            {workspace.businessName}
-          </p>
-          <WorkCategoryBadge label={categoryLabel} className="" />
-        </div>
- 
-        <div className="flex min-w-0 items-center gap-2 typography-body02-regular text-text-100">
-          <span className="whitespace-nowrap" title={workspace.fullAddress}>
-            {workspace.fullAddress}
-          </span>
-          <span
-            className={`h-4 w-px shrink-0 ${
-              isSelected ? 'bg-sub' : 'bg-line-2'
-            }`}
-            aria-hidden
-          />
-          <span
-            className="min-w-0 flex-1 truncate"
-            title={workspace.businessName}
-          >
-            {workspace.businessName}
-          </span>
-        </div>
-      </div>
-      <button
-        type="button"
-        onClick={event => {
-          event.stopPropagation()
-          onEdit?.(workspace.id)
-        }}
-        className="absolute right-4 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center"
-        aria-label="업장 정보 수정"
-      >
-        <img src={EditIcon} alt="수정" className="h-6 w-6" />
-      </button>
-    </div>
-  )
-}
- 
-export type { WorkspaceChangeCardProps, WorkspaceChangeItem, WorkspaceStatus }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx.html b/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx.html deleted file mode 100644 index 1f59fbd..0000000 --- a/coverage/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/manager/ui WorkspaceChangeList.tsx

-
- -
- 100% - Statements - 3/3 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {
-  WorkspaceChangeCard,
-  type WorkspaceChangeItem,
-} from './WorkspaceChangeCard'
- 
-interface WorkspaceChangeListProps {
-  workspaces: WorkspaceChangeItem[]
-  selectedWorkspaceId?: number
-  categoryLabel?: string
-  className?: string
-  onSelectWorkspace?: (workspaceId: number) => void
-  onEditWorkspace?: (workspaceId: number) => void
-}
- 
-export function WorkspaceChangeList({
-  workspaces,
-  selectedWorkspaceId,
-  categoryLabel = '',
-  className = '',
-  onSelectWorkspace,
-  onEditWorkspace,
-}: WorkspaceChangeListProps) {
-  return (
-    <div className={`flex flex-col gap-2 ${className}`}>
-      {workspaces.map(workspace => (
-        <WorkspaceChangeCard
-          key={workspace.id}
-          workspace={workspace}
-          categoryLabel={categoryLabel}
-          isSelected={workspace.id === selectedWorkspaceId}
-          onClick={onSelectWorkspace}
-          onEdit={onEditWorkspace}
-        />
-      ))}
-    </div>
-  )
-}
- 
-export type { WorkspaceChangeListProps }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/manager/ui/index.html b/coverage/Code/alter-client/src/features/home/manager/ui/index.html deleted file mode 100644 index a079a7e..0000000 --- a/coverage/Code/alter-client/src/features/home/manager/ui/index.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/manager/ui - - - - - - - - - -
-
-

All files Code/alter-client/src/features/home/manager/ui

-
- -
- 78.57% - Statements - 11/14 -
- - -
- 82.35% - Branches - 14/17 -
- - -
- 77.77% - Functions - 7/9 -
- - -
- 76.92% - Lines - 10/13 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
StoreWorkerListItem.tsx -
-
100%2/266.66%2/3100%1/1100%2/2
TodayWorkerList.tsx -
-
100%4/466.66%2/3100%3/3100%4/4
WorkspaceChangeCard.tsx -
-
40%2/588.88%8/933.33%1/340%2/5
WorkspaceChangeList.tsx -
-
100%3/3100%2/2100%2/2100%2/2
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/constants/calendar.ts.html b/coverage/Code/alter-client/src/features/home/user/constants/calendar.ts.html deleted file mode 100644 index 9ff6a4f..0000000 --- a/coverage/Code/alter-client/src/features/home/user/constants/calendar.ts.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/constants/calendar.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/constants calendar.ts

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 0/0 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -241x -  -  -  -  -  -  -  -  -  -1x -1x -  -1x -1x -1x -  -1x -  -  -  -  -  - 
export const WEEKDAY_LABELS = [
-  '일',
-  '월',
-  '화',
-  '수',
-  '목',
-  '금',
-  '토',
-] as const
- 
-export const DATE_KEY_FORMAT = 'yyyy-MM-dd'
-export const MONTH_LABEL_FORMAT = 'yyyy년 M월'
- 
-export const DAILY_TIMELINE_HEIGHT = 322
-export const DAILY_TIMELINE_START_HOUR = 1
-export const DAILY_TIMELINE_END_HOUR = 8
- 
-export const DAILY_STATUS_STYLE_MAP: Record<string, string> = {
-  PLANNED: 'bg-main-300/70',
-  CONFIRMED: 'bg-main/70',
-  CANCELLED: 'bg-bg-dark',
-  DELETED: 'bg-bg-dark/80',
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/constants/index.html b/coverage/Code/alter-client/src/features/home/user/constants/index.html deleted file mode 100644 index a666efb..0000000 --- a/coverage/Code/alter-client/src/features/home/user/constants/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/constants - - - - - - - - - -
-
-

All files Code/alter-client/src/features/home/user/constants

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 0/0 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
calendar.ts -
-
100%7/7100%0/0100%0/0100%7/7
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/index.html b/coverage/Code/alter-client/src/features/home/user/hooks/index.html deleted file mode 100644 index b1af06c..0000000 --- a/coverage/Code/alter-client/src/features/home/user/hooks/index.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/hooks - - - - - - - - - -
-
-

All files Code/alter-client/src/features/home/user/hooks

-
- -
- 85.82% - Statements - 115/134 -
- - -
- 66.66% - Branches - 38/57 -
- - -
- 97.05% - Functions - 33/34 -
- - -
- 90.24% - Lines - 111/123 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
useDailyCalendarViewModel.ts -
-
100%25/2562.5%5/8100%7/7100%25/25
useMonthlyCalendarViewModel.ts -
-
82.14%46/5676.19%16/2190%9/1084.31%43/51
useMonthlyDateCellsState.ts -
-
100%10/10100%8/8100%3/3100%10/10
useWeeklyCalendarViewModel.ts -
-
95%19/2060%6/10100%8/8100%19/19
useWorkingStoreCardViewModel.ts -
-
60%12/2030%3/10100%4/473.33%11/15
useWorkingStoresListViewModel.ts -
-
100%3/3100%0/0100%2/2100%3/3
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts.html deleted file mode 100644 index 62a71ca..0000000 --- a/coverage/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts.html +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/hooks useDailyCalendarViewModel.ts

-
- -
- 100% - Statements - 25/25 -
- - -
- 62.5% - Branches - 5/8 -
- - -
- 100% - Functions - 7/7 -
- - -
- 100% - Lines - 25/25 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -5x -  -  -  -  -  -  -6x -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -5x -5x -  -5x -  -5x -  -  -5x -5x -5x -  -5x -5x -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -2x -2x -2x -2x -  -2x -14x -14x -14x -  -  -2x -  -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -  -  -  -  - 
import { format } from 'date-fns'
-import { useMemo } from 'react'
-import {
-  DAILY_STATUS_STYLE_MAP,
-  DAILY_TIMELINE_END_HOUR,
-  DAILY_TIMELINE_HEIGHT,
-  DAILY_TIMELINE_START_HOUR,
-} from '@/features/home/user/constants/calendar'
-import type {
-  DailyCalendarPropsBase,
-  DailyCalendarViewModel,
-} from '@/features/home/user/types/dailyCalendar'
-import type { CalendarEvent } from '@/features/home/user/types/schedule'
- 
-function getStatusStyle(status: string) {
-  return DAILY_STATUS_STYLE_MAP[status] ?? 'bg-bg-dark text-text-90'
-}
- 
-function sortByStartTime(
-  a: { startDateTime: string },
-  b: { startDateTime: string }
-) {
-  return a.startDateTime.localeCompare(b.startDateTime)
-}
- 
-function buildDailyEventBlocks({
-  events,
-  timelineHeight,
-  timelineStartHour,
-  totalMinutes,
-}: {
-  events: CalendarEvent[]
-  timelineHeight: number
-  timelineStartHour: number
-  totalMinutes: number
-}) {
-  return [...events].sort(sortByStartTime).map(event => {
-    const startDate = new Date(event.startDateTime)
-    const endDate = new Date(event.endDateTime)
- 
-    const startMinutesRaw =
-      (startDate.getHours() - timelineStartHour) * 60 + startDate.getMinutes()
-    const endMinutesRaw =
-      (endDate.getHours() - timelineStartHour) * 60 + endDate.getMinutes()
- 
-    const startMinutes = Math.max(0, Math.min(totalMinutes, startMinutesRaw))
-    const endMinutes = Math.max(0, Math.min(totalMinutes, endMinutesRaw))
-    const durationMinutes = Math.max(endMinutes - startMinutes, 20)
- 
-    const top = (startMinutes / totalMinutes) * timelineHeight
-    const height = Math.min(
-      (durationMinutes / totalMinutes) * timelineHeight,
-      timelineHeight - top
-    )
- 
-    return {
-      key: event.shiftId,
-      workspaceName: event.workspaceName,
-      timeLabel: `${event.startTimeLabel} - ${event.endTimeLabel}`,
-      statusClassName: getStatusStyle(event.status),
-      top,
-      height,
-    }
-  })
-}
- 
-export function useDailyCalendarViewModel({
-  baseDate,
-  data,
-  workspaceName,
-}: DailyCalendarPropsBase): DailyCalendarViewModel {
-  return useMemo(() => {
-    const timelineHeight = DAILY_TIMELINE_HEIGHT
-    const timelineStartHour = DAILY_TIMELINE_START_HOUR
-    const timelineEndHour = DAILY_TIMELINE_END_HOUR
-    const totalMinutes = (timelineEndHour - timelineStartHour) * 60
- 
-    const timelineLines = Array.from({ length: 7 }, (_, idx) => {
-      const label = String(idx + 1).padStart(2, '0')
-      const top = ((idx + 1) / 8) * timelineHeight
-      return { label, top }
-    })
- 
-    const eventBlocks = buildDailyEventBlocks({
-      events: data?.events ?? [],
-      timelineHeight,
-      timelineStartHour,
-      totalMinutes,
-    })
- 
-    return {
-      title: workspaceName ?? '오늘의 아르바이트',
-      dateLabel: format(baseDate, 'yyyy년 M월 d일'),
-      totalWorkHoursText: String(data?.summary.totalWorkHours ?? 0).padStart(
-        2,
-        '0'
-      ),
-      timelineHeight,
-      timelineLines,
-      eventBlocks,
-    }
-  }, [baseDate, data, workspaceName])
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts.html deleted file mode 100644 index 09b3b33..0000000 --- a/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/hooks useMonthlyCalendarViewModel.ts

-
- -
- 82.14% - Statements - 46/56 -
- - -
- 76.19% - Branches - 16/21 -
- - -
- 90% - Functions - 9/10 -
- - -
- 84.31% - Lines - 43/51 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -2x -2x -2x -  -2x -70x -  -  -  -  -  -  -  -  -  -  -  -5x -5x -5x -5x -  -5x -  -  -  -  -  -  -  -  -  -  -5x -5x -  -  -  -2x -  -2x -5x -5x -  -5x -  -  -  -  -  -  -  -5x -5x -  -5x -5x -5x -5x -  -5x -5x -5x -5x -5x -5x -  -  -5x -  -  -  -2x -  -5x -5x -5x -5x -5x -  -  -  -  -  -  -  -  -  -  -  -2x -2x -  -2x -  -2x -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -  - 
import {
-  addDays,
-  eachDayOfInterval,
-  endOfMonth,
-  endOfWeek,
-  format,
-  isSameMonth,
-  startOfDay,
-  startOfMonth,
-  startOfWeek,
-} from 'date-fns'
-import { useMemo } from 'react'
-import {
-  DATE_KEY_FORMAT,
-  MONTH_LABEL_FORMAT,
-  WEEKDAY_LABELS,
-} from '@/features/home/user/constants/calendar'
-import { useMonthlyDateCellsState } from '@/features/home/user/hooks/useMonthlyDateCellsState'
-import type {
-  MonthlyCalendarViewModel,
-  MonthlyCellInput,
-  MonthlyDayMetrics,
-  MonthlyCalendarPropsBase,
-} from '@/features/home/user/types/monthlyCalendar'
-import type { CalendarViewData } from '@/features/home/user/types/schedule'
- 
-function getMonthlyCells(baseDate: Date): MonthlyCellInput[] {
-  const monthStart = startOfMonth(baseDate)
-  const monthEnd = endOfMonth(baseDate)
-  const intervalStart = startOfWeek(monthStart, { weekStartsOn: 0 })
-  const intervalEnd = endOfWeek(monthEnd, { weekStartsOn: 0 })
- 
-  return eachDayOfInterval({ start: intervalStart, end: intervalEnd }).map(
-    date => ({
-      dateKey: format(date, DATE_KEY_FORMAT),
-      dayText: format(date, 'd'),
-      isCurrentMonth: isSameMonth(date, baseDate),
-      weekDay: date.getDay(),
-    })
-  )
-}
- 
-type MinuteRange = [number, number]
- 
-function mergeMinuteRanges(ranges: MinuteRange[]) {
-  Iif (ranges.length === 0) return 0
-  const sorted = [...ranges].sort((a, b) => a[0] - b[0])
-  let [currentStart, currentEnd] = sorted[0]
-  let total = 0
- 
-  for (let idx = 1; idx < sorted.length; idx += 1) {
-    const [nextStart, nextEnd] = sorted[idx]
-    if (nextStart <= currentEnd) {
-      currentEnd = Math.max(currentEnd, nextEnd)
-      continue
-    }
-    total += currentEnd - currentStart
-    currentStart = nextStart
-    currentEnd = nextEnd
-  }
- 
-  total += currentEnd - currentStart
-  return total
-}
- 
-function getDayMetricsByDate(data: CalendarViewData | null) {
-  const rangesByDate: Record<string, MinuteRange[]> = {}
- 
-  ;(data?.events ?? []).forEach(event => {
-    const start = new Date(event.startDateTime)
-    const end = new Date(event.endDateTime)
- 
-    Iif (
-      Number.isNaN(start.getTime()) ||
-      Number.isNaN(end.getTime()) ||
-      end <= start
-    ) {
-      return
-    }
- 
-    let cursor = startOfDay(start)
-    const lastDay = startOfDay(end)
- 
-    while (cursor <= lastDay) {
-      const nextDay = addDays(cursor, 1)
-      const clipStart = Math.max(start.getTime(), cursor.getTime())
-      const clipEnd = Math.min(end.getTime(), nextDay.getTime())
- 
-      Eif (clipEnd > clipStart) {
-        const dayKey = format(cursor, DATE_KEY_FORMAT)
-        const startMinute = (clipStart - cursor.getTime()) / (1000 * 60)
-        const endMinute = (clipEnd - cursor.getTime()) / (1000 * 60)
-        rangesByDate[dayKey] = rangesByDate[dayKey] ?? []
-        rangesByDate[dayKey].push([startMinute, endMinute])
-      }
- 
-      cursor = nextDay
-    }
-  })
- 
-  return Object.entries(rangesByDate).reduce<Record<string, MonthlyDayMetrics>>(
-    (acc, [dateKey, ranges]) => {
-      const occupiedMinutes = mergeMinuteRanges(ranges)
-      const dayHours = Number((occupiedMinutes / 60).toFixed(1))
-      const dayProgress = Math.min(Math.max(occupiedMinutes / (24 * 60), 0), 1)
-      acc[dateKey] = { dayHours, dayProgress }
-      return acc
-    },
-    {}
-  )
-}
- 
-export function useMonthlyCalendarViewModel({
-  baseDate,
-  data,
-  workspaceName,
-  selectedDateKey,
-}: MonthlyCalendarPropsBase): MonthlyCalendarViewModel {
-  const cells = useMemo(() => getMonthlyCells(baseDate), [baseDate])
-  const selectedKey = selectedDateKey ?? format(baseDate, DATE_KEY_FORMAT)
- 
-  const dayMetricsByDate = useMemo(() => getDayMetricsByDate(data), [data])
- 
-  const monthlyDateCellsState = useMonthlyDateCellsState({
-    cells,
-    dayMetricsByDate,
-    selectedKey,
-  })
- 
-  return {
-    title: workspaceName ?? '월간 아르바이트',
-    monthLabel: format(baseDate, MONTH_LABEL_FORMAT),
-    totalWorkHoursText: String(
-      Math.round(data?.summary.totalWorkHours ?? 0)
-    ).padStart(2, '0'),
-    weekdayLabels: WEEKDAY_LABELS,
-    monthlyDateCellsState,
-  }
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts.html deleted file mode 100644 index 99b208f..0000000 --- a/coverage/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/hooks useMonthlyDateCellsState.ts

-
- -
- 100% - Statements - 10/10 -
- - -
- 100% - Branches - 8/8 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 10/10 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -311x -  -  -  -  -  -  -  -2x -  -2x -70x -70x -70x -70x -70x -70x -  -70x -  -  -  -  -  -  -  -  -  -  -  - 
import { useMemo } from 'react'
-import type { UseMonthlyDateCellsStateParams } from '@/features/home/user/types/monthlyCalendar'
- 
-export function useMonthlyDateCellsState({
-  cells,
-  dayMetricsByDate,
-  selectedKey,
-}: UseMonthlyDateCellsStateParams) {
-  return useMemo(
-    () =>
-      cells.map(cell => {
-        const dayMetrics = dayMetricsByDate[cell.dateKey]
-        const dayHours = dayMetrics?.dayHours ?? 0
-        const dayProgress = dayMetrics?.dayProgress ?? 0
-        const isWeekend = cell.weekDay === 0 || cell.weekDay === 6
-        const isSelected = cell.dateKey === selectedKey
-        const isActiveDay = dayHours > 0 && cell.isCurrentMonth
- 
-        return {
-          ...cell,
-          dayHours,
-          dayProgress,
-          isWeekend,
-          isSelected,
-          isActiveDay,
-        }
-      }),
-    [cells, dayMetricsByDate, selectedKey]
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts.html deleted file mode 100644 index 669afee..0000000 --- a/coverage/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/hooks useWeeklyCalendarViewModel.ts

-
- -
- 95% - Statements - 19/20 -
- - -
- 60% - Branches - 6/10 -
- - -
- 100% - Functions - 8/8 -
- - -
- 100% - Lines - 19/19 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65  -1x -  -  -  -  -  -  -  -1x -1x -  -  -  -  -  -  -14x -14x -  -70x -10x -  -  -  -  -  -  -  -  -  -1x -1x -1x -1x -7x -  -  -  -1x -7x -7x -7x -7x -  -7x -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  - 
import { format } from 'date-fns'
-import { useMemo } from 'react'
-import { getWeeklyDateCells } from '@/features/home/user/lib/date'
-import type {
-  WeeklyCalendarPropsBase,
-  WeeklyCalendarViewModel,
-} from '@/features/home/user/types/weeklyCalendar'
- 
-function getSelectedDayIndex(baseDate: Date) {
-  const day = baseDate.getDay()
-  return day === 0 ? 6 : day - 1
-}
- 
-function getDayTotalHours(
-  dateKey: string,
-  data: WeeklyCalendarPropsBase['data']
-) {
-  Iif (!data) return 0
-  return Number(
-    data.events
-      .filter(event => event.dateKey === dateKey)
-      .reduce((acc, cur) => acc + cur.durationHours, 0)
-      .toFixed(1)
-  )
-}
- 
-export function useWeeklyCalendarViewModel({
-  baseDate,
-  data,
-  workspaceName,
-}: WeeklyCalendarPropsBase): WeeklyCalendarViewModel {
-  return useMemo(() => {
-    const cells = getWeeklyDateCells(baseDate)
-    const selectedDayIndex = getSelectedDayIndex(baseDate)
-    const maxHours = Math.max(
-      ...cells.map(cell => getDayTotalHours(cell.dateKey, data)),
-      1
-    )
- 
-    const dayCells = cells.map((cell, index) => {
-      const totalHours = getDayTotalHours(cell.dateKey, data)
-      const heightPercent = Math.max((totalHours / maxHours) * 100, 0)
-      const primaryHeight = Math.max((heightPercent / 100) * 320, 0)
-      const secondaryHeight = Math.max(primaryHeight * 0.78, 0)
- 
-      return {
-        dateKey: cell.dateKey,
-        dayLabel: cell.dayLabel,
-        totalHours,
-        isSelected: index === selectedDayIndex,
-        isPrimaryBar: index % 2 === 1,
-        primaryHeight,
-        secondaryHeight,
-        showSecondary: index !== 0 && totalHours > 0,
-      }
-    })
- 
-    return {
-      title: workspaceName ?? `${format(baseDate, 'M월')} 주간 아르바이트`,
-      totalWorkHoursText: String(Math.round(data?.summary.totalWorkHours ?? 0)),
-      dayCells,
-    }
-  }, [baseDate, data, workspaceName])
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts.html deleted file mode 100644 index 01e5b55..0000000 --- a/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/hooks useWorkingStoreCardViewModel.ts

-
- -
- 60% - Statements - 12/20 -
- - -
- 30% - Branches - 3/10 -
- - -
- 100% - Functions - 4/4 -
- - -
- 73.33% - Lines - 11/15 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35  -1x -  -  -  -6x -6x -6x -  -  -  -6x -6x -  -6x -6x -  -6x -  -  -  -  -  -  -  -  -6x -6x -  -  -  -  -  -  - 
import { differenceInCalendarDays, format, parseISO } from 'date-fns'
-import { useMemo } from 'react'
-import type { WorkingStoreItem } from '@/features/home/user/ui/WorkingStoreCard'
- 
-function formatNextShiftDate(nextShiftDateTime: string) {
-  const date = parseISO(nextShiftDateTime)
-  Iif (Number.isNaN(date.getTime())) return '-'
-  return format(date, 'yyyy.MM.dd')
-}
- 
-function getDueText(nextShiftDateTime: string) {
-  const nextDate = parseISO(nextShiftDateTime)
-  Iif (Number.isNaN(nextDate.getTime())) return '-'
- 
-  const today = new Date()
-  const diffDays = differenceInCalendarDays(nextDate, today)
- 
-  Eif (diffDays <= 0) return '오늘'
-  if (diffDays === 1) return '내일'
-  if (diffDays < 30) return `${diffDays}일 후`
- 
-  const monthDiff = Math.round(diffDays / 30)
-  return `${monthDiff}달 후`
-}
- 
-export function useWorkingStoreCardViewModel(store: WorkingStoreItem) {
-  return useMemo(
-    () => ({
-      nextWorkDate: formatNextShiftDate(store.nextShiftDateTime),
-      dueText: getDueText(store.nextShiftDateTime),
-    }),
-    [store.nextShiftDateTime]
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts.html b/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts.html deleted file mode 100644 index 1d4ffd6..0000000 --- a/coverage/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/hooks useWorkingStoresListViewModel.ts

-
- -
- 100% - Statements - 3/3 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 3/3 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -121x -  -  -  -2x -2x -  -  -  -  -  - 
import { useMemo } from 'react'
-import type { WorkingStoreItem } from '@/features/home/user/ui/WorkingStoreCard'
- 
-export function useWorkingStoresListViewModel(stores: WorkingStoreItem[]) {
-  return useMemo(
-    () => ({
-      visibleStores: stores.slice(0, 3),
-    }),
-    [stores]
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/lib/date.ts.html b/coverage/Code/alter-client/src/features/home/user/lib/date.ts.html deleted file mode 100644 index 48c151f..0000000 --- a/coverage/Code/alter-client/src/features/home/user/lib/date.ts.html +++ /dev/null @@ -1,469 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/lib/date.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/lib date.ts

-
- -
- 100% - Statements - 48/48 -
- - -
- 100% - Branches - 10/10 -
- - -
- 100% - Functions - 15/15 -
- - -
- 100% - Lines - 38/38 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -2x -2x -  -  -7x -  -  -  -1x -  -  -  -4x -4x -4x -4x -  -  -  -1x -1x -1x -1x -  -1x -35x -  -  -  -  -  -  -  -  -  -  -2x -2x -  -14x -  -  -  -  -  -  -  -  -  -  -  -  -4x -6x -  -2x -  -  -  -  -  -1x -1x -1x -  -  -  -1x -  -24x -  -  -  -  -3x -1x -  -  -  -  -  -2x -1x -  -  -  -  -  -  -  -  -1x -1x -  -  -  -  -  -  -  -  -  -  -6x -6x -2x -  -4x -2x -  -2x -  - 
import {
-  addDays,
-  addMonths,
-  eachDayOfInterval,
-  endOfMonth,
-  endOfWeek,
-  format,
-  isSameMonth,
-  startOfMonth,
-  startOfWeek,
-} from 'date-fns'
-import { ko } from 'date-fns/locale'
-import type { ScheduleDataDto } from '@/features/home/user/types/schedule'
-import type { HomeCalendarMode } from '@/features/home/user/types/schedule'
- 
-const ISO_DATE_LENGTH = 10
-const ISO_TIME_START = 11
-const ISO_TIME_END = 16
- 
-export function toDateKey(iso: string) {
-  return iso.slice(0, ISO_DATE_LENGTH)
-}
- 
-export function toTimeLabel(iso: string) {
-  return iso.slice(ISO_TIME_START, ISO_TIME_END)
-}
- 
-export function getDurationHours(startIso: string, endIso: string) {
-  const start = new Date(startIso).getTime()
-  const end = new Date(endIso).getTime()
-  const diffHours = Math.max((end - start) / (1000 * 60 * 60), 0)
-  return Number(diffHours.toFixed(1))
-}
- 
-export function getMonthlyDateCells(baseDate: Date) {
-  const monthStart = startOfMonth(baseDate)
-  const monthEnd = endOfMonth(baseDate)
-  const intervalStart = startOfWeek(monthStart, { weekStartsOn: 1 })
-  const intervalEnd = endOfWeek(monthEnd, { weekStartsOn: 1 })
- 
-  return eachDayOfInterval({ start: intervalStart, end: intervalEnd }).map(
-    date => ({
-      date,
-      dateKey: format(date, 'yyyy-MM-dd'),
-      day: format(date, 'd'),
-      isCurrentMonth: isSameMonth(date, baseDate),
-      isToday: format(date, 'yyyy-MM-dd') === format(new Date(), 'yyyy-MM-dd'),
-    })
-  )
-}
- 
-export function getWeeklyDateCells(baseDate: Date) {
-  const weekStart = startOfWeek(baseDate, { weekStartsOn: 1 })
-  const weekEnd = endOfWeek(baseDate, { weekStartsOn: 1 })
- 
-  return eachDayOfInterval({ start: weekStart, end: weekEnd }).map(date => ({
-    date,
-    dateKey: format(date, 'yyyy-MM-dd'),
-    dayLabel: format(date, 'EEE', { locale: ko }),
-    day: format(date, 'd'),
-    isToday: format(date, 'yyyy-MM-dd') === format(new Date(), 'yyyy-MM-dd'),
-  }))
-}
- 
-export function getDayHours(
-  events: ScheduleDataDto['schedules'],
-  dateKey: string
-) {
-  return events
-    .filter(item => toDateKey(item.startDateTime) === dateKey)
-    .reduce(
-      (acc, cur) => acc + getDurationHours(cur.startDateTime, cur.endDateTime),
-      0
-    )
-}
- 
-export function getWeekRangeLabel(baseDate: Date) {
-  const weekStart = startOfWeek(baseDate, { weekStartsOn: 1 })
-  const weekEnd = endOfWeek(baseDate, { weekStartsOn: 1 })
-  return `${format(weekStart, 'M/d')} - ${format(weekEnd, 'M/d')}`
-}
- 
-export function getDailyHourTicks() {
-  return Array.from(
-    { length: 24 },
-    (_, idx) => `${idx.toString().padStart(2, '0')}:00`
-  )
-}
- 
-export function getRangeParamsByMode(baseDate: Date, mode: HomeCalendarMode) {
-  if (mode === 'monthly') {
-    return {
-      startDate: format(startOfMonth(baseDate), 'yyyy-MM-dd'),
-      endDate: format(endOfMonth(baseDate), 'yyyy-MM-dd'),
-    }
-  }
- 
-  if (mode === 'weekly') {
-    return {
-      startDate: format(
-        startOfWeek(baseDate, { weekStartsOn: 1 }),
-        'yyyy-MM-dd'
-      ),
-      endDate: format(endOfWeek(baseDate, { weekStartsOn: 1 }), 'yyyy-MM-dd'),
-    }
-  }
- 
-  const day = format(baseDate, 'yyyy-MM-dd')
-  return {
-    startDate: day,
-    endDate: day,
-  }
-}
- 
-export function moveDateByMode(
-  baseDate: Date,
-  direction: 'prev' | 'next',
-  mode: 'monthly' | 'weekly' | 'daily'
-) {
-  const unit = direction === 'next' ? 1 : -1
-  if (mode === 'monthly') {
-    return addMonths(baseDate, unit)
-  }
-  if (mode === 'weekly') {
-    return addDays(baseDate, 7 * unit)
-  }
-  return addDays(baseDate, unit)
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/lib/index.html b/coverage/Code/alter-client/src/features/home/user/lib/index.html deleted file mode 100644 index af3e00e..0000000 --- a/coverage/Code/alter-client/src/features/home/user/lib/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/lib - - - - - - - - - -
-
-

All files Code/alter-client/src/features/home/user/lib

-
- -
- 100% - Statements - 48/48 -
- - -
- 100% - Branches - 10/10 -
- - -
- 100% - Functions - 15/15 -
- - -
- 100% - Lines - 38/38 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
date.ts -
-
100%48/48100%10/10100%15/15100%38/38
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx.html deleted file mode 100644 index a8939e5..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui AppliedStoreCard.tsx

-
- -
- 100% - Statements - 3/3 -
- - -
- 100% - Branches - 5/5 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 3/3 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38  -  -  -  -  -  -  -  -  -  -  -7x -  -7x -  -  -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { ApplicationStatusBadge } from '@/shared/ui/home/ApplicationStatusBadge'
- 
-interface AppliedStoreCardProps {
-  storeName: string
-  status?: 'applied' | 'rejected'
-}
- 
-export function AppliedStoreCard({
-  storeName,
-  status = 'applied',
-}: AppliedStoreCardProps) {
-  const isRejected = status === 'rejected'
- 
-  return (
-    <div
-      className={`relative h-[156px] w-[130px] overflow-hidden rounded-2xl ${
-        isRejected
-          ? 'bg-[linear-gradient(152deg,#3a9982_5.7%,#9dccc1_92.6%)]'
-          : 'bg-[linear-gradient(152deg,#2ce283_5.7%,#c0f7da_92.6%)]'
-      }`}
-    >
-      <p
-        className={`absolute left-3 top-3 max-w-16 whitespace-normal break-words line-clamp-4 typography-body02-semibold ${
-          isRejected ? 'text-white' : 'text-text-100'
-        }`}
-      >
-        {storeName}
-      </p>
-      <ApplicationStatusBadge
-        status={status}
-        className="absolute bottom-3 right-[10px]"
-      />
-    </div>
-  )
-}
- 
-export type { AppliedStoreCardProps }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx.html deleted file mode 100644 index e186d5f..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui AppliedStoreList.tsx

-
- -
- 100% - Statements - 5/5 -
- - -
- 100% - Branches - 3/3 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 5/5 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -1x -  -1x -  -  -1x -  -  -  -  -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { MoreButton } from '@/shared/ui/common/MoreButton'
-import { AppliedStoreCard } from '@/features/home/user/ui/AppliedStoreCard'
- 
-interface AppliedStoreItem {
-  id: number | string
-  storeName: string
-  status: 'applied' | 'rejected'
-}
- 
-interface AppliedStoreListProps {
-  title?: string
-  recentLabel?: string
-  stores: AppliedStoreItem[]
-  onMoreClick?: () => void
-}
- 
-export function AppliedStoreList({
-  title = '내가 지원한 가게',
-  recentLabel,
-  stores,
-  onMoreClick,
-}: AppliedStoreListProps) {
-  const visibleStores = stores.slice(0, 5)
-  const rightLabel = recentLabel ?? `최근 지원한 ${visibleStores.length}개`
- 
-  return (
-    <section className="w-full rounded-2xl bg-white py-6">
-      <div className="flex justify-between px-6">
-        <h3 className="typography-headline01 text-text-100">{title}</h3>
-        <p className="typography-body02-regular text-text-50 mt-2 mb-[3px]">
-          {rightLabel}
-        </p>
-      </div>
- 
-      <div className="mt-4 overflow-x-auto scrollbar-hide px-6">
-        <div className="flex min-w-max gap-3">
-          {visibleStores.map(store => (
-            <AppliedStoreCard
-              key={store.id}
-              storeName={store.storeName}
-              status={store.status}
-            />
-          ))}
-        </div>
-      </div>
- 
-      <div className="mt-4 px-6">
-        <MoreButton onClick={onMoreClick} />
-      </div>
-    </section>
-  )
-}
- 
-export type { AppliedStoreListProps, AppliedStoreItem }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx.html deleted file mode 100644 index 842887b..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx.html +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui DailyCalendar.tsx

-
- -
- 85.71% - Statements - 6/7 -
- - -
- 66.66% - Branches - 2/3 -
- - -
- 100% - Functions - 3/3 -
- - -
- 85.71% - Lines - 6/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -  -  -  -  -2x -  -  -1x -  -  -  -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -14x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import DownIcon from '@/assets/icons/home/chevron-down.svg?react'
-import { useDailyCalendarViewModel } from '@/features/home/user/hooks/useDailyCalendarViewModel'
-import type { DailyCalendarPropsBase } from '@/features/home/user/types/dailyCalendar'
- 
-interface DailyCalendarProps extends DailyCalendarPropsBase {
-  isLoading?: boolean
-}
- 
-export function DailyCalendar({
-  baseDate,
-  data,
-  workspaceName,
-  isLoading = false,
-}: DailyCalendarProps) {
-  const {
-    title,
-    dateLabel,
-    totalWorkHoursText,
-    timelineHeight,
-    timelineLines,
-    eventBlocks,
-  } = useDailyCalendarViewModel({
-    baseDate,
-    data,
-    workspaceName,
-  })
- 
-  Iif (isLoading) {
-    return (
-      <div className="rounded-2xl bg-white p-6">
-        <p className="text-text-70 text-3">금일 일정을 불러오는 중...</p>
-      </div>
-    )
-  }
- 
-  return (
-    <section>
-      <div className="px-[13px]">
-        <h3 className="typography-headline01 mb-3">{title}</h3>
-        <button type="button" className="flex items-center gap-1">
-          <p className="typography-body01-regular text-text-90">{dateLabel}</p>
-          <DownIcon className="h-4 w-4 text-text-90" />
-        </button>
-        <div className="flex items-center gap-2 py-1 mt-5">
-          <span className="typography-display text-text-100">
-            {totalWorkHoursText}
-          </span>
-          <span className="typography-body01-semibold text-text-90">
-            시간 근무해요
-          </span>
-        </div>
-      </div>
- 
-      <div className="mt-4 border-t border-line-2">
-        <div className="relative" style={{ height: `${timelineHeight}px` }}>
-          <div className="absolute left-[18px] top-0 h-full w-px bg-line-2" />
- 
-          {timelineLines.map(line => {
-            return (
-              <div key={line.label}>
-                <p
-                  className="absolute left-0 -translate-y-1/2 typography-doc-non text-text-50"
-                  style={{ top: line.top }}
-                >
-                  {line.label}
-                </p>
-                <div
-                  className="absolute left-[18px] right-0 border-t border-dashed border-line-2"
-                  style={{ top: line.top }}
-                />
-              </div>
-            )
-          })}
- 
-          {eventBlocks.map(block => {
-            return (
-              <div
-                key={block.key}
-                className={`absolute left-[20px] right-0 rounded-2xl p-4 ${block.statusClassName}`}
-                style={{ top: block.top, height: block.height }}
-              >
-                <p className="typography-body03-semibold text-text-100">
-                  {block.workspaceName}
-                </p>
-                <p className="typography-doc-non text-text-90 mt-1">
-                  {block.timeLabel}
-                </p>
-              </div>
-            )
-          })}
-        </div>
-      </div>
-    </section>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx.html deleted file mode 100644 index e190b37..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui HomeScheduleCalendar.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 7/7 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -5x -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import type {
-  CalendarViewData,
-  HomeCalendarMode,
-} from '@/features/home/user/types/schedule'
-import { DailyCalendar } from '@/features/home/user/ui/DailyCalendar'
-import { MonthlyCalendar } from '@/features/home/user/ui/MonthlyCalendar'
-import { WeeklyCalendar } from '@/features/home/user/ui/WeeklyCalendar'
- 
-interface HomeScheduleCalendarProps {
-  mode: HomeCalendarMode
-  baseDate: Date
-  data: CalendarViewData | null
-  workspaceName?: string
-  isLoading?: boolean
-  onDateChange: (nextDate: Date) => void
-}
- 
-export function HomeScheduleCalendar({
-  mode,
-  baseDate,
-  data,
-  workspaceName,
-  isLoading = false,
-}: HomeScheduleCalendarProps) {
-  return (
-    <section className="rounded-2xl bg-white px-[11px] py-6 w-[358px]">
-      {mode === 'monthly' && (
-        <MonthlyCalendar
-          baseDate={baseDate}
-          data={data}
-          workspaceName={workspaceName}
-          isLoading={isLoading}
-        />
-      )}
-      {mode === 'weekly' && (
-        <WeeklyCalendar
-          baseDate={baseDate}
-          data={data}
-          workspaceName={workspaceName}
-          isLoading={isLoading}
-        />
-      )}
-      {mode === 'daily' && (
-        <DailyCalendar
-          baseDate={baseDate}
-          data={data}
-          workspaceName={workspaceName}
-          isLoading={isLoading}
-        />
-      )}
-    </section>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx.html deleted file mode 100644 index bdb5773..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui MonthlyCalendar.tsx

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 7/7 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -  -  -  -  -  -2x -1x -  -1x -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -7x -  -  -  -  -  -  -  -  -  -  -35x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import DownIcon from '@/assets/icons/home/chevron-down.svg?react'
-import { useMonthlyCalendarViewModel } from '@/features/home/user/hooks/useMonthlyCalendarViewModel'
-import type { MonthlyCalendarPropsBase } from '@/features/home/user/types/monthlyCalendar'
-import { MonthlyDateCell } from '@/features/home/user/ui/MonthlyDateCell'
- 
-interface MonthlyCalendarProps extends MonthlyCalendarPropsBase {
-  isLoading?: boolean
-}
- 
-export function MonthlyCalendar({
-  baseDate,
-  data,
-  workspaceName,
-  isLoading = false,
-  selectedDateKey,
-}: MonthlyCalendarProps) {
-  const {
-    title,
-    monthLabel,
-    totalWorkHoursText,
-    weekdayLabels,
-    monthlyDateCellsState,
-  } = useMonthlyCalendarViewModel({
-    baseDate,
-    data,
-    workspaceName,
-    selectedDateKey,
-  })
- 
-  if (isLoading) {
-    return (
-      <div className="rounded-2xl bg-white p-6">
-        <p className="text-text-70 text-3">월간 일정을 불러오는 중...</p>
-      </div>
-    )
-  }
- 
-  return (
-    <section className="rounded-2xl bg-white">
-      <div className="px-[13px] gap-2">
-        <h3 className="typography-headline01 mb-4">{title}</h3>
-        <button
-          type="button"
-          className="flex items-center gap-1 typography-body01-regular text-text-90"
-        >
-          {monthLabel}
-          <DownIcon className="w-4 h-4" />
-        </button>
-        <div className="flex items-center gap-2 py-1">
-          <span className="typography-display">{totalWorkHoursText}</span>
-          <span className="typography-body02-semibold">시간 근무해요</span>
-        </div>
-      </div>
- 
-      <section className="mt-4">
-        <div className="grid grid-cols-7 text-center">
-          {weekdayLabels.map((label, index) => (
-            <span
-              key={label}
-              className={`w-12 typography-body03-regular ${index === 0 || index === 6 ? 'text-[#DC0000]' : 'text-text-50'}`}
-            >
-              {label}
-            </span>
-          ))}
-        </div>
- 
-        <div className="grid grid-cols-7 gap-y-2">
-          {monthlyDateCellsState.map(cell => {
-            return (
-              <MonthlyDateCell
-                key={cell.dateKey}
-                dayText={cell.dayText}
-                isCurrentMonth={cell.isCurrentMonth}
-                isWeekend={cell.isWeekend}
-                isSelected={cell.isSelected}
-                isActiveDay={cell.isActiveDay}
-                gaugeRatio={cell.dayProgress}
-              />
-            )
-          })}
-        </div>
-      </section>
-    </section>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx.html deleted file mode 100644 index 4f0b394..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui MonthlyDateCell.tsx

-
- -
- 100% - Statements - 3/3 -
- - -
- 100% - Branches - 9/9 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 3/3 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -40x -  -  -  -  -  -40x -  -  -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -  -  - 
import { MonthlyDateGauge } from '@/features/home/user/ui/MonthlyDateGauge'
- 
-interface MonthlyDateCellProps {
-  dayText: string
-  isCurrentMonth: boolean
-  isWeekend: boolean
-  isSelected: boolean
-  isActiveDay: boolean
-  gaugeRatio?: number
-}
- 
-export function MonthlyDateCell({
-  dayText,
-  isCurrentMonth,
-  isWeekend,
-  isSelected,
-  isActiveDay,
-  gaugeRatio = 0,
-}: MonthlyDateCellProps) {
-  const dayTextColor = !isCurrentMonth
-    ? 'text-text-50'
-    : isWeekend
-      ? 'text-[#DC0000]'
-      : 'text-text-50'
- 
-  return (
-    <div
-      className={`mx-auto flex h-12 w-12 items-center justify-center ${
-        isSelected ? 'bg-bg-light' : ''
-      }`}
-    >
-      {isActiveDay ? (
-        <div className="relative flex h-8 w-8 items-center justify-center">
-          <MonthlyDateGauge gaugeRatio={gaugeRatio} />
-          <span className="typography-body03-semibold text-text-100">
-            {dayText}
-          </span>
-        </div>
-      ) : (
-        <p className={`typography-body03-regular ${dayTextColor}`}>{dayText}</p>
-      )}
-    </div>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx.html deleted file mode 100644 index 95e41d8..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui MonthlyDateGauge.tsx

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -6x -6x -6x -6x -6x -  -6x -  -  -  -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
interface MonthlyDateGaugeProps {
-  gaugeRatio: number
-  size?: number
-  strokeWidth?: number
-  backgroundStroke?: string
-  progressStroke?: string
-}
- 
-export function MonthlyDateGauge({
-  gaugeRatio,
-  size = 32,
-  strokeWidth = 4,
-  backgroundStroke = '#EFEFEF',
-  progressStroke = '#2CE283',
-}: MonthlyDateGaugeProps) {
-  const normalizedRatio = Math.min(Math.max(gaugeRatio, 0), 1)
-  const center = size / 2
-  const radius = (size - strokeWidth) / 2
-  const circumference = 2 * Math.PI * radius
-  const progressLength = circumference * normalizedRatio
- 
-  return (
-    <svg
-      className="absolute inset-0"
-      width={size}
-      height={size}
-      viewBox={`0 0 ${size} ${size}`}
-      aria-hidden="true"
-    >
-      <g transform={`rotate(35 ${center} ${center})`}>
-        <circle
-          cx={center}
-          cy={center}
-          r={radius}
-          fill="none"
-          stroke={backgroundStroke}
-          strokeWidth={strokeWidth}
-        />
-        <circle
-          cx={center}
-          cy={center}
-          r={radius}
-          fill="none"
-          stroke={progressStroke}
-          strokeWidth={strokeWidth}
-          strokeLinecap="square"
-          strokeDasharray={`${progressLength} ${circumference}`}
-          transform={`translate(${size} 0) scale(-1 1)`}
-        />
-      </g>
-    </svg>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx.html deleted file mode 100644 index 73ddfe1..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui WeeklyCalendar.tsx

-
- -
- 85.71% - Statements - 6/7 -
- - -
- 90.9% - Branches - 10/11 -
- - -
- 100% - Functions - 3/3 -
- - -
- 85.71% - Lines - 6/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -1x -  -  -1x -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -7x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -7x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { useWeeklyCalendarViewModel } from '@/features/home/user/hooks/useWeeklyCalendarViewModel'
-import type { WeeklyCalendarPropsBase } from '@/features/home/user/types/weeklyCalendar'
- 
-interface WeeklyCalendarProps extends WeeklyCalendarPropsBase {
-  isLoading?: boolean
-}
- 
-export function WeeklyCalendar({
-  baseDate,
-  data,
-  workspaceName,
-  isLoading = false,
-}: WeeklyCalendarProps) {
-  const { title, totalWorkHoursText, dayCells } = useWeeklyCalendarViewModel({
-    baseDate,
-    data,
-    workspaceName,
-  })
- 
-  Iif (isLoading) {
-    return (
-      <div className="rounded-2xl bg-white p-6">
-        <p className="text-text-70 text-3">주간 일정을 불러오는 중...</p>
-      </div>
-    )
-  }
- 
-  return (
-    <section>
-      <div className="px-[13px] gap-2">
-        <h3 className="typography-headline01 mb-4">{title}</h3>
-        <div className="flex items-center gap-2 py-1">
-          <span className="typography-body01-semibold text-text-90">주</span>
-          <span className="typography-display text-text-100">
-            {totalWorkHoursText}
-          </span>
-          <span className="typography-body01-semibold text-text-90">
-            시간 근무해요
-          </span>
-        </div>
-      </div>
- 
-      <div className="mt-2 grid grid-cols-7">
-        {dayCells.map(cell => (
-          <div
-            key={cell.dateKey}
-            className={`mx-auto flex h-[46px] w-[46px] items-center justify-center rounded-2xl ${
-              cell.isSelected ? 'bg-sub-300' : 'bg-white'
-            }`}
-          >
-            <span
-              className={`typography-body03-regular ${
-                cell.isSelected ? 'text-text-100' : 'text-text-50'
-              }`}
-            >
-              {cell.dayLabel}
-            </span>
-          </div>
-        ))}
-      </div>
- 
-      <div className="mt-2 h-[320px] rounded-2xl bg-bg-light px-0.5">
-        <div className="flex h-full items-end gap-0">
-          {dayCells.map(cell => {
-            return (
-              <div key={cell.dateKey} className="relative h-full w-[44px]">
-                {cell.showSecondary && (
-                  <div
-                    className="absolute bottom-0 left-0 w-full rounded-2xl bg-main-300/65"
-                    style={{ height: `${cell.secondaryHeight}px` }}
-                  />
-                )}
-                <div
-                  className={`absolute bottom-0 left-0 w-full rounded-2xl ${
-                    cell.isPrimaryBar ? 'bg-main' : 'bg-main/85'
-                  }`}
-                  style={{ height: `${cell.primaryHeight}px` }}
-                />
-              </div>
-            )
-          })}
-        </div>
-      </div>
-    </section>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx.html deleted file mode 100644 index 2ed0fe4..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui WorkingStoreCard.tsx

-
- -
- 100% - Statements - 3/3 -
- - -
- 50% - Branches - 1/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 3/3 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -6x -  -6x -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { useWorkingStoreCardViewModel } from '@/features/home/user/hooks/useWorkingStoreCardViewModel'
- 
-export interface WorkingStoreItem {
-  workspaceId: number
-  businessName: string
-  employedAt: string
-  nextShiftDateTime: string
-  thumbnailUrl?: string
-}
- 
-interface WorkingStoreCardProps {
-  store: WorkingStoreItem
-}
- 
-export function WorkingStoreCard({ store }: WorkingStoreCardProps) {
-  const { dueText, nextWorkDate } = useWorkingStoreCardViewModel(store)
- 
-  return (
-    <div className="flex h-[72px] items-center px-6">
-      <div className="h-12 w-12 overflow-hidden rounded-[70px] bg-bg-dark">
-        {store.thumbnailUrl ? (
-          <img
-            src={store.thumbnailUrl}
-            alt={store.businessName}
-            className="h-full w-full object-cover"
-          />
-        ) : null}
-      </div>
-      <div className="ml-4 min-w-0 flex-1">
-        <p className="typography-headline03 truncate text-text-90">
-          {store.businessName}
-        </p>
-        <div className="mt-0.5 flex items-center gap-1">
-          <p className="typography-body02-regular text-text-70">
-            다음 근무 예정일
-          </p>
-          <p className="typography-body02-regular text-text-70">
-            {nextWorkDate}
-          </p>
-        </div>
-      </div>
-      <p className="typography-headline03 text-sub truncate">{dueText}</p>
-    </div>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx.html b/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx.html deleted file mode 100644 index 7b2407b..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/features/home/user/ui WorkingStoresList.tsx

-
- -
- 100% - Statements - 4/4 -
- - -
- 100% - Branches - 10/10 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 4/4 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -2x -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -6x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { MoreButton } from '@/shared/ui/common/MoreButton'
-import { useWorkingStoresListViewModel } from '@/features/home/user/hooks/useWorkingStoresListViewModel'
-import {
-  WorkingStoreCard,
-  type WorkingStoreItem,
-} from '@/features/home/user/ui/WorkingStoreCard'
- 
-interface WorkingStoresListProps {
-  title?: string
-  sortLabelLeft?: string
-  sortLabelRight?: string
-  selectedSort?: 'left' | 'right'
-  stores: WorkingStoreItem[]
-  onMoreClick?: () => void
-}
- 
-export function WorkingStoresList({
-  title = '근무중인 가게',
-  sortLabelLeft = '이름 순',
-  sortLabelRight = '근무 예정 순',
-  selectedSort = 'right',
-  stores,
-  onMoreClick,
-}: WorkingStoresListProps) {
-  const { visibleStores } = useWorkingStoresListViewModel(stores)
- 
-  return (
-    <section className="w-full rounded-2xl bg-white py-6">
-      <div className="flex items-center justify-between px-6">
-        <h3 className="typography-headline01 text-text-100">{title}</h3>
-        <div className="flex items-center gap-1">
-          <p
-            className={`typography-body02-regular ${
-              selectedSort === 'left' ? 'text-text-90' : 'text-text-50'
-            }`}
-          >
-            {sortLabelLeft}
-          </p>
-          <p className="typography-body02-regular text-text-50">|</p>
-          <p
-            className={`typography-body02-semibold ${
-              selectedSort === 'right' ? 'text-text-90' : 'text-text-50'
-            }`}
-          >
-            {sortLabelRight}
-          </p>
-        </div>
-      </div>
- 
-      <div className="mt-4">
-        {visibleStores.map((store, index) => (
-          <div key={store.workspaceId}>
-            <WorkingStoreCard store={store} />
-            {index < visibleStores.length - 1 ? (
-              <div className="mx-1 h-px bg-line-1" />
-            ) : null}
-          </div>
-        ))}
-      </div>
- 
-      <div className="mt-6 px-6">
-        <MoreButton onClick={onMoreClick} />
-      </div>
-    </section>
-  )
-}
- 
-export type { WorkingStoresListProps, WorkingStoreItem }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/features/home/user/ui/index.html b/coverage/Code/alter-client/src/features/home/user/ui/index.html deleted file mode 100644 index 0821282..0000000 --- a/coverage/Code/alter-client/src/features/home/user/ui/index.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/features/home/user/ui - - - - - - - - - -
-
-

All files Code/alter-client/src/features/home/user/ui

-
- -
- 95.83% - Statements - 46/48 -
- - -
- 95.08% - Branches - 58/61 -
- - -
- 100% - Functions - 18/18 -
- - -
- 95.83% - Lines - 46/48 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
AppliedStoreCard.tsx -
-
100%3/3100%5/5100%1/1100%3/3
AppliedStoreList.tsx -
-
100%5/5100%3/3100%2/2100%5/5
DailyCalendar.tsx -
-
85.71%6/766.66%2/3100%3/385.71%6/7
HomeScheduleCalendar.tsx -
-
100%2/2100%7/7100%1/1100%2/2
MonthlyCalendar.tsx -
-
100%7/7100%7/7100%3/3100%7/7
MonthlyDateCell.tsx -
-
100%3/3100%9/9100%1/1100%3/3
MonthlyDateGauge.tsx -
-
100%7/7100%4/4100%1/1100%7/7
WeeklyCalendar.tsx -
-
85.71%6/790.9%10/11100%3/385.71%6/7
WorkingStoreCard.tsx -
-
100%3/350%1/2100%1/1100%3/3
WorkingStoresList.tsx -
-
100%4/4100%10/10100%2/2100%4/4
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/lib/index.html b/coverage/Code/alter-client/src/shared/lib/index.html deleted file mode 100644 index 6af31e2..0000000 --- a/coverage/Code/alter-client/src/shared/lib/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/lib - - - - - - - - - -
-
-

All files Code/alter-client/src/shared/lib

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 0/0 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
tokens.ts -
-
100%7/7100%0/0100%0/0100%7/7
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/lib/tokens.ts.html b/coverage/Code/alter-client/src/shared/lib/tokens.ts.html deleted file mode 100644 index 8754739..0000000 --- a/coverage/Code/alter-client/src/shared/lib/tokens.ts.html +++ /dev/null @@ -1,670 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/lib/tokens.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/lib tokens.ts

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 0/0 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -  -  -  -  -4x -  -  -  -  -  -4x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/**
- * 디자인 토큰 타입 정의
- */
- 
-// 색상 토큰
-export const colors = {
-  error: '#dc0000',
-  bgLight: '#f4f4f4',
-  bgDark: '#efefef',
-  text: {
-    100: '#232323',
-    90: '#5f5f5f',
-    70: '#828282',
-    50: '#a3a3a3',
-  },
-  line: {
-    1: '#f1f1f1',
-    2: '#e5e5e5',
-    3: '#232323',
-  },
-  main: {
-    DEFAULT: '#2ce283',
-    700: '#6ceba9',
-    500: '#96f1c1',
-    300: '#c0f7da',
-    100: '#eafdf3',
-  },
-  sub: {
-    DEFAULT: '#3a9982',
-    900: '#4ea48f',
-    700: '#76b8a8',
-    500: '#9dccc1',
-    300: '#c4e1da',
-  },
-} as const
- 
-// 폰트 패밀리
-export const fontFamilies = {
-  rixyeoljeongdo: 'RixYeoljeongdo_Pro',
-  pretendard: 'Pretendard',
-} as const
- 
-// 폰트 사이즈
-export const fontSizes = {
-  0: '11px',
-  1: '12px',
-  2: '13px',
-  3: '14px',
-  4: '16px',
-  5: '18px',
-  6: '20px',
-  7: '22px',
-  8: '28px',
-  9: '32px',
-} as const
- 
-// 라인 높이
-export const lineHeights = {
-  0: '140%',
-  1: '140%',
-  2: '140%',
-  3: '140%',
-  4: '140%',
-  5: '140%',
-  6: '140%',
-  7: '140%',
-  8: '140%',
-  9: '140%',
-  10: '140%',
-  11: '140%',
-  12: '100%',
-  13: '100%',
-  14: '100%',
-} as const
- 
-// 레터 스페이싱
-export const letterSpacing = {
-  0: '-0.01em',
-  1: '0',
-} as const
- 
-// 폰트 웨이트
-export const fontWeights = {
-  regular: 400,
-  semibold: 600,
-} as const
- 
-// 타이포그래피 스타일
-export const typography = {
-  display: {
-    fontFamily: fontFamilies.rixyeoljeongdo,
-    fontWeight: fontWeights.regular,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[9],
-    letterSpacing: letterSpacing[0],
-  },
-  headline01: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.semibold,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[7],
-    letterSpacing: letterSpacing[0],
-  },
-  headline02: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.semibold,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[6],
-    letterSpacing: letterSpacing[0],
-  },
-  headline03: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.semibold,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[5],
-    letterSpacing: letterSpacing[0],
-  },
-  body01Semibold: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.semibold,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[4],
-    letterSpacing: letterSpacing[0],
-  },
-  body01Regular: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.regular,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[4],
-    letterSpacing: letterSpacing[0],
-  },
-  body02Semibold: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.semibold,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[3],
-    letterSpacing: letterSpacing[0],
-  },
-  body02Regular: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.regular,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[3],
-    letterSpacing: letterSpacing[0],
-  },
-  body03Semibold: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.semibold,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[2],
-    letterSpacing: letterSpacing[0],
-  },
-  body03Regular: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.regular,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[2],
-    letterSpacing: letterSpacing[0],
-  },
-  bt: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.semibold,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[3],
-    letterSpacing: letterSpacing[0],
-  },
-  bg: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.semibold,
-    lineHeight: lineHeights[0],
-    fontSize: fontSizes[0],
-    letterSpacing: letterSpacing[0],
-  },
-  doc: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.regular,
-    lineHeight: lineHeights[12],
-    fontSize: fontSizes[1],
-    letterSpacing: letterSpacing[0],
-  },
-  docNon: {
-    fontFamily: fontFamilies.pretendard,
-    fontWeight: fontWeights.regular,
-    lineHeight: lineHeights[12],
-    fontSize: fontSizes[1],
-    letterSpacing: letterSpacing[0],
-  },
-  logo: {
-    fontFamily: fontFamilies.rixyeoljeongdo,
-    fontWeight: fontWeights.regular,
-    lineHeight: lineHeights[12],
-    fontSize: fontSizes[8],
-    letterSpacing: letterSpacing[1],
-  },
-} as const
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/stores/index.html b/coverage/Code/alter-client/src/shared/stores/index.html deleted file mode 100644 index 2f19e04..0000000 --- a/coverage/Code/alter-client/src/shared/stores/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/stores - - - - - - - - - -
-
-

All files Code/alter-client/src/shared/stores

-
- -
- 55.55% - Statements - 5/9 -
- - -
- 100% - Branches - 0/0 -
- - -
- 40% - Functions - 2/5 -
- - -
- 42.85% - Lines - 3/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
useDocStore.ts -
-
55.55%5/9100%0/040%2/542.85%3/7
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/stores/useDocStore.ts.html b/coverage/Code/alter-client/src/shared/stores/useDocStore.ts.html deleted file mode 100644 index 0539a18..0000000 --- a/coverage/Code/alter-client/src/shared/stores/useDocStore.ts.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/stores/useDocStore.ts - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/stores useDocStore.ts

-
- -
- 55.55% - Statements - 5/9 -
- - -
- 100% - Branches - 0/0 -
- - -
- 40% - Functions - 2/5 -
- - -
- 42.85% - Lines - 3/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44  -  -  -1x -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  - 
import { create } from 'zustand'
-import type { TabKey } from '@/shared/types/tab'
- 
-const PATHNAME_TAB_MAP: Array<{ matcher: RegExp; tab: TabKey }> = [
-  { matcher: /(^|\/)home(\/|$)/, tab: 'home' },
-  { matcher: /(^|\/)my(\/|$)/, tab: 'my' },
-  { matcher: /(^|\/)message(\/|$)/, tab: 'message' },
-  { matcher: /(^|\/)repute(\/|$)/, tab: 'repute' },
-  { matcher: /(^|\/)search(\/|$)/, tab: 'search' },
-  { matcher: /^\/manager\/home/, tab: 'home' },
-  { matcher: /^\/job-lookup-map/, tab: 'search' },
-]
- 
-const createSelectedTab = (activeTab?: TabKey) => ({
-  home: activeTab === 'home',
-  my: activeTab === 'my',
-  message: activeTab === 'message',
-  repute: activeTab === 'repute',
-  search: activeTab === 'search',
-})
- 
-interface DocStoreState {
-  selectedTab: {
-    home: boolean
-    my: boolean
-    message: boolean
-    repute: boolean
-    search: boolean
-  }
-  setSelectedTab: (selectedTab: DocStoreState['selectedTab']) => void
-  setSelectedTabByPathname: (pathname: string) => void
-}
- 
-export const useDocStore = create<DocStoreState>(set => ({
-  selectedTab: createSelectedTab(),
-  setSelectedTab: selectedTab => set({ selectedTab }),
-  setSelectedTabByPathname: pathname => {
-    const matchedTab = PATHNAME_TAB_MAP.find(({ matcher }) =>
-      matcher.test(pathname)
-    )?.tab
-    set({ selectedTab: createSelectedTab(matchedTab) })
-  },
-}))
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/MobileLayout.tsx.html b/coverage/Code/alter-client/src/shared/ui/MobileLayout.tsx.html deleted file mode 100644 index 5cace73..0000000 --- a/coverage/Code/alter-client/src/shared/ui/MobileLayout.tsx.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/MobileLayout.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui MobileLayout.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -1x -  -  -  -  -  -  -  -  - 
import type { ReactNode } from 'react'
- 
-interface MobileLayoutProps {
-  children: ReactNode
-  className?: string
-  maxWidth?: string
-}
- 
-export function MobileLayout({
-  children,
-  className = '',
-  maxWidth = '428px',
-}: MobileLayoutProps) {
-  return (
-    <div className="flex w-full justify-center bg-white">
-      <div
-        className={`mobile-layout-container relative mx-auto w-full ${className}`}
-        style={{ maxWidth }}
-      >
-        {children}
-      </div>
-    </div>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/Spinner.tsx.html b/coverage/Code/alter-client/src/shared/ui/Spinner.tsx.html deleted file mode 100644 index d58e1b0..0000000 --- a/coverage/Code/alter-client/src/shared/ui/Spinner.tsx.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/Spinner.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui Spinner.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16  -  -  -  -  -  -3x -1x -  -  -  -  -  -  -  - 
interface SpinnerProps {
-  size?: number
-  className?: string
-}
- 
-export function Spinner({ size = 40, className = '' }: SpinnerProps) {
-  return (
-    <div
-      role="status"
-      aria-label="로딩 중"
-      className={`rounded-full border-[3px] border-black/20 border-t-black animate-spin ${className}`}
-      style={{ width: size, height: size }}
-    />
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/AuthButton.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/AuthButton.tsx.html deleted file mode 100644 index f6119f4..0000000 --- a/coverage/Code/alter-client/src/shared/ui/common/AuthButton.tsx.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/common/AuthButton.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/common AuthButton.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 7/7 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37  -  -  -  -  -  -  -  -  -  -2x -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import type { ButtonHTMLAttributes } from 'react'
-import { colors, fontFamilies, fontSizes, fontWeights } from '../../lib/tokens'
- 
-type AuthButtonProps = ButtonHTMLAttributes<HTMLButtonElement>
- 
-export function AuthButton({
-  className = '',
-  children,
-  ...props
-}: AuthButtonProps) {
-  return (
-    <button
-      className={className}
-      style={{
-        width: '100%',
-        height: '56px',
-        border: 'none',
-        background: colors.main.DEFAULT,
-        color: '#ffffff',
-        fontSize: fontSizes[5],
-        fontFamily: fontFamilies.pretendard,
-        fontWeight: fontWeights.semibold,
-        borderRadius: '12px',
-        cursor: props.disabled ? 'not-allowed' : 'pointer',
-        transition: 'all 0.2s ease',
-        boxShadow: props.disabled
-          ? 'none'
-          : '0 2px 8px rgba(45, 226, 131, 0.3)',
-        opacity: props.disabled ? 0.6 : 1,
-      }}
-      {...props}
-    >
-      {children}
-    </button>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/AuthInput.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/AuthInput.tsx.html deleted file mode 100644 index 8e8cc2a..0000000 --- a/coverage/Code/alter-client/src/shared/ui/common/AuthInput.tsx.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/common/AuthInput.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/common AuthInput.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 3/3 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35  -  -  -  -  -  -  -  -  -  -  -  -3x -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import type { InputHTMLAttributes } from 'react'
-import { colors, fontFamilies, fontSizes, fontWeights } from '../../lib/tokens'
- 
-interface AuthInputProps extends InputHTMLAttributes<HTMLInputElement> {
-  borderColor?: string
-}
- 
-export function AuthInput({
-  borderColor,
-  className = '',
-  ...props
-}: AuthInputProps) {
-  return (
-    <input
-      className={className}
-      style={{
-        width: '100%',
-        height: '56px',
-        padding: '0 16px',
-        border: borderColor || `1px solid ${colors.line[2]}`,
-        borderRadius: '12px',
-        fontFamily: fontFamilies.pretendard,
-        fontSize: fontSizes[4],
-        fontWeight: fontWeights.regular,
-        color: colors.text[100],
-        backgroundColor: '#ffffff',
-        outline: 'none',
-        transition: 'border-color 0.2s ease',
-        boxSizing: 'border-box',
-      }}
-      {...props}
-    />
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/Docbar.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/Docbar.tsx.html deleted file mode 100644 index 019988d..0000000 --- a/coverage/Code/alter-client/src/shared/ui/common/Docbar.tsx.html +++ /dev/null @@ -1,472 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/common/Docbar.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/common Docbar.tsx

-
- -
- 22.72% - Statements - 5/22 -
- - -
- 100% - Branches - 4/4 -
- - -
- 16.66% - Functions - 2/12 -
- - -
- 23.8% - Lines - 5/21 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -15x -  -15x -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -3x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import HomeIcon from '@/assets/icons/doc/Home.svg?react'
-import MYIcon from '@/assets/icons/doc/MY.svg?react'
-import MessageIcon from '@/assets/icons/doc/Message.svg?react'
-import ReputeIcon from '@/assets/icons/doc/Repute.svg?react'
-import SearchIcon from '@/assets/icons/doc/Search.svg?react'
-import type { ComponentType, SVGProps } from 'react'
-import { useEffect } from 'react'
-import { useLocation, useNavigate } from 'react-router-dom'
-import { useDocStore } from '@/shared/stores/useDocStore'
-import { typography } from '@/shared/lib/tokens'
-import { TAB_TITLE_MAP, type TabKey } from '@/shared/types/tab'
- 
-function DocContent({
-  icon,
-  alt,
-  isSelected,
-  titleKey,
-  onClick,
-}: {
-  icon: ComponentType<SVGProps<SVGSVGElement>>
-  alt: string
-  isSelected: boolean
-  titleKey: TabKey
-  onClick: () => void
-}) {
-  const Icon = icon
- 
-  return (
-    <button
-      type="button"
-      className="flex flex-col items-center gap-1 cursor-pointer w-[78px] h-[78px] pt-2.5 pb-3"
-      onClick={onClick}
-    >
-      <Icon
-        className={`${isSelected ? 'text-text-100' : 'text-text-50'} h-6 w-6 [&_*]:!fill-current [&_*]:!stroke-current`}
-        aria-label={alt}
-      />
-      <p
-        className={isSelected ? 'text-text-100' : 'text-text-50'}
-        style={{
-          fontSize: typography.doc.fontSize,
-          fontWeight: typography.doc.fontWeight,
-          lineHeight: typography.doc.lineHeight,
-          letterSpacing: typography.doc.letterSpacing,
-        }}
-      >
-        {TAB_TITLE_MAP[titleKey]}
-      </p>
-    </button>
-  )
-}
- 
-export type DocbarSelectedTab = Record<TabKey, boolean>
- 
-interface DocbarViewProps {
-  selectedTab: DocbarSelectedTab
-  onTabClick: (tab: TabKey) => void
-}
- 
-export function DocbarView({ selectedTab, onTabClick }: DocbarViewProps) {
-  return (
-    <div className="flex items-center justify-between w-full px-4 bg-white shadow-[0px_-4px_10px_rgba(0,_0,_0,_0.1)]">
-      <div className="flex items-center justify-between w-full">
-        <DocContent
-          icon={HomeIcon}
-          alt="Home"
-          isSelected={selectedTab.home}
-          titleKey="home"
-          onClick={() => onTabClick('home')}
-        />
-        <DocContent
-          icon={SearchIcon}
-          alt="Search"
-          isSelected={selectedTab.search}
-          titleKey="search"
-          onClick={() => onTabClick('search')}
-        />
-        <DocContent
-          icon={MessageIcon}
-          alt="Message"
-          isSelected={selectedTab.message}
-          titleKey="message"
-          onClick={() => onTabClick('message')}
-        />
-        <DocContent
-          icon={ReputeIcon}
-          alt="Repute"
-          isSelected={selectedTab.repute}
-          titleKey="repute"
-          onClick={() => onTabClick('repute')}
-        />
-        <DocContent
-          icon={MYIcon}
-          alt="MY"
-          isSelected={selectedTab.my}
-          titleKey="my"
-          onClick={() => onTabClick('my')}
-        />
-      </div>
-    </div>
-  )
-}
- 
-export function Docbar() {
-  const navigate = useNavigate()
-  const { pathname } = useLocation()
-  const selectedTab = useDocStore(state => state.selectedTab)
-  const setSelectedTabByPathname = useDocStore(
-    state => state.setSelectedTabByPathname
-  )
- 
-  useEffect(() => {
-    setSelectedTabByPathname(pathname)
-  }, [pathname, setSelectedTabByPathname])
- 
-  const pathByTab: Record<TabKey, string> = {
-    home: '/manager/home',
-    search: '/job-lookup-map',
-    message: '/message',
-    repute: '/repute',
-    my: '/my',
-  }
- 
-  const onTabClick = (tab: TabKey) => {
-    navigate(pathByTab[tab])
-  }
- 
-  return <DocbarView selectedTab={selectedTab} onTabClick={onTabClick} />
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/MoreButton.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/MoreButton.tsx.html deleted file mode 100644 index 201d875..0000000 --- a/coverage/Code/alter-client/src/shared/ui/common/MoreButton.tsx.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/common/MoreButton.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/common MoreButton.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22  -  -  -  -  -  -  -  -  -  -  -3x -2x -  -  -  -  -  -  -  -  - 
import type { ButtonHTMLAttributes } from 'react'
- 
-interface MoreButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
-  label?: string
-}
- 
-export function MoreButton({
-  label = '더보기',
-  className = '',
-  ...props
-}: MoreButtonProps) {
-  return (
-    <button
-      type="button"
-      className={`h-12 w-full rounded-lg border border-line-2 typography-bt text-text-70 ${className}`}
-      {...props}
-    >
-      {label}
-    </button>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/Navbar.tsx.html b/coverage/Code/alter-client/src/shared/ui/common/Navbar.tsx.html deleted file mode 100644 index cc91405..0000000 --- a/coverage/Code/alter-client/src/shared/ui/common/Navbar.tsx.html +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/common/Navbar.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/common Navbar.tsx

-
- -
- 55.55% - Statements - 5/9 -
- - -
- 80% - Branches - 8/10 -
- - -
- 50% - Functions - 1/2 -
- - -
- 55.55% - Lines - 5/9 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -2x -  -2x -  -  -  -  -  -  -  -2x -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import AlterLogo from '@/assets/Alter-logo.png'
-import BellIcon from '@/assets/icons/nav/bell.svg'
-import MenuIcon from '@/assets/icons/nav/menu.svg'
-import ChevronLeftIcon from '@/assets/icons/nav/chevron-left.svg'
-import { typography } from '@/shared/lib/tokens'
-import { useNavigate } from 'react-router-dom'
- 
-type NavbarVariant = 'main' | 'detail'
- 
-interface NavbarProps {
-  variant?: NavbarVariant
-  title?: string
-  onBackClick?: () => void
-}
- 
-export function Navbar({
-  variant = 'main',
-  title = '',
-  onBackClick,
-}: NavbarProps) {
-  const navigate = useNavigate()
-  const isMain = variant === 'main'
- 
-  const handleBackClick = () => {
-    if (onBackClick) {
-      onBackClick()
-      return
-    }
-    navigate(-1)
-  }
- 
-  return (
-    <header className="relative flex h-14 w-full items-center border-b border-line-2 bg-white px-4 py-3.5">
-      <div className="flex min-w-[84px] items-center">
-        {isMain ? (
-          <div className="flex items-center gap-2">
-            <img src={AlterLogo} alt="Alter logo" className="h-7 w-7" />
-            <span className="typography-logo">알터</span>
-          </div>
-        ) : (
-          <button
-            type="button"
-            aria-label="뒤로가기"
-            onClick={handleBackClick}
-            className="flex h-6 w-6 items-center justify-center"
-          >
-            <img src={ChevronLeftIcon} alt="Back" className="h-6 w-6" />
-          </button>
-        )}
-      </div>
- 
-      <div className="absolute left-1/2 -translate-x-1/2">
-        {!isMain && (
-          <span
-            className="text-text-100 whitespace-nowrap"
-            style={{
-              fontFamily: typography.body01Semibold.fontFamily,
-              fontSize: typography.body01Semibold.fontSize,
-              fontWeight: typography.body01Semibold.fontWeight,
-              lineHeight: typography.body01Semibold.lineHeight,
-              letterSpacing: typography.body01Semibold.letterSpacing,
-            }}
-          >
-            {title}
-          </span>
-        )}
-      </div>
- 
-      <div className="ml-auto flex min-w-[84px] items-center justify-end gap-4">
-        {isMain && (
-          <>
-            <button
-              type="button"
-              aria-label="알림"
-              className="flex h-6 w-6 items-center justify-center"
-            >
-              <img src={BellIcon} alt="Bell" className="h-6 w-6" />
-            </button>
-            <button
-              type="button"
-              aria-label="메뉴"
-              className="flex h-6 w-6 items-center justify-center"
-            >
-              <img src={MenuIcon} alt="Menu" className="h-6 w-6" />
-            </button>
-          </>
-        )}
-      </div>
-    </header>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/common/index.html b/coverage/Code/alter-client/src/shared/ui/common/index.html deleted file mode 100644 index 3b340ea..0000000 --- a/coverage/Code/alter-client/src/shared/ui/common/index.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/common - - - - - - - - - -
-
-

All files Code/alter-client/src/shared/ui/common

-
- -
- 43.24% - Statements - 16/37 -
- - -
- 92.3% - Branches - 24/26 -
- - -
- 35.29% - Functions - 6/17 -
- - -
- 44.44% - Lines - 16/36 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
AuthButton.tsx -
-
100%2/2100%7/7100%1/1100%2/2
AuthInput.tsx -
-
100%2/2100%3/3100%1/1100%2/2
Docbar.tsx -
-
22.72%5/22100%4/416.66%2/1223.8%5/21
MoreButton.tsx -
-
100%2/2100%2/2100%1/1100%2/2
Navbar.tsx -
-
55.55%5/980%8/1050%1/255.55%5/9
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx.html b/coverage/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx.html deleted file mode 100644 index 0ee1ace..0000000 --- a/coverage/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/home ApplicationStatusBadge.tsx

-
- -
- 100% - Statements - 4/4 -
- - -
- 100% - Branches - 1/1 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 4/4 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37  -  -  -  -  -3x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -9x -  -9x -  -  -  -3x -  -  -  -  -  -  -  - 
interface ApplicationStatusBadgeProps {
-  status: 'applied' | 'rejected'
-  className?: string
-}
- 
-const BADGE_STYLE_MAP = {
-  applied: {
-    label: '지원중',
-    containerClassName: 'bg-white border border-line-1',
-    textClassName: 'text-text-50',
-  },
-  rejected: {
-    label: '불합격',
-    containerClassName: 'bg-error border border-error',
-    textClassName: 'text-white',
-  },
-} as const
- 
-export function ApplicationStatusBadge({
-  status,
-  className = '',
-}: ApplicationStatusBadgeProps) {
-  const style = BADGE_STYLE_MAP[status]
- 
-  return (
-    <div
-      className={`inline-flex items-center justify-center rounded-[50px] px-2 py-1 shadow-[1px_1px_4px_0px_rgba(0,0,0,0.16)] ${style.containerClassName} ${className}`}
-    >
-      <span className={`typography-bg ${style.textClassName}`}>
-        {style.label}
-      </span>
-    </div>
-  )
-}
- 
-export type { ApplicationStatusBadgeProps }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx.html b/coverage/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx.html deleted file mode 100644 index d990378..0000000 --- a/coverage/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/home WorkCategoryBadge.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22  -  -  -  -  -  -  -  -  -3x -  -  -  -2x -  -  -  -  -  -  -  - 
interface WorkCategoryBadgeProps {
-  label?: string
-  className?: string
-}
- 
-export function WorkCategoryBadge({
-  label = '',
-  className = '',
-}: WorkCategoryBadgeProps) {
-  return (
-    <div
-      className={`inline-flex h-6 items-center justify-center rounded-[50px] border border-line-1 bg-white px-2 py-1 shadow-[1px_1px_4px_0px_rgba(0,0,0,0.16)] ${className}`}
-    >
-      <span className="typography-bg text-text-100 whitespace-nowrap">
-        {label}
-      </span>
-    </div>
-  )
-}
- 
-export type { WorkCategoryBadgeProps }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx.html b/coverage/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx.html deleted file mode 100644 index b52c098..0000000 --- a/coverage/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/home WorkerRoleBadge.tsx

-
- -
- 100% - Statements - 4/4 -
- - -
- 100% - Branches - 1/1 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 4/4 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35  -  -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -  -4x -  -  -  -2x -  -  -  -  -  - 
type WorkerRole = 'staff' | 'manager'
- 
-interface WorkerRoleBadgeProps {
-  role: WorkerRole
-  className?: string
-}
- 
-const ROLE_STYLE_MAP = {
-  staff: {
-    label: '알바',
-    containerClassName: 'bg-main-300',
-  },
-  manager: {
-    label: '매니저',
-    containerClassName: 'bg-main-700',
-  },
-} as const
- 
-export function WorkerRoleBadge({
-  role,
-  className = '',
-}: WorkerRoleBadgeProps) {
-  const style = ROLE_STYLE_MAP[role]
- 
-  return (
-    <div
-      className={`inline-flex h-5 items-center rounded-[80px] px-2 py-0.5 ${style.containerClassName} ${className}`}
-    >
-      <span className="typography-bg text-text-90">{style.label}</span>
-    </div>
-  )
-}
- 
-export type { WorkerRoleBadgeProps, WorkerRole }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/home/index.html b/coverage/Code/alter-client/src/shared/ui/home/index.html deleted file mode 100644 index 167f3c6..0000000 --- a/coverage/Code/alter-client/src/shared/ui/home/index.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/home - - - - - - - - - -
-
-

All files Code/alter-client/src/shared/ui/home

-
- -
- 100% - Statements - 10/10 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 10/10 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
ApplicationStatusBadge.tsx -
-
100%4/4100%1/1100%1/1100%4/4
WorkCategoryBadge.tsx -
-
100%2/2100%2/2100%1/1100%2/2
WorkerRoleBadge.tsx -
-
100%4/4100%1/1100%1/1100%4/4
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/index.html b/coverage/Code/alter-client/src/shared/ui/index.html deleted file mode 100644 index a2f2d12..0000000 --- a/coverage/Code/alter-client/src/shared/ui/index.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui - - - - - - - - - -
-
-

All files Code/alter-client/src/shared/ui

-
- -
- 100% - Statements - 4/4 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 4/4 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
MobileLayout.tsx -
-
100%2/2100%2/2100%1/1100%2/2
Spinner.tsx -
-
100%2/2100%2/2100%1/1100%2/2
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx.html deleted file mode 100644 index ba1ab8f..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/manager OngoingPostingCard.tsx

-
- -
- 80% - Statements - 4/5 -
- - -
- 100% - Branches - 2/2 -
- - -
- 75% - Functions - 3/4 -
- - -
- 80% - Lines - 4/5 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -3x -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -  -  -3x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
// 진행 중인 공고 카드
- 
-export interface JobPostingItem {
-  id: string
-  dDay: string
-  title: string
-  wage: string
-  workHours: string
-  workDays: string
-}
- 
-interface OngoingPostingCardProps {
-  postings: JobPostingItem[]
-  onViewMore?: () => void
-  onPostingClick?: (posting: JobPostingItem) => void
-}
- 
-function PostingRow({
-  posting,
-  onClick,
-  isLast,
-}: {
-  posting: JobPostingItem
-  onClick?: () => void
-  isLast: boolean
-}) {
-  return (
-    <button
-      type="button"
-      onClick={onClick}
-      className={`w-full text-left py-4 hover:bg-gray-50/50 transition-colors ${!isLast ? 'border-b border-gray-100' : ''}`}
-    >
-      <div className="flex items-center gap-2 mb-1">
-        <span className="inline-flex items-center px-2 py-0.5 rounded-full bg-[#D0F2E5] text-gray-800 typography-bg">
-          {posting.dDay}
-        </span>
-        <span className="typography-body01-semibold text-gray-900 line-clamp-1">
-          {posting.title}
-        </span>
-      </div>
-      <p className="typography-body02-regular text-gray-900 mb-1">
-        {posting.wage}
-      </p>
-      <div className="flex flex-wrap gap-x-4 gap-y-0.5 typography-body03-regular text-gray-900">
-        <span className="flex items-center gap-1.5">{posting.workHours}</span>
-        <span className="flex items-center gap-1.5">{posting.workDays}</span>
-      </div>
-    </button>
-  )
-}
- 
-export function OngoingPostingCard({
-  postings,
-  onViewMore,
-  onPostingClick,
-}: OngoingPostingCardProps) {
-  return (
-    <div className="bg-white rounded-[16px] shadow-sm overflow-hidden flex flex-col py-4">
-      <div className="px-4">
-        {postings.map((posting, index) => (
-          <PostingRow
-            key={posting.id}
-            posting={posting}
-            onClick={() => onPostingClick?.(posting)}
-            isLast={index === postings.length - 1}
-          />
-        ))}
-      </div>
-      <div className="px-4 pb-4 pt-1">
-        <button
-          type="button"
-          onClick={onViewMore}
-          className="w-full py-3 rounded-[8px] border border-gray-200 bg-white typography-body02-semibold text-gray-900 hover:bg-gray-50 transition-colors"
-        >
-          더보기
-        </button>
-      </div>
-    </div>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx.html deleted file mode 100644 index 684dc08..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx.html +++ /dev/null @@ -1,436 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/manager SubstituteApprovalCard.tsx

-
- -
- 85.71% - Statements - 6/7 -
- - -
- 75% - Branches - 3/4 -
- - -
- 75% - Functions - 3/4 -
- - -
- 85.71% - Lines - 6/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -3x -  -3x -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -3x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
// 대타 승인 요청 카드
- 
-export type SubstituteRequestStatus = 'accepted' | 'pending'
- 
-export interface SubstituteRequestItem {
-  id: string
-  name: string
-  role: string
-  dateRange: string
-  status: SubstituteRequestStatus
-  imageUrl?: string | null
-}
- 
-interface SubstituteApprovalCardProps {
-  requests: SubstituteRequestItem[]
-  onViewMore?: () => void
-  onRequestClick?: (item: SubstituteRequestItem) => void
-}
- 
-const statusConfig: Record<
-  SubstituteRequestStatus,
-  { label: string; className: string }
-> = {
-  accepted: {
-    label: '수락됨',
-    className:
-      'bg-[#E8F5F1] border-[#3A9982]/30 text-[#3A9982] typography-body03-semibold',
-  },
-  pending: {
-    label: '대기중',
-    className:
-      'bg-amber-50 border-amber-300/50 text-amber-700 typography-body03-semibold',
-  },
-}
- 
-function RequestRow({
-  item,
-  onClick,
-  isLast,
-}: {
-  item: SubstituteRequestItem
-  onClick?: () => void
-  isLast: boolean
-}) {
-  const config = statusConfig[item.status]
- 
-  return (
-    <button
-      type="button"
-      onClick={onClick}
-      className={`w-full flex items-center gap-3 py-4 text-left hover:bg-gray-50/50 transition-colors ${!isLast ? 'border-b border-gray-100' : ''}`}
-    >
-      <div className="w-10 h-10 rounded-full overflow-hidden bg-gray-100 border border-gray-200 shrink-0 flex items-center justify-center">
-        {item.imageUrl ? (
-          <img
-            src={item.imageUrl}
-            alt={item.name}
-            className="w-full h-full object-cover"
-          />
-        ) : (
-          <div
-            className="w-full h-full bg-[repeating-conic-gradient(#e5e7eb_0%_25%,transparent_0%_50%)] [background-size:8px_8px]"
-            aria-hidden
-          />
-        )}
-      </div>
-      <div className="flex-1 min-w-0">
-        <div className="flex items-center gap-2 flex-wrap">
-          <span className="typography-body01-semibold text-gray-900">
-            {item.name}
-          </span>
-          <span className="inline-flex items-center px-2 py-0.5 rounded-md bg-[#E0F2E0] text-gray-900 typography-bg">
-            {item.role}
-          </span>
-        </div>
-        <p className="typography-body03-regular text-gray-500 mt-0.5">
-          {item.dateRange}
-        </p>
-      </div>
-      <span
-        className={`shrink-0 px-3 py-1.5 rounded-lg border ${config.className}`}
-      >
-        {config.label}
-      </span>
-    </button>
-  )
-}
- 
-export function SubstituteApprovalCard({
-  requests,
-  onViewMore,
-  onRequestClick,
-}: SubstituteApprovalCardProps) {
-  return (
-    <div className="bg-white rounded-[16px] shadow-sm overflow-hidden flex flex-col">
-      <div className="px-4">
-        {requests.map((item, index) => (
-          <RequestRow
-            key={item.id}
-            item={item}
-            onClick={() => onRequestClick?.(item)}
-            isLast={index === requests.length - 1}
-          />
-        ))}
-      </div>
-      <div className="px-4 pb-4 pt-1">
-        <button
-          type="button"
-          onClick={onViewMore}
-          className="w-full py-3 rounded-[8px] border border-gray-200 bg-white typography-body02-semibold text-gray-900 hover:bg-gray-50 transition-colors"
-        >
-          더보기
-        </button>
-      </div>
-    </div>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx.html deleted file mode 100644 index ddd916c..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/manager WorkerImageCard.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 3/3 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
// 사장님 홈 - 근무자 카드 (원형 이미지 + 이름 + 시간대)
- 
-interface WorkerImageCardProps {
-  name: string
-  timeRange: string
-  imageUrl?: string | null
-  className?: string
-}
- 
-export function WorkerImageCard({
-  name,
-  timeRange,
-  imageUrl,
-  className = '',
-}: WorkerImageCardProps) {
-  return (
-    <div
-      className={`flex flex-col items-center rounded-xl bg-white p-4 shadow-sm min-w-[140px] shrink-0 ${className}`}
-    >
-      <div className="w-20 h-20 rounded-full overflow-hidden bg-gray-100 border border-gray-200 flex items-center justify-center">
-        {imageUrl ? (
-          <img
-            src={imageUrl}
-            alt={name}
-            className="w-full h-full object-cover"
-          />
-        ) : (
-          <div
-            className="w-full h-full bg-[repeating-conic-gradient(#e5e7eb_0%_25%,transparent_0%_50%)] [background-size:12px_12px]"
-            aria-hidden
-          />
-        )}
-      </div>
-      <p className="typography-body02-semibold text-gray-900 mt-3 text-center">
-        {name}
-      </p>
-      <p className="typography-body03-regular text-gray-500 mt-1 text-center">
-        {timeRange}
-      </p>
-    </div>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx.html deleted file mode 100644 index 024dc8d..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/manager WorkerListItem.tsx

-
- -
- 100% - Statements - 3/3 -
- - -
- 50% - Branches - 1/2 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 3/3 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
// 근무자 목록
- 
-export type WorkerRole = '매니저' | '알바'
- 
-export interface WorkerListItemProps {
-  name: string
-  role: WorkerRole
-  nextWorkDate: string
-  imageUrl?: string | null
-  onOptions?: () => void
-}
- 
-export interface WorkerListItemData extends WorkerListItemProps {
-  id: string
-}
- 
-function EllipsisIcon() {
-  return (
-    <svg
-      width="24"
-      height="24"
-      viewBox="0 0 24 24"
-      fill="none"
-      xmlns="http://www.w3.org/2000/svg"
-      className="text-gray-600"
-      aria-hidden
-    >
-      <circle cx="12" cy="6" r="1.5" fill="currentColor" />
-      <circle cx="12" cy="12" r="1.5" fill="currentColor" />
-      <circle cx="12" cy="18" r="1.5" fill="currentColor" />
-    </svg>
-  )
-}
- 
-export function WorkerListItem({
-  name,
-  role,
-  nextWorkDate,
-  imageUrl,
-  onOptions,
-}: WorkerListItemProps) {
-  return (
-    <div className="flex items-center gap-3 py-3 bg-white">
-      <div className="w-12 h-12 rounded-full overflow-hidden bg-gray-100 border border-gray-200 shrink-0 flex items-center justify-center">
-        {imageUrl ? (
-          <img
-            src={imageUrl}
-            alt={name}
-            className="w-full h-full object-cover"
-          />
-        ) : (
-          <div
-            className="w-full h-full bg-[repeating-conic-gradient(#e5e7eb_0%_25%,transparent_0%_50%)] [background-size:8px_8px]"
-            aria-hidden
-          />
-        )}
-      </div>
-      <div className="flex-1 min-w-0">
-        <div className="flex items-center gap-2 flex-wrap">
-          <span className="typography-body01-semibold text-gray-900">
-            {name}
-          </span>
-          <span className="inline-flex items-center px-2 py-0.5 rounded-md bg-[#E0F2E0] text-gray-900 typography-bg">
-            {role}
-          </span>
-        </div>
-        <p className="typography-body03-regular text-gray-500 mt-0.5">
-          다음 근무 예정일 {nextWorkDate}
-        </p>
-      </div>
-      <button
-        type="button"
-        onClick={onOptions}
-        className="p-1 shrink-0 -m-1 rounded cursor-pointer"
-        aria-label="더보기"
-      >
-        <EllipsisIcon />
-      </button>
-    </div>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx.html deleted file mode 100644 index 6855d17..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/manager/alba-find Albabox.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 7/7 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -3x -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import BookmarkIcon from '@/assets/icons/alba/Bookmark.svg?react'
- 
-export type AlbaboxProps = {
-  storeName: string
-  title: string
-  wageAmount: string
-  timeRange: string
-  workDays: string
-  distance: string
-  postedAgo: string
-  saved: boolean
-  likeCount?: string
-  onBookmarkClick?: () => void
-}
- 
-export function Albabox({
-  storeName,
-  title,
-  wageAmount,
-  timeRange,
-  workDays,
-  distance,
-  postedAgo,
-  saved,
-  likeCount,
-  onBookmarkClick,
-}: AlbaboxProps) {
-  return (
-    <article className="flex flex-col gap-3 rounded-2xl border border-line-2 bg-white py-4">
-      <div className="flex items-start justify-between gap-3 px-4">
-        <p className="typography-body02-semibold text-text-100">{storeName}</p>
-        <button
-          type="button"
-          onClick={onBookmarkClick}
-          aria-label={saved ? '북마크 해제' : '북마크'}
-          className={`shrink-0 p-1 -m-1 rounded-md transition-colors ${
-            saved
-              ? 'text-main [&_path]:fill-main [&_path]:stroke-main'
-              : 'text-text-50 hover:text-text-70'
-          }`}
-        >
-          <BookmarkIcon className="h-5 w-4" aria-hidden />
-        </button>
-      </div>
- 
-      <h3 className="typography-body01-semibold text-text-100 line-clamp-2 px-4">
-        {title}
-      </h3>
- 
-      <p className="typography-headline03 text-text-100 px-4">
-        시급 {wageAmount}원
-      </p>
- 
-      <div className="flex flex-wrap gap-x-3 gap-y-1 typography-body03-regular text-text-70 px-4">
-        <span>{timeRange}</span>
-        <span>{workDays}</span>
-        <span>{distance}</span>
-      </div>
- 
-      <div className="flex items-center justify-between gap-2 border-t border-line-2 px-4 pt-3 typography-body03-regular text-text-50">
-        <span>{postedAgo}</span>
-        {likeCount != null && likeCount !== '' && (
-          <span className="text-text-70">좋아요 {likeCount}</span>
-        )}
-      </div>
-    </article>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/alba-find/index.html b/coverage/Code/alter-client/src/shared/ui/manager/alba-find/index.html deleted file mode 100644 index 318b4de..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/alba-find/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/alba-find - - - - - - - - - -
-
-

All files Code/alter-client/src/shared/ui/manager/alba-find

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 7/7 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
Albabox.tsx -
-
100%2/2100%7/7100%1/1100%2/2
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/index.html b/coverage/Code/alter-client/src/shared/ui/manager/index.html deleted file mode 100644 index e89cf45..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/index.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager - - - - - - - - - -
-
-

All files Code/alter-client/src/shared/ui/manager

-
- -
- 88.23% - Statements - 15/17 -
- - -
- 81.81% - Branches - 9/11 -
- - -
- 81.81% - Functions - 9/11 -
- - -
- 88.23% - Lines - 15/17 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
OngoingPostingCard.tsx -
-
80%4/5100%2/275%3/480%4/5
SubstituteApprovalCard.tsx -
-
85.71%6/775%3/475%3/485.71%6/7
WorkerImageCard.tsx -
-
100%2/2100%3/3100%1/1100%2/2
WorkerListItem.tsx -
-
100%3/350%1/2100%2/2100%3/3
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx.html deleted file mode 100644 index cca9840..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/manager/social SocialCategory.tsx

-
- -
- 100% - Statements - 2/2 -
- - -
- 100% - Branches - 3/3 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 2/2 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20  -  -  -  -  -  -2x -1x -  -  -  -  -  -  -  -  -  -  -  - 
interface SocialCategoryProps {
-  label: string
-  active?: boolean
-}
- 
-export function SocialCategory({ label, active = false }: SocialCategoryProps) {
-  return (
-    <button
-      type="button"
-      className={`h-[30px] rounded-full px-4 typography-body03-semibold transition-colors ${
-        active
-          ? 'bg-main text-text-100'
-          : 'bg-[#e9e9e9] text-text-90 hover:bg-[#dfdfdf]'
-      }`}
-    >
-      {label}
-    </button>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx.html b/coverage/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx.html deleted file mode 100644 index 8b05986..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx.html +++ /dev/null @@ -1,547 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/social/SocialList.tsx - - - - - - - - - -
-
-

All files / Code/alter-client/src/shared/ui/manager/social SocialList.tsx

-
- -
- 14.28% - Statements - 5/35 -
- - -
- 21.42% - Branches - 3/14 -
- - -
- 11.11% - Functions - 1/9 -
- - -
- 15.62% - Lines - 5/32 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -1551x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -1x -  -  -  -  -  -  -  -3x -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { useRef, useState, type PointerEventHandler } from 'react'
- 
-interface SocialProfileProps {
-  name: string
-  message: string
-  timeAgo: string
-  unread?: boolean
-}
- 
-interface SocialActionProps {
-  onRead?: () => void
-  onDelete?: () => void
-}
- 
-interface SwipeableSocialItemProps extends SocialProfileProps {
-  onRead?: () => void
-  onDelete?: () => void
-}
- 
-const ACTION_WIDTH = 160
-const OPEN_THRESHOLD = ACTION_WIDTH * 0.45
- 
-export function SocialList({
-  name,
-  message,
-  timeAgo,
-  unread = false,
-}: SocialProfileProps) {
-  return (
-    <div className="flex items-center gap-3 border-b border-line-1 py-3">
-      <div className="h-12 w-12 shrink-0 rounded-full bg-[#efefef]" />
- 
-      <div className="w-full flex flex-col gap-1">
-        <div className="flex justify-between ">
-          <div className="typography-body01-semibold text-text-100">{name}</div>
-          <div className="typography-body03-regular text-text-70">
-            {timeAgo}
-          </div>
-        </div>
- 
-        <div className="flex justify-between">
-          <div className=" typography-body02-semibold text-text-100">
-            {message}
-          </div>
-          <div
-            className={`h-3 w-3 rounded-full ${unread ? 'bg-error' : 'bg-transparent'}`}
-          />
-        </div>
-      </div>
-    </div>
-  )
-}
- 
-export function SwipeableSocialItem({
-  name,
-  message,
-  timeAgo,
-  unread = false,
-  onRead,
-  onDelete,
-}: SwipeableSocialItemProps) {
-  const [translateX, setTranslateX] = useState(0)
-  const [isDragging, setIsDragging] = useState(false)
- 
-  const pointerIdRef = useRef<number | null>(null)
-  const startXRef = useRef(0)
-  const startTranslateXRef = useRef(0)
- 
-  const handlePointerDown: PointerEventHandler<HTMLDivElement> = event => {
-    pointerIdRef.current = event.pointerId
-    startXRef.current = event.clientX
-    startTranslateXRef.current = translateX
-    setIsDragging(true)
-    event.currentTarget.setPointerCapture(event.pointerId)
-  }
- 
-  const handlePointerMove: PointerEventHandler<HTMLDivElement> = event => {
-    if (!isDragging || pointerIdRef.current !== event.pointerId) return
- 
-    const deltaX = event.clientX - startXRef.current
-    const nextTranslateX = Math.min(
-      0,
-      Math.max(-ACTION_WIDTH, startTranslateXRef.current + deltaX)
-    )
-    setTranslateX(nextTranslateX)
-  }
- 
-  const finishDrag = (pointerId: number) => {
-    if (pointerIdRef.current !== pointerId) return
- 
-    pointerIdRef.current = null
-    setIsDragging(false)
-    setTranslateX(prev => (Math.abs(prev) > OPEN_THRESHOLD ? -ACTION_WIDTH : 0))
-  }
- 
-  const handlePointerUp: PointerEventHandler<HTMLDivElement> = event => {
-    finishDrag(event.pointerId)
-  }
- 
-  const handlePointerCancel: PointerEventHandler<HTMLDivElement> = event => {
-    finishDrag(event.pointerId)
-  }
- 
-  return (
-    <div className="relative  overflow-hidden">
-      <div className="absolute right-0 top-0 h-full flex items-center">
-        <SocialAction onRead={onRead} onDelete={onDelete} />
-      </div>
- 
-      <div
-        className="bg-white"
-        onPointerDown={handlePointerDown}
-        onPointerMove={handlePointerMove}
-        onPointerUp={handlePointerUp}
-        onPointerCancel={handlePointerCancel}
-        style={{
-          touchAction: 'pan-y',
-          transform: `translateX(${translateX}px)`,
-          transition: isDragging ? 'none' : 'transform 180ms ease-out',
-        }}
-      >
-        <div className="px-4">
-          <SocialList
-            name={name}
-            message={message}
-            timeAgo={timeAgo}
-            unread={unread}
-          />
-        </div>
-      </div>
-    </div>
-  )
-}
- 
-export function SocialAction({ onRead, onDelete }: SocialActionProps) {
-  return (
-    <div className="flex h-[64px] w-[160px] shrink-0 overflow-hidden rounded-[2px]">
-      <button
-        type="button"
-        onClick={onRead}
-        className="w-1/2 bg-[#e3e3e3] typography-body01-regular text-text-90"
-      >
-        읽음
-      </button>
-      <button
-        type="button"
-        onClick={onDelete}
-        className="w-1/2 bg-error typography-body01-regular text-white"
-      >
-        삭제
-      </button>
-    </div>
-  )
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/alter-client/src/shared/ui/manager/social/index.html b/coverage/Code/alter-client/src/shared/ui/manager/social/index.html deleted file mode 100644 index 36a9da4..0000000 --- a/coverage/Code/alter-client/src/shared/ui/manager/social/index.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - Code coverage report for Code/alter-client/src/shared/ui/manager/social - - - - - - - - - -
-
-

All files Code/alter-client/src/shared/ui/manager/social

-
- -
- 18.91% - Statements - 7/37 -
- - -
- 35.29% - Branches - 6/17 -
- - -
- 20% - Functions - 2/10 -
- - -
- 20.58% - Lines - 7/34 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
SocialCategory.tsx -
-
100%2/2100%3/3100%1/1100%2/2
SocialList.tsx -
-
14.28%5/3521.42%3/1411.11%1/915.62%5/32
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/Code/index.html b/coverage/Code/index.html deleted file mode 100644 index b81b263..0000000 --- a/coverage/Code/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for Code - - - - - - - - - -
-
-

All files Code

-
- -
- 0% - Statements - 0/0 -
- - -
- 0% - Branches - 0/0 -
- - -
- 0% - Functions - 0/0 -
- - -
- 0% - Lines - 0/0 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
alter-client -
-
0%0/00%0/00%0/00%0/0
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/base.css b/coverage/base.css deleted file mode 100644 index f418035..0000000 --- a/coverage/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/coverage/block-navigation.js b/coverage/block-navigation.js deleted file mode 100644 index 530d1ed..0000000 --- a/coverage/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selector that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/coverage/clover.xml b/coverage/clover.xml deleted file mode 100644 index 523f309..0000000 --- a/coverage/clover.xml +++ /dev/null @@ -1,520 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json deleted file mode 100644 index 96381f3..0000000 --- a/coverage/coverage-final.json +++ /dev/null @@ -1,43 +0,0 @@ -{"/Users/hyeon/Code/alter-client": {"path":"/Users/hyeon/Code/alter-client","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} -,"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/StoreWorkerListItem.tsx","statementMap":{"0":{"start":{"line":33,"column":12},"end":{"line":33,"column":13}},"1":{"start":{"line":26,"column":2},"end":{"line":61,"column":null}}},"fnMap":{"0":{"name":"StoreWorkerListItem","decl":{"start":{"line":18,"column":16},"end":{"line":18,"column":36}},"loc":{"start":{"line":25,"column":29},"end":{"line":63,"column":null}},"line":25}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":2},"end":{"line":24,"column":null}},"type":"default-arg","locations":[{"start":{"line":24,"column":14},"end":{"line":24,"column":null}}],"line":24},"1":{"loc":{"start":{"line":32,"column":11},"end":{"line":38,"column":null}},"type":"cond-expr","locations":[{"start":{"line":33,"column":12},"end":{"line":37,"column":null}},{"start":{"line":38,"column":14},"end":{"line":38,"column":null}}],"line":32}},"s":{"0":1,"1":2},"f":{"0":2},"b":{"0":[2],"1":[0,2]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:33:12:33:13":0,"f:18:16:18:36":0,"b:24:14:24:Infinity":0,"s:26:2:61:Infinity":1,"b:33:12:37:Infinity:38:14:38:Infinity":1}}} -,"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/TodayWorkerList.tsx","statementMap":{"0":{"start":{"line":18,"column":10},"end":{"line":18,"column":11}},"1":{"start":{"line":14,"column":2},"end":{"line":31,"column":null}},"2":{"start":{"line":39,"column":2},"end":{"line":52,"column":null}},"3":{"start":{"line":48,"column":12},"end":{"line":48,"column":null}}},"fnMap":{"0":{"name":"TodayWorkerCard","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":25}},"loc":{"start":{"line":13,"column":66},"end":{"line":33,"column":null}},"line":13},"1":{"name":"TodayWorkerList","decl":{"start":{"line":35,"column":16},"end":{"line":35,"column":32}},"loc":{"start":{"line":38,"column":25},"end":{"line":54,"column":null}},"line":38},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":23},"end":{"line":47,"column":null}},"loc":{"start":{"line":48,"column":12},"end":{"line":48,"column":null}},"line":48}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":9},"end":{"line":23,"column":null}},"type":"cond-expr","locations":[{"start":{"line":18,"column":10},"end":{"line":22,"column":null}},{"start":{"line":23,"column":12},"end":{"line":23,"column":null}}],"line":17},"1":{"loc":{"start":{"line":37,"column":2},"end":{"line":37,"column":null}},"type":"default-arg","locations":[{"start":{"line":37,"column":14},"end":{"line":37,"column":null}}],"line":37}},"s":{"0":1,"1":3,"2":1,"3":3},"f":{"0":3,"1":1,"2":3},"b":{"0":[0,3],"1":[1]},"meta":{"lastBranch":2,"lastFunction":3,"lastStatement":4,"seen":{"s:18:10:18:11":0,"f:13:9:13:25":0,"s:14:2:31:Infinity":1,"b:18:10:22:Infinity:23:12:23:Infinity":0,"f:35:16:35:32":1,"b:37:14:37:Infinity":1,"s:39:2:52:Infinity":2,"f:47:23:47:Infinity":2,"s:48:12:48:Infinity":3}}} -,"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeCard.tsx","statementMap":{"0":{"start":{"line":43,"column":10},"end":{"line":43,"column":11}},"1":{"start":{"line":34,"column":2},"end":{"line":78,"column":null}},"2":{"start":{"line":36,"column":21},"end":{"line":36,"column":null}},"3":{"start":{"line":70,"column":10},"end":{"line":70,"column":null}},"4":{"start":{"line":71,"column":10},"end":{"line":71,"column":null}}},"fnMap":{"0":{"name":"WorkspaceChangeCard","decl":{"start":{"line":26,"column":16},"end":{"line":26,"column":36}},"loc":{"start":{"line":33,"column":29},"end":{"line":80,"column":null}},"line":33},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":15},"end":{"line":36,"column":21}},"loc":{"start":{"line":36,"column":21},"end":{"line":36,"column":null}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":17},"end":{"line":69,"column":26}},"loc":{"start":{"line":69,"column":26},"end":{"line":72,"column":null}},"line":69}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":null}},"type":"default-arg","locations":[{"start":{"line":28,"column":15},"end":{"line":28,"column":null}}],"line":28},"1":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":null}},"type":"default-arg","locations":[{"start":{"line":29,"column":18},"end":{"line":29,"column":null}}],"line":29},"2":{"loc":{"start":{"line":30,"column":2},"end":{"line":30,"column":null}},"type":"default-arg","locations":[{"start":{"line":30,"column":14},"end":{"line":30,"column":null}}],"line":30},"3":{"loc":{"start":{"line":38,"column":8},"end":{"line":38,"column":null}},"type":"cond-expr","locations":[{"start":{"line":38,"column":21},"end":{"line":38,"column":54}},{"start":{"line":38,"column":54},"end":{"line":38,"column":null}}],"line":38},"4":{"loc":{"start":{"line":39,"column":10},"end":{"line":39,"column":41}},"type":"cond-expr","locations":[{"start":{"line":39,"column":20},"end":{"line":39,"column":39}},{"start":{"line":39,"column":39},"end":{"line":39,"column":41}}],"line":39},"5":{"loc":{"start":{"line":55,"column":14},"end":{"line":55,"column":null}},"type":"cond-expr","locations":[{"start":{"line":55,"column":27},"end":{"line":55,"column":38}},{"start":{"line":55,"column":38},"end":{"line":55,"column":null}}],"line":55}},"s":{"0":1,"1":2,"2":0,"3":0,"4":0},"f":{"0":2,"1":0,"2":0},"b":{"0":[2],"1":[2],"2":[2],"3":[1,1],"4":[0,2],"5":[1,1]},"meta":{"lastBranch":6,"lastFunction":3,"lastStatement":5,"seen":{"s:43:10:43:11":0,"f:26:16:26:36":0,"b:28:15:28:Infinity":0,"b:29:18:29:Infinity":1,"b:30:14:30:Infinity":2,"s:34:2:78:Infinity":1,"f:36:15:36:21":1,"s:36:21:36:Infinity":2,"b:38:21:38:54:38:54:38:Infinity":3,"b:39:20:39:39:39:39:39:41":4,"b:55:27:55:38:55:38:55:Infinity":5,"f:69:17:69:26":2,"s:70:10:70:Infinity":3,"s:71:10:71:Infinity":4}}} -,"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/manager/ui/WorkspaceChangeList.tsx","statementMap":{"0":{"start":{"line":26,"column":8},"end":{"line":26,"column":9}},"1":{"start":{"line":23,"column":2},"end":{"line":35,"column":null}},"2":{"start":{"line":26,"column":8},"end":{"line":33,"column":null}}},"fnMap":{"0":{"name":"WorkspaceChangeList","decl":{"start":{"line":15,"column":16},"end":{"line":15,"column":36}},"loc":{"start":{"line":22,"column":29},"end":{"line":37,"column":null}},"line":22},"1":{"name":"(anonymous_1)","decl":{"start":{"line":25,"column":22},"end":{"line":25,"column":null}},"loc":{"start":{"line":26,"column":8},"end":{"line":33,"column":null}},"line":26}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":18},"end":{"line":18,"column":null}}],"line":18},"1":{"loc":{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},"type":"default-arg","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":null}}],"line":19}},"s":{"0":1,"1":1,"2":2},"f":{"0":1,"1":2},"b":{"0":[1],"1":[1]},"meta":{"lastBranch":2,"lastFunction":2,"lastStatement":3,"seen":{"s:26:8:26:9":0,"f:15:16:15:36":0,"b:18:18:18:Infinity":0,"b:19:14:19:Infinity":1,"s:23:2:35:Infinity":1,"f:25:22:25:Infinity":1,"s:26:8:33:Infinity":2}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/constants/calendar.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/constants/calendar.ts","statementMap":{"0":{"start":{"line":1,"column":30},"end":{"line":9,"column":null}},"1":{"start":{"line":11,"column":31},"end":{"line":11,"column":null}},"2":{"start":{"line":12,"column":34},"end":{"line":12,"column":null}},"3":{"start":{"line":14,"column":37},"end":{"line":14,"column":null}},"4":{"start":{"line":15,"column":41},"end":{"line":15,"column":null}},"5":{"start":{"line":16,"column":39},"end":{"line":16,"column":null}},"6":{"start":{"line":18,"column":62},"end":{"line":23,"column":null}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":7,"seen":{"s:1:30:9:Infinity":0,"s:11:31:11:Infinity":1,"s:12:34:12:Infinity":2,"s:14:37:14:Infinity":3,"s:15:41:15:Infinity":4,"s:16:39:16:Infinity":5,"s:18:62:23:Infinity":6}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useDailyCalendarViewModel.ts","statementMap":{"0":{"start":{"line":2,"column":24},"end":{"line":2,"column":null}},"1":{"start":{"line":16,"column":2},"end":{"line":16,"column":null}},"2":{"start":{"line":23,"column":2},"end":{"line":23,"column":null}},"3":{"start":{"line":37,"column":2},"end":{"line":64,"column":null}},"4":{"start":{"line":38,"column":22},"end":{"line":38,"column":null}},"5":{"start":{"line":39,"column":20},"end":{"line":39,"column":null}},"6":{"start":{"line":41,"column":10},"end":{"line":42,"column":null}},"7":{"start":{"line":43,"column":10},"end":{"line":44,"column":null}},"8":{"start":{"line":46,"column":25},"end":{"line":46,"column":null}},"9":{"start":{"line":47,"column":23},"end":{"line":47,"column":null}},"10":{"start":{"line":48,"column":28},"end":{"line":48,"column":null}},"11":{"start":{"line":50,"column":17},"end":{"line":50,"column":null}},"12":{"start":{"line":51,"column":19},"end":{"line":54,"column":null}},"13":{"start":{"line":56,"column":4},"end":{"line":63,"column":null}},"14":{"start":{"line":72,"column":2},"end":{"line":102,"column":null}},"15":{"start":{"line":73,"column":27},"end":{"line":73,"column":null}},"16":{"start":{"line":74,"column":30},"end":{"line":74,"column":null}},"17":{"start":{"line":75,"column":28},"end":{"line":75,"column":null}},"18":{"start":{"line":76,"column":10},"end":{"line":76,"column":null}},"19":{"start":{"line":78,"column":26},"end":{"line":82,"column":null}},"20":{"start":{"line":79,"column":20},"end":{"line":79,"column":null}},"21":{"start":{"line":80,"column":12},"end":{"line":80,"column":null}},"22":{"start":{"line":81,"column":6},"end":{"line":81,"column":null}},"23":{"start":{"line":84,"column":24},"end":{"line":89,"column":null}},"24":{"start":{"line":91,"column":4},"end":{"line":101,"column":null}}},"fnMap":{"0":{"name":"getStatusStyle","decl":{"start":{"line":15,"column":9},"end":{"line":15,"column":24}},"loc":{"start":{"line":15,"column":40},"end":{"line":17,"column":null}},"line":15},"1":{"name":"sortByStartTime","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":null}},"loc":{"start":{"line":22,"column":2},"end":{"line":24,"column":null}},"line":22},"2":{"name":"buildDailyEventBlocks","decl":{"start":{"line":26,"column":9},"end":{"line":26,"column":31}},"loc":{"start":{"line":36,"column":3},"end":{"line":65,"column":null}},"line":36},"3":{"name":"(anonymous_3)","decl":{"start":{"line":37,"column":47},"end":{"line":37,"column":56}},"loc":{"start":{"line":37,"column":56},"end":{"line":64,"column":3}},"line":37},"4":{"name":"useDailyCalendarViewModel","decl":{"start":{"line":67,"column":16},"end":{"line":67,"column":42}},"loc":{"start":{"line":71,"column":51},"end":{"line":103,"column":null}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":72,"column":17},"end":{"line":72,"column":23}},"loc":{"start":{"line":72,"column":23},"end":{"line":102,"column":5}},"line":72},"6":{"name":"(anonymous_6)","decl":{"start":{"line":78,"column":52},"end":{"line":78,"column":53}},"loc":{"start":{"line":78,"column":64},"end":{"line":82,"column":5}},"line":78}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":9},"end":{"line":16,"column":null}},"type":"binary-expr","locations":[{"start":{"line":16,"column":9},"end":{"line":16,"column":43}},{"start":{"line":16,"column":43},"end":{"line":16,"column":null}}],"line":16},"1":{"loc":{"start":{"line":85,"column":14},"end":{"line":85,"column":null}},"type":"binary-expr","locations":[{"start":{"line":85,"column":14},"end":{"line":85,"column":30}},{"start":{"line":85,"column":30},"end":{"line":85,"column":null}}],"line":85},"2":{"loc":{"start":{"line":92,"column":13},"end":{"line":92,"column":null}},"type":"binary-expr","locations":[{"start":{"line":92,"column":13},"end":{"line":92,"column":30}},{"start":{"line":92,"column":30},"end":{"line":92,"column":null}}],"line":92},"3":{"loc":{"start":{"line":94,"column":33},"end":{"line":94,"column":66}},"type":"binary-expr","locations":[{"start":{"line":94,"column":33},"end":{"line":94,"column":65}},{"start":{"line":94,"column":65},"end":{"line":94,"column":66}}],"line":94}},"s":{"0":1,"1":5,"2":6,"3":2,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5,"10":5,"11":5,"12":5,"13":5,"14":2,"15":2,"16":2,"17":2,"18":2,"19":2,"20":14,"21":14,"22":14,"23":2,"24":2},"f":{"0":5,"1":6,"2":2,"3":5,"4":2,"5":2,"6":14},"b":{"0":[5,0],"1":[2,0],"2":[2,1],"3":[2,0]},"meta":{"lastBranch":4,"lastFunction":7,"lastStatement":25,"seen":{"s:2:24:2:Infinity":0,"f:15:9:15:24":0,"s:16:2:16:Infinity":1,"b:16:9:16:43:16:43:16:Infinity":0,"f:19:9:19:Infinity":1,"s:23:2:23:Infinity":2,"f:26:9:26:31":2,"s:37:2:64:Infinity":3,"f:37:47:37:56":3,"s:38:22:38:Infinity":4,"s:39:20:39:Infinity":5,"s:41:10:42:Infinity":6,"s:43:10:44:Infinity":7,"s:46:25:46:Infinity":8,"s:47:23:47:Infinity":9,"s:48:28:48:Infinity":10,"s:50:17:50:Infinity":11,"s:51:19:54:Infinity":12,"s:56:4:63:Infinity":13,"f:67:16:67:42":4,"s:72:2:102:Infinity":14,"f:72:17:72:23":5,"s:73:27:73:Infinity":15,"s:74:30:74:Infinity":16,"s:75:28:75:Infinity":17,"s:76:10:76:Infinity":18,"s:78:26:82:Infinity":19,"f:78:52:78:53":6,"s:79:20:79:Infinity":20,"s:80:12:80:Infinity":21,"s:81:6:81:Infinity":22,"s:84:24:89:Infinity":23,"b:85:14:85:30:85:30:85:Infinity":1,"s:91:4:101:Infinity":24,"b:92:13:92:30:92:30:92:Infinity":2,"b:94:33:94:65:94:65:94:66":3}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts","statementMap":{"0":{"start":{"line":12,"column":24},"end":{"line":12,"column":null}},"1":{"start":{"line":28,"column":21},"end":{"line":28,"column":null}},"2":{"start":{"line":29,"column":19},"end":{"line":29,"column":null}},"3":{"start":{"line":30,"column":24},"end":{"line":30,"column":null}},"4":{"start":{"line":31,"column":22},"end":{"line":31,"column":null}},"5":{"start":{"line":33,"column":2},"end":{"line":40,"column":null}},"6":{"start":{"line":34,"column":13},"end":{"line":39,"column":null}},"7":{"start":{"line":46,"column":2},"end":{"line":46,"column":null}},"8":{"start":{"line":46,"column":27},"end":{"line":46,"column":null}},"9":{"start":{"line":47,"column":17},"end":{"line":47,"column":null}},"10":{"start":{"line":47,"column":44},"end":{"line":47,"column":55}},"11":{"start":{"line":48,"column":35},"end":{"line":48,"column":null}},"12":{"start":{"line":49,"column":14},"end":{"line":49,"column":null}},"13":{"start":{"line":51,"column":2},"end":{"line":60,"column":null}},"14":{"start":{"line":51,"column":17},"end":{"line":51,"column":20}},"15":{"start":{"line":52,"column":33},"end":{"line":52,"column":null}},"16":{"start":{"line":53,"column":4},"end":{"line":56,"column":null}},"17":{"start":{"line":54,"column":6},"end":{"line":54,"column":null}},"18":{"start":{"line":55,"column":6},"end":{"line":55,"column":null}},"19":{"start":{"line":57,"column":4},"end":{"line":57,"column":null}},"20":{"start":{"line":58,"column":4},"end":{"line":58,"column":null}},"21":{"start":{"line":59,"column":4},"end":{"line":59,"column":null}},"22":{"start":{"line":62,"column":2},"end":{"line":62,"column":null}},"23":{"start":{"line":63,"column":2},"end":{"line":63,"column":null}},"24":{"start":{"line":67,"column":54},"end":{"line":67,"column":null}},"25":{"start":{"line":69,"column":3},"end":{"line":99,"column":null}},"26":{"start":{"line":70,"column":18},"end":{"line":70,"column":null}},"27":{"start":{"line":71,"column":16},"end":{"line":71,"column":null}},"28":{"start":{"line":73,"column":4},"end":{"line":79,"column":null}},"29":{"start":{"line":78,"column":6},"end":{"line":78,"column":null}},"30":{"start":{"line":81,"column":17},"end":{"line":81,"column":null}},"31":{"start":{"line":82,"column":20},"end":{"line":82,"column":null}},"32":{"start":{"line":84,"column":4},"end":{"line":98,"column":null}},"33":{"start":{"line":85,"column":22},"end":{"line":85,"column":null}},"34":{"start":{"line":86,"column":24},"end":{"line":86,"column":null}},"35":{"start":{"line":87,"column":22},"end":{"line":87,"column":null}},"36":{"start":{"line":89,"column":6},"end":{"line":95,"column":null}},"37":{"start":{"line":90,"column":23},"end":{"line":90,"column":null}},"38":{"start":{"line":91,"column":14},"end":{"line":91,"column":null}},"39":{"start":{"line":92,"column":14},"end":{"line":92,"column":null}},"40":{"start":{"line":93,"column":8},"end":{"line":93,"column":null}},"41":{"start":{"line":94,"column":8},"end":{"line":94,"column":null}},"42":{"start":{"line":97,"column":6},"end":{"line":97,"column":null}},"43":{"start":{"line":101,"column":2},"end":{"line":110,"column":null}},"44":{"start":{"line":103,"column":30},"end":{"line":103,"column":null}},"45":{"start":{"line":104,"column":23},"end":{"line":104,"column":null}},"46":{"start":{"line":105,"column":26},"end":{"line":105,"column":null}},"47":{"start":{"line":106,"column":6},"end":{"line":106,"column":null}},"48":{"start":{"line":107,"column":6},"end":{"line":107,"column":null}},"49":{"start":{"line":119,"column":16},"end":{"line":119,"column":null}},"50":{"start":{"line":119,"column":30},"end":{"line":119,"column":57}},"51":{"start":{"line":120,"column":22},"end":{"line":120,"column":null}},"52":{"start":{"line":122,"column":27},"end":{"line":122,"column":null}},"53":{"start":{"line":122,"column":41},"end":{"line":122,"column":68}},"54":{"start":{"line":124,"column":32},"end":{"line":128,"column":null}},"55":{"start":{"line":130,"column":2},"end":{"line":138,"column":null}}},"fnMap":{"0":{"name":"getMonthlyCells","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":25}},"loc":{"start":{"line":27,"column":61},"end":{"line":41,"column":null}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":34,"column":4},"end":{"line":34,"column":13}},"loc":{"start":{"line":34,"column":13},"end":{"line":39,"column":null}},"line":34},"2":{"name":"mergeMinuteRanges","decl":{"start":{"line":45,"column":9},"end":{"line":45,"column":27}},"loc":{"start":{"line":45,"column":50},"end":{"line":64,"column":null}},"line":45},"3":{"name":"(anonymous_3)","decl":{"start":{"line":47,"column":34},"end":{"line":47,"column":35}},"loc":{"start":{"line":47,"column":44},"end":{"line":47,"column":55}},"line":47},"4":{"name":"getDayMetricsByDate","decl":{"start":{"line":66,"column":9},"end":{"line":66,"column":29}},"loc":{"start":{"line":66,"column":60},"end":{"line":111,"column":null}},"line":66},"5":{"name":"(anonymous_5)","decl":{"start":{"line":69,"column":32},"end":{"line":69,"column":41}},"loc":{"start":{"line":69,"column":41},"end":{"line":99,"column":3}},"line":69},"6":{"name":"(anonymous_6)","decl":{"start":{"line":102,"column":4},"end":{"line":102,"column":5}},"loc":{"start":{"line":102,"column":32},"end":{"line":108,"column":null}},"line":102},"7":{"name":"useMonthlyCalendarViewModel","decl":{"start":{"line":113,"column":16},"end":{"line":113,"column":44}},"loc":{"start":{"line":118,"column":55},"end":{"line":139,"column":null}},"line":118},"8":{"name":"(anonymous_8)","decl":{"start":{"line":119,"column":24},"end":{"line":119,"column":30}},"loc":{"start":{"line":119,"column":30},"end":{"line":119,"column":57}},"line":119},"9":{"name":"(anonymous_9)","decl":{"start":{"line":122,"column":35},"end":{"line":122,"column":41}},"loc":{"start":{"line":122,"column":41},"end":{"line":122,"column":68}},"line":122}},"branchMap":{"0":{"loc":{"start":{"line":46,"column":2},"end":{"line":46,"column":null}},"type":"if","locations":[{"start":{"line":46,"column":2},"end":{"line":46,"column":null}},{"start":{},"end":{}}],"line":46},"1":{"loc":{"start":{"line":53,"column":4},"end":{"line":56,"column":null}},"type":"if","locations":[{"start":{"line":53,"column":4},"end":{"line":56,"column":null}},{"start":{},"end":{}}],"line":53},"2":{"loc":{"start":{"line":69,"column":4},"end":{"line":69,"column":24}},"type":"binary-expr","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":20}},{"start":{"line":69,"column":20},"end":{"line":69,"column":24}}],"line":69},"3":{"loc":{"start":{"line":73,"column":4},"end":{"line":79,"column":null}},"type":"if","locations":[{"start":{"line":73,"column":4},"end":{"line":79,"column":null}},{"start":{},"end":{}}],"line":73},"4":{"loc":{"start":{"line":74,"column":6},"end":{"line":76,"column":null}},"type":"binary-expr","locations":[{"start":{"line":74,"column":6},"end":{"line":74,"column":null}},{"start":{"line":75,"column":6},"end":{"line":75,"column":null}},{"start":{"line":76,"column":6},"end":{"line":76,"column":null}}],"line":74},"5":{"loc":{"start":{"line":89,"column":6},"end":{"line":95,"column":null}},"type":"if","locations":[{"start":{"line":89,"column":6},"end":{"line":95,"column":null}},{"start":{},"end":{}}],"line":89},"6":{"loc":{"start":{"line":93,"column":31},"end":{"line":93,"column":null}},"type":"binary-expr","locations":[{"start":{"line":93,"column":31},"end":{"line":93,"column":55}},{"start":{"line":93,"column":55},"end":{"line":93,"column":null}}],"line":93},"7":{"loc":{"start":{"line":120,"column":22},"end":{"line":120,"column":null}},"type":"binary-expr","locations":[{"start":{"line":120,"column":22},"end":{"line":120,"column":41}},{"start":{"line":120,"column":41},"end":{"line":120,"column":null}}],"line":120},"8":{"loc":{"start":{"line":131,"column":11},"end":{"line":131,"column":null}},"type":"binary-expr","locations":[{"start":{"line":131,"column":11},"end":{"line":131,"column":28}},{"start":{"line":131,"column":28},"end":{"line":131,"column":null}}],"line":131},"9":{"loc":{"start":{"line":134,"column":17},"end":{"line":134,"column":50}},"type":"binary-expr","locations":[{"start":{"line":134,"column":17},"end":{"line":134,"column":49}},{"start":{"line":134,"column":49},"end":{"line":134,"column":50}}],"line":134}},"s":{"0":1,"1":2,"2":2,"3":2,"4":2,"5":2,"6":70,"7":5,"8":0,"9":5,"10":0,"11":5,"12":5,"13":5,"14":5,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":5,"23":5,"24":2,"25":2,"26":5,"27":5,"28":5,"29":0,"30":5,"31":5,"32":5,"33":5,"34":5,"35":5,"36":5,"37":5,"38":5,"39":5,"40":5,"41":5,"42":5,"43":2,"44":5,"45":5,"46":5,"47":5,"48":5,"49":2,"50":2,"51":2,"52":2,"53":2,"54":2,"55":2},"f":{"0":2,"1":70,"2":5,"3":0,"4":2,"5":5,"6":5,"7":2,"8":2,"9":2},"b":{"0":[0,5],"1":[0,0],"2":[2,1],"3":[0,5],"4":[5,5,5],"5":[5,0],"6":[5,5],"7":[2,2],"8":[2,1],"9":[2,1]},"meta":{"lastBranch":10,"lastFunction":10,"lastStatement":56,"seen":{"s:12:24:12:Infinity":0,"f:27:9:27:25":0,"s:28:21:28:Infinity":1,"s:29:19:29:Infinity":2,"s:30:24:30:Infinity":3,"s:31:22:31:Infinity":4,"s:33:2:40:Infinity":5,"f:34:4:34:13":1,"s:34:13:39:Infinity":6,"f:45:9:45:27":2,"b:46:2:46:Infinity:undefined:undefined:undefined:undefined":0,"s:46:2:46:Infinity":7,"s:46:27:46:Infinity":8,"s:47:17:47:Infinity":9,"f:47:34:47:35":3,"s:47:44:47:55":10,"s:48:35:48:Infinity":11,"s:49:14:49:Infinity":12,"s:51:2:60:Infinity":13,"s:51:17:51:20":14,"s:52:33:52:Infinity":15,"b:53:4:56:Infinity:undefined:undefined:undefined:undefined":1,"s:53:4:56:Infinity":16,"s:54:6:54:Infinity":17,"s:55:6:55:Infinity":18,"s:57:4:57:Infinity":19,"s:58:4:58:Infinity":20,"s:59:4:59:Infinity":21,"s:62:2:62:Infinity":22,"s:63:2:63:Infinity":23,"f:66:9:66:29":4,"s:67:54:67:Infinity":24,"s:69:3:99:Infinity":25,"b:69:4:69:20:69:20:69:24":2,"f:69:32:69:41":5,"s:70:18:70:Infinity":26,"s:71:16:71:Infinity":27,"b:73:4:79:Infinity:undefined:undefined:undefined:undefined":3,"s:73:4:79:Infinity":28,"b:74:6:74:Infinity:75:6:75:Infinity:76:6:76:Infinity":4,"s:78:6:78:Infinity":29,"s:81:17:81:Infinity":30,"s:82:20:82:Infinity":31,"s:84:4:98:Infinity":32,"s:85:22:85:Infinity":33,"s:86:24:86:Infinity":34,"s:87:22:87:Infinity":35,"b:89:6:95:Infinity:undefined:undefined:undefined:undefined":5,"s:89:6:95:Infinity":36,"s:90:23:90:Infinity":37,"s:91:14:91:Infinity":38,"s:92:14:92:Infinity":39,"s:93:8:93:Infinity":40,"b:93:31:93:55:93:55:93:Infinity":6,"s:94:8:94:Infinity":41,"s:97:6:97:Infinity":42,"s:101:2:110:Infinity":43,"f:102:4:102:5":6,"s:103:30:103:Infinity":44,"s:104:23:104:Infinity":45,"s:105:26:105:Infinity":46,"s:106:6:106:Infinity":47,"s:107:6:107:Infinity":48,"f:113:16:113:44":7,"s:119:16:119:Infinity":49,"f:119:24:119:30":8,"s:119:30:119:57":50,"s:120:22:120:Infinity":51,"b:120:22:120:41:120:41:120:Infinity":7,"s:122:27:122:Infinity":52,"f:122:35:122:41":9,"s:122:41:122:68":53,"s:124:32:128:Infinity":54,"s:130:2:138:Infinity":55,"b:131:11:131:28:131:28:131:Infinity":8,"b:134:17:134:49:134:49:134:50":9}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useMonthlyDateCellsState.ts","statementMap":{"0":{"start":{"line":1,"column":24},"end":{"line":1,"column":null}},"1":{"start":{"line":9,"column":2},"end":{"line":29,"column":null}},"2":{"start":{"line":11,"column":6},"end":{"line":27,"column":null}},"3":{"start":{"line":12,"column":27},"end":{"line":12,"column":null}},"4":{"start":{"line":13,"column":25},"end":{"line":13,"column":null}},"5":{"start":{"line":14,"column":28},"end":{"line":14,"column":null}},"6":{"start":{"line":15,"column":26},"end":{"line":15,"column":null}},"7":{"start":{"line":16,"column":27},"end":{"line":16,"column":null}},"8":{"start":{"line":17,"column":28},"end":{"line":17,"column":null}},"9":{"start":{"line":19,"column":8},"end":{"line":26,"column":null}}},"fnMap":{"0":{"name":"useMonthlyDateCellsState","decl":{"start":{"line":4,"column":16},"end":{"line":4,"column":41}},"loc":{"start":{"line":8,"column":35},"end":{"line":30,"column":null}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":4},"end":{"line":10,"column":null}},"loc":{"start":{"line":11,"column":6},"end":{"line":27,"column":null}},"line":11},"2":{"name":"(anonymous_2)","decl":{"start":{"line":11,"column":16},"end":{"line":11,"column":24}},"loc":{"start":{"line":11,"column":24},"end":{"line":27,"column":7}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":25},"end":{"line":13,"column":null}},"type":"binary-expr","locations":[{"start":{"line":13,"column":25},"end":{"line":13,"column":49}},{"start":{"line":13,"column":49},"end":{"line":13,"column":null}}],"line":13},"1":{"loc":{"start":{"line":14,"column":28},"end":{"line":14,"column":null}},"type":"binary-expr","locations":[{"start":{"line":14,"column":28},"end":{"line":14,"column":55}},{"start":{"line":14,"column":55},"end":{"line":14,"column":null}}],"line":14},"2":{"loc":{"start":{"line":15,"column":26},"end":{"line":15,"column":null}},"type":"binary-expr","locations":[{"start":{"line":15,"column":26},"end":{"line":15,"column":48}},{"start":{"line":15,"column":48},"end":{"line":15,"column":null}}],"line":15},"3":{"loc":{"start":{"line":17,"column":28},"end":{"line":17,"column":null}},"type":"binary-expr","locations":[{"start":{"line":17,"column":28},"end":{"line":17,"column":44}},{"start":{"line":17,"column":44},"end":{"line":17,"column":null}}],"line":17}},"s":{"0":1,"1":2,"2":2,"3":70,"4":70,"5":70,"6":70,"7":70,"8":70,"9":70},"f":{"0":2,"1":2,"2":70},"b":{"0":[70,65],"1":[70,65],"2":[70,60],"3":[70,5]},"meta":{"lastBranch":4,"lastFunction":3,"lastStatement":10,"seen":{"s:1:24:1:Infinity":0,"f:4:16:4:41":0,"s:9:2:29:Infinity":1,"f:10:4:10:Infinity":1,"s:11:6:27:Infinity":2,"f:11:16:11:24":2,"s:12:27:12:Infinity":3,"s:13:25:13:Infinity":4,"b:13:25:13:49:13:49:13:Infinity":0,"s:14:28:14:Infinity":5,"b:14:28:14:55:14:55:14:Infinity":1,"s:15:26:15:Infinity":6,"b:15:26:15:48:15:48:15:Infinity":2,"s:16:27:16:Infinity":7,"s:17:28:17:Infinity":8,"b:17:28:17:44:17:44:17:Infinity":3,"s:19:8:26:Infinity":9}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWeeklyCalendarViewModel.ts","statementMap":{"0":{"start":{"line":2,"column":24},"end":{"line":2,"column":null}},"1":{"start":{"line":10,"column":14},"end":{"line":10,"column":null}},"2":{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},"3":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"4":{"start":{"line":18,"column":13},"end":{"line":18,"column":null}},"5":{"start":{"line":19,"column":2},"end":{"line":24,"column":null}},"6":{"start":{"line":21,"column":23},"end":{"line":21,"column":48}},"7":{"start":{"line":22,"column":28},"end":{"line":22,"column":53}},"8":{"start":{"line":32,"column":2},"end":{"line":63,"column":null}},"9":{"start":{"line":33,"column":18},"end":{"line":33,"column":null}},"10":{"start":{"line":34,"column":29},"end":{"line":34,"column":null}},"11":{"start":{"line":35,"column":21},"end":{"line":38,"column":null}},"12":{"start":{"line":36,"column":27},"end":{"line":36,"column":63}},"13":{"start":{"line":40,"column":21},"end":{"line":56,"column":null}},"14":{"start":{"line":41,"column":25},"end":{"line":41,"column":null}},"15":{"start":{"line":42,"column":28},"end":{"line":42,"column":null}},"16":{"start":{"line":43,"column":28},"end":{"line":43,"column":null}},"17":{"start":{"line":44,"column":30},"end":{"line":44,"column":null}},"18":{"start":{"line":46,"column":6},"end":{"line":55,"column":null}},"19":{"start":{"line":58,"column":4},"end":{"line":62,"column":null}}},"fnMap":{"0":{"name":"getSelectedDayIndex","decl":{"start":{"line":9,"column":9},"end":{"line":9,"column":29}},"loc":{"start":{"line":9,"column":45},"end":{"line":12,"column":null}},"line":9},"1":{"name":"getDayTotalHours","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":null}},"loc":{"start":{"line":17,"column":2},"end":{"line":25,"column":null}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":21,"column":14},"end":{"line":21,"column":23}},"loc":{"start":{"line":21,"column":23},"end":{"line":21,"column":48}},"line":21},"3":{"name":"(anonymous_3)","decl":{"start":{"line":22,"column":14},"end":{"line":22,"column":15}},"loc":{"start":{"line":22,"column":28},"end":{"line":22,"column":53}},"line":22},"4":{"name":"useWeeklyCalendarViewModel","decl":{"start":{"line":27,"column":16},"end":{"line":27,"column":43}},"loc":{"start":{"line":31,"column":53},"end":{"line":64,"column":null}},"line":31},"5":{"name":"(anonymous_5)","decl":{"start":{"line":32,"column":17},"end":{"line":32,"column":23}},"loc":{"start":{"line":32,"column":23},"end":{"line":63,"column":5}},"line":32},"6":{"name":"(anonymous_6)","decl":{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},"loc":{"start":{"line":36,"column":27},"end":{"line":36,"column":63}},"line":36},"7":{"name":"(anonymous_7)","decl":{"start":{"line":40,"column":31},"end":{"line":40,"column":32}},"loc":{"start":{"line":40,"column":48},"end":{"line":56,"column":5}},"line":40}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":9},"end":{"line":11,"column":null}},"type":"cond-expr","locations":[{"start":{"line":11,"column":21},"end":{"line":11,"column":25}},{"start":{"line":11,"column":25},"end":{"line":11,"column":null}}],"line":11},"1":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},{"start":{},"end":{}}],"line":18},"2":{"loc":{"start":{"line":54,"column":23},"end":{"line":54,"column":null}},"type":"binary-expr","locations":[{"start":{"line":54,"column":23},"end":{"line":54,"column":38}},{"start":{"line":54,"column":38},"end":{"line":54,"column":null}}],"line":54},"3":{"loc":{"start":{"line":59,"column":13},"end":{"line":59,"column":null}},"type":"binary-expr","locations":[{"start":{"line":59,"column":13},"end":{"line":59,"column":30}},{"start":{"line":59,"column":30},"end":{"line":59,"column":null}}],"line":59},"4":{"loc":{"start":{"line":60,"column":44},"end":{"line":60,"column":77}},"type":"binary-expr","locations":[{"start":{"line":60,"column":44},"end":{"line":60,"column":76}},{"start":{"line":60,"column":76},"end":{"line":60,"column":77}}],"line":60}},"s":{"0":1,"1":1,"2":1,"3":14,"4":0,"5":14,"6":70,"7":10,"8":1,"9":1,"10":1,"11":1,"12":7,"13":1,"14":7,"15":7,"16":7,"17":7,"18":7,"19":1},"f":{"0":1,"1":14,"2":70,"3":10,"4":1,"5":1,"6":7,"7":7},"b":{"0":[0,1],"1":[0,14],"2":[7,6],"3":[1,0],"4":[1,0]},"meta":{"lastBranch":5,"lastFunction":8,"lastStatement":20,"seen":{"s:2:24:2:Infinity":0,"f:9:9:9:29":0,"s:10:14:10:Infinity":1,"s:11:2:11:Infinity":2,"b:11:21:11:25:11:25:11:Infinity":0,"f:14:9:14:Infinity":1,"b:18:2:18:Infinity:undefined:undefined:undefined:undefined":1,"s:18:2:18:Infinity":3,"s:18:13:18:Infinity":4,"s:19:2:24:Infinity":5,"f:21:14:21:23":2,"s:21:23:21:48":6,"f:22:14:22:15":3,"s:22:28:22:53":7,"f:27:16:27:43":4,"s:32:2:63:Infinity":8,"f:32:17:32:23":5,"s:33:18:33:Infinity":9,"s:34:29:34:Infinity":10,"s:35:21:38:Infinity":11,"f:36:19:36:27":6,"s:36:27:36:63":12,"s:40:21:56:Infinity":13,"f:40:31:40:32":7,"s:41:25:41:Infinity":14,"s:42:28:42:Infinity":15,"s:43:28:43:Infinity":16,"s:44:30:44:Infinity":17,"s:46:6:55:Infinity":18,"b:54:23:54:38:54:38:54:Infinity":2,"s:58:4:62:Infinity":19,"b:59:13:59:30:59:30:59:Infinity":3,"b:60:44:60:76:60:76:60:77":4}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWorkingStoreCardViewModel.ts","statementMap":{"0":{"start":{"line":2,"column":24},"end":{"line":2,"column":null}},"1":{"start":{"line":6,"column":15},"end":{"line":6,"column":null}},"2":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"3":{"start":{"line":7,"column":36},"end":{"line":7,"column":null}},"4":{"start":{"line":8,"column":2},"end":{"line":8,"column":null}},"5":{"start":{"line":12,"column":19},"end":{"line":12,"column":null}},"6":{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},"7":{"start":{"line":13,"column":40},"end":{"line":13,"column":null}},"8":{"start":{"line":15,"column":16},"end":{"line":15,"column":null}},"9":{"start":{"line":16,"column":19},"end":{"line":16,"column":null}},"10":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"11":{"start":{"line":18,"column":21},"end":{"line":18,"column":null}},"12":{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},"13":{"start":{"line":19,"column":22},"end":{"line":19,"column":null}},"14":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},"15":{"start":{"line":20,"column":21},"end":{"line":20,"column":null}},"16":{"start":{"line":22,"column":20},"end":{"line":22,"column":null}},"17":{"start":{"line":23,"column":2},"end":{"line":23,"column":null}},"18":{"start":{"line":27,"column":2},"end":{"line":33,"column":null}},"19":{"start":{"line":28,"column":11},"end":{"line":31,"column":null}}},"fnMap":{"0":{"name":"formatNextShiftDate","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":29}},"loc":{"start":{"line":5,"column":56},"end":{"line":9,"column":null}},"line":5},"1":{"name":"getDueText","decl":{"start":{"line":11,"column":9},"end":{"line":11,"column":20}},"loc":{"start":{"line":11,"column":47},"end":{"line":24,"column":null}},"line":11},"2":{"name":"useWorkingStoreCardViewModel","decl":{"start":{"line":26,"column":16},"end":{"line":26,"column":45}},"loc":{"start":{"line":26,"column":70},"end":{"line":34,"column":null}},"line":26},"3":{"name":"(anonymous_3)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":11}},"loc":{"start":{"line":28,"column":11},"end":{"line":31,"column":null}},"line":28}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"type":"if","locations":[{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},{"start":{},"end":{}}],"line":7},"1":{"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},{"start":{},"end":{}}],"line":13},"2":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"if","locations":[{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},{"start":{},"end":{}}],"line":18},"3":{"loc":{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},"type":"if","locations":[{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},{"start":{},"end":{}}],"line":19},"4":{"loc":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},{"start":{},"end":{}}],"line":20}},"s":{"0":1,"1":6,"2":6,"3":0,"4":6,"5":6,"6":6,"7":0,"8":6,"9":6,"10":6,"11":6,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":6,"19":6},"f":{"0":6,"1":6,"2":6,"3":6},"b":{"0":[0,6],"1":[0,6],"2":[6,0],"3":[0,0],"4":[0,0]},"meta":{"lastBranch":5,"lastFunction":4,"lastStatement":20,"seen":{"s:2:24:2:Infinity":0,"f:5:9:5:29":0,"s:6:15:6:Infinity":1,"b:7:2:7:Infinity:undefined:undefined:undefined:undefined":0,"s:7:2:7:Infinity":2,"s:7:36:7:Infinity":3,"s:8:2:8:Infinity":4,"f:11:9:11:20":1,"s:12:19:12:Infinity":5,"b:13:2:13:Infinity:undefined:undefined:undefined:undefined":1,"s:13:2:13:Infinity":6,"s:13:40:13:Infinity":7,"s:15:16:15:Infinity":8,"s:16:19:16:Infinity":9,"b:18:2:18:Infinity:undefined:undefined:undefined:undefined":2,"s:18:2:18:Infinity":10,"s:18:21:18:Infinity":11,"b:19:2:19:Infinity:undefined:undefined:undefined:undefined":3,"s:19:2:19:Infinity":12,"s:19:22:19:Infinity":13,"b:20:2:20:Infinity:undefined:undefined:undefined:undefined":4,"s:20:2:20:Infinity":14,"s:20:21:20:Infinity":15,"s:22:20:22:Infinity":16,"s:23:2:23:Infinity":17,"f:26:16:26:45":2,"s:27:2:33:Infinity":18,"f:28:4:28:11":3,"s:28:11:31:Infinity":19}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/hooks/useWorkingStoresListViewModel.ts","statementMap":{"0":{"start":{"line":1,"column":24},"end":{"line":1,"column":null}},"1":{"start":{"line":5,"column":2},"end":{"line":10,"column":null}},"2":{"start":{"line":6,"column":11},"end":{"line":8,"column":null}}},"fnMap":{"0":{"name":"useWorkingStoresListViewModel","decl":{"start":{"line":4,"column":16},"end":{"line":4,"column":46}},"loc":{"start":{"line":4,"column":74},"end":{"line":11,"column":null}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":4},"end":{"line":6,"column":11}},"loc":{"start":{"line":6,"column":11},"end":{"line":8,"column":null}},"line":6}},"branchMap":{},"s":{"0":1,"1":2,"2":2},"f":{"0":2,"1":2},"b":{},"meta":{"lastBranch":0,"lastFunction":2,"lastStatement":3,"seen":{"s:1:24:1:Infinity":0,"f:4:16:4:46":0,"s:5:2:10:Infinity":1,"f:6:4:6:11":1,"s:6:11:8:Infinity":2}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/lib/date.ts": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/lib/date.ts","statementMap":{"0":{"start":{"line":16,"column":24},"end":{"line":16,"column":null}},"1":{"start":{"line":17,"column":23},"end":{"line":17,"column":null}},"2":{"start":{"line":18,"column":21},"end":{"line":18,"column":null}},"3":{"start":{"line":21,"column":2},"end":{"line":21,"column":null}},"4":{"start":{"line":25,"column":2},"end":{"line":25,"column":null}},"5":{"start":{"line":29,"column":16},"end":{"line":29,"column":null}},"6":{"start":{"line":30,"column":14},"end":{"line":30,"column":null}},"7":{"start":{"line":31,"column":20},"end":{"line":31,"column":null}},"8":{"start":{"line":32,"column":2},"end":{"line":32,"column":null}},"9":{"start":{"line":36,"column":8},"end":{"line":36,"column":null}},"10":{"start":{"line":37,"column":8},"end":{"line":37,"column":null}},"11":{"start":{"line":38,"column":8},"end":{"line":38,"column":null}},"12":{"start":{"line":39,"column":8},"end":{"line":39,"column":null}},"13":{"start":{"line":41,"column":2},"end":{"line":49,"column":null}},"14":{"start":{"line":42,"column":13},"end":{"line":48,"column":null}},"15":{"start":{"line":53,"column":8},"end":{"line":53,"column":null}},"16":{"start":{"line":54,"column":8},"end":{"line":54,"column":null}},"17":{"start":{"line":56,"column":2},"end":{"line":62,"column":null}},"18":{"start":{"line":56,"column":76},"end":{"line":62,"column":4}},"19":{"start":{"line":69,"column":2},"end":{"line":74,"column":null}},"20":{"start":{"line":70,"column":20},"end":{"line":70,"column":61}},"21":{"start":{"line":72,"column":20},"end":{"line":72,"column":null}},"22":{"start":{"line":78,"column":8},"end":{"line":78,"column":null}},"23":{"start":{"line":79,"column":8},"end":{"line":79,"column":null}},"24":{"start":{"line":80,"column":2},"end":{"line":80,"column":null}},"25":{"start":{"line":84,"column":2},"end":{"line":87,"column":null}},"26":{"start":{"line":86,"column":16},"end":{"line":86,"column":null}},"27":{"start":{"line":91,"column":2},"end":{"line":96,"column":null}},"28":{"start":{"line":92,"column":4},"end":{"line":95,"column":null}},"29":{"start":{"line":98,"column":2},"end":{"line":106,"column":null}},"30":{"start":{"line":99,"column":4},"end":{"line":105,"column":null}},"31":{"start":{"line":108,"column":8},"end":{"line":108,"column":null}},"32":{"start":{"line":109,"column":2},"end":{"line":112,"column":null}},"33":{"start":{"line":120,"column":15},"end":{"line":120,"column":null}},"34":{"start":{"line":121,"column":2},"end":{"line":123,"column":null}},"35":{"start":{"line":122,"column":4},"end":{"line":122,"column":null}},"36":{"start":{"line":124,"column":2},"end":{"line":126,"column":null}},"37":{"start":{"line":125,"column":4},"end":{"line":125,"column":null}},"38":{"start":{"line":127,"column":2},"end":{"line":127,"column":null}},"39":{"start":{"line":36,"column":21},"end":{"line":36,"column":null}},"40":{"start":{"line":37,"column":19},"end":{"line":37,"column":null}},"41":{"start":{"line":38,"column":24},"end":{"line":38,"column":null}},"42":{"start":{"line":39,"column":22},"end":{"line":39,"column":null}},"43":{"start":{"line":53,"column":20},"end":{"line":53,"column":null}},"44":{"start":{"line":54,"column":18},"end":{"line":54,"column":null}},"45":{"start":{"line":78,"column":20},"end":{"line":78,"column":null}},"46":{"start":{"line":79,"column":18},"end":{"line":79,"column":null}},"47":{"start":{"line":108,"column":14},"end":{"line":108,"column":null}}},"fnMap":{"0":{"name":"toDateKey","decl":{"start":{"line":20,"column":16},"end":{"line":20,"column":26}},"loc":{"start":{"line":20,"column":39},"end":{"line":22,"column":null}},"line":20},"1":{"name":"toTimeLabel","decl":{"start":{"line":24,"column":16},"end":{"line":24,"column":28}},"loc":{"start":{"line":24,"column":41},"end":{"line":26,"column":null}},"line":24},"2":{"name":"getDurationHours","decl":{"start":{"line":28,"column":16},"end":{"line":28,"column":33}},"loc":{"start":{"line":28,"column":67},"end":{"line":33,"column":null}},"line":28},"3":{"name":"getMonthlyDateCells","decl":{"start":{"line":35,"column":16},"end":{"line":35,"column":36}},"loc":{"start":{"line":35,"column":52},"end":{"line":50,"column":null}},"line":35},"4":{"name":"(anonymous_4)","decl":{"start":{"line":42,"column":4},"end":{"line":42,"column":13}},"loc":{"start":{"line":42,"column":13},"end":{"line":48,"column":null}},"line":42},"5":{"name":"getWeeklyDateCells","decl":{"start":{"line":52,"column":16},"end":{"line":52,"column":35}},"loc":{"start":{"line":52,"column":51},"end":{"line":63,"column":null}},"line":52},"6":{"name":"(anonymous_6)","decl":{"start":{"line":56,"column":67},"end":{"line":56,"column":76}},"loc":{"start":{"line":56,"column":76},"end":{"line":62,"column":4}},"line":56},"7":{"name":"getDayHours","decl":{"start":{"line":65,"column":16},"end":{"line":65,"column":null}},"loc":{"start":{"line":68,"column":2},"end":{"line":75,"column":null}},"line":68},"8":{"name":"(anonymous_8)","decl":{"start":{"line":70,"column":12},"end":{"line":70,"column":20}},"loc":{"start":{"line":70,"column":20},"end":{"line":70,"column":61}},"line":70},"9":{"name":"(anonymous_9)","decl":{"start":{"line":72,"column":6},"end":{"line":72,"column":7}},"loc":{"start":{"line":72,"column":20},"end":{"line":72,"column":null}},"line":72},"10":{"name":"getWeekRangeLabel","decl":{"start":{"line":77,"column":16},"end":{"line":77,"column":34}},"loc":{"start":{"line":77,"column":50},"end":{"line":81,"column":null}},"line":77},"11":{"name":"getDailyHourTicks","decl":{"start":{"line":83,"column":16},"end":{"line":83,"column":36}},"loc":{"start":{"line":83,"column":36},"end":{"line":88,"column":null}},"line":83},"12":{"name":"(anonymous_12)","decl":{"start":{"line":86,"column":4},"end":{"line":86,"column":5}},"loc":{"start":{"line":86,"column":16},"end":{"line":86,"column":null}},"line":86},"13":{"name":"getRangeParamsByMode","decl":{"start":{"line":90,"column":16},"end":{"line":90,"column":37}},"loc":{"start":{"line":90,"column":77},"end":{"line":113,"column":null}},"line":90},"14":{"name":"moveDateByMode","decl":{"start":{"line":115,"column":16},"end":{"line":115,"column":null}},"loc":{"start":{"line":119,"column":2},"end":{"line":128,"column":null}},"line":119}},"branchMap":{"0":{"loc":{"start":{"line":91,"column":2},"end":{"line":96,"column":null}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":96,"column":null}},{"start":{},"end":{}}],"line":91},"1":{"loc":{"start":{"line":98,"column":2},"end":{"line":106,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":106,"column":null}},{"start":{},"end":{}}],"line":98},"2":{"loc":{"start":{"line":120,"column":15},"end":{"line":120,"column":null}},"type":"cond-expr","locations":[{"start":{"line":120,"column":38},"end":{"line":120,"column":42}},{"start":{"line":120,"column":42},"end":{"line":120,"column":null}}],"line":120},"3":{"loc":{"start":{"line":121,"column":2},"end":{"line":123,"column":null}},"type":"if","locations":[{"start":{"line":121,"column":2},"end":{"line":123,"column":null}},{"start":{},"end":{}}],"line":121},"4":{"loc":{"start":{"line":124,"column":2},"end":{"line":126,"column":null}},"type":"if","locations":[{"start":{"line":124,"column":2},"end":{"line":126,"column":null}},{"start":{},"end":{}}],"line":124}},"s":{"0":2,"1":2,"2":2,"3":7,"4":1,"5":4,"6":4,"7":4,"8":4,"9":1,"10":1,"11":1,"12":1,"13":1,"14":35,"15":1,"16":1,"17":2,"18":14,"19":4,"20":6,"21":2,"22":1,"23":1,"24":1,"25":1,"26":24,"27":3,"28":1,"29":2,"30":1,"31":1,"32":1,"33":6,"34":6,"35":2,"36":4,"37":2,"38":2,"39":1,"40":1,"41":1,"42":1,"43":2,"44":2,"45":1,"46":1,"47":1},"f":{"0":7,"1":1,"2":4,"3":1,"4":35,"5":2,"6":14,"7":4,"8":6,"9":2,"10":1,"11":1,"12":24,"13":3,"14":6},"b":{"0":[1,2],"1":[1,1],"2":[3,3],"3":[2,4],"4":[2,2]},"meta":{"lastBranch":5,"lastFunction":15,"lastStatement":39,"seen":{"s:16:24:16:Infinity":0,"s:17:23:17:Infinity":1,"s:18:21:18:Infinity":2,"f:20:16:20:26":0,"s:21:2:21:Infinity":3,"f:24:16:24:28":1,"s:25:2:25:Infinity":4,"f:28:16:28:33":2,"s:29:16:29:Infinity":5,"s:30:14:30:Infinity":6,"s:31:20:31:Infinity":7,"s:32:2:32:Infinity":8,"f:35:16:35:36":3,"s:36:8:36:Infinity":9,"s:37:8:37:Infinity":10,"s:38:8:38:Infinity":11,"s:39:8:39:Infinity":12,"s:41:2:49:Infinity":13,"f:42:4:42:13":4,"s:42:13:48:Infinity":14,"f:52:16:52:35":5,"s:53:8:53:Infinity":15,"s:54:8:54:Infinity":16,"s:56:2:62:Infinity":17,"f:56:67:56:76":6,"s:56:76:62:4":18,"f:65:16:65:Infinity":7,"s:69:2:74:Infinity":19,"f:70:12:70:20":8,"s:70:20:70:61":20,"f:72:6:72:7":9,"s:72:20:72:Infinity":21,"f:77:16:77:34":10,"s:78:8:78:Infinity":22,"s:79:8:79:Infinity":23,"s:80:2:80:Infinity":24,"f:83:16:83:36":11,"s:84:2:87:Infinity":25,"f:86:4:86:5":12,"s:86:16:86:Infinity":26,"f:90:16:90:37":13,"b:91:2:96:Infinity:undefined:undefined:undefined:undefined":0,"s:91:2:96:Infinity":27,"s:92:4:95:Infinity":28,"b:98:2:106:Infinity:undefined:undefined:undefined:undefined":1,"s:98:2:106:Infinity":29,"s:99:4:105:Infinity":30,"s:108:8:108:Infinity":31,"s:109:2:112:Infinity":32,"f:115:16:115:Infinity":14,"s:120:15:120:Infinity":33,"b:120:38:120:42:120:42:120:Infinity":2,"b:121:2:123:Infinity:undefined:undefined:undefined:undefined":3,"s:121:2:123:Infinity":34,"s:122:4:122:Infinity":35,"b:124:2:126:Infinity:undefined:undefined:undefined:undefined":4,"s:124:2:126:Infinity":36,"s:125:4:125:Infinity":37,"s:127:2:127:Infinity":38}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/AppliedStoreCard.tsx","statementMap":{"0":{"start":{"line":22,"column":6},"end":{"line":22,"column":7}},"1":{"start":{"line":12,"column":21},"end":{"line":12,"column":null}},"2":{"start":{"line":14,"column":2},"end":{"line":33,"column":null}}},"fnMap":{"0":{"name":"AppliedStoreCard","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":33}},"loc":{"start":{"line":11,"column":26},"end":{"line":35,"column":null}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":2},"end":{"line":10,"column":null}},"type":"default-arg","locations":[{"start":{"line":10,"column":11},"end":{"line":10,"column":null}}],"line":10},"1":{"loc":{"start":{"line":17,"column":8},"end":{"line":19,"column":null}},"type":"cond-expr","locations":[{"start":{"line":18,"column":12},"end":{"line":18,"column":null}},{"start":{"line":19,"column":12},"end":{"line":19,"column":null}}],"line":17},"2":{"loc":{"start":{"line":24,"column":10},"end":{"line":24,"column":null}},"type":"cond-expr","locations":[{"start":{"line":24,"column":23},"end":{"line":24,"column":38}},{"start":{"line":24,"column":38},"end":{"line":24,"column":null}}],"line":24}},"s":{"0":2,"1":7,"2":7},"f":{"0":7},"b":{"0":[7],"1":[3,4],"2":[3,4]},"meta":{"lastBranch":3,"lastFunction":1,"lastStatement":3,"seen":{"s:22:6:22:7":0,"f:8:16:8:33":0,"b:10:11:10:Infinity":0,"s:12:21:12:Infinity":1,"s:14:2:33:Infinity":2,"b:18:12:18:Infinity:19:12:19:Infinity":1,"b:24:23:24:38:24:38:24:Infinity":2}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/AppliedStoreList.tsx","statementMap":{"0":{"start":{"line":29,"column":8},"end":{"line":29,"column":9}},"1":{"start":{"line":23,"column":24},"end":{"line":23,"column":null}},"2":{"start":{"line":24,"column":21},"end":{"line":24,"column":null}},"3":{"start":{"line":26,"column":2},"end":{"line":50,"column":null}},"4":{"start":{"line":38,"column":12},"end":{"line":42,"column":null}}},"fnMap":{"0":{"name":"AppliedStoreList","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":33}},"loc":{"start":{"line":22,"column":26},"end":{"line":52,"column":null}},"line":22},"1":{"name":"(anonymous_1)","decl":{"start":{"line":37,"column":29},"end":{"line":37,"column":null}},"loc":{"start":{"line":38,"column":12},"end":{"line":42,"column":null}},"line":38}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":null}}],"line":18},"1":{"loc":{"start":{"line":24,"column":21},"end":{"line":24,"column":null}},"type":"binary-expr","locations":[{"start":{"line":24,"column":21},"end":{"line":24,"column":36}},{"start":{"line":24,"column":36},"end":{"line":24,"column":null}}],"line":24}},"s":{"0":1,"1":1,"2":1,"3":1,"4":5},"f":{"0":1,"1":5},"b":{"0":[1],"1":[1,1]},"meta":{"lastBranch":2,"lastFunction":2,"lastStatement":5,"seen":{"s:29:8:29:9":0,"f:17:16:17:33":0,"b:18:10:18:Infinity":0,"s:23:24:23:Infinity":1,"s:24:21:24:Infinity":2,"b:24:21:24:36:24:36:24:Infinity":1,"s:26:2:50:Infinity":3,"f:37:29:37:Infinity":1,"s:38:12:42:Infinity":4}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/DailyCalendar.tsx","statementMap":{"0":{"start":{"line":31,"column":8},"end":{"line":31,"column":9}},"1":{"start":{"line":22,"column":6},"end":{"line":26,"column":null}},"2":{"start":{"line":28,"column":2},"end":{"line":34,"column":null}},"3":{"start":{"line":29,"column":4},"end":{"line":32,"column":null}},"4":{"start":{"line":36,"column":2},"end":{"line":93,"column":null}},"5":{"start":{"line":59,"column":12},"end":{"line":71,"column":null}},"6":{"start":{"line":76,"column":12},"end":{"line":88,"column":null}}},"fnMap":{"0":{"name":"DailyCalendar","decl":{"start":{"line":9,"column":16},"end":{"line":9,"column":30}},"loc":{"start":{"line":14,"column":23},"end":{"line":95,"column":null}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":58,"column":29},"end":{"line":58,"column":37}},"loc":{"start":{"line":58,"column":37},"end":{"line":73,"column":11}},"line":58},"2":{"name":"(anonymous_2)","decl":{"start":{"line":75,"column":27},"end":{"line":75,"column":36}},"loc":{"start":{"line":75,"column":36},"end":{"line":90,"column":11}},"line":75}},"branchMap":{"0":{"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},"type":"default-arg","locations":[{"start":{"line":13,"column":14},"end":{"line":13,"column":null}}],"line":13},"1":{"loc":{"start":{"line":28,"column":2},"end":{"line":34,"column":null}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":34,"column":null}},{"start":{},"end":{}}],"line":28}},"s":{"0":1,"1":2,"2":2,"3":0,"4":2,"5":14,"6":5},"f":{"0":2,"1":14,"2":5},"b":{"0":[2],"1":[0,2]},"meta":{"lastBranch":2,"lastFunction":3,"lastStatement":7,"seen":{"s:31:8:31:9":0,"f:9:16:9:30":0,"b:13:14:13:Infinity":0,"s:22:6:26:Infinity":1,"b:28:2:34:Infinity:undefined:undefined:undefined:undefined":1,"s:28:2:34:Infinity":2,"s:29:4:32:Infinity":3,"s:36:2:93:Infinity":4,"f:58:29:58:37":1,"s:59:12:71:Infinity":5,"f:75:27:75:36":2,"s:76:12:88:Infinity":6}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/HomeScheduleCalendar.tsx","statementMap":{"0":{"start":{"line":28,"column":8},"end":{"line":28,"column":9}},"1":{"start":{"line":25,"column":2},"end":{"line":51,"column":null}}},"fnMap":{"0":{"name":"HomeScheduleCalendar","decl":{"start":{"line":18,"column":16},"end":{"line":18,"column":37}},"loc":{"start":{"line":24,"column":30},"end":{"line":53,"column":null}},"line":24}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":2},"end":{"line":23,"column":null}},"type":"default-arg","locations":[{"start":{"line":23,"column":14},"end":{"line":23,"column":null}}],"line":23},"1":{"loc":{"start":{"line":27,"column":7},"end":{"line":33,"column":null}},"type":"binary-expr","locations":[{"start":{"line":27,"column":7},"end":{"line":27,"column":null}},{"start":{"line":28,"column":8},"end":{"line":33,"column":null}}],"line":27},"2":{"loc":{"start":{"line":35,"column":7},"end":{"line":41,"column":null}},"type":"binary-expr","locations":[{"start":{"line":35,"column":7},"end":{"line":35,"column":null}},{"start":{"line":36,"column":8},"end":{"line":41,"column":null}}],"line":35},"3":{"loc":{"start":{"line":43,"column":7},"end":{"line":49,"column":null}},"type":"binary-expr","locations":[{"start":{"line":43,"column":7},"end":{"line":43,"column":null}},{"start":{"line":44,"column":8},"end":{"line":49,"column":null}}],"line":43}},"s":{"0":1,"1":5},"f":{"0":5},"b":{"0":[5],"1":[5,2],"2":[5,1],"3":[5,2]},"meta":{"lastBranch":4,"lastFunction":1,"lastStatement":2,"seen":{"s:28:8:28:9":0,"f:18:16:18:37":0,"b:23:14:23:Infinity":0,"s:25:2:51:Infinity":1,"b:27:7:27:Infinity:28:8:33:Infinity":1,"b:35:7:35:Infinity:36:8:41:Infinity":2,"b:43:7:43:Infinity:44:8:49:Infinity":3}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyCalendar.tsx","statementMap":{"0":{"start":{"line":33,"column":8},"end":{"line":33,"column":9}},"1":{"start":{"line":23,"column":6},"end":{"line":28,"column":null}},"2":{"start":{"line":30,"column":2},"end":{"line":36,"column":null}},"3":{"start":{"line":31,"column":4},"end":{"line":34,"column":null}},"4":{"start":{"line":38,"column":2},"end":{"line":83,"column":null}},"5":{"start":{"line":58,"column":12},"end":{"line":63,"column":null}},"6":{"start":{"line":69,"column":12},"end":{"line":78,"column":null}}},"fnMap":{"0":{"name":"MonthlyCalendar","decl":{"start":{"line":10,"column":16},"end":{"line":10,"column":32}},"loc":{"start":{"line":16,"column":25},"end":{"line":85,"column":null}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":57,"column":29},"end":{"line":57,"column":30}},"loc":{"start":{"line":58,"column":12},"end":{"line":63,"column":null}},"line":58},"2":{"name":"(anonymous_2)","decl":{"start":{"line":68,"column":37},"end":{"line":68,"column":45}},"loc":{"start":{"line":68,"column":45},"end":{"line":80,"column":11}},"line":68}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"type":"default-arg","locations":[{"start":{"line":14,"column":14},"end":{"line":14,"column":null}}],"line":14},"1":{"loc":{"start":{"line":30,"column":2},"end":{"line":36,"column":null}},"type":"if","locations":[{"start":{"line":30,"column":2},"end":{"line":36,"column":null}},{"start":{},"end":{}}],"line":30},"2":{"loc":{"start":{"line":60,"column":59},"end":{"line":60,"column":121}},"type":"cond-expr","locations":[{"start":{"line":60,"column":88},"end":{"line":60,"column":107}},{"start":{"line":60,"column":107},"end":{"line":60,"column":121}}],"line":60},"3":{"loc":{"start":{"line":60,"column":59},"end":{"line":60,"column":88}},"type":"binary-expr","locations":[{"start":{"line":60,"column":59},"end":{"line":60,"column":74}},{"start":{"line":60,"column":74},"end":{"line":60,"column":88}}],"line":60}},"s":{"0":1,"1":2,"2":2,"3":1,"4":1,"5":7,"6":35},"f":{"0":2,"1":7,"2":35},"b":{"0":[2],"1":[1,1],"2":[2,5],"3":[7,6]},"meta":{"lastBranch":4,"lastFunction":3,"lastStatement":7,"seen":{"s:33:8:33:9":0,"f:10:16:10:32":0,"b:14:14:14:Infinity":0,"s:23:6:28:Infinity":1,"b:30:2:36:Infinity:undefined:undefined:undefined:undefined":1,"s:30:2:36:Infinity":2,"s:31:4:34:Infinity":3,"s:38:2:83:Infinity":4,"f:57:29:57:30":1,"s:58:12:63:Infinity":5,"b:60:88:60:107:60:107:60:121":2,"b:60:59:60:74:60:74:60:88":3,"f:68:37:68:45":2,"s:69:12:78:Infinity":6}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyDateCell.tsx","statementMap":{"0":{"start":{"line":34,"column":10},"end":{"line":34,"column":11}},"1":{"start":{"line":20,"column":23},"end":{"line":24,"column":null}},"2":{"start":{"line":26,"column":2},"end":{"line":42,"column":null}}},"fnMap":{"0":{"name":"MonthlyDateCell","decl":{"start":{"line":12,"column":16},"end":{"line":12,"column":32}},"loc":{"start":{"line":19,"column":25},"end":{"line":44,"column":null}},"line":19}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":15},"end":{"line":18,"column":null}}],"line":18},"1":{"loc":{"start":{"line":20,"column":23},"end":{"line":24,"column":null}},"type":"cond-expr","locations":[{"start":{"line":21,"column":6},"end":{"line":21,"column":null}},{"start":{"line":22,"column":6},"end":{"line":24,"column":null}}],"line":20},"2":{"loc":{"start":{"line":22,"column":6},"end":{"line":24,"column":null}},"type":"cond-expr","locations":[{"start":{"line":23,"column":8},"end":{"line":23,"column":null}},{"start":{"line":24,"column":8},"end":{"line":24,"column":null}}],"line":22},"3":{"loc":{"start":{"line":29,"column":8},"end":{"line":29,"column":null}},"type":"cond-expr","locations":[{"start":{"line":29,"column":21},"end":{"line":29,"column":37}},{"start":{"line":29,"column":37},"end":{"line":29,"column":null}}],"line":29},"4":{"loc":{"start":{"line":32,"column":7},"end":{"line":40,"column":null}},"type":"cond-expr","locations":[{"start":{"line":33,"column":8},"end":{"line":38,"column":null}},{"start":{"line":40,"column":8},"end":{"line":40,"column":null}}],"line":32}},"s":{"0":2,"1":40,"2":40},"f":{"0":40},"b":{"0":[40],"1":[5,35],"2":[10,25],"3":[2,38],"4":[6,34]},"meta":{"lastBranch":5,"lastFunction":1,"lastStatement":3,"seen":{"s:34:10:34:11":0,"f:12:16:12:32":0,"b:18:15:18:Infinity":0,"s:20:23:24:Infinity":1,"b:21:6:21:Infinity:22:6:24:Infinity":1,"b:23:8:23:Infinity:24:8:24:Infinity":2,"s:26:2:42:Infinity":2,"b:29:21:29:37:29:37:29:Infinity":3,"b:33:8:38:Infinity:40:8:40:Infinity":4}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/MonthlyDateGauge.tsx","statementMap":{"0":{"start":{"line":31,"column":8},"end":{"line":31,"column":9}},"1":{"start":{"line":16,"column":26},"end":{"line":16,"column":null}},"2":{"start":{"line":17,"column":17},"end":{"line":17,"column":null}},"3":{"start":{"line":18,"column":8},"end":{"line":18,"column":null}},"4":{"start":{"line":19,"column":24},"end":{"line":19,"column":null}},"5":{"start":{"line":20,"column":25},"end":{"line":20,"column":null}},"6":{"start":{"line":22,"column":2},"end":{"line":51,"column":null}}},"fnMap":{"0":{"name":"MonthlyDateGauge","decl":{"start":{"line":9,"column":16},"end":{"line":9,"column":33}},"loc":{"start":{"line":15,"column":26},"end":{"line":53,"column":null}},"line":15}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},"type":"default-arg","locations":[{"start":{"line":11,"column":9},"end":{"line":11,"column":null}}],"line":11},"1":{"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}},"type":"default-arg","locations":[{"start":{"line":12,"column":16},"end":{"line":12,"column":null}}],"line":12},"2":{"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":null}},"type":"default-arg","locations":[{"start":{"line":13,"column":21},"end":{"line":13,"column":null}}],"line":13},"3":{"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"type":"default-arg","locations":[{"start":{"line":14,"column":19},"end":{"line":14,"column":null}}],"line":14}},"s":{"0":2,"1":6,"2":6,"3":6,"4":6,"5":6,"6":6},"f":{"0":6},"b":{"0":[6],"1":[6],"2":[6],"3":[6]},"meta":{"lastBranch":4,"lastFunction":1,"lastStatement":7,"seen":{"s:31:8:31:9":0,"f:9:16:9:33":0,"b:11:9:11:Infinity":0,"b:12:16:12:Infinity":1,"b:13:21:13:Infinity":2,"b:14:19:14:Infinity":3,"s:16:26:16:Infinity":1,"s:17:17:17:Infinity":2,"s:18:8:18:Infinity":3,"s:19:24:19:Infinity":4,"s:20:25:20:Infinity":5,"s:22:2:51:Infinity":6}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WeeklyCalendar.tsx","statementMap":{"0":{"start":{"line":23,"column":8},"end":{"line":23,"column":9}},"1":{"start":{"line":14,"column":50},"end":{"line":18,"column":null}},"2":{"start":{"line":20,"column":2},"end":{"line":26,"column":null}},"3":{"start":{"line":21,"column":4},"end":{"line":24,"column":null}},"4":{"start":{"line":28,"column":2},"end":{"line":84,"column":null}},"5":{"start":{"line":45,"column":10},"end":{"line":58,"column":null}},"6":{"start":{"line":65,"column":12},"end":{"line":79,"column":null}}},"fnMap":{"0":{"name":"WeeklyCalendar","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":31}},"loc":{"start":{"line":13,"column":24},"end":{"line":86,"column":null}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":44,"column":22},"end":{"line":44,"column":null}},"loc":{"start":{"line":45,"column":10},"end":{"line":58,"column":null}},"line":45},"2":{"name":"(anonymous_2)","decl":{"start":{"line":64,"column":24},"end":{"line":64,"column":32}},"loc":{"start":{"line":64,"column":32},"end":{"line":81,"column":11}},"line":64}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}},"type":"default-arg","locations":[{"start":{"line":12,"column":14},"end":{"line":12,"column":null}}],"line":12},"1":{"loc":{"start":{"line":20,"column":2},"end":{"line":26,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":2},"end":{"line":26,"column":null}},{"start":{},"end":{}}],"line":20},"2":{"loc":{"start":{"line":48,"column":14},"end":{"line":48,"column":null}},"type":"cond-expr","locations":[{"start":{"line":48,"column":32},"end":{"line":48,"column":47}},{"start":{"line":48,"column":47},"end":{"line":48,"column":null}}],"line":48},"3":{"loc":{"start":{"line":53,"column":16},"end":{"line":53,"column":null}},"type":"cond-expr","locations":[{"start":{"line":53,"column":34},"end":{"line":53,"column":52}},{"start":{"line":53,"column":52},"end":{"line":53,"column":null}}],"line":53},"4":{"loc":{"start":{"line":67,"column":17},"end":{"line":71,"column":null}},"type":"binary-expr","locations":[{"start":{"line":67,"column":17},"end":{"line":67,"column":null}},{"start":{"line":68,"column":18},"end":{"line":71,"column":null}}],"line":67},"5":{"loc":{"start":{"line":75,"column":20},"end":{"line":75,"column":null}},"type":"cond-expr","locations":[{"start":{"line":75,"column":40},"end":{"line":75,"column":52}},{"start":{"line":75,"column":52},"end":{"line":75,"column":null}}],"line":75}},"s":{"0":1,"1":1,"2":1,"3":0,"4":1,"5":7,"6":7},"f":{"0":1,"1":7,"2":7},"b":{"0":[1],"1":[0,1],"2":[1,6],"3":[1,6],"4":[7,4],"5":[3,4]},"meta":{"lastBranch":6,"lastFunction":3,"lastStatement":7,"seen":{"s:23:8:23:9":0,"f:8:16:8:31":0,"b:12:14:12:Infinity":0,"s:14:50:18:Infinity":1,"b:20:2:26:Infinity:undefined:undefined:undefined:undefined":1,"s:20:2:26:Infinity":2,"s:21:4:24:Infinity":3,"s:28:2:84:Infinity":4,"f:44:22:44:Infinity":1,"s:45:10:58:Infinity":5,"b:48:32:48:47:48:47:48:Infinity":2,"b:53:34:53:52:53:52:53:Infinity":3,"f:64:24:64:32":2,"s:65:12:79:Infinity":6,"b:67:17:67:Infinity:68:18:71:Infinity":4,"b:75:40:75:52:75:52:75:Infinity":5}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WorkingStoreCard.tsx","statementMap":{"0":{"start":{"line":22,"column":10},"end":{"line":22,"column":11}},"1":{"start":{"line":16,"column":36},"end":{"line":16,"column":null}},"2":{"start":{"line":18,"column":2},"end":{"line":43,"column":null}}},"fnMap":{"0":{"name":"WorkingStoreCard","decl":{"start":{"line":15,"column":16},"end":{"line":15,"column":33}},"loc":{"start":{"line":15,"column":67},"end":{"line":45,"column":null}},"line":15}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":9},"end":{"line":27,"column":null}},"type":"cond-expr","locations":[{"start":{"line":22,"column":10},"end":{"line":26,"column":null}},{"start":{"line":27,"column":12},"end":{"line":27,"column":null}}],"line":21}},"s":{"0":1,"1":6,"2":6},"f":{"0":6},"b":{"0":[0,6]},"meta":{"lastBranch":1,"lastFunction":1,"lastStatement":3,"seen":{"s:22:10:22:11":0,"f:15:16:15:33":0,"s:16:36:16:Infinity":1,"s:18:2:43:Infinity":2,"b:22:10:26:Infinity:27:12:27:Infinity":0}}} -,"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/features/home/user/ui/WorkingStoresList.tsx","statementMap":{"0":{"start":{"line":30,"column":8},"end":{"line":30,"column":9}},"1":{"start":{"line":25,"column":28},"end":{"line":25,"column":null}},"2":{"start":{"line":27,"column":2},"end":{"line":64,"column":null}},"3":{"start":{"line":52,"column":10},"end":{"line":57,"column":null}}},"fnMap":{"0":{"name":"WorkingStoresList","decl":{"start":{"line":17,"column":16},"end":{"line":17,"column":34}},"loc":{"start":{"line":24,"column":27},"end":{"line":66,"column":null}},"line":24},"1":{"name":"(anonymous_1)","decl":{"start":{"line":51,"column":27},"end":{"line":51,"column":28}},"loc":{"start":{"line":52,"column":10},"end":{"line":57,"column":null}},"line":52}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":null}}],"line":18},"1":{"loc":{"start":{"line":19,"column":2},"end":{"line":19,"column":null}},"type":"default-arg","locations":[{"start":{"line":19,"column":18},"end":{"line":19,"column":null}}],"line":19},"2":{"loc":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}},"type":"default-arg","locations":[{"start":{"line":20,"column":19},"end":{"line":20,"column":null}}],"line":20},"3":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":null}},"type":"default-arg","locations":[{"start":{"line":21,"column":17},"end":{"line":21,"column":null}}],"line":21},"4":{"loc":{"start":{"line":34,"column":14},"end":{"line":34,"column":null}},"type":"cond-expr","locations":[{"start":{"line":34,"column":40},"end":{"line":34,"column":57}},{"start":{"line":34,"column":57},"end":{"line":34,"column":null}}],"line":34},"5":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":null}},"type":"cond-expr","locations":[{"start":{"line":42,"column":41},"end":{"line":42,"column":58}},{"start":{"line":42,"column":58},"end":{"line":42,"column":null}}],"line":42},"6":{"loc":{"start":{"line":54,"column":13},"end":{"line":56,"column":null}},"type":"cond-expr","locations":[{"start":{"line":55,"column":14},"end":{"line":55,"column":null}},{"start":{"line":56,"column":16},"end":{"line":56,"column":null}}],"line":54}},"s":{"0":1,"1":2,"2":2,"3":6},"f":{"0":2,"1":6},"b":{"0":[2],"1":[2],"2":[2],"3":[2],"4":[1,1],"5":[1,1],"6":[4,2]},"meta":{"lastBranch":7,"lastFunction":2,"lastStatement":4,"seen":{"s:30:8:30:9":0,"f:17:16:17:34":0,"b:18:10:18:Infinity":0,"b:19:18:19:Infinity":1,"b:20:19:20:Infinity":2,"b:21:17:21:Infinity":3,"s:25:28:25:Infinity":1,"s:27:2:64:Infinity":2,"b:34:40:34:57:34:57:34:Infinity":4,"b:42:41:42:58:42:58:42:Infinity":5,"f:51:27:51:28":1,"s:52:10:57:Infinity":3,"b:55:14:55:Infinity:56:16:56:Infinity":6}}} -,"/Users/hyeon/Code/alter-client/src/shared/lib/tokens.ts": {"path":"/Users/hyeon/Code/alter-client/src/shared/lib/tokens.ts","statementMap":{"0":{"start":{"line":6,"column":22},"end":{"line":35,"column":null}},"1":{"start":{"line":38,"column":28},"end":{"line":41,"column":null}},"2":{"start":{"line":44,"column":25},"end":{"line":55,"column":null}},"3":{"start":{"line":58,"column":27},"end":{"line":74,"column":null}},"4":{"start":{"line":77,"column":29},"end":{"line":80,"column":null}},"5":{"start":{"line":83,"column":27},"end":{"line":86,"column":null}},"6":{"start":{"line":89,"column":26},"end":{"line":195,"column":null}}},"fnMap":{},"branchMap":{},"s":{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4,"6":4},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":7,"seen":{"s:6:22:35:Infinity":0,"s:38:28:41:Infinity":1,"s:44:25:55:Infinity":2,"s:58:27:74:Infinity":3,"s:77:29:80:Infinity":4,"s:83:27:86:Infinity":5,"s:89:26:195:Infinity":6}}} -,"/Users/hyeon/Code/alter-client/src/shared/stores/useDocStore.ts": {"path":"/Users/hyeon/Code/alter-client/src/shared/stores/useDocStore.ts","statementMap":{"0":{"start":{"line":4,"column":66},"end":{"line":12,"column":null}},"1":{"start":{"line":14,"column":26},"end":{"line":20,"column":null}},"2":{"start":{"line":14,"column":51},"end":{"line":20,"column":null}},"3":{"start":{"line":34,"column":27},"end":{"line":43,"column":null}},"4":{"start":{"line":34,"column":57},"end":{"line":43,"column":2}},"5":{"start":{"line":36,"column":33},"end":{"line":36,"column":null}},"6":{"start":{"line":38,"column":23},"end":{"line":40,"column":null}},"7":{"start":{"line":39,"column":6},"end":{"line":39,"column":null}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":null}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":26},"end":{"line":14,"column":27}},"loc":{"start":{"line":14,"column":51},"end":{"line":20,"column":null}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":34,"column":49},"end":{"line":34,"column":57}},"loc":{"start":{"line":34,"column":57},"end":{"line":43,"column":2}},"line":34},"2":{"name":"(anonymous_2)","decl":{"start":{"line":36,"column":18},"end":{"line":36,"column":33}},"loc":{"start":{"line":36,"column":33},"end":{"line":36,"column":null}},"line":36},"3":{"name":"(anonymous_3)","decl":{"start":{"line":37,"column":28},"end":{"line":37,"column":40}},"loc":{"start":{"line":37,"column":40},"end":{"line":42,"column":null}},"line":37},"4":{"name":"(anonymous_4)","decl":{"start":{"line":38,"column":45},"end":{"line":38,"column":46}},"loc":{"start":{"line":39,"column":6},"end":{"line":39,"column":null}},"line":39}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":0,"6":0,"7":0,"8":0},"f":{"0":1,"1":1,"2":0,"3":0,"4":0},"b":{},"meta":{"lastBranch":0,"lastFunction":5,"lastStatement":9,"seen":{"s:4:66:12:Infinity":0,"s:14:26:20:Infinity":1,"f:14:26:14:27":0,"s:14:51:20:Infinity":2,"s:34:27:43:Infinity":3,"f:34:49:34:57":1,"s:34:57:43:2":4,"f:36:18:36:33":2,"s:36:33:36:Infinity":5,"f:37:28:37:40":3,"s:38:23:40:Infinity":6,"f:38:45:38:46":4,"s:39:6:39:Infinity":7,"s:41:4:41:Infinity":8}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/MobileLayout.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/MobileLayout.tsx","statementMap":{"0":{"start":{"line":16,"column":6},"end":{"line":16,"column":7}},"1":{"start":{"line":14,"column":2},"end":{"line":22,"column":null}}},"fnMap":{"0":{"name":"MobileLayout","decl":{"start":{"line":9,"column":16},"end":{"line":9,"column":29}},"loc":{"start":{"line":13,"column":22},"end":{"line":24,"column":null}},"line":13}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},"type":"default-arg","locations":[{"start":{"line":11,"column":14},"end":{"line":11,"column":null}}],"line":11},"1":{"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}},"type":"default-arg","locations":[{"start":{"line":12,"column":13},"end":{"line":12,"column":null}}],"line":12}},"s":{"0":1,"1":1},"f":{"0":1},"b":{"0":[1],"1":[1]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:16:6:16:7":0,"f:9:16:9:29":0,"b:11:14:11:Infinity":0,"b:12:13:12:Infinity":1,"s:14:2:22:Infinity":1}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/Spinner.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/Spinner.tsx","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":5}},"1":{"start":{"line":7,"column":2},"end":{"line":13,"column":null}}},"fnMap":{"0":{"name":"Spinner","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":24}},"loc":{"start":{"line":6,"column":69},"end":{"line":15,"column":null}},"line":6}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":26},"end":{"line":6,"column":37}},"type":"default-arg","locations":[{"start":{"line":6,"column":33},"end":{"line":6,"column":37}}],"line":6},"1":{"loc":{"start":{"line":6,"column":37},"end":{"line":6,"column":52}},"type":"default-arg","locations":[{"start":{"line":6,"column":49},"end":{"line":6,"column":52}}],"line":6}},"s":{"0":1,"1":3},"f":{"0":3},"b":{"0":[3],"1":[3]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:8:4:8:5":0,"f:6:16:6:24":0,"b:6:33:6:37":0,"b:6:49:6:52":1,"s:7:2:13:Infinity":1}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/common/AuthButton.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/AuthButton.tsx","statementMap":{"0":{"start":{"line":12,"column":4},"end":{"line":12,"column":5}},"1":{"start":{"line":11,"column":2},"end":{"line":34,"column":null}}},"fnMap":{"0":{"name":"AuthButton","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":27}},"loc":{"start":{"line":10,"column":20},"end":{"line":36,"column":null}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"type":"default-arg","locations":[{"start":{"line":7,"column":14},"end":{"line":7,"column":null}}],"line":7},"1":{"loc":{"start":{"line":24,"column":16},"end":{"line":24,"column":null}},"type":"cond-expr","locations":[{"start":{"line":24,"column":33},"end":{"line":24,"column":49}},{"start":{"line":24,"column":49},"end":{"line":24,"column":null}}],"line":24},"2":{"loc":{"start":{"line":26,"column":19},"end":{"line":28,"column":null}},"type":"cond-expr","locations":[{"start":{"line":27,"column":12},"end":{"line":27,"column":null}},{"start":{"line":28,"column":12},"end":{"line":28,"column":null}}],"line":26},"3":{"loc":{"start":{"line":29,"column":17},"end":{"line":29,"column":null}},"type":"cond-expr","locations":[{"start":{"line":29,"column":34},"end":{"line":29,"column":40}},{"start":{"line":29,"column":40},"end":{"line":29,"column":null}}],"line":29}},"s":{"0":1,"1":2},"f":{"0":2},"b":{"0":[2],"1":[1,1],"2":[1,1],"3":[1,1]},"meta":{"lastBranch":4,"lastFunction":1,"lastStatement":2,"seen":{"s:12:4:12:5":0,"f:6:16:6:27":0,"b:7:14:7:Infinity":0,"s:11:2:34:Infinity":1,"b:24:33:24:49:24:49:24:Infinity":1,"b:27:12:27:Infinity:28:12:28:Infinity":2,"b:29:34:29:40:29:40:29:Infinity":3}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/common/AuthInput.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/AuthInput.tsx","statementMap":{"0":{"start":{"line":14,"column":4},"end":{"line":14,"column":5}},"1":{"start":{"line":13,"column":2},"end":{"line":32,"column":null}}},"fnMap":{"0":{"name":"AuthInput","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":26}},"loc":{"start":{"line":12,"column":19},"end":{"line":34,"column":null}},"line":12}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":2},"end":{"line":10,"column":null}},"type":"default-arg","locations":[{"start":{"line":10,"column":14},"end":{"line":10,"column":null}}],"line":10},"1":{"loc":{"start":{"line":20,"column":16},"end":{"line":20,"column":null}},"type":"binary-expr","locations":[{"start":{"line":20,"column":16},"end":{"line":20,"column":31}},{"start":{"line":20,"column":31},"end":{"line":20,"column":null}}],"line":20}},"s":{"0":1,"1":3},"f":{"0":3},"b":{"0":[3],"1":[3,3]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:14:4:14:5":0,"f:8:16:8:26":0,"b:10:14:10:Infinity":0,"s:13:2:32:Infinity":1,"b:20:16:20:31:20:31:20:Infinity":1}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/common/Docbar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/Docbar.tsx","statementMap":{"0":{"start":{"line":34,"column":6},"end":{"line":34,"column":7}},"1":{"start":{"line":7,"column":26},"end":{"line":7,"column":null}},"2":{"start":{"line":26,"column":15},"end":{"line":26,"column":null}},"3":{"start":{"line":28,"column":2},"end":{"line":49,"column":null}},"4":{"start":{"line":61,"column":2},"end":{"line":100,"column":null}},"5":{"start":{"line":69,"column":25},"end":{"line":69,"column":null}},"6":{"start":{"line":76,"column":25},"end":{"line":76,"column":null}},"7":{"start":{"line":83,"column":25},"end":{"line":83,"column":null}},"8":{"start":{"line":90,"column":25},"end":{"line":90,"column":null}},"9":{"start":{"line":97,"column":25},"end":{"line":97,"column":null}},"10":{"start":{"line":105,"column":19},"end":{"line":105,"column":null}},"11":{"start":{"line":106,"column":23},"end":{"line":106,"column":null}},"12":{"start":{"line":107,"column":22},"end":{"line":107,"column":null}},"13":{"start":{"line":107,"column":43},"end":{"line":107,"column":60}},"14":{"start":{"line":108,"column":35},"end":{"line":110,"column":null}},"15":{"start":{"line":109,"column":13},"end":{"line":109,"column":null}},"16":{"start":{"line":112,"column":2},"end":{"line":114,"column":null}},"17":{"start":{"line":113,"column":4},"end":{"line":113,"column":null}},"18":{"start":{"line":116,"column":44},"end":{"line":122,"column":null}},"19":{"start":{"line":124,"column":21},"end":{"line":126,"column":null}},"20":{"start":{"line":125,"column":4},"end":{"line":125,"column":null}},"21":{"start":{"line":128,"column":2},"end":{"line":128,"column":null}}},"fnMap":{"0":{"name":"DocContent","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":25,"column":3},"end":{"line":51,"column":null}},"line":25},"1":{"name":"DocbarView","decl":{"start":{"line":60,"column":16},"end":{"line":60,"column":27}},"loc":{"start":{"line":60,"column":73},"end":{"line":102,"column":null}},"line":60},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":19},"end":{"line":69,"column":25}},"loc":{"start":{"line":69,"column":25},"end":{"line":69,"column":null}},"line":69},"3":{"name":"(anonymous_3)","decl":{"start":{"line":76,"column":19},"end":{"line":76,"column":25}},"loc":{"start":{"line":76,"column":25},"end":{"line":76,"column":null}},"line":76},"4":{"name":"(anonymous_4)","decl":{"start":{"line":83,"column":19},"end":{"line":83,"column":25}},"loc":{"start":{"line":83,"column":25},"end":{"line":83,"column":null}},"line":83},"5":{"name":"(anonymous_5)","decl":{"start":{"line":90,"column":19},"end":{"line":90,"column":25}},"loc":{"start":{"line":90,"column":25},"end":{"line":90,"column":null}},"line":90},"6":{"name":"(anonymous_6)","decl":{"start":{"line":97,"column":19},"end":{"line":97,"column":25}},"loc":{"start":{"line":97,"column":25},"end":{"line":97,"column":null}},"line":97},"7":{"name":"Docbar","decl":{"start":{"line":104,"column":16},"end":{"line":104,"column":25}},"loc":{"start":{"line":104,"column":25},"end":{"line":129,"column":null}},"line":104},"8":{"name":"(anonymous_8)","decl":{"start":{"line":107,"column":34},"end":{"line":107,"column":43}},"loc":{"start":{"line":107,"column":43},"end":{"line":107,"column":60}},"line":107},"9":{"name":"(anonymous_9)","decl":{"start":{"line":109,"column":4},"end":{"line":109,"column":13}},"loc":{"start":{"line":109,"column":13},"end":{"line":109,"column":null}},"line":109},"10":{"name":"(anonymous_10)","decl":{"start":{"line":112,"column":12},"end":{"line":112,"column":18}},"loc":{"start":{"line":112,"column":18},"end":{"line":114,"column":5}},"line":112},"11":{"name":"(anonymous_11)","decl":{"start":{"line":124,"column":21},"end":{"line":124,"column":22}},"loc":{"start":{"line":124,"column":38},"end":{"line":126,"column":null}},"line":124}},"branchMap":{"0":{"loc":{"start":{"line":35,"column":22},"end":{"line":35,"column":67}},"type":"cond-expr","locations":[{"start":{"line":35,"column":35},"end":{"line":35,"column":53}},{"start":{"line":35,"column":53},"end":{"line":35,"column":67}}],"line":35},"1":{"loc":{"start":{"line":39,"column":19},"end":{"line":39,"column":null}},"type":"cond-expr","locations":[{"start":{"line":39,"column":32},"end":{"line":39,"column":50}},{"start":{"line":39,"column":50},"end":{"line":39,"column":null}}],"line":39}},"s":{"0":1,"1":1,"2":15,"3":15,"4":3,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},"f":{"0":15,"1":3,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"b":{"0":[3,12],"1":[3,12]},"meta":{"lastBranch":2,"lastFunction":12,"lastStatement":22,"seen":{"s:34:6:34:7":0,"s:7:26:7:Infinity":1,"f:13:9:13:20":0,"s:26:15:26:Infinity":2,"s:28:2:49:Infinity":3,"b:35:35:35:53:35:53:35:67":0,"b:39:32:39:50:39:50:39:Infinity":1,"f:60:16:60:27":1,"s:61:2:100:Infinity":4,"f:69:19:69:25":2,"s:69:25:69:Infinity":5,"f:76:19:76:25":3,"s:76:25:76:Infinity":6,"f:83:19:83:25":4,"s:83:25:83:Infinity":7,"f:90:19:90:25":5,"s:90:25:90:Infinity":8,"f:97:19:97:25":6,"s:97:25:97:Infinity":9,"f:104:16:104:25":7,"s:105:19:105:Infinity":10,"s:106:23:106:Infinity":11,"s:107:22:107:Infinity":12,"f:107:34:107:43":8,"s:107:43:107:60":13,"s:108:35:110:Infinity":14,"f:109:4:109:13":9,"s:109:13:109:Infinity":15,"s:112:2:114:Infinity":16,"f:112:12:112:18":10,"s:113:4:113:Infinity":17,"s:116:44:122:Infinity":18,"s:124:21:126:Infinity":19,"f:124:21:124:22":11,"s:125:4:125:Infinity":20,"s:128:2:128:Infinity":21}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/common/MoreButton.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/MoreButton.tsx","statementMap":{"0":{"start":{"line":13,"column":4},"end":{"line":13,"column":5}},"1":{"start":{"line":12,"column":2},"end":{"line":19,"column":null}}},"fnMap":{"0":{"name":"MoreButton","decl":{"start":{"line":7,"column":16},"end":{"line":7,"column":27}},"loc":{"start":{"line":11,"column":20},"end":{"line":21,"column":null}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":2},"end":{"line":8,"column":null}},"type":"default-arg","locations":[{"start":{"line":8,"column":10},"end":{"line":8,"column":null}}],"line":8},"1":{"loc":{"start":{"line":9,"column":2},"end":{"line":9,"column":null}},"type":"default-arg","locations":[{"start":{"line":9,"column":14},"end":{"line":9,"column":null}}],"line":9}},"s":{"0":2,"1":3},"f":{"0":3},"b":{"0":[3],"1":[3]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:13:4:13:5":0,"f:7:16:7:27":0,"b:8:10:8:Infinity":0,"b:9:14:9:Infinity":1,"s:12:2:19:Infinity":1}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/common/Navbar.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/common/Navbar.tsx","statementMap":{"0":{"start":{"line":37,"column":12},"end":{"line":37,"column":13}},"1":{"start":{"line":21,"column":19},"end":{"line":21,"column":null}},"2":{"start":{"line":22,"column":17},"end":{"line":22,"column":null}},"3":{"start":{"line":24,"column":26},"end":{"line":30,"column":null}},"4":{"start":{"line":25,"column":4},"end":{"line":28,"column":null}},"5":{"start":{"line":26,"column":6},"end":{"line":26,"column":null}},"6":{"start":{"line":27,"column":6},"end":{"line":27,"column":null}},"7":{"start":{"line":29,"column":4},"end":{"line":29,"column":null}},"8":{"start":{"line":32,"column":2},"end":{"line":89,"column":null}}},"fnMap":{"0":{"name":"Navbar","decl":{"start":{"line":16,"column":16},"end":{"line":16,"column":23}},"loc":{"start":{"line":20,"column":16},"end":{"line":91,"column":null}},"line":20},"1":{"name":"(anonymous_1)","decl":{"start":{"line":24,"column":26},"end":{"line":24,"column":32}},"loc":{"start":{"line":24,"column":32},"end":{"line":30,"column":null}},"line":24}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":17,"column":null}},"type":"default-arg","locations":[{"start":{"line":17,"column":12},"end":{"line":17,"column":null}}],"line":17},"1":{"loc":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"type":"default-arg","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":null}}],"line":18},"2":{"loc":{"start":{"line":25,"column":4},"end":{"line":28,"column":null}},"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":28,"column":null}},{"start":{},"end":{}}],"line":25},"3":{"loc":{"start":{"line":35,"column":9},"end":{"line":48,"column":null}},"type":"cond-expr","locations":[{"start":{"line":36,"column":10},"end":{"line":39,"column":null}},{"start":{"line":41,"column":10},"end":{"line":48,"column":null}}],"line":35},"4":{"loc":{"start":{"line":53,"column":9},"end":{"line":65,"column":null}},"type":"binary-expr","locations":[{"start":{"line":53,"column":9},"end":{"line":53,"column":null}},{"start":{"line":54,"column":10},"end":{"line":65,"column":null}}],"line":53},"5":{"loc":{"start":{"line":70,"column":9},"end":{"line":86,"column":null}},"type":"binary-expr","locations":[{"start":{"line":70,"column":9},"end":{"line":70,"column":null}},{"start":{"line":71,"column":10},"end":{"line":86,"column":null}}],"line":70}},"s":{"0":1,"1":2,"2":2,"3":2,"4":0,"5":0,"6":0,"7":0,"8":2},"f":{"0":2,"1":0},"b":{"0":[2],"1":[2],"2":[0,0],"3":[1,1],"4":[2,1],"5":[2,1]},"meta":{"lastBranch":6,"lastFunction":2,"lastStatement":9,"seen":{"s:37:12:37:13":0,"f:16:16:16:23":0,"b:17:12:17:Infinity":0,"b:18:10:18:Infinity":1,"s:21:19:21:Infinity":1,"s:22:17:22:Infinity":2,"s:24:26:30:Infinity":3,"f:24:26:24:32":1,"b:25:4:28:Infinity:undefined:undefined:undefined:undefined":2,"s:25:4:28:Infinity":4,"s:26:6:26:Infinity":5,"s:27:6:27:Infinity":6,"s:29:4:29:Infinity":7,"s:32:2:89:Infinity":8,"b:36:10:39:Infinity:41:10:48:Infinity":3,"b:53:9:53:Infinity:54:10:65:Infinity":4,"b:70:9:70:Infinity:71:10:86:Infinity":5}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/home/ApplicationStatusBadge.tsx","statementMap":{"0":{"start":{"line":29,"column":6},"end":{"line":29,"column":7}},"1":{"start":{"line":6,"column":24},"end":{"line":17,"column":null}},"2":{"start":{"line":23,"column":16},"end":{"line":23,"column":null}},"3":{"start":{"line":25,"column":2},"end":{"line":32,"column":null}}},"fnMap":{"0":{"name":"ApplicationStatusBadge","decl":{"start":{"line":19,"column":16},"end":{"line":19,"column":39}},"loc":{"start":{"line":22,"column":32},"end":{"line":34,"column":null}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":null}},"type":"default-arg","locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":null}}],"line":21}},"s":{"0":3,"1":3,"2":9,"3":9},"f":{"0":9},"b":{"0":[9]},"meta":{"lastBranch":1,"lastFunction":1,"lastStatement":4,"seen":{"s:29:6:29:7":0,"s:6:24:17:Infinity":1,"f:19:16:19:39":0,"b:21:14:21:Infinity":0,"s:23:16:23:Infinity":2,"s:25:2:32:Infinity":3}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/home/WorkCategoryBadge.tsx","statementMap":{"0":{"start":{"line":14,"column":6},"end":{"line":14,"column":7}},"1":{"start":{"line":10,"column":2},"end":{"line":17,"column":null}}},"fnMap":{"0":{"name":"WorkCategoryBadge","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":34}},"loc":{"start":{"line":9,"column":27},"end":{"line":19,"column":null}},"line":9}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"type":"default-arg","locations":[{"start":{"line":7,"column":10},"end":{"line":7,"column":null}}],"line":7},"1":{"loc":{"start":{"line":8,"column":2},"end":{"line":8,"column":null}},"type":"default-arg","locations":[{"start":{"line":8,"column":14},"end":{"line":8,"column":null}}],"line":8}},"s":{"0":2,"1":3},"f":{"0":3},"b":{"0":[3],"1":[3]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:14:6:14:7":0,"f:6:16:6:34":0,"b:7:10:7:Infinity":0,"b:8:14:8:Infinity":1,"s:10:2:17:Infinity":1}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/home/WorkerRoleBadge.tsx","statementMap":{"0":{"start":{"line":29,"column":6},"end":{"line":29,"column":7}},"1":{"start":{"line":8,"column":23},"end":{"line":17,"column":null}},"2":{"start":{"line":23,"column":16},"end":{"line":23,"column":null}},"3":{"start":{"line":25,"column":2},"end":{"line":30,"column":null}}},"fnMap":{"0":{"name":"WorkerRoleBadge","decl":{"start":{"line":19,"column":16},"end":{"line":19,"column":32}},"loc":{"start":{"line":22,"column":25},"end":{"line":32,"column":null}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":null}},"type":"default-arg","locations":[{"start":{"line":21,"column":14},"end":{"line":21,"column":null}}],"line":21}},"s":{"0":2,"1":2,"2":4,"3":4},"f":{"0":4},"b":{"0":[4]},"meta":{"lastBranch":1,"lastFunction":1,"lastStatement":4,"seen":{"s:29:6:29:7":0,"s:8:23:17:Infinity":1,"f:19:16:19:32":0,"b:21:14:21:Infinity":0,"s:23:16:23:Infinity":2,"s:25:2:30:Infinity":3}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/OngoingPostingCard.tsx","statementMap":{"0":{"start":{"line":34,"column":8},"end":{"line":34,"column":9}},"1":{"start":{"line":27,"column":2},"end":{"line":48,"column":null}},"2":{"start":{"line":57,"column":2},"end":{"line":78,"column":null}},"3":{"start":{"line":61,"column":10},"end":{"line":66,"column":null}},"4":{"start":{"line":64,"column":27},"end":{"line":64,"column":null}}},"fnMap":{"0":{"name":"PostingRow","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":20}},"loc":{"start":{"line":26,"column":3},"end":{"line":50,"column":null}},"line":26},"1":{"name":"OngoingPostingCard","decl":{"start":{"line":52,"column":16},"end":{"line":52,"column":35}},"loc":{"start":{"line":56,"column":28},"end":{"line":80,"column":null}},"line":56},"2":{"name":"(anonymous_2)","decl":{"start":{"line":60,"column":22},"end":{"line":60,"column":23}},"loc":{"start":{"line":61,"column":10},"end":{"line":66,"column":null}},"line":61},"3":{"name":"(anonymous_3)","decl":{"start":{"line":64,"column":21},"end":{"line":64,"column":27}},"loc":{"start":{"line":64,"column":27},"end":{"line":64,"column":null}},"line":64}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":80},"end":{"line":31,"column":121}},"type":"cond-expr","locations":[{"start":{"line":31,"column":90},"end":{"line":31,"column":119}},{"start":{"line":31,"column":119},"end":{"line":31,"column":121}}],"line":31}},"s":{"0":1,"1":3,"2":2,"3":3,"4":0},"f":{"0":3,"1":2,"2":3,"3":0},"b":{"0":[1,2]},"meta":{"lastBranch":1,"lastFunction":4,"lastStatement":5,"seen":{"s:34:8:34:9":0,"f:18:9:18:20":0,"s:27:2:48:Infinity":1,"b:31:90:31:119:31:119:31:121":0,"f:52:16:52:35":1,"s:57:2:78:Infinity":2,"f:60:22:60:23":2,"s:61:10:66:Infinity":3,"f:64:21:64:27":3,"s:64:27:64:Infinity":4}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/SubstituteApprovalCard.tsx","statementMap":{"0":{"start":{"line":55,"column":10},"end":{"line":55,"column":11}},"1":{"start":{"line":23,"column":4},"end":{"line":34,"column":null}},"2":{"start":{"line":45,"column":17},"end":{"line":45,"column":null}},"3":{"start":{"line":47,"column":2},"end":{"line":85,"column":null}},"4":{"start":{"line":94,"column":2},"end":{"line":115,"column":null}},"5":{"start":{"line":98,"column":10},"end":{"line":103,"column":null}},"6":{"start":{"line":101,"column":27},"end":{"line":101,"column":null}}},"fnMap":{"0":{"name":"RequestRow","decl":{"start":{"line":36,"column":9},"end":{"line":36,"column":20}},"loc":{"start":{"line":44,"column":3},"end":{"line":87,"column":null}},"line":44},"1":{"name":"SubstituteApprovalCard","decl":{"start":{"line":89,"column":16},"end":{"line":89,"column":39}},"loc":{"start":{"line":93,"column":32},"end":{"line":117,"column":null}},"line":93},"2":{"name":"(anonymous_2)","decl":{"start":{"line":97,"column":22},"end":{"line":97,"column":23}},"loc":{"start":{"line":98,"column":10},"end":{"line":103,"column":null}},"line":98},"3":{"name":"(anonymous_3)","decl":{"start":{"line":101,"column":21},"end":{"line":101,"column":27}},"loc":{"start":{"line":101,"column":27},"end":{"line":101,"column":null}},"line":101}},"branchMap":{"0":{"loc":{"start":{"line":51,"column":104},"end":{"line":51,"column":145}},"type":"cond-expr","locations":[{"start":{"line":51,"column":114},"end":{"line":51,"column":143}},{"start":{"line":51,"column":143},"end":{"line":51,"column":145}}],"line":51},"1":{"loc":{"start":{"line":54,"column":9},"end":{"line":64,"column":null}},"type":"cond-expr","locations":[{"start":{"line":55,"column":10},"end":{"line":59,"column":null}},{"start":{"line":61,"column":10},"end":{"line":64,"column":null}}],"line":54}},"s":{"0":1,"1":1,"2":3,"3":3,"4":1,"5":3,"6":0},"f":{"0":3,"1":1,"2":3,"3":0},"b":{"0":[2,1],"1":[0,3]},"meta":{"lastBranch":2,"lastFunction":4,"lastStatement":7,"seen":{"s:55:10:55:11":0,"s:23:4:34:Infinity":1,"f:36:9:36:20":0,"s:45:17:45:Infinity":2,"s:47:2:85:Infinity":3,"b:51:114:51:143:51:143:51:145":0,"b:55:10:59:Infinity:61:10:64:Infinity":1,"f:89:16:89:39":1,"s:94:2:115:Infinity":4,"f:97:22:97:23":2,"s:98:10:103:Infinity":5,"f:101:21:101:27":3,"s:101:27:101:Infinity":6}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/WorkerImageCard.tsx","statementMap":{"0":{"start":{"line":22,"column":10},"end":{"line":22,"column":11}},"1":{"start":{"line":16,"column":2},"end":{"line":40,"column":null}}},"fnMap":{"0":{"name":"WorkerImageCard","decl":{"start":{"line":10,"column":16},"end":{"line":10,"column":32}},"loc":{"start":{"line":15,"column":25},"end":{"line":42,"column":null}},"line":15}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"type":"default-arg","locations":[{"start":{"line":14,"column":14},"end":{"line":14,"column":null}}],"line":14},"1":{"loc":{"start":{"line":21,"column":9},"end":{"line":31,"column":null}},"type":"cond-expr","locations":[{"start":{"line":22,"column":10},"end":{"line":26,"column":null}},{"start":{"line":28,"column":10},"end":{"line":31,"column":null}}],"line":21}},"s":{"0":1,"1":2},"f":{"0":2},"b":{"0":[2],"1":[1,1]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:22:10:22:11":0,"f:10:16:10:32":0,"b:14:14:14:Infinity":0,"s:16:2:40:Infinity":1,"b:22:10:26:Infinity:28:10:31:Infinity":1}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/WorkerListItem.tsx","statementMap":{"0":{"start":{"line":28,"column":6},"end":{"line":28,"column":7}},"1":{"start":{"line":18,"column":2},"end":{"line":31,"column":null}},"2":{"start":{"line":42,"column":2},"end":{"line":79,"column":null}}},"fnMap":{"0":{"name":"EllipsisIcon","decl":{"start":{"line":17,"column":9},"end":{"line":17,"column":24}},"loc":{"start":{"line":17,"column":24},"end":{"line":33,"column":null}},"line":17},"1":{"name":"WorkerListItem","decl":{"start":{"line":35,"column":16},"end":{"line":35,"column":31}},"loc":{"start":{"line":41,"column":24},"end":{"line":81,"column":null}},"line":41}},"branchMap":{"0":{"loc":{"start":{"line":45,"column":9},"end":{"line":55,"column":null}},"type":"cond-expr","locations":[{"start":{"line":46,"column":10},"end":{"line":50,"column":null}},{"start":{"line":52,"column":10},"end":{"line":55,"column":null}}],"line":45}},"s":{"0":1,"1":2,"2":2},"f":{"0":2,"1":2},"b":{"0":[0,2]},"meta":{"lastBranch":1,"lastFunction":2,"lastStatement":3,"seen":{"s:28:6:28:7":0,"f:17:9:17:24":0,"s:18:2:31:Infinity":1,"f:35:16:35:31":1,"s:42:2:79:Infinity":2,"b:46:10:50:Infinity:52:10:55:Infinity":0}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/alba-find/Albabox.tsx","statementMap":{"0":{"start":{"line":31,"column":8},"end":{"line":31,"column":9}},"1":{"start":{"line":28,"column":2},"end":{"line":66,"column":null}}},"fnMap":{"0":{"name":"Albabox","decl":{"start":{"line":16,"column":16},"end":{"line":16,"column":24}},"loc":{"start":{"line":27,"column":17},"end":{"line":68,"column":null}},"line":27}},"branchMap":{"0":{"loc":{"start":{"line":35,"column":22},"end":{"line":35,"column":null}},"type":"cond-expr","locations":[{"start":{"line":35,"column":30},"end":{"line":35,"column":41}},{"start":{"line":35,"column":41},"end":{"line":35,"column":null}}],"line":35},"1":{"loc":{"start":{"line":37,"column":12},"end":{"line":39,"column":null}},"type":"cond-expr","locations":[{"start":{"line":38,"column":16},"end":{"line":38,"column":null}},{"start":{"line":39,"column":16},"end":{"line":39,"column":null}}],"line":37},"2":{"loc":{"start":{"line":62,"column":9},"end":{"line":63,"column":null}},"type":"binary-expr","locations":[{"start":{"line":62,"column":9},"end":{"line":62,"column":30}},{"start":{"line":62,"column":30},"end":{"line":62,"column":null}},{"start":{"line":63,"column":10},"end":{"line":63,"column":null}}],"line":62}},"s":{"0":1,"1":3},"f":{"0":3},"b":{"0":[1,2],"1":[1,2],"2":[3,2,2]},"meta":{"lastBranch":3,"lastFunction":1,"lastStatement":2,"seen":{"s:31:8:31:9":0,"f:16:16:16:24":0,"s:28:2:66:Infinity":1,"b:35:30:35:41:35:41:35:Infinity":0,"b:38:16:38:Infinity:39:16:39:Infinity":1,"b:62:9:62:30:62:30:62:Infinity:63:10:63:Infinity":2}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/social/SocialCategory.tsx","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":5}},"1":{"start":{"line":7,"column":2},"end":{"line":17,"column":null}}},"fnMap":{"0":{"name":"SocialCategory","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":31}},"loc":{"start":{"line":6,"column":79},"end":{"line":19,"column":null}},"line":6}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":40},"end":{"line":6,"column":55}},"type":"default-arg","locations":[{"start":{"line":6,"column":49},"end":{"line":6,"column":55}}],"line":6},"1":{"loc":{"start":{"line":11,"column":8},"end":{"line":13,"column":null}},"type":"cond-expr","locations":[{"start":{"line":12,"column":12},"end":{"line":12,"column":null}},{"start":{"line":13,"column":12},"end":{"line":13,"column":null}}],"line":11}},"s":{"0":1,"1":2},"f":{"0":2},"b":{"0":[2],"1":[1,1]},"meta":{"lastBranch":2,"lastFunction":1,"lastStatement":2,"seen":{"s:8:4:8:5":0,"f:6:16:6:31":0,"b:6:49:6:55":0,"s:7:2:17:Infinity":1,"b:12:12:12:Infinity:13:12:13:Infinity":1}}} -,"/Users/hyeon/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx": {"path":"/Users/hyeon/Code/alter-client/src/shared/ui/manager/social/SocialList.tsx","statementMap":{"0":{"start":{"line":31,"column":6},"end":{"line":31,"column":7}},"1":{"start":{"line":1,"column":59},"end":{"line":1,"column":null}},"2":{"start":{"line":20,"column":21},"end":{"line":20,"column":null}},"3":{"start":{"line":21,"column":23},"end":{"line":21,"column":null}},"4":{"start":{"line":29,"column":2},"end":{"line":50,"column":null}},"5":{"start":{"line":62,"column":38},"end":{"line":62,"column":null}},"6":{"start":{"line":63,"column":38},"end":{"line":63,"column":null}},"7":{"start":{"line":65,"column":23},"end":{"line":65,"column":null}},"8":{"start":{"line":66,"column":20},"end":{"line":66,"column":null}},"9":{"start":{"line":67,"column":29},"end":{"line":67,"column":null}},"10":{"start":{"line":69,"column":65},"end":{"line":75,"column":null}},"11":{"start":{"line":70,"column":4},"end":{"line":70,"column":null}},"12":{"start":{"line":71,"column":4},"end":{"line":71,"column":null}},"13":{"start":{"line":72,"column":4},"end":{"line":72,"column":null}},"14":{"start":{"line":73,"column":4},"end":{"line":73,"column":null}},"15":{"start":{"line":74,"column":4},"end":{"line":74,"column":null}},"16":{"start":{"line":77,"column":65},"end":{"line":86,"column":null}},"17":{"start":{"line":78,"column":4},"end":{"line":78,"column":null}},"18":{"start":{"line":78,"column":65},"end":{"line":78,"column":null}},"19":{"start":{"line":80,"column":19},"end":{"line":80,"column":null}},"20":{"start":{"line":81,"column":27},"end":{"line":84,"column":null}},"21":{"start":{"line":85,"column":4},"end":{"line":85,"column":null}},"22":{"start":{"line":88,"column":21},"end":{"line":94,"column":null}},"23":{"start":{"line":89,"column":4},"end":{"line":89,"column":null}},"24":{"start":{"line":89,"column":44},"end":{"line":89,"column":null}},"25":{"start":{"line":91,"column":4},"end":{"line":91,"column":null}},"26":{"start":{"line":92,"column":4},"end":{"line":92,"column":null}},"27":{"start":{"line":93,"column":4},"end":{"line":93,"column":null}},"28":{"start":{"line":93,"column":27},"end":{"line":93,"column":79}},"29":{"start":{"line":96,"column":63},"end":{"line":98,"column":null}},"30":{"start":{"line":97,"column":4},"end":{"line":97,"column":null}},"31":{"start":{"line":100,"column":67},"end":{"line":102,"column":null}},"32":{"start":{"line":101,"column":4},"end":{"line":101,"column":null}},"33":{"start":{"line":104,"column":2},"end":{"line":131,"column":null}},"34":{"start":{"line":136,"column":2},"end":{"line":152,"column":null}}},"fnMap":{"0":{"name":"SocialList","decl":{"start":{"line":23,"column":16},"end":{"line":23,"column":27}},"loc":{"start":{"line":28,"column":23},"end":{"line":52,"column":null}},"line":28},"1":{"name":"SwipeableSocialItem","decl":{"start":{"line":54,"column":16},"end":{"line":54,"column":36}},"loc":{"start":{"line":61,"column":29},"end":{"line":133,"column":null}},"line":61},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":65},"end":{"line":69,"column":74}},"loc":{"start":{"line":69,"column":74},"end":{"line":75,"column":null}},"line":69},"3":{"name":"(anonymous_3)","decl":{"start":{"line":77,"column":65},"end":{"line":77,"column":74}},"loc":{"start":{"line":77,"column":74},"end":{"line":86,"column":null}},"line":77},"4":{"name":"(anonymous_4)","decl":{"start":{"line":88,"column":21},"end":{"line":88,"column":22}},"loc":{"start":{"line":88,"column":44},"end":{"line":94,"column":null}},"line":88},"5":{"name":"(anonymous_5)","decl":{"start":{"line":93,"column":18},"end":{"line":93,"column":27}},"loc":{"start":{"line":93,"column":27},"end":{"line":93,"column":79}},"line":93},"6":{"name":"(anonymous_6)","decl":{"start":{"line":96,"column":63},"end":{"line":96,"column":72}},"loc":{"start":{"line":96,"column":72},"end":{"line":98,"column":null}},"line":96},"7":{"name":"(anonymous_7)","decl":{"start":{"line":100,"column":67},"end":{"line":100,"column":76}},"loc":{"start":{"line":100,"column":76},"end":{"line":102,"column":null}},"line":100},"8":{"name":"SocialAction","decl":{"start":{"line":135,"column":16},"end":{"line":135,"column":29}},"loc":{"start":{"line":135,"column":70},"end":{"line":154,"column":null}},"line":135}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":null}},"type":"default-arg","locations":[{"start":{"line":27,"column":11},"end":{"line":27,"column":null}}],"line":27},"1":{"loc":{"start":{"line":46,"column":47},"end":{"line":46,"column":85}},"type":"cond-expr","locations":[{"start":{"line":46,"column":56},"end":{"line":46,"column":69}},{"start":{"line":46,"column":69},"end":{"line":46,"column":85}}],"line":46},"2":{"loc":{"start":{"line":58,"column":2},"end":{"line":58,"column":null}},"type":"default-arg","locations":[{"start":{"line":58,"column":11},"end":{"line":58,"column":null}}],"line":58},"3":{"loc":{"start":{"line":78,"column":4},"end":{"line":78,"column":null}},"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":78,"column":null}},{"start":{},"end":{}}],"line":78},"4":{"loc":{"start":{"line":78,"column":8},"end":{"line":78,"column":65}},"type":"binary-expr","locations":[{"start":{"line":78,"column":8},"end":{"line":78,"column":23}},{"start":{"line":78,"column":23},"end":{"line":78,"column":65}}],"line":78},"5":{"loc":{"start":{"line":89,"column":4},"end":{"line":89,"column":null}},"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":89,"column":null}},{"start":{},"end":{}}],"line":89},"6":{"loc":{"start":{"line":93,"column":27},"end":{"line":93,"column":79}},"type":"cond-expr","locations":[{"start":{"line":93,"column":61},"end":{"line":93,"column":77}},{"start":{"line":93,"column":77},"end":{"line":93,"column":79}}],"line":93},"7":{"loc":{"start":{"line":119,"column":22},"end":{"line":119,"column":null}},"type":"cond-expr","locations":[{"start":{"line":119,"column":35},"end":{"line":119,"column":44}},{"start":{"line":119,"column":44},"end":{"line":119,"column":null}}],"line":119}},"s":{"0":1,"1":1,"2":1,"3":1,"4":3,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0},"f":{"0":3,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"0":[3],"1":[2,1],"2":[0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0]},"meta":{"lastBranch":8,"lastFunction":9,"lastStatement":35,"seen":{"s:31:6:31:7":0,"s:1:59:1:Infinity":1,"s:20:21:20:Infinity":2,"s:21:23:21:Infinity":3,"f:23:16:23:27":0,"b:27:11:27:Infinity":0,"s:29:2:50:Infinity":4,"b:46:56:46:69:46:69:46:85":1,"f:54:16:54:36":1,"b:58:11:58:Infinity":2,"s:62:38:62:Infinity":5,"s:63:38:63:Infinity":6,"s:65:23:65:Infinity":7,"s:66:20:66:Infinity":8,"s:67:29:67:Infinity":9,"s:69:65:75:Infinity":10,"f:69:65:69:74":2,"s:70:4:70:Infinity":11,"s:71:4:71:Infinity":12,"s:72:4:72:Infinity":13,"s:73:4:73:Infinity":14,"s:74:4:74:Infinity":15,"s:77:65:86:Infinity":16,"f:77:65:77:74":3,"b:78:4:78:Infinity:undefined:undefined:undefined:undefined":3,"s:78:4:78:Infinity":17,"b:78:8:78:23:78:23:78:65":4,"s:78:65:78:Infinity":18,"s:80:19:80:Infinity":19,"s:81:27:84:Infinity":20,"s:85:4:85:Infinity":21,"s:88:21:94:Infinity":22,"f:88:21:88:22":4,"b:89:4:89:Infinity:undefined:undefined:undefined:undefined":5,"s:89:4:89:Infinity":23,"s:89:44:89:Infinity":24,"s:91:4:91:Infinity":25,"s:92:4:92:Infinity":26,"s:93:4:93:Infinity":27,"f:93:18:93:27":5,"s:93:27:93:79":28,"b:93:61:93:77:93:77:93:79":6,"s:96:63:98:Infinity":29,"f:96:63:96:72":6,"s:97:4:97:Infinity":30,"s:100:67:102:Infinity":31,"f:100:67:100:76":7,"s:101:4:101:Infinity":32,"s:104:2:131:Infinity":33,"b:119:35:119:44:119:44:119:Infinity":7,"f:135:16:135:29":8,"s:136:2:152:Infinity":34}}} -} diff --git a/coverage/favicon.png b/coverage/favicon.png deleted file mode 100644 index c1525b811a167671e9de1fa78aab9f5c0b61cef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- 78.34% - Statements - 293/374 -
- - -
- 81.3% - Branches - 174/214 -
- - -
- 78.4% - Functions - 98/125 -
- - -
- 79.76% - Lines - 276/346 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
Code -
-
0%0/00%0/00%0/00%0/0
Code/alter-client/src/features/home/manager/ui -
-
78.57%11/1482.35%14/1777.77%7/976.92%10/13
Code/alter-client/src/features/home/user/constants -
-
100%7/7100%0/0100%0/0100%7/7
Code/alter-client/src/features/home/user/hooks -
-
85.82%115/13466.66%38/5797.05%33/3490.24%111/123
Code/alter-client/src/features/home/user/lib -
-
100%48/48100%10/10100%15/15100%38/38
Code/alter-client/src/features/home/user/ui -
-
95.83%46/4895.08%58/61100%18/1895.83%46/48
Code/alter-client/src/shared/lib -
-
100%7/7100%0/0100%0/0100%7/7
Code/alter-client/src/shared/stores -
-
55.55%5/9100%0/040%2/542.85%3/7
Code/alter-client/src/shared/ui -
-
100%4/4100%4/4100%2/2100%4/4
Code/alter-client/src/shared/ui/common -
-
43.24%16/3792.3%24/2635.29%6/1744.44%16/36
Code/alter-client/src/shared/ui/home -
-
100%10/10100%4/4100%3/3100%10/10
Code/alter-client/src/shared/ui/manager -
-
88.23%15/1781.81%9/1181.81%9/1188.23%15/17
Code/alter-client/src/shared/ui/manager/alba-find -
-
100%2/2100%7/7100%1/1100%2/2
Code/alter-client/src/shared/ui/manager/social -
-
18.91%7/3735.29%6/1720%2/1020.58%7/34
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/prettify.css b/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/prettify.js b/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/sort-arrow-sprite.png b/coverage/sort-arrow-sprite.png deleted file mode 100644 index 6ed68316eb3f65dec9063332d2f69bf3093bbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc diff --git a/coverage/sorter.js b/coverage/sorter.js deleted file mode 100644 index 4ed70ae..0000000 --- a/coverage/sorter.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - - // Try to create a RegExp from the searchValue. If it fails (invalid regex), - // it will be treated as a plain text search - let searchRegex; - try { - searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive - } catch (error) { - searchRegex = null; - } - - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - let isMatch = false; - - if (searchRegex) { - // If a valid regex was created, use it for matching - isMatch = searchRegex.test(row.textContent); - } else { - // Otherwise, fall back to the original plain text search - isMatch = row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()); - } - - row.style.display = isMatch ? '' : 'none'; - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/src/features/home/user/constants/calendar.ts b/src/features/home/user/constants/calendar.ts index 5da5cb8..6c4a0ae 100644 --- a/src/features/home/user/constants/calendar.ts +++ b/src/features/home/user/constants/calendar.ts @@ -8,6 +8,12 @@ export const WEEKDAY_LABELS = [ '토', ] as const +/** 월요일 시작 주( date-fns weekStartsOn: 1 )와 그리드 열 순서를 맞춤 */ +export const WEEKDAY_LABELS_MONDAY_FIRST = [ + ...WEEKDAY_LABELS.slice(1), + WEEKDAY_LABELS[0], +] as const + export const DATE_KEY_FORMAT = 'yyyy-MM-dd' export const MONTH_LABEL_FORMAT = 'yyyy년 M월' diff --git a/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts b/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts index e2aeaf3..6619cac 100644 --- a/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts +++ b/src/features/home/user/hooks/useMonthlyCalendarViewModel.ts @@ -13,7 +13,7 @@ import { useMemo } from 'react' import { DATE_KEY_FORMAT, MONTH_LABEL_FORMAT, - WEEKDAY_LABELS, + WEEKDAY_LABELS_MONDAY_FIRST, } from '@/features/home/user/constants/calendar' import { useMonthlyDateCellsState } from '@/features/home/user/hooks/useMonthlyDateCellsState' import type { @@ -27,8 +27,8 @@ import type { CalendarViewData } from '@/features/home/user/types/schedule' function getMonthlyCells(baseDate: Date): MonthlyCellInput[] { const monthStart = startOfMonth(baseDate) const monthEnd = endOfMonth(baseDate) - const intervalStart = startOfWeek(monthStart, { weekStartsOn: 0 }) - const intervalEnd = endOfWeek(monthEnd, { weekStartsOn: 0 }) + const intervalStart = startOfWeek(monthStart, { weekStartsOn: 1 }) + const intervalEnd = endOfWeek(monthEnd, { weekStartsOn: 1 }) return eachDayOfInterval({ start: intervalStart, end: intervalEnd }).map( date => ({ @@ -133,7 +133,7 @@ export function useMonthlyCalendarViewModel({ totalWorkHoursText: String( Math.round(data?.summary.totalWorkHours ?? 0) ).padStart(2, '0'), - weekdayLabels: WEEKDAY_LABELS, + weekdayLabels: WEEKDAY_LABELS_MONDAY_FIRST, monthlyDateCellsState, } } diff --git a/src/features/home/user/types/monthlyCalendar.ts b/src/features/home/user/types/monthlyCalendar.ts index f32fdf1..bed9761 100644 --- a/src/features/home/user/types/monthlyCalendar.ts +++ b/src/features/home/user/types/monthlyCalendar.ts @@ -1,4 +1,4 @@ -import type { WEEKDAY_LABELS } from '@/features/home/user/constants/calendar' +import type { WEEKDAY_LABELS_MONDAY_FIRST } from '@/features/home/user/constants/calendar' import type { BaseCalendarProps } from '@/features/home/user/types/calendar' export interface MonthlyCellInput { @@ -31,7 +31,7 @@ export interface MonthlyCalendarViewModel { title: string monthLabel: string totalWorkHoursText: string - weekdayLabels: typeof WEEKDAY_LABELS + weekdayLabels: typeof WEEKDAY_LABELS_MONDAY_FIRST monthlyDateCellsState: MonthlyDateCellState[] } diff --git a/src/features/home/user/ui/MonthlyCalendar.tsx b/src/features/home/user/ui/MonthlyCalendar.tsx index 027ddc2..225a0ec 100644 --- a/src/features/home/user/ui/MonthlyCalendar.tsx +++ b/src/features/home/user/ui/MonthlyCalendar.tsx @@ -57,7 +57,7 @@ export function MonthlyCalendar({ {weekdayLabels.map((label, index) => ( {label} diff --git a/tsconfig.app.json b/tsconfig.app.json index e6e8706..a0bf1ab 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -30,5 +30,5 @@ "noFallthroughCasesInSwitch": true, "noUncheckedSideEffectImports": true }, - "include": ["src"] + "include": ["src", "vitest.shims.d.ts"] } diff --git a/vite.config.ts b/vite.config.ts index 5a57410..f6b0e44 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -36,7 +36,9 @@ export default defineConfig({ coverage: { provider: 'v8', excludeAfterRemap: true, + include: ['src/**/*.{ts,tsx}'], exclude: [ + 'coverage/**', 'src/**/*.stories.{ts,tsx}', 'src/**/*.mdx', 'src/**/*.d.ts', diff --git a/vitest.shims.d.ts b/vitest.shims.d.ts index 7782f28..03b1801 100644 --- a/vitest.shims.d.ts +++ b/vitest.shims.d.ts @@ -1 +1 @@ -/// \ No newline at end of file +///