iOS safe area 지원 추가 및 버전 업데이트

- iOS WebView에서 safe-area-inset-top 값을 고려하도록 스크롤 액션 수정
- safearea.css를 index.html에 추가하여 CSS 변수 활성화
- .date-group-label 위치에 safe-area-inset-top 적용
- 버전 1.0.3으로 업데이트
- Makefile 빌드 스크립트 개선

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jay Sheen
2025-11-19 18:46:07 +09:00
parent 1601ad79e2
commit 060b48de56
5 changed files with 25 additions and 17 deletions

View File

@@ -5,12 +5,15 @@ NODE_VERSION = 20
DOCKER_REGISTRY = harbor.jongyeob.com DOCKER_REGISTRY = harbor.jongyeob.com
DOCKER_PROJECT = nicepay DOCKER_PROJECT = nicepay
DOCKER_IMAGE = nice-app-web DOCKER_IMAGE = nice-app-web
DOCKER_TAG = 1.0.0 DOCKER_TAG = 1.0.3
DOCKER_FULL_IMAGE = $(DOCKER_REGISTRY)/$(DOCKER_PROJECT)/$(DOCKER_IMAGE) DOCKER_FULL_IMAGE = $(DOCKER_REGISTRY)/$(DOCKER_PROJECT)/$(DOCKER_IMAGE)
CONTAINER_NAME = nice-app-web CONTAINER_NAME = nice-app-web
PORT = 80 PORT = 80
PLATFORMS = linux/amd64,linux/arm64 PLATFORMS = linux/amd64,linux/arm64
# Version management - use VERSION from command line or default to package.json
VERSION ?= $(shell node -p "require('./package.json').version")
# Default target # Default target
.DEFAULT_GOAL := help .DEFAULT_GOAL := help
@@ -29,26 +32,23 @@ dev: ## Start development server
build: ## Build for production build: ## Build for production
pnpm run build pnpm run build
build-staging: ## Build for staging environment with zip packaging build-staging: ## Build for staging environment with zip packaging (usage: make build-staging VERSION=x.y.z)
pnpm run build:staging pnpm run build:staging
@echo "Creating deployment package..." @echo "Creating deployment package with version $(VERSION)..."
$(eval VERSION := $(shell node -p "require('./package.json').version"))
@mkdir -p dist @mkdir -p dist
cd build && zip -r ../dist/nice-app-web-staging-$(VERSION).zip . && cd .. cd build && zip -r ../dist/nice-app-web-staging-$(VERSION).zip . && cd ..
@echo "Deployment package created: dist/nice-app-web-staging-$(VERSION).zip" @echo "Deployment package created: dist/nice-app-web-staging-$(VERSION).zip"
build-dev: ## Build for development with zip packaging build-dev: ## Build for development with zip packaging (usage: make build-dev VERSION=x.y.z)
pnpm run build pnpm run build
@echo "Creating development deployment package..." @echo "Creating development deployment package with version $(VERSION)..."
$(eval VERSION := $(shell node -p "require('./package.json').version"))
@mkdir -p dist @mkdir -p dist
cd build && zip -r ../dist/nice-app-web-development-$(VERSION).zip . && cd .. cd build && zip -r ../dist/nice-app-web-development-$(VERSION).zip . && cd ..
@echo "Deployment package created: dist/nice-app-web-development-$(VERSION).zip" @echo "Deployment package created: dist/nice-app-web-development-$(VERSION).zip"
build-production: ## Build for production with zip packaging build-production: ## Build for production with zip packaging (usage: make build-production VERSION=x.y.z)
pnpm run build pnpm run build
@echo "Creating production deployment package..." @echo "Creating production deployment package with version $(VERSION)..."
$(eval VERSION := $(shell node -p "require('./package.json').version"))
@mkdir -p dist @mkdir -p dist
cd build && zip -r ../dist/nice-app-web-production-$(VERSION).zip . && cd .. cd build && zip -r ../dist/nice-app-web-production-$(VERSION).zip . && cd ..
@echo "Deployment package created: dist/nice-app-web-production-$(VERSION).zip" @echo "Deployment package created: dist/nice-app-web-production-$(VERSION).zip"

View File

@@ -9,6 +9,7 @@
<link rel="shortcut icon" href="src/shared/ui/assets/images/favicon.ico"> <link rel="shortcut icon" href="src/shared/ui/assets/images/favicon.ico">
<link rel="apple-touch-icon" sizes="180x180" href="src/shared/ui/assets/images/apple-icon-180x180.png"> <link rel="apple-touch-icon" sizes="180x180" href="src/shared/ui/assets/images/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="src/shared/ui/assets/images/android-icon-192x192.png"> <link rel="icon" type="image/png" sizes="192x192" href="src/shared/ui/assets/images/android-icon-192x192.png">
<link rel="stylesheet" href="src/shared/ui/assets/css/safearea.css">
<link rel="stylesheet" href="src/shared/ui/assets/css/style.css"> <link rel="stylesheet" href="src/shared/ui/assets/css/style.css">
<link rel="stylesheet" href="src/shared/ui/assets/css/style-fix.css"> <link rel="stylesheet" href="src/shared/ui/assets/css/style-fix.css">
<link rel="stylesheet" href="src/shared/ui/assets/css/calendar.css"> <link rel="stylesheet" href="src/shared/ui/assets/css/calendar.css">

View File

@@ -1,14 +1,14 @@
{ {
"name": "web", "name": "web",
"private": true, "private": true,
"version": "1.0.0", "version": "1.0.3",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "env-cmd -f .env.development vite --host --open", "dev": "env-cmd -f .env.local vite --host --open",
"build:development": "env-cmd -f .env.development vite build", "build:development": "env-cmd -f .env.development vite build",
"build": "env-cmd -f .env.production vite build", "build": "env-cmd -f .env.production vite build",
"lint": "eslint . --ext js,jsx,ts,tsx --report-unused-disable-directives --max-warnings 0", "lint": "eslint . --ext js,jsx,ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "env-cmd -f .env.development vite preview" "preview": "env-cmd -f .env.local vite preview"
}, },
"dependencies": { "dependencies": {
"@babel/plugin-transform-react-jsx": "^7.27.1", "@babel/plugin-transform-react-jsx": "^7.27.1",

View File

@@ -56,16 +56,23 @@ export const getMax = (data: Array<Record<string, any>>) => {
}; };
export const setScrollAction = ( export const setScrollAction = (
e: Event, e: Event,
setGroupDate: (groupDate: string) => void, setGroupDate: (groupDate: string) => void,
setGroupDateOn: (groupDateOn: boolean) => void setGroupDateOn: (groupDateOn: boolean) => void
) => { ) => {
// iOS safe-area-inset-top 값 가져오기
const safeAreaInsetTop = parseInt(
window.getComputedStyle(document.documentElement)
.getPropertyValue('--safe-area-inset-top') || '0'
);
let dateHeader = document.querySelectorAll('.date-header'); let dateHeader = document.querySelectorAll('.date-header');
let posData: Array<Record<string, any>> = []; let posData: Array<Record<string, any>> = [];
dateHeader.forEach((value, index) => { dateHeader.forEach((value, index) => {
let date: string = value.innerHTML; let date: string = value.innerHTML;
let top: number = value.getBoundingClientRect().top; let top: number = value.getBoundingClientRect().top;
if(top < 10){ if(top < safeAreaInsetTop + 86){
posData.push({ posData.push({
date: date, date: date,
top: top top: top

View File

@@ -544,7 +544,7 @@ main.pop{
position: fixed; position: fixed;
background-color: #ffffff; background-color: #ffffff;
width: calc(100% - 42px); width: calc(100% - 42px);
top: 50px; top: calc(50px + env(safe-area-inset-top));
padding-left: 10px; padding-left: 10px;
padding-bottom: 20px; padding-bottom: 20px;
} }