From 41384685bf6b8647422df72181002bc21e1426b1 Mon Sep 17 00:00:00 2001 From: ahcgnoej Date: Wed, 18 Feb 2026 03:42:37 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[FEAT/#9]=20svgr=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- declarations.d.ts | 6 + metro.config.js | 25 +- package.json | 113 +++---- scripts/generate-icons.js | 38 +++ src/app/(tabs)/index.tsx | 339 ++++++++++----------- src/shared/assets/icons/check-icon.svg | 3 + src/shared/assets/icons/index.ts | 1 + tsconfig.json | 29 +- yarn.lock | 395 +++++++++++++++++++++++-- 9 files changed, 683 insertions(+), 266 deletions(-) create mode 100644 declarations.d.ts create mode 100644 scripts/generate-icons.js create mode 100644 src/shared/assets/icons/check-icon.svg create mode 100644 src/shared/assets/icons/index.ts diff --git a/declarations.d.ts b/declarations.d.ts new file mode 100644 index 0000000..a2ad9b0 --- /dev/null +++ b/declarations.d.ts @@ -0,0 +1,6 @@ +declare module "*.svg" { + import type React from "react"; + import type { SvgProps } from "react-native-svg"; + const content: React.FC; + export default content; +} diff --git a/metro.config.js b/metro.config.js index 77cf7a3..959bdea 100644 --- a/metro.config.js +++ b/metro.config.js @@ -2,8 +2,25 @@ const { getDefaultConfig } = require("expo/metro-config"); const { withNativeWind } = require("nativewind/metro"); const path = require("path"); -const config = getDefaultConfig(path.resolve(__dirname)); +module.exports = (() => { + const config = getDefaultConfig(path.resolve(__dirname)); -module.exports = withNativeWind(config, { - input: "./src/shared/styles/global.styles.css", -}); + const { + resolver: { sourceExts, assetExts }, + } = config; + + config.transformer = { + ...config.transformer, + babelTransformerPath: require.resolve("react-native-svg-transformer"), + }; + + config.resolver = { + ...config.resolver, + assetExts: assetExts.filter((ext) => ext !== "svg"), + sourceExts: [...sourceExts, "svg"], + }; + + return withNativeWind(config, { + input: "./src/shared/styles/global.styles.css", + }); +})(); diff --git a/package.json b/package.json index 8e97b55..41e6df7 100644 --- a/package.json +++ b/package.json @@ -1,56 +1,61 @@ { - "name": "assu_fe_rn", - "main": "expo-router/entry", - "version": "1.0.0", - "scripts": { - "start": "expo start", - "android": "expo start --android", - "ios": "expo start --ios", - "web": "expo start --web", - "typecheck": "tsc --noEmit", - "biome:lint": "biome lint ./src", - "biome:fix": "biome check --write ./src", - "biome:format": "biome format ./src --write" - }, - "dependencies": { - "@expo/vector-icons": "^15.0.3", - "@react-navigation/bottom-tabs": "^7.4.0", - "@react-navigation/elements": "^2.6.3", - "@react-navigation/native": "^7.1.8", - "@tanstack/react-query": "^5.90.20", - "expo": "~54.0.33", - "expo-constants": "~18.0.13", - "expo-font": "~14.0.11", - "expo-haptics": "~15.0.8", - "expo-image": "~3.0.11", - "expo-linking": "~8.0.11", - "expo-router": "~6.0.23", - "expo-splash-screen": "~31.0.13", - "expo-status-bar": "~3.0.9", - "expo-symbols": "~1.0.8", - "expo-system-ui": "~6.0.9", - "expo-web-browser": "~15.0.10", - "nativewind": "^4.2.1", - "react": "19.1.0", - "react-dom": "19.1.0", - "react-native": "0.81.5", - "react-native-gesture-handler": "~2.28.0", - "react-native-reanimated": "~4.1.1", - "react-native-safe-area-context": "~5.6.0", - "react-native-screens": "~4.16.0", - "react-native-web": "~0.21.0", - "react-native-worklets": "0.5.1", - "zustand": "^5.0.11" - }, - "devDependencies": { - "@biomejs/biome": "^2.3.14", - "@types/react": "~19.1.10", - "babel-plugin-module-resolver": "^5.0.2", - "eslint": "^9.25.0", - "eslint-config-expo": "~10.0.0", - "prettier-plugin-tailwindcss": "^0.7.2", - "tailwindcss": "3.4.17", - "typescript": "^5.9.3" - }, - "private": true + "name": "assu_fe_rn", + "main": "expo-router/entry", + "version": "1.0.0", + "scripts": { + "start": "expo start", + "android": "expo start --android", + "ios": "expo start --ios", + "web": "expo start --web", + "typecheck": "tsc --noEmit", + "biome:lint": "biome lint ./src", + "biome:fix": "biome check --write ./src", + "biome:format": "biome format ./src --write", + "icons:watch": "node scripts/generate-icons.js", + "dev": "concurrently \"yarn icons:watch\" \"expo start\"" + }, + "dependencies": { + "@expo/vector-icons": "^15.0.3", + "@react-navigation/bottom-tabs": "^7.4.0", + "@react-navigation/elements": "^2.6.3", + "@react-navigation/native": "^7.1.8", + "@tanstack/react-query": "^5.90.20", + "expo": "~54.0.33", + "expo-constants": "~18.0.13", + "expo-font": "~14.0.11", + "expo-haptics": "~15.0.8", + "expo-image": "~3.0.11", + "expo-linking": "~8.0.11", + "expo-router": "~6.0.23", + "expo-splash-screen": "~31.0.13", + "expo-status-bar": "~3.0.9", + "expo-symbols": "~1.0.8", + "expo-system-ui": "~6.0.9", + "expo-web-browser": "~15.0.10", + "nativewind": "^4.2.1", + "react": "19.1.0", + "react-dom": "19.1.0", + "react-native": "0.81.5", + "react-native-gesture-handler": "~2.28.0", + "react-native-reanimated": "~4.1.1", + "react-native-safe-area-context": "~5.6.0", + "react-native-screens": "~4.16.0", + "react-native-svg": "15.12.1", + "react-native-web": "~0.21.0", + "react-native-worklets": "0.5.1", + "zustand": "^5.0.11" + }, + "devDependencies": { + "@biomejs/biome": "^2.3.14", + "@types/react": "~19.1.10", + "babel-plugin-module-resolver": "^5.0.2", + "concurrently": "^9.2.1", + "eslint": "^9.25.0", + "eslint-config-expo": "~10.0.0", + "prettier-plugin-tailwindcss": "^0.7.2", + "react-native-svg-transformer": "^1.5.3", + "tailwindcss": "3.4.17", + "typescript": "^5.9.3" + }, + "private": true } diff --git a/scripts/generate-icons.js b/scripts/generate-icons.js new file mode 100644 index 0000000..f4ca376 --- /dev/null +++ b/scripts/generate-icons.js @@ -0,0 +1,38 @@ +const fs = require("fs"); +const path = require("path"); + +const iconsDir = path.join(__dirname, "../src/shared/assets/icons"); +const outputFile = path.join(iconsDir, "index.ts"); + +function toPascalCase(str) { + return str + .replace(/[-_]/g, " ") + .replace(/\w+/g, (w) => w[0].toUpperCase() + w.slice(1)) + .replace(/\s/g, ""); +} + +function generateIndex() { + const files = fs + .readdirSync(iconsDir) + .filter((file) => file.endsWith(".svg")); + + const exports = files + .map((file) => { + const name = path.basename(file, ".svg"); + const componentName = toPascalCase(name); + return `export { default as ${componentName} } from "./${file}";`; + }) + .join("\n"); + + fs.writeFileSync(outputFile, exports); + console.log("✅ icons index updated"); +} + +generateIndex(); + +fs.watch(iconsDir, (_, filename) => { + if (!filename) return; + if (path.extname(filename) !== ".svg") return; + + generateIndex(); +}); diff --git a/src/app/(tabs)/index.tsx b/src/app/(tabs)/index.tsx index 01b6a24..fc39278 100644 --- a/src/app/(tabs)/index.tsx +++ b/src/app/(tabs)/index.tsx @@ -1,182 +1,183 @@ +import { CheckIcon } from "@/shared/assets/icons"; import { ScrollView, Text, View } from "react-native"; import { shadows } from "../../shared/styles/shadows"; export default function HomeScreen() { - return ( - - {/* 헤더 영역 */} - - - Welcome - - - 디자인 토큰이 적용된 메인 화면 - - + return ( + + {/* 헤더 영역 */} + + + Welcome + + + 디자인 토큰이 적용된 메인 화면 + + - {/* Primary 버튼 with Shadow */} - - - Primary 버튼 (Primary Shadow) - - + {/* Primary 버튼 with Shadow */} + + + Primary 버튼 (Primary Shadow) + + + + {/* 카드 with Neutral Shadow */} + + + 카드 제목 + + + Neutral 배경 + Neutral Shadow 적용 + + - {/* 카드 with Neutral Shadow */} - - - 카드 제목 - - - Neutral 배경 + Neutral Shadow 적용 - - + {/* Primary Tint 카드 with Shadow */} + + + Primary Tint 카드 + + + 연한 블루 배경 + Shadow + + - {/* Primary Tint 카드 with Shadow */} - - - Primary Tint 카드 - - - 연한 블루 배경 + Shadow - - + {/* 그리드 아이템들 with Shadow */} + + + 그리드 아이템 (Gutter 적용) + + + + + 아이템 1 + + + + + 아이템 2 + + + + + 아이템 3 + + + + - {/* 그리드 아이템들 with Shadow */} - - - 그리드 아이템 (Gutter 적용) - - - - - 아이템 1 - - - - - 아이템 2 - - - - - 아이템 3 - - - - + {/* 리스트 아이템들 with Shadow */} + + + 리스트 아이템 (Gutter 적용) + + + + + 리스트 아이템 1 + + + + + 리스트 아이템 2 + + + + + 리스트 아이템 3 + + + + - {/* 리스트 아이템들 with Shadow */} - - - 리스트 아이템 (Gutter 적용) - - - - - 리스트 아이템 1 - - - - - 리스트 아이템 2 - - - - - 리스트 아이템 3 - - - - + {/* 비활성화 버튼 */} + + + 비활성화 버튼 (opacity 30%) + + - {/* 비활성화 버튼 */} - - - 비활성화 버튼 (opacity 30%) - - + {/* Danger 상태 */} + + + Danger 상태 + + - {/* Danger 상태 */} - - - Danger 상태 - - + {/* 폰트 굵기별 예시 */} + + + 폰트 굵기 (Pretendard) + + + + Regular (400) - 기본 굵기 + + + Medium (500) - 중간 굵기 + + + SemiBold (600) - 세미볼드 + + + Bold (700) - 볼드 + + + - {/* 폰트 굵기별 예시 */} - - - 폰트 굵기 (Pretendard) - - - - Regular (400) - 기본 굵기 - - - Medium (500) - 중간 굵기 - - - SemiBold (600) - 세미볼드 - - - Bold (700) - 볼드 - - - - - {/* 폰트 굵기별 크기 비교 */} - - - 폰트 크기별 예시 - - - - text-xs (12px) - Regular - - - text-sm (14px) - Regular - - - text-base (16px) - Regular - - - text-lg (18px) - Medium - - - text-xl (20px) - SemiBold - - - text-2xl (24px) - Bold - - - text-[32px] - Bold - - - - - ); + {/* 폰트 굵기별 크기 비교 */} + + + 폰트 크기별 예시 + + + + text-xs (12px) - Regular + + + text-sm (14px) - Regular + + + text-base (16px) - Regular + + + text-lg (18px) - Medium + + + text-xl (20px) - SemiBold + + + text-2xl (24px) - Bold + + + text-[32px] - Bold + + + + + ); } diff --git a/src/shared/assets/icons/check-icon.svg b/src/shared/assets/icons/check-icon.svg new file mode 100644 index 0000000..0f02076 --- /dev/null +++ b/src/shared/assets/icons/check-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/shared/assets/icons/index.ts b/src/shared/assets/icons/index.ts new file mode 100644 index 0000000..b8330b7 --- /dev/null +++ b/src/shared/assets/icons/index.ts @@ -0,0 +1 @@ +export { default as CheckIcon } from "./check-icon.svg"; diff --git a/tsconfig.json b/tsconfig.json index 3cd2d19..9160ccc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,17 @@ { - "extends": "expo/tsconfig.base", - "compilerOptions": { - "strict": true, - "paths": { - "@/*": ["./src/*"] - } - }, - "include": [ - "**/*.ts", - "**/*.tsx", - ".expo/types/**/*.ts", - "expo-env.d.ts", - "nativewind-env.d.ts" - ] + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ".expo/types/**/*.ts", + "expo-env.d.ts", + "nativewind-env.d.ts", + "declarations.d.ts" + ] } diff --git a/yarn.lock b/yarn.lock index 6e70ff7..14bfac4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,7 +12,7 @@ resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.20.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.20.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": version "7.29.0" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz" integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== @@ -33,7 +33,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz" integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.0", "@babel/core@^7.25.2": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.0", "@babel/core@^7.21.3", "@babel/core@^7.25.2": version "7.29.0" resolved "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz" integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== @@ -775,7 +775,7 @@ "@babel/types" "^7.29.0" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.23.0", "@babel/types@^7.25.2", "@babel/types@^7.26.0", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.3.3": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.23.0", "@babel/types@^7.25.2", "@babel/types@^7.26.0", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.3.3": version "7.29.0" resolved "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz" integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== @@ -1877,6 +1877,98 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== + +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" + +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== + dependencies: + "@babel/types" "^7.21.3" + entities "^4.4.0" + +"@svgr/plugin-jsx@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" + integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== + dependencies: + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" + "@tanstack/query-core@5.90.20": version "5.90.20" resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.20.tgz" @@ -1889,6 +1981,11 @@ dependencies: "@tanstack/query-core" "5.90.20" +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + "@tybys/wasm-util@^0.10.0": version "0.10.1" resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" @@ -2645,6 +2742,11 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + bplist-creator@0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz" @@ -2775,6 +2877,14 @@ caniuse-lite@^1.0.30001759: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz" integrity sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg== +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -2784,14 +2894,6 @@ chalk@^2.0.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chokidar@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" @@ -2969,6 +3071,18 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concurrently@^9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.2.1.tgz#248ea21b95754947be2dad9c3e4b60f18ca4e44f" + integrity sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng== + dependencies: + chalk "4.1.2" + rxjs "7.8.2" + shell-quote "1.8.3" + supports-color "8.1.1" + tree-kill "1.2.2" + yargs "17.7.2" + connect@^3.6.5, connect@^3.7.0: version "3.7.0" resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" @@ -2996,6 +3110,16 @@ core-util-is@^1.0.3: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cosmiconfig@^8.1.3: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + cross-fetch@^3.1.5: version "3.2.0" resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz" @@ -3024,11 +3148,58 @@ css-in-js-utils@^3.1.0: dependencies: hyphenate-style-name "^1.0.3" +css-select@^5.1.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" + integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" + integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + csstype@^3.0.2: version "3.2.3" resolved "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz" @@ -3174,6 +3345,44 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dotenv-expand@~11.0.6: version "11.0.7" resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz" @@ -3225,11 +3434,23 @@ encodeurl@~2.0.0: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + env-editor@^0.4.1: version "0.4.2" resolved "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz" integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA== +error-ex@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + error-stack-parser@^2.0.6: version "2.1.4" resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz" @@ -4252,7 +4473,7 @@ image-size@^1.0.2: dependencies: queue "6.0.2" -import-fresh@^3.2.1: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.1" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== @@ -4315,6 +4536,11 @@ is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: call-bound "^1.0.3" get-intrinsic "^1.2.6" +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + is-arrayish@^0.3.1: version "0.3.4" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz" @@ -4707,6 +4933,11 @@ json-buffer@3.0.1: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" @@ -4980,6 +5211,13 @@ loose-envify@^1.0.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^10.0.1, lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" @@ -5014,6 +5252,21 @@ math-intrinsics@^1.1.0: resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + memoize-one@^5.0.0: version "5.2.1" resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz" @@ -5375,6 +5628,14 @@ nested-error-stacks@~2.0.1: resolved "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz" integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" @@ -5412,6 +5673,13 @@ npm-package-arg@^11.0.0: semver "^7.3.5" validate-npm-package-name "^5.0.0" +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz" @@ -5625,6 +5893,16 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse-png@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz" @@ -5637,6 +5915,11 @@ parseurl@~1.3.3: resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-dirname@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" @@ -5678,6 +5961,11 @@ path-scurry@^2.0.0: lru-cache "^11.0.0" minipass "^7.1.2" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" @@ -5996,6 +6284,25 @@ react-native-screens@~4.16.0: react-native-is-edge-to-edge "^1.2.1" warn-once "^0.1.0" +react-native-svg-transformer@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/react-native-svg-transformer/-/react-native-svg-transformer-1.5.3.tgz#a45b1bacb0623b66b134726a389ab2c67d856252" + integrity sha512-M4uFg5pUt35OMgjD4rWWbwd6PmxV96W7r/gQTTa+iZA5B+jO6aURhzAZGLHSrg1Kb91cKG0Rildy9q1WJvYstg== + dependencies: + "@svgr/core" "^8.1.0" + "@svgr/plugin-jsx" "^8.1.0" + "@svgr/plugin-svgo" "^8.1.0" + path-dirname "^1.0.2" + +react-native-svg@15.12.1: + version "15.12.1" + resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-15.12.1.tgz#7ba756dd6a235f86a2c312a1e7911f9b0d18ad3a" + integrity sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g== + dependencies: + css-select "^5.1.0" + css-tree "^1.1.3" + warn-once "0.1.1" + react-native-web@~0.21.0: version "0.21.2" resolved "https://registry.npmjs.org/react-native-web/-/react-native-web-0.21.2.tgz" @@ -6293,6 +6600,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@7.8.2: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz" @@ -6458,7 +6772,7 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.6.1: +shell-quote@1.8.3, shell-quote@^1.6.1: version "1.8.3" resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz" integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== @@ -6539,7 +6853,15 @@ slugify@^1.3.4, slugify@^1.6.6: resolved "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz" integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== -source-map-js@^1.2.1: +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +source-map-js@^1.0.1, source-map-js@^1.2.1: 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== @@ -6557,7 +6879,7 @@ source-map@^0.5.6: resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -6744,6 +7066,13 @@ sucrase@^3.35.0, sucrase@~3.35.1: tinyglobby "^0.2.11" ts-interface-checker "^0.1.9" +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -6758,13 +7087,6 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-hyperlinks@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" @@ -6778,6 +7100,24 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^3.0.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.0.0" + tailwindcss@3.4.17: version "3.4.17" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz" @@ -6898,6 +7238,11 @@ tr46@~0.0.3: resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + ts-api-utils@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz" @@ -6918,7 +7263,7 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: version "2.8.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -7166,7 +7511,7 @@ walker@^1.0.7, walker@^1.0.8: dependencies: makeerror "1.0.12" -warn-once@^0.1.0, warn-once@^0.1.1: +warn-once@0.1.1, warn-once@^0.1.0, warn-once@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz" integrity sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q== @@ -7370,7 +7715,7 @@ yargs-parser@^21.1.1: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.6.2: +yargs@17.7.2, yargs@^17.6.2: version "17.7.2" resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== From 2b709cff9f309ce38ef9ccc1234e5150f8a921c1 Mon Sep 17 00:00:00 2001 From: ahcgnoej Date: Wed, 18 Feb 2026 03:50:27 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[CHORE/#9]=20watch=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 41e6df7..d4e7ed9 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,7 @@ "biome:lint": "biome lint ./src", "biome:fix": "biome check --write ./src", "biome:format": "biome format ./src --write", - "icons:watch": "node scripts/generate-icons.js", - "dev": "concurrently \"yarn icons:watch\" \"expo start\"" + "icons": "node scripts/generate-icons.js" }, "dependencies": { "@expo/vector-icons": "^15.0.3", From ae384c6c10a20fa38b3a566c4550461995099b24 Mon Sep 17 00:00:00 2001 From: ahcgnoej Date: Wed, 18 Feb 2026 04:11:34 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[FIX/#9]=20biome=20=EC=A0=81=EC=9A=A9?= =?UTF-8?q?=EB=B2=94=EC=9C=84=20.src=20->=20.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- declarations.d.ts | 8 +- metro.config.js | 32 ++-- package.json | 116 +++++------ scripts/generate-icons.js | 42 ++-- src/app/(tabs)/index.tsx | 340 ++++++++++++++++----------------- src/shared/utils/formatDate.ts | 4 +- tailwind.config.js | 4 +- tsconfig.json | 30 +-- 8 files changed, 287 insertions(+), 289 deletions(-) diff --git a/declarations.d.ts b/declarations.d.ts index a2ad9b0..6f73d5f 100644 --- a/declarations.d.ts +++ b/declarations.d.ts @@ -1,6 +1,6 @@ declare module "*.svg" { - import type React from "react"; - import type { SvgProps } from "react-native-svg"; - const content: React.FC; - export default content; + import type React from "react"; + import type { SvgProps } from "react-native-svg"; + const content: React.FC; + export default content; } diff --git a/metro.config.js b/metro.config.js index 959bdea..8af42e1 100644 --- a/metro.config.js +++ b/metro.config.js @@ -3,24 +3,24 @@ const { withNativeWind } = require("nativewind/metro"); const path = require("path"); module.exports = (() => { - const config = getDefaultConfig(path.resolve(__dirname)); + const config = getDefaultConfig(path.resolve(__dirname)); - const { - resolver: { sourceExts, assetExts }, - } = config; + const { + resolver: { sourceExts, assetExts }, + } = config; - config.transformer = { - ...config.transformer, - babelTransformerPath: require.resolve("react-native-svg-transformer"), - }; + config.transformer = { + ...config.transformer, + babelTransformerPath: require.resolve("react-native-svg-transformer"), + }; - config.resolver = { - ...config.resolver, - assetExts: assetExts.filter((ext) => ext !== "svg"), - sourceExts: [...sourceExts, "svg"], - }; + config.resolver = { + ...config.resolver, + assetExts: assetExts.filter((ext) => ext !== "svg"), + sourceExts: [...sourceExts, "svg"], + }; - return withNativeWind(config, { - input: "./src/shared/styles/global.styles.css", - }); + return withNativeWind(config, { + input: "./src/shared/styles/global.styles.css", + }); })(); diff --git a/package.json b/package.json index d4e7ed9..79d1312 100644 --- a/package.json +++ b/package.json @@ -1,60 +1,60 @@ { - "name": "assu_fe_rn", - "main": "expo-router/entry", - "version": "1.0.0", - "scripts": { - "start": "expo start", - "android": "expo start --android", - "ios": "expo start --ios", - "web": "expo start --web", - "typecheck": "tsc --noEmit", - "biome:lint": "biome lint ./src", - "biome:fix": "biome check --write ./src", - "biome:format": "biome format ./src --write", - "icons": "node scripts/generate-icons.js" - }, - "dependencies": { - "@expo/vector-icons": "^15.0.3", - "@react-navigation/bottom-tabs": "^7.4.0", - "@react-navigation/elements": "^2.6.3", - "@react-navigation/native": "^7.1.8", - "@tanstack/react-query": "^5.90.20", - "expo": "~54.0.33", - "expo-constants": "~18.0.13", - "expo-font": "~14.0.11", - "expo-haptics": "~15.0.8", - "expo-image": "~3.0.11", - "expo-linking": "~8.0.11", - "expo-router": "~6.0.23", - "expo-splash-screen": "~31.0.13", - "expo-status-bar": "~3.0.9", - "expo-symbols": "~1.0.8", - "expo-system-ui": "~6.0.9", - "expo-web-browser": "~15.0.10", - "nativewind": "^4.2.1", - "react": "19.1.0", - "react-dom": "19.1.0", - "react-native": "0.81.5", - "react-native-gesture-handler": "~2.28.0", - "react-native-reanimated": "~4.1.1", - "react-native-safe-area-context": "~5.6.0", - "react-native-screens": "~4.16.0", - "react-native-svg": "15.12.1", - "react-native-web": "~0.21.0", - "react-native-worklets": "0.5.1", - "zustand": "^5.0.11" - }, - "devDependencies": { - "@biomejs/biome": "^2.3.14", - "@types/react": "~19.1.10", - "babel-plugin-module-resolver": "^5.0.2", - "concurrently": "^9.2.1", - "eslint": "^9.25.0", - "eslint-config-expo": "~10.0.0", - "prettier-plugin-tailwindcss": "^0.7.2", - "react-native-svg-transformer": "^1.5.3", - "tailwindcss": "3.4.17", - "typescript": "^5.9.3" - }, - "private": true + "name": "assu_fe_rn", + "main": "expo-router/entry", + "version": "1.0.0", + "scripts": { + "start": "expo start", + "android": "expo start --android", + "ios": "expo start --ios", + "web": "expo start --web", + "typecheck": "tsc --noEmit", + "biome:lint": "biome lint .", + "biome:fix": "biome check --write .", + "biome:format": "biome format . --write", + "icons": "node scripts/generate-icons.js" + }, + "dependencies": { + "@expo/vector-icons": "^15.0.3", + "@react-navigation/bottom-tabs": "^7.4.0", + "@react-navigation/elements": "^2.6.3", + "@react-navigation/native": "^7.1.8", + "@tanstack/react-query": "^5.90.20", + "expo": "~54.0.33", + "expo-constants": "~18.0.13", + "expo-font": "~14.0.11", + "expo-haptics": "~15.0.8", + "expo-image": "~3.0.11", + "expo-linking": "~8.0.11", + "expo-router": "~6.0.23", + "expo-splash-screen": "~31.0.13", + "expo-status-bar": "~3.0.9", + "expo-symbols": "~1.0.8", + "expo-system-ui": "~6.0.9", + "expo-web-browser": "~15.0.10", + "nativewind": "^4.2.1", + "react": "19.1.0", + "react-dom": "19.1.0", + "react-native": "0.81.5", + "react-native-gesture-handler": "~2.28.0", + "react-native-reanimated": "~4.1.1", + "react-native-safe-area-context": "~5.6.0", + "react-native-screens": "~4.16.0", + "react-native-svg": "15.12.1", + "react-native-web": "~0.21.0", + "react-native-worklets": "0.5.1", + "zustand": "^5.0.11" + }, + "devDependencies": { + "@biomejs/biome": "^2.3.14", + "@types/react": "~19.1.10", + "babel-plugin-module-resolver": "^5.0.2", + "concurrently": "^9.2.1", + "eslint": "^9.25.0", + "eslint-config-expo": "~10.0.0", + "prettier-plugin-tailwindcss": "^0.7.2", + "react-native-svg-transformer": "^1.5.3", + "tailwindcss": "3.4.17", + "typescript": "^5.9.3" + }, + "private": true } diff --git a/scripts/generate-icons.js b/scripts/generate-icons.js index f4ca376..41f5014 100644 --- a/scripts/generate-icons.js +++ b/scripts/generate-icons.js @@ -5,34 +5,34 @@ const iconsDir = path.join(__dirname, "../src/shared/assets/icons"); const outputFile = path.join(iconsDir, "index.ts"); function toPascalCase(str) { - return str - .replace(/[-_]/g, " ") - .replace(/\w+/g, (w) => w[0].toUpperCase() + w.slice(1)) - .replace(/\s/g, ""); + return str + .replace(/[-_]/g, " ") + .replace(/\w+/g, (w) => w[0].toUpperCase() + w.slice(1)) + .replace(/\s/g, ""); } function generateIndex() { - const files = fs - .readdirSync(iconsDir) - .filter((file) => file.endsWith(".svg")); - - const exports = files - .map((file) => { - const name = path.basename(file, ".svg"); - const componentName = toPascalCase(name); - return `export { default as ${componentName} } from "./${file}";`; - }) - .join("\n"); - - fs.writeFileSync(outputFile, exports); - console.log("✅ icons index updated"); + const files = fs + .readdirSync(iconsDir) + .filter((file) => file.endsWith(".svg")); + + const exports = files + .map((file) => { + const name = path.basename(file, ".svg"); + const componentName = toPascalCase(name); + return `export { default as ${componentName} } from "./${file}";`; + }) + .join("\n"); + + fs.writeFileSync(outputFile, exports); + console.log("✅ icons index updated"); } generateIndex(); fs.watch(iconsDir, (_, filename) => { - if (!filename) return; - if (path.extname(filename) !== ".svg") return; + if (!filename) return; + if (path.extname(filename) !== ".svg") return; - generateIndex(); + generateIndex(); }); diff --git a/src/app/(tabs)/index.tsx b/src/app/(tabs)/index.tsx index fc39278..0421d04 100644 --- a/src/app/(tabs)/index.tsx +++ b/src/app/(tabs)/index.tsx @@ -1,183 +1,183 @@ -import { CheckIcon } from "@/shared/assets/icons"; import { ScrollView, Text, View } from "react-native"; +import { CheckIcon } from "@/shared/assets/icons"; import { shadows } from "../../shared/styles/shadows"; export default function HomeScreen() { - return ( - - {/* 헤더 영역 */} - - - Welcome - - - 디자인 토큰이 적용된 메인 화면 - - + return ( + + {/* 헤더 영역 */} + + + Welcome + + + 디자인 토큰이 적용된 메인 화면 + + - {/* Primary 버튼 with Shadow */} - - - Primary 버튼 (Primary Shadow) - - - - {/* 카드 with Neutral Shadow */} - - - 카드 제목 - - - Neutral 배경 + Neutral Shadow 적용 - - + {/* Primary 버튼 with Shadow */} + + + Primary 버튼 (Primary Shadow) + + + + {/* 카드 with Neutral Shadow */} + + + 카드 제목 + + + Neutral 배경 + Neutral Shadow 적용 + + - {/* Primary Tint 카드 with Shadow */} - - - Primary Tint 카드 - - - 연한 블루 배경 + Shadow - - + {/* Primary Tint 카드 with Shadow */} + + + Primary Tint 카드 + + + 연한 블루 배경 + Shadow + + - {/* 그리드 아이템들 with Shadow */} - - - 그리드 아이템 (Gutter 적용) - - - - - 아이템 1 - - - - - 아이템 2 - - - - - 아이템 3 - - - - + {/* 그리드 아이템들 with Shadow */} + + + 그리드 아이템 (Gutter 적용) + + + + + 아이템 1 + + + + + 아이템 2 + + + + + 아이템 3 + + + + - {/* 리스트 아이템들 with Shadow */} - - - 리스트 아이템 (Gutter 적용) - - - - - 리스트 아이템 1 - - - - - 리스트 아이템 2 - - - - - 리스트 아이템 3 - - - - + {/* 리스트 아이템들 with Shadow */} + + + 리스트 아이템 (Gutter 적용) + + + + + 리스트 아이템 1 + + + + + 리스트 아이템 2 + + + + + 리스트 아이템 3 + + + + - {/* 비활성화 버튼 */} - - - 비활성화 버튼 (opacity 30%) - - + {/* 비활성화 버튼 */} + + + 비활성화 버튼 (opacity 30%) + + - {/* Danger 상태 */} - - - Danger 상태 - - + {/* Danger 상태 */} + + + Danger 상태 + + - {/* 폰트 굵기별 예시 */} - - - 폰트 굵기 (Pretendard) - - - - Regular (400) - 기본 굵기 - - - Medium (500) - 중간 굵기 - - - SemiBold (600) - 세미볼드 - - - Bold (700) - 볼드 - - - + {/* 폰트 굵기별 예시 */} + + + 폰트 굵기 (Pretendard) + + + + Regular (400) - 기본 굵기 + + + Medium (500) - 중간 굵기 + + + SemiBold (600) - 세미볼드 + + + Bold (700) - 볼드 + + + - {/* 폰트 굵기별 크기 비교 */} - - - 폰트 크기별 예시 - - - - text-xs (12px) - Regular - - - text-sm (14px) - Regular - - - text-base (16px) - Regular - - - text-lg (18px) - Medium - - - text-xl (20px) - SemiBold - - - text-2xl (24px) - Bold - - - text-[32px] - Bold - - - - - ); + {/* 폰트 굵기별 크기 비교 */} + + + 폰트 크기별 예시 + + + + text-xs (12px) - Regular + + + text-sm (14px) - Regular + + + text-base (16px) - Regular + + + text-lg (18px) - Medium + + + text-xl (20px) - SemiBold + + + text-2xl (24px) - Bold + + + text-[32px] - Bold + + + + + ); } diff --git a/src/shared/utils/formatDate.ts b/src/shared/utils/formatDate.ts index 3c7077f..1cbcbb0 100644 --- a/src/shared/utils/formatDate.ts +++ b/src/shared/utils/formatDate.ts @@ -11,7 +11,7 @@ export function formatDate( options?: { locale?: string; separator?: "." | "-" | "/"; - } + }, ): string { const date = toDate(input); if (!date) return ""; @@ -32,7 +32,7 @@ export function formatDateTime( input: DateInput, options?: { separator?: "." | "-" | "/"; - } + }, ): string { const date = toDate(input); if (!date) return ""; diff --git a/tailwind.config.js b/tailwind.config.js index e643e37..918baee 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -32,9 +32,7 @@ module.exports = { gutter: "var(--layout-gutter)", }, fontFamily: { - sans: [ - "Pretendard-Regular", - ], + sans: ["Pretendard-Regular"], }, }, }, diff --git a/tsconfig.json b/tsconfig.json index 9160ccc..ae6afdf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,17 +1,17 @@ { - "extends": "expo/tsconfig.base", - "compilerOptions": { - "strict": true, - "paths": { - "@/*": ["./src/*"] - } - }, - "include": [ - "**/*.ts", - "**/*.tsx", - ".expo/types/**/*.ts", - "expo-env.d.ts", - "nativewind-env.d.ts", - "declarations.d.ts" - ] + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ".expo/types/**/*.ts", + "expo-env.d.ts", + "nativewind-env.d.ts", + "declarations.d.ts" + ] } From 3ad390d29c301d4679f06bb2db33f89f887019fc Mon Sep 17 00:00:00 2001 From: ahcgnoej Date: Wed, 18 Feb 2026 04:26:46 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[FIX/#9]=20watch=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/generate-icons.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scripts/generate-icons.js b/scripts/generate-icons.js index 41f5014..7f26374 100644 --- a/scripts/generate-icons.js +++ b/scripts/generate-icons.js @@ -29,10 +29,3 @@ function generateIndex() { } generateIndex(); - -fs.watch(iconsDir, (_, filename) => { - if (!filename) return; - if (path.extname(filename) !== ".svg") return; - - generateIndex(); -});