엔터프라이즈 컴포넌트 시스템 · 새 리소스

Prime UI 디자인 시스템.

Prime UI 생태계를 버전으로 고정해 구현한 PrimeVue 예제입니다. 실제 프리셋 참조, 제어된 확장, 필터링, 선택, 로컬 고정 기능을 갖춘 Aura 테마 문서 트리입니다.

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

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

계층형 이슈를 필터링하고 문서를 선택하세요. 폴더를 펼치거나 접고 로컬 참조를 고정할 수 있습니다.

편집 문서 라이브러리전체 예시 열기
PrimeVue 4.5.5, Vue 3, @primeuix/themes 1.2.5 Aura를 사용합니다. 특정 Vue 구현이며 여러 프레임워크에서 사용할 수 있는 패키지가 아닙니다. · 구현 레퍼런스
02

Prime UI 디자인 시스템 디자인 참고 자료

이 Prime UI 리소스는 PrimeVue, PrimeReact, PrimeNG에서 서로 바꿔 쓸 수 있는 하나의 API를 구현한다고 주장하는 대신, PrimeVue 4.5.5와 @primeuix/themes 1.2.5 Aura를 구현합니다. 값은 설치된 프리셋에서 확인했습니다. 페이지의 루트 크기는 16px로 고정되어 있으며, rem 단위의 크기는 이 명시적인 설정을 기준으로 해석합니다.

Aura 에메랄드 프리미티브

출처
이름 / 규칙값 / 구성용도
primitive.emerald.50#ecfdf5 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.100#d1fae5 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.200#a7f3d0 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.300#6ee7b7 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.400#34d399 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.500#10b981 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.600#059669 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.700#047857 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.800#065f46 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.900#064e3b 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.
primitive.emerald.950#022c22 기본 프라이머리 색상 단계에 실제로 사용되는 프리미티브 색상입니다.

Aura 라이트 모드 시맨틱 역할

출처
이름 / 규칙값 / 구성용도
semantic.colorScheme.light.primary.color{primary.500}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.primary.contrastColor#ffffff 실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.primary.hoverColor{primary.600}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.primary.activeColor{primary.700}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.highlight.background{primary.50}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.highlight.focusBackground{primary.100}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.highlight.color{primary.700}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.highlight.focusColor{primary.800}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.text.color{surface.700}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.text.hoverColor{surface.800}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.text.mutedColor{surface.500}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.colorScheme.light.text.hoverMutedColor{surface.600}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.

Aura 반경 및 필드 간격

출처
이름 / 규칙값 / 구성용도
primitive.borderRadius.none0실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
primitive.borderRadius.xs2px실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
primitive.borderRadius.sm4px실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
primitive.borderRadius.md6px실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
primitive.borderRadius.lg8px실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
primitive.borderRadius.xl12px실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.formField.paddingX0.75rem실제 공용 필드 패딩 또는 반경 참조입니다.
semantic.formField.paddingY0.5rem실제 공용 필드 패딩 또는 반경 참조입니다.
semantic.formField.borderRadius{border.radius.md}실제 공용 필드 패딩 또는 반경 참조입니다.
semantic.focusRing.width1px실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.focusRing.stylesolid실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.focusRing.color{primary.color}실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.focusRing.offset2px실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.
semantic.focusRing.shadownone실제 Aura 프리셋 값이며, 중괄호는 토큰 참조를 나타냅니다.

네이티브 Tree 크기

출처
이름 / 규칙값 / 구성용도
components.tree.root.padding1rem실제 Tree 루트 레이아웃 값입니다.
components.tree.root.gap2px실제 Tree 루트 레이아웃 값입니다.
components.tree.root.indent1rem실제 Tree 루트 레이아웃 값입니다.
components.tree.node.padding0.25rem 0.5rem실제 노드 간격 또는 선택 역할입니다.
components.tree.node.gap0.25rem실제 노드 간격 또는 선택 역할입니다.
components.tree.node.selectedBackground{highlight.background}실제 노드 간격 또는 선택 역할입니다.
components.tree.node.selectedColor{highlight.color}실제 노드 간격 또는 선택 역할입니다.
components.tree.nodeToggleButton.size1.75rem네이티브 펼침 버튼의 크기입니다.

애플리케이션에서 명시한 글꼴 및 간격

출처
이름 / 규칙값 / 구성용도
Root font size16px이 예제에서 원래 명시한 기준값입니다.
Font familysystem-ui, sans-serif원래 페이지 글꼴이며 Aura 글꼴을 내려받은 것이 아닙니다.
Page heading34px / 1.15; 29px mobile원래 편집상 위계입니다.
Detail body15px / 1.7원래 문서 읽기 스타일입니다.
Sidebar / gap340px / 24px원래 데스크톱 레이아웃입니다.
Mobile breakpoint760px원래 세로 배치 전환 경계입니다.
03

Prime UI 디자인 시스템 완벽 가이드

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

DESIGN-prime-ui.md

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

가이드 다운로드

Prime UI 디자인 시스템은 단일 임포트가 아니라 생태계입니다

Prime UI는 단일 가져오기가 아닌 생태계입니다

PrimeTek의 UI 생태계에는 서로 다른 프레임워크를 위한 구현이 포함되어 있습니다. 이 페이지에서는 구체적인 구현 하나를 선택합니다. Vue 3 및 @primeuix/themes 1.2.5의 Aura 프리셋을 사용하는 PrimeVue 4.5.5입니다. 전체 진입 파일, 임포트, 컴포넌트 예제는 이 Vue 설정에 해당합니다. React 또는 Angular 프로젝트에서는 이 Vue 태그를 그대로 복사하는 대신 해당 패키지와 API를 사용해야 합니다.

이 OpenDesign 가이드에서

여기서는 버전 고정이 중요합니다. 설치된 4.5.5 패키지는 MIT 라이선스가 적용되며, 검증된 로컬 예제는 라이선스 키 없이 실행됩니다. 최신 5.0.2 런타임을 테스트했을 때 PrimeUI 라이선스 오류가 표시되었으므로, 이 예제에서는 최신 버전을 무조건 권장하는 명령을 제시하거나 릴리스마다 인증 조건이 동일하다고 암시하지 않습니다.

지원 사양 읽기

Prime UI 디자인 시스템의 프리미티브, 시맨틱, 컴포넌트 토큰은 연결되어 있습니다

기본, 시맨틱, 컴포넌트 토큰이 연결되는 구조

Aura는 원시 색상 프리미티브를 시맨틱 역할 및 컴포넌트 값과 분리합니다. 기본 프라이머리 색상 단계는 에메랄드 프리미티브를 참조합니다. 라이트 모드에서 primary.color는 primary.500을, hoverColor는 primary.600을, activeColor는 primary.700을 참조합니다. 강조 역할은 선택 상태에 더 밝은 프라이머리 배경과 더 어두운 전경색을 사용합니다.

그런 다음 Tree는 선택 배경과 텍스트를 서로 무관한 별도의 녹색으로 하드코딩하지 않고 강조 역할에 연결합니다. 이 명세에서는 중괄호로 표시된 참조를 그대로 유지합니다. 참조를 통해 테마 변경 사항이 어떻게 전파되는지 알 수 있기 때문입니다. 모든 별칭을 각각 분리된 16진수 값으로 바꾸면 이러한 유용한 종속 관계가 드러나지 않습니다.

지원 사양 읽기

Prime UI 디자인 시스템의 값은 이에 맞는 프리셋에서 확인합니다

일치하는 프리셋에서 값 읽기

버전이 고정된 Aura 프리셋에서 Tree 루트 패딩과 들여쓰기는 모두 1rem이고, 노드 패딩은 0.25rem 0.5rem이며, 토글 버튼 크기는 1.75rem입니다. 이 예제에서는 html 글꼴 크기를 16px로 고정해 각 크기를 명확하게 지정합니다. 컴포넌트 마크업이 비슷해 보여도 프리셋 릴리스나 루트 크기에 따라 밀도가 달라질 수 있습니다.

테두리 반경 프리미티브는 0부터 2, 4, 6, 8, 12픽셀까지입니다. 공용 필드 패딩은 가로 0.75rem, 세로 0.5rem입니다. 34픽셀 제목, 시스템 글꼴, 24픽셀 열 간격은 네이티브 컴포넌트 테마와 별개로 이 페이지에서 정한 레이아웃 값입니다.

지원 사양 읽기

Prime UI 디자인 시스템 노드 키로 확장과 선택 상태를 안정적으로 유지합니다

노드 키로 확장과 선택 상태를 안정적으로 유지합니다

트리에는 이슈 하나, 폴더 세 개, 문서 리프 여섯 개가 있습니다. 모든 노드에 안정적인 키와 레이블이 지정되어 있습니다. 폴더 노드는 selectable:false로 설정해 읽을 수 있는 문서인 것처럼 보이지 않도록 계층을 구성합니다. expandedKeys 모델이 열린 폴더를 제어하며, Expand와 Collapse를 사용하면 해당 맵이 의도적으로 교체됩니다.

단일 선택에는 selectionKeys와 node-select 핸들러를 사용합니다. 문서 레코드 맵에서 키를 찾은 경우에만 상세 패널이 업데이트됩니다. 표시 레이블을 변경해도 식별자는 바꿀 필요가 없으며, 폴더를 접어도 현재 선택된 문서나 고정 상태는 지워지지 않습니다.

지원 사양 읽기

Prime UI 디자인 시스템 네이티브 필터링으로 검색 결과의 맥락을 유지합니다

네이티브 필터링으로 일치 항목의 맥락 유지

Tree는 filterMode lenient를 사용해 내장 필터를 활성화하고 ‘문서 찾기’ 플레이스홀더를 표시합니다. maps를 검색하면 표시된 계층 구조가 일치하는 문서와 그 상위 항목으로 좁혀집니다. 독자는 관련 없는 평면형 추천 목록을 받는 대신 검색 결과가 계층 구조에서 어디에 속하는지 파악할 수 있습니다.

필터를 지우면 계층 구조가 복원됩니다. 필터링은 원본 노드를 수정하거나 고정된 문서를 제거하지 않습니다. 상세 패널에는 마지막으로 직접 선택한 리프가 유지되므로 키를 입력할 때마다 콘텐츠가 뜻밖에 바뀌지 않습니다. 더 큰 컬렉션에는 지연 데이터 로딩이 필요할 수 있지만, 이 완전한 예제는 로컬 레코드 여섯 개를 사용하며 서버 검색 기능을 제공한다고 주장하지 않습니다.

  1. “maps”를 검색하고 유지되는 이슈 및 폴더 맥락을 확인하세요.
  2. Three regional maps를 선택해 문서 패널을 업데이트하세요.
  3. 필터를 지운 뒤 선택된 문서를 계층 구조에서 계속 찾을 수 있는지 확인하세요.

지원 사양 읽기

Prime UI 디자인 시스템 선택한 문서에는 구체적이고 유용한 콘텐츠가 필요합니다

선택한 문서에는 유용한 고유 콘텐츠가 필요합니다

각 문서에는 유형, 소유자, 상태, 소개, 검토 목록, 개별 참고 사항이 있습니다. 에세이는 순서와 캡션을 확인하고, 지도 참고 자료는 방향의 일관성과 독립적인 축척을 확인하며, 교정 체크리스트는 가독성과 재단선을 확인하도록 안내합니다. 여섯 가지 제목 아래에 같은 문단을 재사용하는 대신 선택에 따라 콘텐츠가 바뀝니다.

상태 태그는 설명을 위한 예시 메타데이터이며, 외부 게시 워크플로를 실행하지 않습니다. 등고선 그래픽은 직접 만든 장식용 도형으로, 관련된 곳에 장식용임을 표시합니다. 이는 지리적 지도가 아니므로 지도로 해석해서는 안 됩니다.

지원 사양 읽기

Prime UI 디자인 시스템 고정 상태는 Tree 모델과 별도로 관리됩니다

고정 상태는 트리 모델과 별개입니다

이 문서 고정을 선택하면 현재 문서 키가 로컬 배열에 추가됩니다. 키가 추가되면 버튼 레이블이 Pinned로 바뀌고 비활성화되어 중복 항목을 방지합니다. 고정된 행을 제거해도 해당 키만 삭제되며 Tree 선택 상태는 그대로 유지됩니다. 고정 개수는 배열을 기준으로 계산됩니다.

선택, 펼치기, 저장된 참조는 서로 다른 작업을 수행하므로 이 구분이 중요합니다. 사용자는 선택한 에세이를 열어 둔 채 모든 폴더를 접거나, 고정한 참조를 유지하면서 이슈의 다른 부분으로 필터링할 수 있습니다. 어느 작업도 원격 문서가 편집되었음을 의미하지는 않습니다.

지원 사양 읽기

Prime UI 디자인 시스템: 네이티브 트리 키보드 모델 유지

네이티브 트리 키보드 모델 유지

네이티브 Tree는 tree 및 treeitem 역할, 선택 및 펼침 속성, 중첩된 수준 간의 관계를 통해 계층 구조를 나타냅니다. 키보드 모델에서는 화살표 키로 표시된 노드 사이를 이동하고 분기를 펼치거나 접으며, Enter 또는 Space로 포커스된 노드를 선택합니다. 페이지는 컬렉션에 명확한 aria-label을 제공합니다.

세부 정보 창과 고정 목록에는 일반 제목, 목록, 이름이 지정된 버튼을 사용합니다. 모바일에서는 읽기 순서상 탐색기가 문서보다 먼저 표시됩니다. 레이아웃은 기존 760px 중단점에서 세로로 쌓이며, 트리가 잘리거나 문서 안내가 사라지지 않습니다. 상태 표시줄에는 현재 선택 항목이 표시됩니다.

  • 표시되는 트리 순서가 바뀌는 경우 안정적인 키를 사용합니다.
  • 연결된 세부 콘텐츠가 없는 폴더는 선택할 수 없도록 합니다.
  • 반복되는 모호한 레이블 대신 Remove 버튼에 해당 문서의 이름을 표시합니다.

지원 사양 읽기

Prime UI 디자인 시스템 테마를 Vue 루트에 한 번 등록

Vue 루트에서 테마를 한 번만 등록

진입 파일에서 primevue/config의 PrimeVue, @primeuix/themes/aura의 Aura, 전체 App.vue를 가져옵니다. theme.preset을 Aura로 설정해 플러그인을 등록합니다. 고정된 라이트 모드 예제에서는 darkModeSelector가 false입니다. 프로덕션 테마 전환은 서로 다른 주요 버전의 문서를 혼용하지 말고, 해당 릴리스에서 지원하는 옵션으로 구성해야 합니다.

PrimeVue의 스타일 지정 컴포넌트는 프리셋을 바탕으로 필요한 컴포넌트 스타일을 생성합니다. 제공된 style.css는 기존 페이지 레이아웃과 일러스트만 정의합니다. 기존 primevue/resources/theme.css는 가져오지 않습니다. 검증된 설정에서는 트리의 리프를 선택하고 고정한 뒤 계층을 필터링했으며, 유효하지 않은 라이선스 알림 없이 390px 화면에서 렌더링했습니다.

지원 사양 읽기

Prime UI 디자인 시스템 컴포넌트 예제

완전한 네이티브 Tree 및 세부 정보 보기

안정적인 노드 키, 제어되는 확장 및 선택 맵, 필터와 노드 선택 처리.

vue
<script setup>
import {ref,computed} from 'vue';import Tree from 'primevue/tree';import Button from 'primevue/button';import Tag from 'primevue/tag';
const nodes=[{key:'issue',label:'Issue 04 · Fieldwork',selectable:false,children:[{key:'essays',label:'Essays',selectable:false,children:[{key:'ridge',label:'The ridge path'},{key:'river',label:'A river after rain'}]},{key:'visuals',label:'Visual material',selectable:false,children:[{key:'maps',label:'Three regional maps'},{key:'captions',label:'Caption reference sheet'}]},{key:'production',label:'Production',selectable:false,children:[{key:'proof',label:'Print proof checklist'},{key:'credits',label:'Credits and permissions'}]}]}];
const documents={ridge:{type:'Essay',owner:'Alex Morgan',status:'Editing',title:'The ridge path',intro:'A field essay about following the contour rather than the shortest route.',items:['Opening: the first view above the tree line','Middle: how a contour changes the pace of walking','Close: the landmarks remembered on the return'],note:'Review the transition between the weather observation and the first-person account.'},river:{type:'Essay',owner:'Jules Chen',status:'Review',title:'A river after rain',intro:'An observational essay that follows sediment, sound and changing water levels.',items:['Keep the time sequence explicit','Pair each field image with an observation','Check the final geographic names'],note:'Compare the image captions with the text before locking the layout.'},maps:{type:'Visual reference',owner:'Sam Rivera',status:'Review',title:'Three regional maps',intro:'A consistent reference treatment for ridge, river and open plain.',items:['Same north orientation','Shared legend and label size','Scale shown independently on each map'],note:'The miniature map below is original decorative geometry, not a geographic claim.'},captions:{type:'Reference',owner:'Maya Patel',status:'Editing',title:'Caption reference sheet',intro:'One place to keep subject, location, credit and contextual description.',items:['Subject and date','Location at an appropriate level of precision','Author or source credit'],note:'Do not use the visible caption as a substitute for a useful image alt description.'},proof:{type:'Checklist',owner:'Alex Morgan',status:'Ready',title:'Print proof checklist',intro:'Review the physical proof at actual scale before choosing the final stock.',items:['Body text and small labels remain legible','Images preserve the intended tonal range','Trim and page sequence match the layout'],note:'This is a sample editorial workflow, not a print vendor specification.'},credits:{type:'Reference',owner:'Maya Patel',status:'Review',title:'Credits and permissions',intro:'Keep attribution close to each asset record so it survives layout changes.',items:['Creator name and source','Allowed uses recorded separately','Credit wording copied accurately'],note:'This sample does not provide legal permission for any external image.'}};
const expanded=ref({issue:true,essays:true,visuals:true,production:true}),selection=ref({'ridge':true}),current=ref('ridge'),saved=ref([]);const doc=computed(()=>documents[current.value]);function select(node){if(documents[node.key])current.value=node.key;}function pin(){if(!saved.value.includes(current.value))saved.value.push(current.value);}function expandAll(){expanded.value={issue:true,essays:true,visuals:true,production:true};}
</script>
<template><main class="editorial-library"><header><div><p class="eyebrow">PRIME UI · PRIMEVUE IMPLEMENTATION</p><h1>Find the thread of an issue.</h1><p class="intro">A native tree navigator for an editorial collection, using the Aura theme.</p></div><Tag value="Local specimen" severity="secondary" /></header><div class="library-layout"><aside class="library-nav"><div class="nav-heading"><h2>Issue contents</h2><div><Button label="Expand" text size="small" @click="expandAll"/><Button label="Collapse" text size="small" @click="expanded={}"/></div></div><Tree :value="nodes" v-model:expandedKeys="expanded" v-model:selectionKeys="selection" selectionMode="single" :filter="true" filterMode="lenient" filterPlaceholder="Find a document" aria-label="Editorial document tree" @node-select="select" /><section class="pinned"><h2>Pinned documents <span>{{saved.length}}</span></h2><ul v-if="saved.length"><li v-for="key in saved" :key="key"><span>{{documents[key].title}}</span><Button label="Remove" text size="small" :aria-label="`Remove ${documents[key].title}`" @click="saved=saved.filter(x=>x!==key)"/></li></ul><p v-else>No documents pinned yet.</p></section></aside><article class="document"><div class="document-top"><span>{{doc.type}}</span><Tag :value="doc.status" :severity="doc.status==='Ready'?'success':doc.status==='Review'?'info':'warn'"/></div><h2>{{doc.title}}</h2><p class="owner">{{doc.owner}} · ISSUE 04</p><div class="map-art" aria-hidden="true"><i></i><i></i><i></i><span>FIELD NOTES / 04</span></div><p class="intro">{{doc.intro}}</p><h3>What to inspect</h3><ol><li v-for="item in doc.items" :key="item">{{item}}</li></ol><aside class="document-note">{{doc.note}}</aside><Button :label="saved.includes(current)?'Pinned':'Pin this document'" :disabled="saved.includes(current)" @click="pin"/><p class="local-note">Sample records only. Pinning changes this page’s local state.</p></article></div><p class="selection-status" role="status">Selected document: {{doc.title}}</p></main></template>

코드 참조

  • 폴더 노드에는 selectable:false를 사용하고, 문서 리프만 세부 정보 보기를 변경합니다.
  • 네이티브 필터는 lenient 방식으로 작동하며 일치하는 계층 구조를 유지합니다.
  • 고정한 문서는 별도의 애플리케이션 상태로 관리합니다.

기존 편집 레이아웃

Aura 스타일의 네이티브 컴포넌트를 활용한 반응형 문서 탐색기.

CSS
*{box-sizing:border-box}html{font-size:16px}body{margin:0;background:#f4f6f4;color:#26342d;font-family:system-ui,sans-serif}.editorial-library{max-width:1120px;padding:32px;margin:auto}header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:32px}.eyebrow{font-size:11px;letter-spacing:.12em;font-weight:700;color:#5f7566}h1{font-size:34px;line-height:1.15;margin:14px 0}.intro{font-size:15px;line-height:1.7;color:#5f6b63}.library-layout{display:grid;grid-template-columns:340px 1fr;gap:24px}.library-nav,.document{background:white;border:1px solid #dfe5df;border-radius:12px;min-width:0}.nav-heading{padding:18px 18px 0}.nav-heading h2,.pinned h2{font-size:15px;margin:0 0 8px}.nav-heading>div{display:flex;gap:4px}.pinned{border-top:1px solid #dfe5df;padding:20px}.pinned h2{display:flex;justify-content:space-between}.pinned p{font-size:13px;color:#6a766e}.pinned ul{list-style:none;padding:0;margin:0}.pinned li{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;padding:8px 0}.document{padding:28px}.document-top{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#617265}.document h2{font-size:28px;line-height:1.2;margin:16px 0 8px}.owner{font-size:11px;letter-spacing:.08em;color:#6a766e}.map-art{height:130px;background:#dae4d4;border-radius:6px;position:relative;overflow:hidden;margin:24px 0}.map-art i{position:absolute;width:300px;height:130px;border:1px solid #63845a;opacity:.55;border-radius:50%;left:10%;top:30%;transform:rotate(-20deg)}.map-art i:nth-child(2){width:240px;height:100px;top:42%;left:16%}.map-art i:nth-child(3){width:180px;height:70px;top:54%;left:22%}.map-art span{position:absolute;top:16px;left:18px;font-size:9px;font-weight:700;letter-spacing:.16em;color:#496342}.document h3{font-size:15px;margin-top:24px}.document ol{padding-left:21px;font-size:14px;line-height:1.7}.document li{margin:10px 0}.document-note{border-left:3px solid #8aad88;background:#f1f5ee;padding:12px 16px;font-size:13px;line-height:1.7;margin:24px 0}.local-note,.selection-status{font-size:12px;color:#6a766e;line-height:1.6}.selection-status{margin-top:20px}@media(max-width:760px){.editorial-library{padding:24px 14px}header{flex-direction:column;gap:6px}h1{font-size:29px}.library-layout{grid-template-columns:1fr}.document{padding:22px}}

코드 참조

  • 윤곽선 일러스트는 장식용으로 제작한 도형이며 실제 지도가 아닙니다.
  • rem 크기를 재현할 수 있도록 루트 크기를 16px로 명시합니다.
04

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

구현 시작점

PrimeVue 4.5.5와 @primeuix/themes 1.2.5 조합을 검증했습니다. 설치한 PrimeVue 4 패키지의 라이선스는 MIT입니다. 다른 주요 버전에도 같은 설정이나 라이선스 요건이 적용된다고 가정하지 마세요.

자바스크립트
// Create the project first:
// npm create vite@latest prime-ui-specimen -- --template vue
// cd prime-ui-specimen && npm install
// In a Vite Vue 3 project:
// npm install [email protected] @primeuix/[email protected]
// Save the complete SFC as App.vue and layout as style.css.
import {createApp} from 'vue';
import PrimeVue from 'primevue/config';
import Aura from '@primeuix/themes/aura';
import App from './App.vue';
import './style.css';
createApp(App).use(PrimeVue, {
  theme: {preset: Aura, options: {darkModeSelector: false}}
}).mount('#app');
// index.html contains <div id="app"></div>.
// This example is pinned to 4.5.5, not the newer 5.x runtime.
// Keep the template index.html and replace its entry with the code above.
// npm run dev

프로젝트를 위한 프롬프트

에이전트 프롬프트
제공된 PrimeVue 4.5.5 편집 문서 라이브러리와 @primeuix/themes 1.2.5의 Aura 프리셋을 사용해 구현합니다. 안정적인 노드 키를 사용해 네이티브 Tree의 확장, 필터링, 선택 기능을 유지하고, 선택된 문서의 세부 정보와 고정 문서 목록을 구분합니다. 실제 문서를 고정하거나 고정 해제하되, 카테고리 노드를 문서로 바꾸거나 고정 항목을 중복하지 않습니다. 전체 프로바이더 설정과 기존 반응형 CSS를 유지합니다. 이 예제는 검증된 버전 4 설정입니다. 더 새로운 주요 버전의 런타임으로 조용히 바꾸거나 조달 워크플로로 전환하지 마세요.
05

Prime UI 디자인 시스템 출처 및 범위

Prime UI 생태계의 구현 예제로, PrimeVue 4.5.5와 Aura 1.2.5를 사용합니다. 이 페이지는 프레임워크 패키지나 이후 주요 버전에서도 API 또는 라이선스 요건이 동일하다고 주장하지 않습니다. 모든 레코드와 고정 항목은 로컬에서 관리합니다.