크로스 플랫폼 및 모바일 UI · 새 리소스

Framework7 디자인 시스템.

실제 스와이프아웃 동작, 명시적인 iOS 테마 값, 키보드로 접근할 수 있는 동작 열기 버튼, 초기화 전까지 완료된 연구도 유지하는 필터 목록을 갖춘 네이티브 Framework7 스케치북입니다.

OpenDesign 가이드9개 챕터참고 항목 26개독자적 적용 가이드
01

Framework7 디자인 시스템 인터페이스 미리보기

학습 항목의 네이티브 스와이프아웃 동작을 열고, 스케치 완료로 표시한 다음 필터링된 목록을 확인하세요.

현장 스케치북전체 예시 열기
Framework7 Core/Vue 9.2.0, 검증된 iOS 모드, 독립형 콘텐츠 높이 앱 예시. · 구현 레퍼런스
02

Framework7 디자인 시스템 디자인 참고 자료

Framework7 Core/Vue 9.2.0에서 iOS 모드를 명시적으로 설정했습니다. 아래 테마 색상은 초기화 후 렌더링된 문서에서 확인했으며, 목록과 타이포그래피 값은 제공된 iOS 스타일시트에서 가져왔습니다. 원본 참고 노트의 일러스트와 외부 레이아웃은 별도로 구분해 표시했습니다.

확인된 iOS 테마 색상

출처
이름 / 규칙값 / 구성용도
--f7-theme-color#007aff 실제 iOS 문서에서 확인한 기본 기본 색상입니다.
--f7-theme-color-rgb0, 122, 255알파 계산에 사용할 RGB 채널입니다.
--f7-theme-color-shade#0066d6 기본 색상에서 파생된 셰이드입니다.
--f7-theme-color-tint#298fff 기본 색상에서 파생된 틴트입니다.
colors.green#4cd964 스와이프아웃 완료 상태에 사용하는 기본 녹색 이름 색상입니다.
colors.red#ff3b30 기본 빨간색 역할을 참조합니다. 이 예제에는 파괴적 동작이 없습니다.
--f7-text-color#000네이티브 iOS 기본 텍스트 색상입니다. 원본 페이지 본문에는 #26343f를 사용합니다.

네이티브 iOS 텍스트 및 목록 레이아웃

출처
이름 / 규칙값 / 구성용도
--f7-font-size14px프레임워크의 기본 텍스트 크기입니다.
--f7-font-family-apple-system, SF Pro Text, SF UI Text, system-ui, Helvetica Neue, Helvetica, Arial, sans-serif제공된 iOS 플랫폼 글꼴 스택입니다.
--f7-line-height1.4iOS 기본 행 높이입니다.
--f7-list-font-size17px네이티브 iOS 목록 텍스트입니다.
--f7-list-item-padding-vertical12px네이티브 행 내부 여백입니다.
--f7-list-item-padding-horizontal16px네이티브 가로 안쪽 여백입니다.
--f7-list-item-min-height52px네이티브 iOS 최소 행 높이입니다.
--f7-list-item-media-margin16px네이티브 미디어 간격입니다.
--f7-list-inset-border-radius24px네이티브 인셋 목록의 모서리 반경 참고값입니다.
--f7-list-item-subtitle-font-size15px기본값입니다. 원본 예시에서는 부제목을 11px로 재정의합니다.
--f7-list-item-text-font-size15px기본값입니다. 원본 예시에서는 설명을 12px로 재정의합니다.
--f7-list-item-text-line-height21px네이티브 기본 설명 행 높이입니다.

명시적으로 지정한 원본 구성

출처
이름 / 규칙값 / 구성용도
Page title35px / 1.15; 29px narrow원본 계층 구조입니다.
Advice titleGeorgia, serif; 29px원본 편집형 제목입니다.
Page/grid spacing32px page; 26px columns; 28px hero-to-grid원본 애플리케이션 값입니다.
Main panel22px inset; 16px narrow; 16px radius원본 프레이밍입니다. 네이티브 인셋 목록 기본값과는 별개입니다.
Grid breakpoint780px스케치 목록 아래에 안내 패널을 배치합니다.
Artwork48×62px list thumbnails; 170px tall route illustration원본 CSS이며, 지도나 이미지 서비스는 없습니다.
Embedding resethtml/body/#app/.framework7-root height:auto; min-height:0명시적으로 조정한 예시이며, 전체 화면 앱 안내가 아닙니다.
03

Framework7 디자인 시스템 전체 가이드

실제 인터페이스를 위해 이 시스템을 선택하고 적용하고 검토하는 실용 가이드.

DESIGN-framework7.md

완전한 안내와 구현 시작점, 소스 링크.

가이드 다운로드

Framework7 디자인 시스템은 구성 요소뿐 아니라 앱 동작도 제공합니다

Framework7 디자인 시스템은 구성 요소뿐 아니라 앱 동작도 제공합니다

Framework7의 Vue 통합은 핵심 애플리케이션 런타임을 기반으로 합니다. 진입점에서 Vue를 마운트하기 전에 Framework7에 Framework7Vue를 설치하고, f7-app이 스와이프아웃 동작을 담당하는 애플리케이션을 초기화합니다. 스타일이 적용된 Vue 래퍼 몇 개만 가져와서는 이 네이티브 상호작용 계층을 사용할 수 없습니다.

이 OpenDesign 가이드에서

이 예시의 범위는 작게 유지합니다. 원본 스케치 프롬프트 세 개, 네이티브 목록 동작, 완료 필터와 초기화 기능을 제공합니다. 라우터, 기기 브리지, 지도 또는 영구 노트북은 구성하지 않습니다. 이러한 광범위한 앱 기능은 모바일처럼 보이는 미리보기에 포함된 것처럼 암시하지 말고 의도적으로 추가해야 합니다.

지원 사양 읽기

Framework7 디자인 시스템: 요청한 플랫폼 테마가 실제로 적용되었는지 확인하기

요청한 플랫폼 테마가 실제로 적용되었는지 확인하기

이 버전에서는 f7-app에 theme="ios"를 직접 지정합니다. 검사한 구성 요소에서 구식 params 객체는 동일하게 작동하는 속성이 아니었으며, 처음에는 데스크톱 자동 감지로 인해 Material 모드가 적용되었습니다. 수정된 예시는 렌더링된 html.ios 클래스와 확인된 테마 값을 점검한 뒤 iOS 테마라고 설명합니다.

검증된 iOS 모드에서 --f7-theme-color는 #007aff이고, 셰이드는 #0066d6, 틴트는 #298fff입니다. 테마 시드, 플랫폼 렌더링 모드, 생성된 Material 색상 역할은 서로 다른 개념입니다. 초기화 후 계산된 값을 읽으면 예제에서 실제로 표시되지 않는 색상을 문서화하는 일을 방지할 수 있습니다.

지원 사양 읽기

Framework7 디자인 시스템: 네이티브 미디어 행을 사용하고 로컬 타이포그래피 재정의를 명시하기

네이티브 미디어 행을 사용하고 로컬 타이포그래피 재정의를 명시하기

목록에는 강한 배경 표면과 iOS 구분선을 사용하는 f7-list media-list를 사용합니다. 각 행은 네이티브 list-item API를 통해 제목, 부제목, 텍스트를 제공하고, 미디어 영역에는 원본의 작은 일러스트를 배치합니다. 기본 iOS 목록의 최소 높이는 52픽셀이지만, 여러 줄로 구성된 미디어 콘텐츠가 있으면 행 높이는 자연스럽게 더 커집니다.

네이티브 부제목과 설명의 기본 크기는 15픽셀입니다. 이 예시에서는 짧은 학습 카드의 보조 텍스트에 각각 11픽셀과 12픽셀을 사용하고, 제목 행과 설명은 여러 줄로 표시되도록 합니다. 이러한 로컬 선택은 공식 변수와 별도로 명시하므로 기본값이나 예시의 스타일을 재현할 수 있습니다.

지원 사양 읽기

Framework7 디자인 시스템: 스와이프아웃은 동작 컨테이너가 있는 목록 항목 구성입니다

스와이프아웃은 동작 컨테이너가 있는 목록 항목 구성입니다

행에서 스와이프아웃을 활성화하고 오른쪽에 f7-swipeout-actions를 배치합니다. f7-swipeout-button은 동작 영역을 제공하며, 활성화 후 펼쳐진 영역을 닫습니다. 완료는 되돌릴 수 있고 기록을 계속 사용할 수 있어야 하므로, 애플리케이션에서는 delete 속성을 활성화하는 대신 노트의 done 플래그를 전환합니다.

네이티브 코어에서는 제스처로도 동일한 동작을 표시할 수 있습니다. 화면에 보이는 Actions 컨트롤도 해당 행의 고정 ID를 사용해 f7.swipeout.open을 호출합니다. 이렇게 하면 숨겨진 가로 스와이프 제스처를 알아내야 하는 대신 데스크톱 및 키보드 사용자가 명령을 쉽게 찾을 수 있습니다.

  1. River steps의 Actions를 활성화한 다음 Mark sketched를 선택하세요.
  2. Sketched로 전환한 다음 River steps만 표시되는지 확인하세요.
  3. 해당 작업을 다시 열어 실행을 취소하거나, 목록 전체를 초기화하세요.

지원 사양 읽기

Framework7 디자인 시스템: 완료 상태를 제거된 요소가 아닌 모델에 유지하기

삭제된 요소가 아니라 모델에서 완료 상태를 유지하기

세 개의 메모 객체는 모두 Vue 배열에 유지됩니다. 계산된 컬렉션은 스케치 완료 세그먼트를 선택했을 때만 메모를 필터링하고, 또 다른 계산된 값은 완료된 스케치 수를 집계합니다. 안정적인 ID를 사용하므로 필터링한 뒤에도 각 기본 작업 버튼이 올바른 행을 가리킵니다.

완료된 메모의 작업 라벨은 ‘스케치 완료’에서 ‘스케치 취소’로 바뀝니다. 긴 드래그 후 예기치 않게 작업을 실행하는 오버스와이프 단축 동작은 없으며, 애플리케이션 모델을 갱신하지 않은 채 요소를 제거하는 자동 삭제도 없습니다. 같은 레코드를 불완전한 데이터로 다시 만들지 않고도 활성 목록에 되돌릴 수 있습니다.

지원 사양 읽기

Framework7 디자인 시스템: 필터의 빈 상태에서 다음 작업 안내하기

필터의 빈 상태에 다음 작업 안내하기

스케치 완료 항목이 없으면 패널에 완료로 표시된 스케치가 없다고 안내하고 ‘모든 스케치 보기’를 제공합니다. 이 컨트롤은 세그먼트 버튼과 동일한 필터 모델을 변경합니다. 이동할 곳이 없는 장식용 빈 상태 일러스트가 아니라 실제로 목록을 복구할 수 있는 방법입니다.

초기화를 누르면 모든 완료 상태가 해제되고 ‘모든 스케치’로 돌아가며, 세 개 모두 다시 준비되었다고 알립니다. 개별 작업 후에는 상태 텍스트에 해당 메모의 이름이 표시됩니다. 이 미리보기는 기기나 서버에 스케치북을 저장하지 않으므로 새로고침해도 원래 샘플 데이터로 돌아갑니다.

지원 사양 읽기

Framework7 디자인 시스템: 전체 앱 프레임워크를 콘텐츠 높이 임베딩에 맞게 신중히 조정하기

전체 앱 프레임워크를 콘텐츠 높이 임베딩에 맞게 신중히 조정하기

Framework7는 일반적으로 전체 화면 앱 레이아웃과 페이지 컨테이너를 지원합니다. 이 예시에는 라우팅된 페이지가 없으며, 콘텐츠에 따라 iframe 높이가 결정되도록 루트 문서의 높이와 오버플로를 의도적으로 재정의합니다. 뷰포트 높이를 최소 높이로 유지하면 하위 문서에 맞춰 iframe 크기를 조정하는 상위 요소와 피드백 루프가 생깁니다.

기본 목록은 초기화된 앱 루트 안에 유지됩니다. 기존의 스케치/조언 2단 레이아웃은 780px에서 세로로 쌓이고, 더 좁은 화면에서는 줄바꿈되는 설명을 유지하면서 썸네일 너비를 줄입니다. 이러한 임베딩 설정을 Framework7의 페이지 스크롤 모델을 사용하는 일반적인 라우팅 기반 모바일 앱에 그대로 적용해서는 안 됩니다.

지원 사양 읽기

Framework7 디자인 시스템: 제스처 작업에 명시적인 컨트롤 제공하기

제스처 작업에 명시적인 컨트롤 제공하기

화면에 표시되는 작업 버튼에는 ‘리버 스텝 작업’처럼 해당 행의 이름이 포함됩니다. 세그먼트 선택 상태는 눌림 상태로 표시되고, 결과는 상태 영역에 전달되며, 원본 삽화는 장식용으로 처리됩니다. 사용자는 터치 제스처 없이도 같은 작업을 확인할 수 있고, 이후 어떤 메모가 변경되었는지 음성 안내로 들을 수 있습니다.

로컬 테스트에서는 화면에 표시된 버튼으로 기본 swipeout 패널을 열고 ‘리버 스텝’을 완료 처리한 뒤, 목록을 필터링해 모델에 연결된 행 하나가 남는지 확인했습니다. 렌더링된 iOS 테마와 280px 레이아웃도 점검했습니다. swipeout CSS가 있다는 사실만으로는 이러한 동작을 확인할 수 없습니다.

  • 작업 버튼 라벨에 레코드 이름을 포함하세요.
  • DOM만 삭제하지 말고, 되돌릴 수 있는 모델 작업으로 처리하세요.
  • 기본 작업 후 필터링된 컬렉션과 상태를 테스트하세요.

지원 사양 읽기

Framework7 디자인 시스템: Core와 Vue 버전 일치시키기

호환되는 Core 및 Vue 버전 설치하기

엔트리는 framework7/bundle에서 Framework7을, framework7-vue에서 Framework7Vue를 가져오고 번들 스타일시트를 불러옵니다. 이 번들에는 이 예제에 필요한 Swipeout 모듈이 포함되어 있습니다. createApp이 전체 SFC를 마운트하기 전에 Framework7.use(Framework7Vue)를 호출합니다.

두 패키지 모두 9.2.0으로 고정되어 있습니다. 위에 전체 SFC와 원본 스타일시트가 제공되어 있으며, Vite 설정의 루트 HTML에는 예상한 앱 마운트 지점이 있습니다. 화면에 표시되는 원본 삽화에는 아이콘 패키지가 필요하지 않습니다. 프레임워크의 핵심 CSS에 자체 소형 내부 아이콘 폰트가 포함되어 있습니다.

지원 사양 읽기

Framework7 디자인 시스템 구성 요소 예시

완성형 기본 swipeout 스케치북

f7App, 세그먼트 버튼, 미디어 목록 행, Vue 모델 상태를 유지하는 기본 swipeout 작업.

vue
<script setup>
import {ref,computed} from 'vue';
import {f7App,f7List,f7ListItem,f7SwipeoutActions,f7SwipeoutButton,f7Button,f7Segmented,f7} from 'framework7-vue';
const filter=ref('all'),message=ref('');
const notes=ref([{id:'river',title:'River steps',place:'North bank · 12-minute study',description:'Look for the rhythm between the stone edges and reflected lines.',done:false},{id:'market',title:'Market awning',place:'Old square · 8-minute study',description:'Use three values to separate canvas, shade and open sky.',done:false},{id:'window',title:'Window shadows',place:'Library wall · 10-minute study',description:'Follow the long diagonal before adding the smaller window shapes.',done:false}]);
const visible=computed(()=>notes.value.filter(n=>filter.value==='all'||n.done));const done=computed(()=>notes.value.filter(n=>n.done).length);
function actions(id){f7.swipeout.open('#note-'+id,'right')}
function toggle(note){note.done=!note.done;message.value=`${note.title} ${note.done?'marked as sketched':'returned to your sketch list'}.`}
function reset(){notes.value.forEach(n=>n.done=false);filter.value='all';message.value='All three studies are ready to sketch again.'}
</script>
<template><f7-app name="Field sketchbook" theme="ios"><main class="sketch-shell"><header><p class="eyebrow">FIELD SKETCHBOOK · THREE SMALL STUDIES</p><h1>A walk worth looking at.</h1><p>Keep a short list of things to draw. Swipe a study left, or use its Actions button, to mark it as sketched.</p></header><div class="sketch-layout"><section class="sketch-list"><div class="list-heading"><h2>Today's studies</h2><span>{{done}} / 3 sketched</span></div><f7-segmented strong><f7-button type="button" :active="filter==='all'" @click="filter='all'" :aria-pressed="filter==='all'">All studies</f7-button><f7-button type="button" :active="filter==='done'" @click="filter='done'" :aria-pressed="filter==='done'">Sketched</f7-button></f7-segmented><f7-list media-list strong dividers-ios class="study-list"><f7-list-item v-for="note in visible" :id="'note-'+note.id" :key="note.id" swipeout :title="note.title" :subtitle="note.place" :text="note.description"><template #media><div class="study-art" :class="note.id" aria-hidden="true"><i></i><b></b></div></template><template #after><f7-button type="button" small @click="actions(note.id)" :aria-label="'Actions for '+note.title">Actions</f7-button></template><f7-swipeout-actions right><f7-swipeout-button role="button" @keydown.space.prevent="$event.currentTarget.click()" close color="green" @click="toggle(note)">{{note.done?'Undo sketch':'Mark sketched'}}</f7-swipeout-button></f7-swipeout-actions></f7-list-item></f7-list><div v-if="!visible.length" class="empty"><strong>No studies marked yet.</strong><p>Return to All studies and mark one after you finish drawing.</p><f7-button type="button" @click="filter='all'">Show all studies</f7-button></div><p class="result" role="status">{{message||'Your list changes only in this local preview.'}}</p><f7-button type="button" outline @click="reset">Reset sketch list</f7-button></section><aside><div class="route-art" aria-hidden="true"><i></i><b></b><span></span><em></em></div><p class="eyebrow">A SIMPLE DRAWING ROUTINE</p><h2>Look. Reduce. Draw.</h2><ol><li><strong>Look for one relationship.</strong><span>Choose an edge, a shadow or a repeated shape.</span></li><li><strong>Reduce the scene.</strong><span>Keep only three values before adding detail.</span></li><li><strong>Stop at the time limit.</strong><span>A small finished study teaches more than an unfinished page.</span></li></ol><p class="aside-note">Original sample locations and prompts. No map, location service or real-world itinerary is connected.</p></aside></div></main></f7-app></template>

코드 참조

  • 이 버전에서는 theme="ios"를 f7-app에 직접 전달하는 prop으로 사용합니다.
  • 화면에 표시되는 ‘작업’ 컨트롤은 기본 swipeout.open API를 호출합니다.
  • 완료 처리 시 Vue 객체가 변경되며 DOM 행은 삭제되지 않습니다.

완성형 원본 임베디드 레이아웃

콘텐츠 높이 재정의, 좁은 행에서의 줄바꿈, 원본 스케치 삽화.

CSS
html,body,#app,.framework7-root{height:auto!important;min-height:0!important;overflow:visible!important;position:relative!important}body{margin:0;background:#f1f3f6;color:#26343f}*{box-sizing:border-box}.sketch-shell{max-width:1120px;margin:auto;padding:32px}.eyebrow{font-size:10px;font-weight:700;letter-spacing:.14em;color:#6b7882}h1{font-size:35px;line-height:1.15;max-width:680px;margin:12px 0}header>p:last-child{font-size:15px;line-height:1.6;max-width:650px;color:#687986}.sketch-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:26px;margin-top:28px}.sketch-list{background:white;border:1px solid #dce3e9;border-radius:16px;padding:22px;min-width:0}.list-heading{display:flex;gap:12px;flex-wrap:wrap;align-items:center;justify-content:space-between;margin-bottom:20px}.list-heading h2{font-size:20px;margin:0}.list-heading span{font-size:12px;color:#6d7b84}.study-list{margin:24px -22px}.study-list .item-title-row{flex-wrap:wrap;gap:7px}.study-list .item-title{white-space:normal;overflow:visible}.study-list .item-after{margin-left:0}.study-list .item-subtitle{white-space:normal;font-size:11px;color:#72808a}.study-list .item-text{font-size:12px;line-height:1.5;max-height:none;-webkit-line-clamp:unset}.study-list .item-media{align-self:flex-start;padding-top:17px}.study-art{width:48px;height:62px;background:#e0e9ef;border-radius:7px;position:relative;overflow:hidden}.study-art i,.study-art b{position:absolute;display:block}.river i{width:55px;height:28px;top:30px;left:0;background:#8eaebe;transform:rotate(-18deg)}.river b{width:24px;height:40px;left:0;top:0;background:repeating-linear-gradient(#c5c1b6 0 8px,#a7a295 8px 10px)}.market{background:#ecdcbf}.market i{width:60px;height:24px;left:-5px;top:12px;background:repeating-linear-gradient(90deg,#bc735f 0 10px,#f9e9d1 10px 20px);transform:rotate(8deg)}.market b{width:26px;height:35px;left:11px;top:37px;background:#7b8072}.window{background:#ece9df}.window i{width:25px;height:29px;left:9px;top:9px;border:5px solid #617381}.window b{width:28px;height:55px;left:22px;top:25px;background:#b1b9b9;transform:skew(25deg)}.result{font-size:12px;line-height:1.6;color:#4f6a79;min-height:38px}.empty{padding:30px 12px;text-align:center;font-size:13px;line-height:1.6}.sketch-layout aside{padding:0 4px;min-width:0}.route-art{height:170px;border-radius:14px;background:#dce8df;position:relative;overflow:hidden;margin-bottom:24px}.route-art i{position:absolute;width:190px;height:190px;border:21px solid #aac6b4;border-radius:50%;left:55px;top:34px}.route-art b{position:absolute;width:90px;height:190px;border:15px solid #f4eed9;border-radius:50%;left:23px;top:-17px;transform:rotate(-25deg)}.route-art span,.route-art em{position:absolute;width:13px;height:13px;border:3px solid white;background:#537b70;border-radius:50%;left:67px;top:111px}.route-art em{left:167px;top:52px}.sketch-layout aside h2{font-family:Georgia,serif;font-size:29px;font-weight:400}.sketch-layout ol{padding-left:20px}.sketch-layout li{padding:0 0 20px;font-size:13px;line-height:1.6}.sketch-layout li strong,.sketch-layout li span{display:block}.sketch-layout li span{color:#71808a;font-size:12px;margin-top:5px}.aside-note{font-size:11px;line-height:1.6;color:#7b8790}@media(max-width:780px){.sketch-layout{grid-template-columns:minmax(0,1fr)}.sketch-shell{padding:20px}h1{font-size:29px}}@media(max-width:360px){.sketch-shell{padding:14px}.sketch-list{padding:16px}.study-list{margin:20px -16px}.study-art{width:34px}.study-list .item-media{--f7-list-item-media-margin:10px}.study-list .item-inner{min-width:0}.study-list .item-title{font-size:15px}}

코드 참조

  • 이 초기화 설정은 임베디드 예시용이며, 라우팅 기반 전체 화면 앱 셸용이 아닙니다.
  • 목록 부제목과 설명의 재정의가 명시되어 있습니다.
04

Framework7 디자인 시스템 에이전트 설정

구현 시작점

Framework7/Core Vue 9.2.0의 일치 여부를 확인했습니다. 콘텐츠 높이 재정의가 적용된 초기화 구성 요소 예시이며, 라우팅을 포함한 완성형 모바일 애플리케이션은 아닙니다.

자바스크립트
// npm create vite@latest field-sketchbook -- --template vue
// cd field-sketchbook && npm install
// npm install [email protected] [email protected]
// Save the complete examples as src/App.vue and src/style.css.
// src/main.js:
import {createApp} from 'vue';
import Framework7 from 'framework7/bundle';
import Framework7Vue from 'framework7-vue';
import 'framework7/css/bundle';
import './style.css';
import App from './App.vue';
Framework7.use(Framework7Vue);
createApp(App).mount('#app');
// index.html: <div id="app"></div><script type="module" src="/src/main.js"></script>
// npm run dev

프로젝트를 위한 프롬프트

에이전트 프롬프트
제공된 필드 스케치북과 명시적인 theme="ios", 기본 미디어 목록의 swipeout 구조를 사용해 Framework7 Core/Vue 9.2.0을 구성하세요. 세 가지 스케치, 되돌릴 수 있는 완료 상태, ‘모든 항목’/‘스케치 완료’ 필터를 유지하세요. 화면에 표시되는 ‘작업’ 버튼은 f7.swipeout.open을 호출해야 하며, 완료 처리는 행 삭제가 아니라 모델 상태를 전환해야 합니다. f7-button의 type="button"과 swipeout 명령의 버튼 의미 및 Space 키 지원을 유지하세요. 콘텐츠 높이 임베딩 CSS, 필터 결과가 비었을 때의 복구 동작, 초기화 기능도 유지하세요. 일정이나 위치 서비스는 필요하지 않습니다.
05

Framework7 디자인 시스템: 출처와 범위

iOS 모드가 확인된 Framework7 Core/Vue 9.2.0. 원본 스케치 프롬프트와 장식용 삽화. 완료 상태는 되돌릴 수 있는 로컬 상태이며, 지도, 위치 서비스, 기기 저장소 또는 라우팅 앱은 연결되어 있지 않습니다.