From 2593be0642a2a07b4ba45e370b50dd129fe4d143 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 00:06:47 +0900 Subject: [PATCH 01/20] =?UTF-8?q?=F0=9F=93=A6=EF=B8=8F=20Add=20tailwind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex1/index.html" | 0 .../ex1/package-lock.json" | 2335 +++++++++++++++++ .../ex1/package.json" | 13 + .../ex1/src/book-edit.html" | 0 .../ex1/src/index.html" | 11 + .../ex1/src/input.css" | 3 + .../ex1/src/output.css" | 568 ++++ .../ex1/src/register.html" | 0 .../ex1/tailwind.config.js" | 8 + 9 files changed, 2938 insertions(+) delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/index.html" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/package-lock.json" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/package.json" rename "\352\271\200\355\225\264\354\233\220/ex1/book-edit.html" => "\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" (100%) create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/src/index.html" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/src/input.css" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/src/output.css" rename "\352\271\200\355\225\264\354\233\220/ex1/register.html" => "\352\271\200\355\225\264\354\233\220/ex1/src/register.html" (100%) create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/index.html" "b/\352\271\200\355\225\264\354\233\220/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/package-lock.json" "b/\352\271\200\355\225\264\354\233\220/ex1/package-lock.json" new file mode 100644 index 0000000..a9062b2 --- /dev/null +++ "b/\352\271\200\355\225\264\354\233\220/ex1/package-lock.json" @@ -0,0 +1,2335 @@ +{ + "name": "ex1", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "ex1", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "tailwindcss": "^3.4.10" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.45", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", + "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + } + }, + "dependencies": { + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + } + }, + "picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, + "postcss": { + "version": "8.4.45", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "dev": true, + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + } + }, + "postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "requires": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "dependencies": { + "lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true + } + } + }, + "postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.1.1" + } + }, + "postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + } + } + }, + "sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tailwindcss": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", + "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", + "dev": true, + "requires": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true + } + } +} diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/package.json" "b/\352\271\200\355\225\264\354\233\220/ex1/package.json" new file mode 100644 index 0000000..cf28396 --- /dev/null +++ "b/\352\271\200\355\225\264\354\233\220/ex1/package.json" @@ -0,0 +1,13 @@ +{ + "name": "ex1", + "version": "1.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "tailwindcss": "^3.4.10" + } +} diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/book-edit.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" similarity index 100% rename from "\352\271\200\355\225\264\354\233\220/ex1/book-edit.html" rename to "\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" new file mode 100644 index 0000000..346f0fa --- /dev/null +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" @@ -0,0 +1,11 @@ + + + + + + + + +

Hello world!

+ + diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/input.css" "b/\352\271\200\355\225\264\354\233\220/ex1/src/input.css" new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/input.css" @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" new file mode 100644 index 0000000..b52bf1e --- /dev/null +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" @@ -0,0 +1,568 @@ +/* +! tailwindcss v3.4.10 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.font-bold { + font-weight: 700; +} + +.underline { + text-decoration-line: underline; +} diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/register.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" similarity index 100% rename from "\352\271\200\355\225\264\354\233\220/ex1/register.html" rename to "\352\271\200\355\225\264\354\233\220/ex1/src/register.html" diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" "b/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" new file mode 100644 index 0000000..19973dd --- /dev/null +++ "b/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{html,js}"], + theme: { + extend: {}, + }, + plugins: [], +}; From c0fdd8874cf75c885ac70274de464f5ef3d77b72 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 01:49:58 +0900 Subject: [PATCH 02/20] =?UTF-8?q?=F0=9F=8E=A8=20Format=20index.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex1/assets/image1.jpg" | Bin 0 -> 36101 bytes .../ex1/src/index.html" | 133 ++++++- .../ex1/src/output.css" | 353 ++++++++++++++++++ 3 files changed, 484 insertions(+), 2 deletions(-) create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/assets/image1.jpg" diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/assets/image1.jpg" "b/\352\271\200\355\225\264\354\233\220/ex1/assets/image1.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..c0bc256930b7411bd48c25d58d9794dbeaf8c7c4 GIT binary patch literal 36101 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 + + - -

Hello world!

+ +
+
+ + BookMark +
+
+ Github Repo. + +
+
+
+
+

+ BookMark BookMark +

+
+
+
+ image +
+

55BookMark BookMark

+

55나만의 북마크나만의 북마크

+
+
+ + +
+
+
+ image +
+

55BookMark BookMark

+

55나만의 북마크나만의 북마크

+
+
+ +
+
+
+ image +
+

55BookMark BookMark

+

55나만의 북마크나만의 북마크

+
+
+ +
+
+
+ image +
+

55BookMark BookMark

+

55나만의 북마크나만의 북마크

+
+
+ +
+
+
+ +
+
+
+
+

+ BookMark BookMark +

+
+
+
+ image +
+

55BookMark BookMark

+

55나만의 북마크나만의 북마크

+
+
+ +
+
+
+ image +
+

55BookMark BookMark

+

55나만의 북마크나만의 북마크

+
+
+ +
+
+
+ +
+
+
+
diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" index b52bf1e..572c3fc 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" @@ -554,15 +554,368 @@ video { --tw-contain-style: ; } +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +.right-0 { + right: 0px; +} + +.row-span-1 { + grid-row: span 1 / span 1; +} + +.m-4 { + margin: 1rem; +} + +.m-2 { + margin: 0.5rem; +} + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.mx-4 { + margin-left: 1rem; + margin-right: 1rem; +} + +.my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.size-24 { + width: 6rem; + height: 6rem; +} + +.size-20 { + width: 5rem; + height: 5rem; +} + +.size-3 { + width: 0.75rem; + height: 0.75rem; +} + +.size-6 { + width: 1.5rem; + height: 1.5rem; +} + +.size-14 { + width: 3.5rem; + height: 3.5rem; +} + +.h-full { + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.w-full { + width: 100%; +} + +.w-1\/6 { + width: 16.666667%; +} + +.w-1\/2 { + width: 50%; +} + +.w-2\/3 { + width: 66.666667%; +} + +.w-3\/5 { + width: 60%; +} + +.w-3 { + width: 0.75rem; +} + +.w-3\/4 { + width: 75%; +} + +.w-5 { + width: 1.25rem; +} + +.w-5\/6 { + width: 83.333333%; +} + +.max-w-7xl { + max-width: 80rem; +} + +.grid-rows-2 { + grid-template-rows: repeat(2, minmax(0, 1fr)); +} + +.grid-rows-7 { + grid-template-rows: repeat(7, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.justify-between { + justify-content: space-between; +} + +.gap-4 { + gap: 1rem; +} + +.gap-0\.5 { + gap: 0.125rem; +} + +.gap-2 { + gap: 0.5rem; +} + +.space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-1 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.25rem * var(--tw-space-x-reverse)); + margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); +} + +.overflow-hidden { + overflow: hidden; +} + +.truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-ellipsis { + text-overflow: ellipsis; +} + +.whitespace-nowrap { + white-space: nowrap; +} + +.rounded-sm { + border-radius: 0.125rem; +} + +.rounded-md { + border-radius: 0.375rem; +} + +.border-2 { + border-width: 2px; +} + +.border-b-4 { + border-bottom-width: 4px; +} + +.border-b-2 { + border-bottom-width: 2px; +} + +.border-indigo-500 { + --tw-border-opacity: 1; + border-color: rgb(99 102 241 / var(--tw-border-opacity)); +} + +.border-gray-500 { + --tw-border-opacity: 1; + border-color: rgb(107 114 128 / var(--tw-border-opacity)); +} + +.border-gray-400 { + --tw-border-opacity: 1; + border-color: rgb(156 163 175 / var(--tw-border-opacity)); +} + +.border-gray-300 { + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity)); +} + +.border-gray-200 { + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity)); +} + +.border-rose-500 { + --tw-border-opacity: 1; + border-color: rgb(244 63 94 / var(--tw-border-opacity)); +} + +.border-white { + --tw-border-opacity: 1; + border-color: rgb(255 255 255 / var(--tw-border-opacity)); +} + +.bg-black { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); +} + +.bg-slate-50 { + --tw-bg-opacity: 1; + background-color: rgb(248 250 252 / var(--tw-bg-opacity)); +} + +.bg-gray-200 { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity)); +} + +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.p-2 { + padding: 0.5rem; +} + +.p-4 { + padding: 1rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.py-10 { + padding-top: 2.5rem; + padding-bottom: 2.5rem; +} + +.py-6 { + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text-end { + text-align: end; +} + .text-3xl { font-size: 1.875rem; line-height: 2.25rem; } +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + .font-bold { font-weight: 700; } +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + .underline { text-decoration-line: underline; } From 18c199648fc5912bb97f2a94506bb87b04a9397c Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 09:21:56 +0900 Subject: [PATCH 03/20] =?UTF-8?q?=F0=9F=94=A7=20gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex1/.gitignore" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/.gitignore" diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/.gitignore" "b/\352\271\200\355\225\264\354\233\220/ex1/.gitignore" new file mode 100644 index 0000000..30bc162 --- /dev/null +++ "b/\352\271\200\355\225\264\354\233\220/ex1/.gitignore" @@ -0,0 +1 @@ +/node_modules \ No newline at end of file From e5399dd54d829dee8d725aea345f92e9a9c448e6 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 09:30:20 +0900 Subject: [PATCH 04/20] =?UTF-8?q?=F0=9F=94=A7=20ex3=20test=20file=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex3.test.js" | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex3.test.js" "b/\352\271\200\355\225\264\354\233\220/ex3.test.js" index 6c27a4d..2774d71 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex3.test.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex3.test.js" @@ -1,18 +1,18 @@ -const assert = require('assert'); -require('./ex3'); +const assert = require("assert"); +require("./ex3"); -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; +const hong = { id: 1, name: "Hong", city: "Busan", dept: 1 }; +const kim = { id: 2, name: "Kim", city: "Seoul", dept: 2 }; +const lee = { id: 3, name: "Lee", city: "Daegu", dept: 2 }; const users = [lee, hong, kim]; -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, +assert.deepStrictEqual(users.sortBy("id"), [hong, kim, lee]); +assert.deepStrictEqual(users.sortBy("name:desc"), [lee, kim, hong]); +assert.deepStrictEqual(users.sortBy("dept:desc,city:asc"), [lee, kim, hong]); +assert.deepStrictEqual(users.sortBy("dept:desc,city:desc"), [kim, lee, hong]); +assert.deepStrictEqual(users.sortBy("name:desc,id:,dept:desc"), [ lee, + kim, hong, ]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); +assert.deepStrictEqual(users.sortBy("dept:desc,id"), [kim, lee, hong]); From 45164049921a2815b658a065bdee69d13d03aaa6 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 14:18:09 +0900 Subject: [PATCH 05/20] =?UTF-8?q?=F0=9F=8E=A8=20format=20book-edit.html,?= =?UTF-8?q?=20register.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex1/src/book-edit.html" | 51 ++ .../ex1/src/index.html" | 36 +- .../ex1/src/output.css" | 461 ++++++++++-------- .../ex1/src/register.html" | 66 +++ .../ex1/tailwind.config.js" | 2 +- 5 files changed, 389 insertions(+), 227 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" index e69de29..de506a4 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" @@ -0,0 +1,51 @@ + + + + + + + + + + +
+
+ + BookMark +
+
+ Github Repo. +
+ SignUp|SignIn +
+
+
+ +
+ +
+
+ + diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" index 338aade..e593812 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" @@ -23,13 +23,13 @@ -
-
+
+

BookMark BookMark

-
+
-
-
+
+
- -
+
+
- -
+
+
- +
- -
+
+

BookMark BookMark

-
+
-
-
+ +
- +
- -
+ + diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" index 572c3fc..784697f 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" @@ -446,6 +446,201 @@ video { display: none; } +[type='text'],input:where(:not([type])),[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: #fff; + border-color: #6b7280; + border-width: 1px; + border-radius: 0px; + padding-top: 0.5rem; + padding-right: 0.75rem; + padding-bottom: 0.5rem; + padding-left: 0.75rem; + font-size: 1rem; + line-height: 1.5rem; + --tw-shadow: 0 0 #0000; +} + +[type='text']:focus, input:where(:not([type])):focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus { + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: #2563eb; + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + border-color: #2563eb; +} + +input::-moz-placeholder, textarea::-moz-placeholder { + color: #6b7280; + opacity: 1; +} + +input::placeholder,textarea::placeholder { + color: #6b7280; + opacity: 1; +} + +::-webkit-datetime-edit-fields-wrapper { + padding: 0; +} + +::-webkit-date-and-time-value { + min-height: 1.5em; + text-align: inherit; +} + +::-webkit-datetime-edit { + display: inline-flex; +} + +::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field { + padding-top: 0; + padding-bottom: 0; +} + +select { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); + background-position: right 0.5rem center; + background-repeat: no-repeat; + background-size: 1.5em 1.5em; + padding-right: 2.5rem; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; +} + +[multiple],[size]:where(select:not([size="1"])) { + background-image: initial; + background-position: initial; + background-repeat: unset; + background-size: initial; + padding-right: 0.75rem; + -webkit-print-color-adjust: unset; + print-color-adjust: unset; +} + +[type='checkbox'],[type='radio'] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + padding: 0; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + display: inline-block; + vertical-align: middle; + background-origin: border-box; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + flex-shrink: 0; + height: 1rem; + width: 1rem; + color: #2563eb; + background-color: #fff; + border-color: #6b7280; + border-width: 1px; + --tw-shadow: 0 0 #0000; +} + +[type='checkbox'] { + border-radius: 0px; +} + +[type='radio'] { + border-radius: 100%; +} + +[type='checkbox']:focus,[type='radio']:focus { + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); + --tw-ring-offset-width: 2px; + --tw-ring-offset-color: #fff; + --tw-ring-color: #2563eb; + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); +} + +[type='checkbox']:checked,[type='radio']:checked { + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; +} + +[type='checkbox']:checked { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); +} + +@media (forced-colors: active) { + [type='checkbox']:checked { + -webkit-appearance: auto; + -moz-appearance: auto; + appearance: auto; + } +} + +[type='radio']:checked { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); +} + +@media (forced-colors: active) { + [type='radio']:checked { + -webkit-appearance: auto; + -moz-appearance: auto; + appearance: auto; + } +} + +[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { + border-color: transparent; + background-color: currentColor; +} + +[type='checkbox']:indeterminate { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; +} + +@media (forced-colors: active) { + [type='checkbox']:indeterminate { + -webkit-appearance: auto; + -moz-appearance: auto; + appearance: auto; + } +} + +[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { + border-color: transparent; + background-color: currentColor; +} + +[type='file'] { + background: unset; + border-color: inherit; + border-width: 0; + border-radius: 0; + padding: 0; + font-size: unset; + line-height: inherit; +} + +[type='file']:focus { + outline: 1px solid ButtonText; + outline: 1px auto -webkit-focus-ring-color; +} + *, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; @@ -554,61 +749,6 @@ video { --tw-contain-style: ; } -.container { - width: 100%; -} - -@media (min-width: 640px) { - .container { - max-width: 640px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 768px; - } -} - -@media (min-width: 1024px) { - .container { - max-width: 1024px; - } -} - -@media (min-width: 1280px) { - .container { - max-width: 1280px; - } -} - -@media (min-width: 1536px) { - .container { - max-width: 1536px; - } -} - -.right-0 { - right: 0px; -} - -.row-span-1 { - grid-row: span 1 / span 1; -} - -.m-4 { - margin: 1rem; -} - -.m-2 { - margin: 0.5rem; -} - -.mx-auto { - margin-left: auto; - margin-right: auto; -} - .mx-4 { margin-left: 1rem; margin-right: 1rem; @@ -619,36 +759,16 @@ video { margin-bottom: 0.5rem; } -.mt-2 { - margin-top: 0.5rem; -} - -.flex { - display: flex; -} - -.grid { - display: grid; -} - -.size-24 { - width: 6rem; - height: 6rem; +.mt-1 { + margin-top: 0.25rem; } -.size-20 { - width: 5rem; - height: 5rem; -} - -.size-3 { - width: 0.75rem; - height: 0.75rem; +.block { + display: block; } -.size-6 { - width: 1.5rem; - height: 1.5rem; +.flex { + display: flex; } .size-14 { @@ -664,52 +784,20 @@ video { height: 100vh; } -.w-full { - width: 100%; -} - -.w-1\/6 { - width: 16.666667%; +.w-64 { + width: 16rem; } -.w-1\/2 { - width: 50%; +.w-80 { + width: 20rem; } -.w-2\/3 { - width: 66.666667%; -} - -.w-3\/5 { - width: 60%; -} - -.w-3 { - width: 0.75rem; -} - -.w-3\/4 { - width: 75%; -} - -.w-5 { - width: 1.25rem; -} - -.w-5\/6 { - width: 83.333333%; -} - -.max-w-7xl { - max-width: 80rem; -} - -.grid-rows-2 { - grid-template-rows: repeat(2, minmax(0, 1fr)); +.w-full { + width: 100%; } -.grid-rows-7 { - grid-template-rows: repeat(7, minmax(0, 1fr)); +.cursor-pointer { + cursor: pointer; } .flex-col { @@ -720,28 +808,18 @@ video { align-items: center; } -.justify-between { - justify-content: space-between; +.justify-center { + justify-content: center; } -.gap-4 { - gap: 1rem; -} - -.gap-0\.5 { - gap: 0.125rem; +.justify-between { + justify-content: space-between; } .gap-2 { gap: 0.5rem; } -.space-x-4 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(1rem * var(--tw-space-x-reverse)); - margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); -} - .space-x-1 > :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-right: calc(0.25rem * var(--tw-space-x-reverse)); @@ -754,28 +832,24 @@ video { margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); } -.overflow-hidden { - overflow: hidden; +.space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); } -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; +.space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } -.text-ellipsis { +.truncate { + overflow: hidden; text-overflow: ellipsis; -} - -.whitespace-nowrap { white-space: nowrap; } -.rounded-sm { - border-radius: 0.125rem; -} - .rounded-md { border-radius: 0.375rem; } @@ -784,42 +858,18 @@ video { border-width: 2px; } -.border-b-4 { - border-bottom-width: 4px; -} - .border-b-2 { border-bottom-width: 2px; } -.border-indigo-500 { - --tw-border-opacity: 1; - border-color: rgb(99 102 241 / var(--tw-border-opacity)); -} - -.border-gray-500 { - --tw-border-opacity: 1; - border-color: rgb(107 114 128 / var(--tw-border-opacity)); -} - -.border-gray-400 { - --tw-border-opacity: 1; - border-color: rgb(156 163 175 / var(--tw-border-opacity)); -} - -.border-gray-300 { - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); -} - .border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity)); } -.border-rose-500 { +.border-indigo-300 { --tw-border-opacity: 1; - border-color: rgb(244 63 94 / var(--tw-border-opacity)); + border-color: rgb(165 180 252 / var(--tw-border-opacity)); } .border-white { @@ -832,11 +882,6 @@ video { background-color: rgb(0 0 0 / var(--tw-bg-opacity)); } -.bg-slate-50 { - --tw-bg-opacity: 1; - background-color: rgb(248 250 252 / var(--tw-bg-opacity)); -} - .bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity)); @@ -851,8 +896,9 @@ video { padding: 0.5rem; } -.p-4 { - padding: 1rem; +.px-12 { + padding-left: 3rem; + padding-right: 3rem; } .px-4 { @@ -860,14 +906,9 @@ video { padding-right: 1rem; } -.py-10 { - padding-top: 2.5rem; - padding-bottom: 2.5rem; -} - -.py-6 { - padding-top: 1.5rem; - padding-bottom: 1.5rem; +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; } .py-2 { @@ -880,21 +921,18 @@ video { padding-bottom: 0.75rem; } -.text-center { - text-align: center; -} - -.text-right { - text-align: right; +.py-6 { + padding-top: 1.5rem; + padding-bottom: 1.5rem; } -.text-end { - text-align: end; +.text-center { + text-align: center; } -.text-3xl { - font-size: 1.875rem; - line-height: 2.25rem; +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; } .text-xl { @@ -902,11 +940,6 @@ video { line-height: 1.75rem; } -.text-2xl { - font-size: 1.5rem; - line-height: 2rem; -} - .font-bold { font-weight: 700; } @@ -916,6 +949,18 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity)); } -.underline { - text-decoration-line: underline; +.shadow-lg { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.hover\:bg-gray-300:hover { + --tw-bg-opacity: 1; + background-color: rgb(209 213 219 / var(--tw-bg-opacity)); +} + +.active\:bg-gray-400:active { + --tw-bg-opacity: 1; + background-color: rgb(156 163 175 / var(--tw-bg-opacity)); } diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" index e69de29..8b87986 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" @@ -0,0 +1,66 @@ + + + + + + + + + + +

Sign Up

+
+
+ + + + +
+ +
+
+
+ + diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" "b/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" index 19973dd..6b82ca4 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" @@ -4,5 +4,5 @@ module.exports = { theme: { extend: {}, }, - plugins: [], + plugins: [require("@tailwindcss/forms")], }; From 6e921ecfa528601c2034cbf693757793b502735f Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 16:34:24 +0900 Subject: [PATCH 06/20] =?UTF-8?q?=E2=9C=A8=20solve=20ex2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex2.js" | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex2.js" "b/\352\271\200\355\225\264\354\233\220/ex2.js" index 6b95f04..b985222 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex2.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex2.js" @@ -1,4 +1,34 @@ // range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; +const range = (start, end, step = start > end ? -1 : 1) => { + let resultArry = []; + + if (end === undefined) { + if (start === 0) return [0]; + + const uniqueNum = start; + start = uniqueNum > 0 ? 1 : uniqueNum; + end = uniqueNum > 0 ? uniqueNum : -1; + } + + if (step === 0 || start === end) { + return [start]; + } + + if ((start - end) * step > 0) { + return []; + } + + if (step < 0) { + for (let i = start; i >= end; i = Number((i + step).toFixed(1))) { + resultArry.push(i); + } + } else { + for (let i = start; i <= end; i = Number((i + step).toFixed(1))) { + resultArry.push(i); + } + } + + return resultArry; +}; module.exports = { range }; From da2cc771a1bb92c298b36749dbf22bf52aacfa57 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 17:11:08 +0900 Subject: [PATCH 07/20] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor=20ex2.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex2.js" | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex2.js" "b/\352\271\200\355\225\264\354\233\220/ex2.js" index b985222..3da38df 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex2.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex2.js" @@ -18,14 +18,11 @@ const range = (start, end, step = start > end ? -1 : 1) => { return []; } - if (step < 0) { - for (let i = start; i >= end; i = Number((i + step).toFixed(1))) { - resultArry.push(i); - } - } else { - for (let i = start; i <= end; i = Number((i + step).toFixed(1))) { - resultArry.push(i); - } + const condition = step < 0 ? (i) => i >= end : (i) => i <= end; + const operation = (i) => Math.round((i + step) * 10) / 10; + + for (let i = start; condition(i); i = operation(i)) { + resultArry.push(i); } return resultArry; From dd6ca9648b1263ef314da9578466cf60fa3904cf Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 21:49:46 +0900 Subject: [PATCH 08/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex3.js" | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex3.js" "b/\352\271\200\355\225\264\354\233\220/ex3.js" index b1b0d75..ef1a7c8 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex3.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex3.js" @@ -1,3 +1,16 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; +Array.prototype.sortBy = function (sortProp = "") { + const statements = sortProp.split(",").map((statement) => { + const [key, order] = statement.split(":"); + return { key, order: order === "desc" ? -1 : 1 }; + }); + + const compare = (a, b) => { + for (const { key, order } of statements) { + if (a[key] > b[key]) return order; + if (a[key] < b[key]) return -order; + } + return 0; + }; + + return this.sort(compare); }; From 3abb47f8cd687aed754931bef46dc4a4ac543876 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Wed, 11 Sep 2024 22:13:03 +0900 Subject: [PATCH 09/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex4.js" | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex4.js" "b/\352\271\200\355\225\264\354\233\220/ex4.js" index 9ede02f..0d03a49 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex4.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex4.js" @@ -1,3 +1,9 @@ -function deepCopy(obj) {} +function deepCopy(obj) { + return { + ...obj, + arr: JSON.parse(JSON.stringify(obj.arr)), + oo: JSON.parse(JSON.stringify(obj.oo)), + }; +} module.exports = { deepCopy }; From 8e3b7e82fb580b6b0b257e29a4e8ea7f5f32efab Mon Sep 17 00:00:00 2001 From: heon-kim Date: Thu, 12 Sep 2024 01:05:50 +0900 Subject: [PATCH 10/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex5.js" | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex5.js" "b/\352\271\200\355\225\264\354\233\220/ex5.js" index 464a05a..816b076 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex5.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex5.js" @@ -1,3 +1,31 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; +const INITIALS = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"; +const INITIALS_PERIOD = "까".charCodeAt(0) - "가".charCodeAt(0); +const START_CHARCODE = "가".charCodeAt(0); +const END_CHARCODE = "힣".charCodeAt(0); + +function extractInitial(letter) { + const letterCode = letter.charCodeAt(0); + if (!isKorean(letterCode)) { + return letter; + } + const charCode = letterCode - START_CHARCODE; + const charIdx = Math.floor(charCode / INITIALS_PERIOD); + return INITIALS[charIdx]; +} + +function isKorean(charCode) { + return START_CHARCODE <= charCode && charCode <= END_CHARCODE; +} + +function getInitialWords(data) { + return data.map((word) => word.split("").map(extractInitial).join("")); +} + +function searchByKoreanInitialSound(data, firstSounds) { + const initialWords = getInitialWords(data); + const firstSoundsRegex = new RegExp(firstSounds); + + return data.filter((_, index) => firstSoundsRegex.test(initialWords[index])); +} + +module.exports = { searchByKoreanInitialSound }; From 6081bca008853c3f89fb1d686fbe49ad14a204c1 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Thu, 12 Sep 2024 15:18:32 +0900 Subject: [PATCH 11/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex6.ts" | 53 +++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex6.ts" "b/\352\271\200\355\225\264\354\233\220/ex6.ts" index 424ca54..ba9fabb 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex6.ts" +++ "b/\352\271\200\355\225\264\354\233\220/ex6.ts" @@ -1,4 +1,51 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); +interface FailureResult { + status: "rejected"; + reason: any; +} +interface SucessfulResult { + status: "fulfilled"; + value: T; +} -export function promiseAllSettled(promises: Promise[]) {} +type PromiseResult = SucessfulResult | FailureResult; + +export const randTime = (val: T): Promise => { + return new Promise((resolve) => + setTimeout(resolve, Math.random() * 1000, val) + ); +}; + +export function promiseAllSettled( + promises: Promise[] +): Promise[]> { + return promiseAll( + promises.map((promise) => + promise + .then((value) => ({ status: "fulfilled", value } as PromiseResult)) + .catch((reason) => ({ status: "rejected", reason } as PromiseResult)) + ) + ); +} + +function promiseAll(promises: Promise[]): Promise { + if (promises.length === 0) return Promise.resolve([]); + + let resolvedCount = 0; + const results: T[] = new Array(promises.length); + + return new Promise((resolve, reject) => { + const handleResult = (index: number, value: T) => { + results[index] = value; + resolvedCount++; + if (resolvedCount === promises.length) { + resolve(results); + } + }; + + promises.forEach((promise, index) => { + promise + .then((value) => handleResult(index, value)) + .catch((error) => reject(error)); + }); + }); +} From b4f4738ecb05455df67d141ec58cbd80c5be0c1f Mon Sep 17 00:00:00 2001 From: heon-kim Date: Thu, 12 Sep 2024 17:18:01 +0900 Subject: [PATCH 12/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex7.ts" | 70 ++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex7.ts" "b/\352\271\200\355\225\264\354\233\220/ex7.ts" index 62812ac..956c41a 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex7.ts" +++ "b/\352\271\200\355\225\264\354\233\220/ex7.ts" @@ -1,3 +1,69 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; +import axios from "axios"; -export async function getPosts(userId: number | string) {} +const POST_URL = "https://jsonplaceholder.typicode.com/posts"; + +type Comment = { + postId: number; + id: number; + email: string; + body: string; +}; + +type Post = { + postId: number; + title: string; + comments: Comment[]; +}; + +type PostResponse = { + userId: number; + id: number; + title: string; + body: string; +}; + +type CommentResponse = { + postId: number; + id: number; + name: string; + email: string; + body: string; +}; + +async function getComments(postId: number | string): Promise { + try { + const { data } = await axios.get(`${POST_URL}/${postId}/comments`); + const comments: Comment[] = data.map((comment: CommentResponse) => { + const { name, ...rest } = comment; + return rest; + }); + return comments; + } catch (error) { + const message = error instanceof Error ? error.message : error; + console.log(JSON.stringify(message)); + return []; + } +} + +export async function getPosts(userId: number | string): Promise { + try { + const { data } = await axios.get(`${POST_URL}?userId=${userId}`); + const posts: Post[] = await Promise.all( + data.map(async (post: PostResponse) => { + const { id: postId, title } = post; + const comments = await getComments(postId); + return { postId, title, comments }; + }) + ); + return posts; + } catch (error) { + const message = error instanceof Error ? error.message : error; + console.log(JSON.stringify(message)); + return []; + } +} + +// 결과를 출력하려면 `getPosts` 호출 시 await을 사용해야 합니다. +// getPosts(1) +// .then((posts) => console.log(posts)) +// .catch((error) => console.error(error)); From 702113ccfb8f4cbfbc6f69286231a98cda408804 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Thu, 12 Sep 2024 17:47:05 +0900 Subject: [PATCH 13/20] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor=20ex7.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex7.ts" | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex7.ts" "b/\352\271\200\355\225\264\354\233\220/ex7.ts" index 956c41a..256809f 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex7.ts" +++ "b/\352\271\200\355\225\264\354\233\220/ex7.ts" @@ -30,40 +30,43 @@ type CommentResponse = { body: string; }; -async function getComments(postId: number | string): Promise { - try { - const { data } = await axios.get(`${POST_URL}/${postId}/comments`); - const comments: Comment[] = data.map((comment: CommentResponse) => { - const { name, ...rest } = comment; - return rest; - }); - return comments; - } catch (error) { - const message = error instanceof Error ? error.message : error; - console.log(JSON.stringify(message)); - return []; +class ApiClient { + static async fetch(url: string): Promise { + try { + const { data } = await axios.get(`${POST_URL}${url}`); + return data; + } catch (error) { + const message = error instanceof Error ? error.message : "Unknown error"; + console.error(`API Request Failed: ${message}`); + throw error; + } } } -export async function getPosts(userId: number | string): Promise { +const transformPost = async (post: PostResponse): Promise => { + const { id: postId, title } = post; + + const commentsData = await ApiClient.fetch( + `/${postId}/comments` + ); + const comments = commentsData.map(transformComment); + + return { postId, title, comments }; +}; + +const transformComment = (comment: CommentResponse): Comment => { + const { name, ...rest } = comment; + return rest; +}; + +export const getPosts = async (userId: number | string): Promise => { try { - const { data } = await axios.get(`${POST_URL}?userId=${userId}`); - const posts: Post[] = await Promise.all( - data.map(async (post: PostResponse) => { - const { id: postId, title } = post; - const comments = await getComments(postId); - return { postId, title, comments }; - }) + const postsData = await ApiClient.fetch( + `?userId=${userId}` ); - return posts; + return await Promise.all(postsData.map(transformPost)); } catch (error) { - const message = error instanceof Error ? error.message : error; - console.log(JSON.stringify(message)); + console.error(`Failed to fetch posts: ${error}`); return []; } -} - -// 결과를 출력하려면 `getPosts` 호출 시 await을 사용해야 합니다. -// getPosts(1) -// .then((posts) => console.log(posts)) -// .catch((error) => console.error(error)); +}; From 4d6fe53225f437231fe166ff06952d42f2526d98 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Fri, 13 Sep 2024 01:48:26 +0900 Subject: [PATCH 14/20] =?UTF-8?q?=E2=9C=85=20Testcode=20ex7.test.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex7.test.ts" | 69 +++++++++++-------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex7.test.ts" "b/\352\271\200\355\225\264\354\233\220/ex7.test.ts" index 62b881d..f21d39d 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex7.test.ts" +++ "b/\352\271\200\355\225\264\354\233\220/ex7.test.ts" @@ -1,5 +1,5 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; +import assert from "assert"; +import { getPosts } from "./ex7"; async function test(userId: string | number) { const posts = await getPosts(userId); @@ -9,62 +9,75 @@ async function test(userId: string | number) { assert.deepStrictEqual(posts[0], { postId: 1, title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', + "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", comments: [ { postId: 1, id: 1, - email: 'Eliseo@gardner.biz', + email: "Eliseo@gardner.biz", body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', + "laudantium enim quasi est quidem magnam voluptate ipsam eos\n" + + "tempora quo necessitatibus\n" + + "dolor quam autem quasi\n" + + "reiciendis et nam sapiente accusantium", }, { postId: 1, id: 2, - email: 'Jayne_Kuhic@sydney.com', + email: "Jayne_Kuhic@sydney.com", body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', + "est natus enim nihil est dolore omnis voluptatem numquam\n" + + "et omnis occaecati quod ullam at\n" + + "voluptatem error expedita pariatur\n" + + "nihil sint nostrum voluptatem reiciendis et", }, { postId: 1, id: 3, - email: 'Nikita@garfield.biz', + email: "Nikita@garfield.biz", body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', + "quia molestiae reprehenderit quasi aspernatur\n" + + "aut expedita occaecati aliquam eveniet laudantium\n" + + "omnis quibusdam delectus saepe quia accusamus maiores nam est\n" + + "cum et ducimus et vero voluptates excepturi deleniti ratione", }, { postId: 1, id: 4, - email: 'Lew@alysha.tv', + email: "Lew@alysha.tv", body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', + "non et atque\n" + + "occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n" + + "quia voluptas consequuntur itaque dolor\n" + + "et qui rerum deleniti ut occaecati", }, { postId: 1, id: 5, - email: 'Hayden@althea.biz', + email: "Hayden@althea.biz", body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', + "harum non quasi et ratione\n" + + "tempore iure ex voluptates in ratione\n" + + "harum architecto fugit inventore cupiditate\n" + + "voluptates magni quo et", }, ], }); // 추가 테스트 코드를 작성하시오. + posts?.forEach((post) => { + assert.strictEqual(typeof post.title, "string"); + }); + + posts?.forEach((post) => { + post.comments.forEach((comment) => { + assert.strictEqual(typeof comment.body, "string"); + }); + }); + + posts?.forEach((post) => { + assert.ok(post.comments.length > 0); + }); } test(1); From efb2d83e7cfc7a4cf650cf51ef8b8b803c41a21a Mon Sep 17 00:00:00 2001 From: heon-kim Date: Fri, 13 Sep 2024 02:11:36 +0900 Subject: [PATCH 15/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex8.ts" | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex8.ts" "b/\352\271\200\355\225\264\354\233\220/ex8.ts" index a67a2d2..29d87a6 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex8.ts" +++ "b/\352\271\200\355\225\264\354\233\220/ex8.ts" @@ -1,8 +1,28 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; +const debounce = (cb: (i: number) => void, delay: number) => { + let timeoutId: NodeJS.Timeout | null = null; -// function throttle... + return (i: number) => { + if (timeoutId) { + clearTimeout(timeoutId); + } + + timeoutId = setTimeout(() => { + cb(i); + }, delay); + }; +}; + +const throttle = (cb: (i: number) => void, delay: number) => { + let lastCall = 0; + + return (i: number) => { + const now = Date.now(); + if (now - lastCall >= delay) { + lastCall = now; + cb(i); + } + }; +}; const debo = debounce((a: number) => console.log(a + 1), 500); for (let i = 10; i < 15; i++) debo(i); // 15 출력 From a5de2199bd5c001df26704618939bb291fb07a02 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Fri, 13 Sep 2024 02:51:29 +0900 Subject: [PATCH 16/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex9.js" | 78 +++++++++++-------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex9.js" "b/\352\271\200\355\225\264\354\233\220/ex9.js" index ec3044f..5a196a4 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex9.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex9.js" @@ -9,60 +9,72 @@ const PRICE_SIZE = 7; function bill(tableNo) { const ordered = []; - const tot = { price: 0, tax: 0 }; + const total = { price: 0, tax: 0 }; + + function updateTotal(item) { + const { price, taxfree } = MENU[item]; + total.price += price; + total.tax += taxfree ? 0 : calcTax(price); + } + + function printItem(item) { + const { price, taxfree } = MENU[item]; + console.log("*", item); + f`공급가액: ${price}원`; + f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; + printLine("-"); + } + + function printTotal() { + f`주문합계: ${total.price}원`; + f`주문합계: ${total.tax}원`; + printLine(); + } return { order(item) { ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); + updateTotal(item); }, - printBill() { console.log(`\n\nTable. ${tableNo}`); printLine(); for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); + printItem(item); } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); + printTotal(); }, }; } -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); +function f([label, _], price) { + console.log(`${label.padEnd(LABEL_SIZE, " ")} ${priceFmt(price)}`); } -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; +function priceFmt(price, unit = "원") { + return price.toLocaleString().padStart(PRICE_SIZE, " ") + unit; } -function printLine(flag = '=') { +function printLine(flag = "=") { console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); } function calcTax(price) { return Math.round((price / 1.1) * 0.1); } + +// 출력 +const table1 = bill(1); +table1.order("짜장"); +table1.order("짬뽕"); +table1.printBill(); + +const table2 = bill(2); +table2.order("짜장"); +table2.printBill(); + +table1.order("탕슉"); +table1.printBill(); + +table2.order("짬뽕"); +table2.printBill(); From 885a32b68308645ebdc0f8d77c7b72d51ea7fa9f Mon Sep 17 00:00:00 2001 From: heon-kim Date: Fri, 13 Sep 2024 05:07:17 +0900 Subject: [PATCH 17/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex1/assets/facebook.png" | Bin 0 -> 11540 bytes .../ex1/assets/google.png" | Bin 0 -> 25941 bytes .../ex1/assets/naver.png" | Bin 0 -> 20713 bytes .../ex1/assets/nike.png" | Bin 0 -> 11394 bytes .../ex1/assets/youtube.png" | Bin 0 -> 22377 bytes ...0\354\247\200\354\266\234\354\262\230.txt" | 1 + .../ex1/src/book-edit.html" | 33 +- .../ex1/src/index.html" | 146 ++++++--- .../ex1/src/output.css" | 306 ++++++------------ .../ex1/src/register.html" | 36 ++- .../ex1/tailwind.config.js" | 2 +- 11 files changed, 251 insertions(+), 273 deletions(-) create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/assets/facebook.png" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/assets/google.png" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/assets/naver.png" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/assets/nike.png" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/assets/youtube.png" create mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/assets/\354\235\264\353\257\270\354\247\200\354\266\234\354\262\230.txt" diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/assets/facebook.png" "b/\352\271\200\355\225\264\354\233\220/ex1/assets/facebook.png" new file mode 100644 index 0000000000000000000000000000000000000000..64096839631579b68b543ef65c9dab5964a2804f GIT binary patch literal 11540 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 literal 0 HcmV?d00001 diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/assets/google.png" "b/\352\271\200\355\225\264\354\233\220/ex1/assets/google.png" new file mode 100644 index 0000000000000000000000000000000000000000..ccb288213d35d4c9de6d152f2e7b17792cba60ab GIT binary patch literal 25941 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 W_Nd3c@D$^}-)6|E$<_hQ!u|(Uf?4?h literal 0 HcmV?d00001 diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/assets/naver.png" "b/\352\271\200\355\225\264\354\233\220/ex1/assets/naver.png" new file mode 100644 index 0000000000000000000000000000000000000000..7ed6ac0fa33c88e1cfffd0c4e2088eb867c2fac5 GIT binary patch literal 20713 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 literal 0 HcmV?d00001 diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/assets/nike.png" "b/\352\271\200\355\225\264\354\233\220/ex1/assets/nike.png" new file mode 100644 index 0000000000000000000000000000000000000000..2140caa5c10ac482001145a3959d92f80931c422 GIT binary patch literal 11394 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 *hl_#(|hv+2m%!T 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 - +
- - BookMark + + BookMark
- Github Repo. + Github Repo. +
- SignUp|SignIn + SignUp|SignIn
@@ -31,21 +34,29 @@
https://naver.com
- 이동 시 - 자동 삭제 +
- - + +

there is no marks.

-
+
+ +
+ +
© Hanaro 2024
diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" index e593812..6c57176 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" @@ -3,6 +3,9 @@ + + + - +
- - BookMark + + + BookMark +
-
- Github Repo. - +
+ Github Repo. + +
+ +
-
-

- BookMark BookMark -

+
+
+

+ BookMark BookMark +

+
+
-
+
image -
-

55BookMark BookMark

-

55나만의 북마크나만의 북마크

+
+

55BookMark BookMark

+

+ 55나만의 북마크나만의 북마크 +

- +
+ +
-
+
image -
-

55BookMark BookMark

-

55나만의 북마크나만의 북마크

+
+

네이버

+

www.naver.com

- + +
+ +
-
+
image -
-

55BookMark BookMark

-

55나만의 북마크나만의 북마크

+
+

nike

+

신상 조던 출시!

- + +
+ +
-
+
image -
-

55BookMark BookMark

-

55나만의 북마크나만의 북마크

+
+

YouTube

+

+ 최신 동영상 | 런닝맨 Ep.124 숲속 퀴즈쇼 +

- + +
+ +
+
-
-

- BookMark BookMark -

+
+
+

+ Others +

+
-
+
image -
-

55BookMark BookMark

-

55나만의 북마크나만의 북마크

+ +
+

Google

+

+ googlgooglinggooglgoogling +

- + +
+ +
-
+
image -
-

55BookMark BookMark

-

55나만의 북마크나만의 북마크

+
+

Facebook

+

얼굴책얼굴책얼굴책

- + +
+ +
@@ -136,5 +181,6 @@

+
© Hanaro 2024
diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" index 784697f..553c202 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" @@ -446,201 +446,6 @@ video { display: none; } -[type='text'],input:where(:not([type])),[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: #fff; - border-color: #6b7280; - border-width: 1px; - border-radius: 0px; - padding-top: 0.5rem; - padding-right: 0.75rem; - padding-bottom: 0.5rem; - padding-left: 0.75rem; - font-size: 1rem; - line-height: 1.5rem; - --tw-shadow: 0 0 #0000; -} - -[type='text']:focus, input:where(:not([type])):focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus { - outline: 2px solid transparent; - outline-offset: 2px; - --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: #2563eb; - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - border-color: #2563eb; -} - -input::-moz-placeholder, textarea::-moz-placeholder { - color: #6b7280; - opacity: 1; -} - -input::placeholder,textarea::placeholder { - color: #6b7280; - opacity: 1; -} - -::-webkit-datetime-edit-fields-wrapper { - padding: 0; -} - -::-webkit-date-and-time-value { - min-height: 1.5em; - text-align: inherit; -} - -::-webkit-datetime-edit { - display: inline-flex; -} - -::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field { - padding-top: 0; - padding-bottom: 0; -} - -select { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); - background-position: right 0.5rem center; - background-repeat: no-repeat; - background-size: 1.5em 1.5em; - padding-right: 2.5rem; - -webkit-print-color-adjust: exact; - print-color-adjust: exact; -} - -[multiple],[size]:where(select:not([size="1"])) { - background-image: initial; - background-position: initial; - background-repeat: unset; - background-size: initial; - padding-right: 0.75rem; - -webkit-print-color-adjust: unset; - print-color-adjust: unset; -} - -[type='checkbox'],[type='radio'] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - padding: 0; - -webkit-print-color-adjust: exact; - print-color-adjust: exact; - display: inline-block; - vertical-align: middle; - background-origin: border-box; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - flex-shrink: 0; - height: 1rem; - width: 1rem; - color: #2563eb; - background-color: #fff; - border-color: #6b7280; - border-width: 1px; - --tw-shadow: 0 0 #0000; -} - -[type='checkbox'] { - border-radius: 0px; -} - -[type='radio'] { - border-radius: 100%; -} - -[type='checkbox']:focus,[type='radio']:focus { - outline: 2px solid transparent; - outline-offset: 2px; - --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); - --tw-ring-offset-width: 2px; - --tw-ring-offset-color: #fff; - --tw-ring-color: #2563eb; - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); -} - -[type='checkbox']:checked,[type='radio']:checked { - border-color: transparent; - background-color: currentColor; - background-size: 100% 100%; - background-position: center; - background-repeat: no-repeat; -} - -[type='checkbox']:checked { - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); -} - -@media (forced-colors: active) { - [type='checkbox']:checked { - -webkit-appearance: auto; - -moz-appearance: auto; - appearance: auto; - } -} - -[type='radio']:checked { - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); -} - -@media (forced-colors: active) { - [type='radio']:checked { - -webkit-appearance: auto; - -moz-appearance: auto; - appearance: auto; - } -} - -[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { - border-color: transparent; - background-color: currentColor; -} - -[type='checkbox']:indeterminate { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); - border-color: transparent; - background-color: currentColor; - background-size: 100% 100%; - background-position: center; - background-repeat: no-repeat; -} - -@media (forced-colors: active) { - [type='checkbox']:indeterminate { - -webkit-appearance: auto; - -moz-appearance: auto; - appearance: auto; - } -} - -[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { - border-color: transparent; - background-color: currentColor; -} - -[type='file'] { - background: unset; - border-color: inherit; - border-width: 0; - border-radius: 0; - padding: 0; - font-size: unset; - line-height: inherit; -} - -[type='file']:focus { - outline: 1px solid ButtonText; - outline: 1px auto -webkit-focus-ring-color; -} - *, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; @@ -759,10 +564,19 @@ select { margin-bottom: 0.5rem; } +.my-4 { + margin-top: 1rem; + margin-bottom: 1rem; +} + .mt-1 { margin-top: 0.25rem; } +.mt-10 { + margin-top: 2.5rem; +} + .block { display: block; } @@ -776,6 +590,18 @@ select { height: 3.5rem; } +.h-7 { + height: 1.75rem; +} + +.h-8 { + height: 2rem; +} + +.h-dvh { + height: 100dvh; +} + .h-full { height: 100%; } @@ -784,10 +610,18 @@ select { height: 100vh; } +.h-14 { + height: 3.5rem; +} + .w-64 { width: 16rem; } +.w-8 { + width: 2rem; +} + .w-80 { width: 20rem; } @@ -796,6 +630,38 @@ select { width: 100%; } +.w-1\/4 { + width: 25%; +} + +.w-4 { + width: 1rem; +} + +.w-14 { + width: 3.5rem; +} + +.w-32 { + width: 8rem; +} + +.w-48 { + width: 12rem; +} + +.w-56 { + width: 14rem; +} + +.w-1\/3 { + width: 33.333333%; +} + +.max-w-56 { + max-width: 14rem; +} + .cursor-pointer { cursor: pointer; } @@ -850,6 +716,10 @@ select { white-space: nowrap; } +.rounded-full { + border-radius: 9999px; +} + .rounded-md { border-radius: 0.375rem; } @@ -862,6 +732,10 @@ select { border-bottom-width: 2px; } +.border-t { + border-top-width: 1px; +} + .border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity)); @@ -882,6 +756,11 @@ select { background-color: rgb(0 0 0 / var(--tw-bg-opacity)); } +.bg-blue-200 { + --tw-bg-opacity: 1; + background-color: rgb(191 219 254 / var(--tw-bg-opacity)); +} + .bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity)); @@ -896,6 +775,14 @@ select { padding: 0.5rem; } +.p-1 { + padding: 0.25rem; +} + +.p-3 { + padding: 0.75rem; +} + .px-12 { padding-left: 3rem; padding-right: 3rem; @@ -906,9 +793,9 @@ select { padding-right: 1rem; } -.py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; +.px-8 { + padding-left: 2rem; + padding-right: 2rem; } .py-2 { @@ -921,11 +808,6 @@ select { padding-bottom: 0.75rem; } -.py-6 { - padding-top: 1.5rem; - padding-bottom: 1.5rem; -} - .text-center { text-align: center; } @@ -940,15 +822,33 @@ select { line-height: 1.75rem; } +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + .font-bold { font-weight: 700; } +.font-extrabold { + font-weight: 800; +} + +.font-semibold { + font-weight: 600; +} + .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); } +.text-gray-500 { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity)); +} + .shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" index 8b87986..11b1fbd 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/register.html" @@ -10,14 +10,33 @@ crossorigin="anonymous" > - -

Sign Up

-
-
+ +
+
+ + + BookMark + +
+
+ Github Repo. + +
+ SignUp|SignIn +
+
+
+
+

Sign Up

+
+
© Hanaro 2024
diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" "b/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" index 6b82ca4..19973dd 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/tailwind.config.js" @@ -4,5 +4,5 @@ module.exports = { theme: { extend: {}, }, - plugins: [require("@tailwindcss/forms")], + plugins: [], }; From 78ba1ea2f43f0243013916cd17960d8dbd531641 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Fri, 13 Sep 2024 10:09:32 +0900 Subject: [PATCH 18/20] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20ex7.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\271\200\355\225\264\354\233\220/ex7.ts" | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex7.ts" "b/\352\271\200\355\225\264\354\233\220/ex7.ts" index 256809f..7c2def1 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex7.ts" +++ "b/\352\271\200\355\225\264\354\233\220/ex7.ts" @@ -1,7 +1,5 @@ import axios from "axios"; -const POST_URL = "https://jsonplaceholder.typicode.com/posts"; - type Comment = { postId: number; id: number; @@ -30,8 +28,15 @@ type CommentResponse = { body: string; }; +type UserId = number | string; +type PostId = number | string; +type ReqPostURL = `?userId=${UserId}`; +type ReqCommentURL = `/${PostId}/comments`; + +const POST_URL = "https://jsonplaceholder.typicode.com/posts"; + class ApiClient { - static async fetch(url: string): Promise { + static async fetch(url: ReqPostURL | ReqCommentURL): Promise { try { const { data } = await axios.get(`${POST_URL}${url}`); return data; @@ -45,10 +50,8 @@ class ApiClient { const transformPost = async (post: PostResponse): Promise => { const { id: postId, title } = post; - - const commentsData = await ApiClient.fetch( - `/${postId}/comments` - ); + const reqCommentUrl: ReqCommentURL = `/${postId}/comments`; + const commentsData = await ApiClient.fetch(reqCommentUrl); const comments = commentsData.map(transformComment); return { postId, title, comments }; @@ -60,10 +63,9 @@ const transformComment = (comment: CommentResponse): Comment => { }; export const getPosts = async (userId: number | string): Promise => { + const reqPostUrl: ReqPostURL = `?userId=${userId}`; try { - const postsData = await ApiClient.fetch( - `?userId=${userId}` - ); + const postsData = await ApiClient.fetch(reqPostUrl); return await Promise.all(postsData.map(transformPost)); } catch (error) { console.error(`Failed to fetch posts: ${error}`); From f9ac1a63029cb462b4287637e20e35b09dfd1bc2 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Fri, 13 Sep 2024 14:56:33 +0900 Subject: [PATCH 19/20] =?UTF-8?q?=E2=9C=A8=20Solve=20ex10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex10.test.ts" | 73 ++++++- .../ex10.ts" | 193 ++++++++++++++---- 2 files changed, 228 insertions(+), 38 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex10.test.ts" "b/\352\271\200\355\225\264\354\233\220/ex10.test.ts" index 6218a79..c872928 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex10.test.ts" +++ "b/\352\271\200\355\225\264\354\233\220/ex10.test.ts" @@ -1,4 +1,73 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); +import assert from "assert"; +import { ArrayList } from "./ex10"; +console.log("🚀 ArrayList:", ArrayList); // 여기에 테스트코드를 작성하세요. +const alist = new ArrayList([1, 2]); +assert.deepStrictEqual(alist.print(), { + value: 1, + rest: { value: 2 }, +}); + +alist.add(3); +assert.deepStrictEqual(alist.print(), { + value: 1, + rest: { value: 2, rest: { value: 3 } }, +}); + +alist.add(5, 1); +assert.deepStrictEqual(alist.print(), { + value: 1, + rest: { value: 5, rest: { value: 2, rest: { value: 3 } } }, +}); + +alist.remove(1); +assert.deepStrictEqual(alist.print(), { + value: 5, + rest: { value: 2, rest: { value: 3 } }, +}); + +alist.removeByIndex(1); +assert.deepStrictEqual(alist.print(), { + value: 5, + rest: { value: 3 }, +}); + +alist.add(22, 1); +assert.deepStrictEqual(alist.print(), { + value: 5, + rest: { value: 22, rest: { value: 3 } }, +}); + +alist.add(33, 1); +assert.deepStrictEqual(alist.print(), { + value: 5, + rest: { value: 33, rest: { value: 22, rest: { value: 3 } } }, +}); + +alist.set(1, 300); +assert.deepStrictEqual(alist.print(), { + value: 5, + rest: { value: 300, rest: { value: 22, rest: { value: 3 } } }, +}); + +assert.strictEqual(alist.get(2), 22); +assert.strictEqual(alist.size(), 4); +assert.strictEqual(alist.indexOf(300), 1); +assert.strictEqual(alist.contains(300), true); +assert.strictEqual(alist.contains(301), false); +assert.strictEqual(alist.isEmpty(), false); + +assert.strictEqual(alist.peek(), 5); + +assert.strictEqual( + alist.toString(), + '{"value":5,"rest":{"value":300,"rest":{"value":22,"rest":{"value":3}}}}' +); + +assert.deepStrictEqual(alist.toArray(), [5, 300, 22, 3]); + +assert.deepStrictEqual(alist.iterator().next(), { value: 5, done: false }); + +alist.clear(); +assert.strictEqual(alist.print(), undefined); diff --git "a/\352\271\200\355\225\264\354\233\220/ex10.ts" "b/\352\271\200\355\225\264\354\233\220/ex10.ts" index 1ffaef5..518d553 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex10.ts" +++ "b/\352\271\200\355\225\264\354\233\220/ex10.ts" @@ -1,71 +1,192 @@ -class Collection { - private readonly arr = Array(); +import { json } from "stream/consumers"; - constructor(...args: T[]) { - this.arr.push(...args); +interface ListNode { + value: T; + rest?: ListNode; +} + +abstract class Collection { + protected elements: T[] = []; + + constructor() { + if (new.target === Collection) { + throw new TypeError("Cannot construct Collection instances directly"); + } + } + + clear(): void { + this.elements = []; + } + + print(): void { + console.log(this.elements.join(", ")); + } + + isEmpty(): boolean { + return this.elements?.length === 0; + } + + peek(): T | undefined { + return this.elements[0]; } - get _arr() { - return this.arr; + poll(): T | undefined { + return this.elements.shift(); + } + + length(): number { + return this.elements?.length; + } + + toArray(): T[] { + return [...this.elements]; + } +} + +class ArrayList extends Collection { + private head: ListNode | undefined; + + constructor(array: T[] = []) { + super(); + this.head = ArrayList.arrayToList(array); + } + + private static arrayToList(array: T[]): ListNode | undefined { + let list: ListNode | undefined; + for (let i = array.length - 1; i >= 0; i--) { + if (list === undefined) { + list = { value: array[i] }; + } else { + list = { value: array[i], rest: list }; + } + } + return list; } - push(...args: T[]) { - this.arr.push(...args); - return this.arr; + private static listToArray(list: ListNode | undefined): T[] { + const array: T[] = []; + while (list) { + array.push(list.value); + list = list.rest; + } + return array; } - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); + private getNodeByIndex(index: number): ListNode | undefined { + let node = this.head; + let nodeIndex = 0; + + while (nodeIndex < index && node?.rest) { + node = node.rest; + nodeIndex++; + } + return node; } - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); + add(value: T, index: number | null = null): void { + if (index === null || index >= this.size()) { + if (this.head?.rest) this.head.rest.rest = { value }; + } else { + let prev = this.getNodeByIndex(index - 1); + if (prev?.rest) { + prev.rest = { value, rest: prev.rest }; + } + } } - remove() { - return this.poll; + removeByIndex(index: number): void { + if (index === 0) { + this.head = this.head?.rest; + } else { + let prev = this.getNodeByIndex(index - 1); + if (prev?.rest) { + prev.rest = prev.rest.rest; + } + } } - get length() { - return this.arr.length; + remove(value: T): void { + const index = this.indexOf(value); + this.removeByIndex(index); } - get isEmpty() { - return !this.arr.length; + get(index: number): T | undefined { + let current = this.getNodeByIndex(index); + return current?.value; } - clear() { - this.arr.length = 0; + set(index: number, value: T): void { + let current = this.getNodeByIndex(index); + if (current) { + current.value = value; + } } - iterator() { - return this[Symbol.iterator](); + size(): number { + let current = this.head; + let currentIndex = 0; + + while (current) { + current = current.rest; + currentIndex++; + } + + return currentIndex; } - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; + indexOf(value: T): number { + let current = this.head; + let currentIndex = 0; + + while (current) { + if (current.value === value) { + return currentIndex; + } + current = current.rest; + currentIndex++; } + + return -1; } - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; + contains(value: T): boolean { + return this.indexOf(value) !== -1; } - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); + isEmpty(): boolean { + return this.head === undefined; } - private isQueue() { - return this instanceof Queue; + peek(): T | undefined { + return this.head?.value; + } + + toArray(): T[] { + return ArrayList.listToArray(this.head); + } + + toString(): string { + return JSON.stringify(this.head); + } + + clear(): void { + this.head = undefined; + } + + print(): ListNode | undefined { + return this.head; + } + + *iterator(): IterableIterator { + let node = this.head; + while (node) { + yield node.value; + node = node.rest; + } } } class Stack extends Collection {} class Queue extends Collection {} -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - export { Stack, Queue, ArrayList }; From da652318471f3c71cf50f86787da0162ff88d407 Mon Sep 17 00:00:00 2001 From: heon-kim Date: Fri, 13 Sep 2024 15:25:55 +0900 Subject: [PATCH 20/20] =?UTF-8?q?=F0=9F=92=84=20Update=20ex1=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex1/src/book-edit.html" | 8 +- .../ex1/src/index.html" | 48 ++++-- .../ex1/src/output.css" | 161 +++++++++++------- 3 files changed, 140 insertions(+), 77 deletions(-) diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" index 5cbc966..1f7871d 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/book-edit.html" @@ -31,7 +31,9 @@
-
diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" "b/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" index 6c57176..42af3f9 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/index.html" @@ -35,7 +35,7 @@
-
+

-
+
- +
-
+
- +
-
+
- +
-
+
- +
-

-
+

-
+
- +
-
+
- +
-
diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" index 553c202..1062813 100644 --- "a/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" +++ "b/\352\271\200\355\225\264\354\233\220/ex1/src/output.css" @@ -564,19 +564,10 @@ video { margin-bottom: 0.5rem; } -.my-4 { - margin-top: 1rem; - margin-bottom: 1rem; -} - .mt-1 { margin-top: 0.25rem; } -.mt-10 { - margin-top: 2.5rem; -} - .block { display: block; } @@ -590,8 +581,8 @@ video { height: 3.5rem; } -.h-7 { - height: 1.75rem; +.h-14 { + height: 3.5rem; } .h-8 { @@ -606,12 +597,12 @@ video { height: 100%; } -.h-screen { - height: 100vh; +.w-1\/3 { + width: 33.333333%; } -.h-14 { - height: 3.5rem; +.w-4 { + width: 1rem; } .w-64 { @@ -630,38 +621,6 @@ video { width: 100%; } -.w-1\/4 { - width: 25%; -} - -.w-4 { - width: 1rem; -} - -.w-14 { - width: 3.5rem; -} - -.w-32 { - width: 8rem; -} - -.w-48 { - width: 12rem; -} - -.w-56 { - width: 14rem; -} - -.w-1\/3 { - width: 33.333333%; -} - -.max-w-56 { - max-width: 14rem; -} - .cursor-pointer { cursor: pointer; } @@ -724,6 +683,18 @@ video { border-radius: 0.375rem; } +.rounded-lg { + border-radius: 0.5rem; +} + +.rounded-xl { + border-radius: 0.75rem; +} + +.rounded-sm { + border-radius: 0.125rem; +} + .border-2 { border-width: 2px; } @@ -761,6 +732,11 @@ video { background-color: rgb(191 219 254 / var(--tw-bg-opacity)); } +.bg-gray-100 { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity)); +} + .bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity)); @@ -771,12 +747,53 @@ video { background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } -.p-2 { - padding: 0.5rem; +.bg-blue-100 { + --tw-bg-opacity: 1; + background-color: rgb(219 234 254 / var(--tw-bg-opacity)); } -.p-1 { - padding: 0.25rem; +.bg-green-100 { + --tw-bg-opacity: 1; + background-color: rgb(220 252 231 / var(--tw-bg-opacity)); +} + +.bg-slate-100 { + --tw-bg-opacity: 1; + background-color: rgb(241 245 249 / var(--tw-bg-opacity)); +} + +.bg-red-100 { + --tw-bg-opacity: 1; + background-color: rgb(254 226 226 / var(--tw-bg-opacity)); +} + +.bg-stone-200 { + --tw-bg-opacity: 1; + background-color: rgb(231 229 228 / var(--tw-bg-opacity)); +} + +.bg-yellow-200 { + --tw-bg-opacity: 1; + background-color: rgb(254 240 138 / var(--tw-bg-opacity)); +} + +.bg-yellow-100 { + --tw-bg-opacity: 1; + background-color: rgb(254 249 195 / var(--tw-bg-opacity)); +} + +.bg-gray-300 { + --tw-bg-opacity: 1; + background-color: rgb(209 213 219 / var(--tw-bg-opacity)); +} + +.bg-indigo-100 { + --tw-bg-opacity: 1; + background-color: rgb(224 231 255 / var(--tw-bg-opacity)); +} + +.p-2 { + padding: 0.5rem; } .p-3 { @@ -817,16 +834,16 @@ video { line-height: 2rem; } -.text-xl { - font-size: 1.25rem; - line-height: 1.75rem; -} - .text-sm { font-size: 0.875rem; line-height: 1.25rem; } +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + .font-bold { font-weight: 700; } @@ -839,14 +856,18 @@ video { font-weight: 600; } +.text-gray-500 { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity)); +} + .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); } -.text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); +.opacity-25 { + opacity: 0.25; } .shadow-lg { @@ -855,12 +876,34 @@ video { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } +.shadow-md { + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-sm { + --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + .hover\:bg-gray-300:hover { --tw-bg-opacity: 1; background-color: rgb(209 213 219 / var(--tw-bg-opacity)); } +.hover\:bg-gray-400:hover { + --tw-bg-opacity: 1; + background-color: rgb(156 163 175 / var(--tw-bg-opacity)); +} + .active\:bg-gray-400:active { --tw-bg-opacity: 1; background-color: rgb(156 163 175 / var(--tw-bg-opacity)); } + +.active\:bg-gray-500:active { + --tw-bg-opacity: 1; + background-color: rgb(107 114 128 / var(--tw-bg-opacity)); +}