이 가이드는 공개 Bolt Twig / Pattern Lab 구현에 중점을 둡니다. 현재 Bolt 홈페이지에서는 애플리케이션 및 포털용 BoltDS React도 제공합니다. 두 구현은 문서와 버전 관리가 서로 다릅니다. 미리보기는 독립적으로 만든 HTML 해석이며 Bolt 런타임이 아닙니다.
이 예제는 요약을 표시하고 필요에 따라 질문을 펼쳐 볼 수 있는 워크숍 자료입니다. 콘텐츠 중심의 Twig 구현에 잘 어울리는 구성입니다. 편집 계층 구조를 우선하고, 아코디언으로 보충 자료를 필요할 때 확인할 수 있게 합니다. BoltDS React 기반 애플리케이션에서는 Twig 네임스페이스 경로를 복사하는 대신 해당 문서를 참고하세요.
공개 팔레트에는 네이비 #001f5f, 청록색 #10a5ac, 주황색 #f76923이 포함됩니다. 이 예제에서는 네이비를 강한 편집용 헤더로, 청록색과 주황색을 일러스트 강조색으로 사용합니다. 이 색상은 기초 색상 값일 뿐이며, 모든 색상 조합이 작은 텍스트에 적합하다는 뜻은 아닙니다.
자료의 핵심 정보는 흰색과 옅은 네이비 표면 위에 배치됩니다. 장식용 가지형 다이어그램은 서비스 여정을 단순화하는 워크숍을 나타냅니다. 독자적으로 제작한 그림으로, Pega 로고나 공식 다이어그램이 아닙니다.
Bolt는 기본 크기 1rem, large 1.4rem, xxlarge 2.35rem, display 3.75rem을 제공합니다. 루트 크기는 뷰포트와 밀도에 따라 달라지므로, 고정된 16 px 기준으로 표 전체를 변환하면 의도된 동작이 사라집니다.
기초 체계에서 본문과 헤드라인 글꼴로 Open Sans를 지정합니다. 자체적으로 구성한 미리보기에는 글꼴 파일이 포함되어 있지 않아 로컬 시스템 대체 글꼴을 사용합니다. 픽셀 단위의 타이포그래피가 완전히 동일하다고 주장하지 않으면서도, 제목은 뚜렷하게, 보조 제목은 간결하게, 문단은 편안하게 표시합니다.
accordion-item.twig를 호출할 때마다 trigger와 content를 전달합니다. Twig set 블록으로 렌더링된 항목을 캡처한 다음, content를 통해 부모에 전달합니다. 위의 완전한 예제에서는 첫 번째 질문을 열고 single: true를 사용합니다.
spacing은 항목 내부 여백을 제어하고 icon_valign은 아이콘의 정렬을 제어합니다. 질문의 경계를 명확히 해야 한다면 구분선을 유지하세요. inactive 플래그는 비활성화된 폼 컨트롤이 아닙니다. 콘텐츠를 접고 아이콘을 숨깁니다.
HTML 해석에서는 실제 버튼, aria-expanded, aria-controls, 숨김 답변 패널을 사용합니다. 닫힌 질문을 클릭하면 해당 답변이 열리고 이전 답변은 닫힙니다. 열린 질문을 클릭하면 해당 답변이 접힙니다. 포커스는 트리거 버튼에 유지됩니다.
이 동작은 선택한 단일 항목 펼침 방식을 따르면서 Bolt JavaScript와는 독립적으로 작동합니다. 미리보기는 Bolt 딥링크를 구현하지 않으며, 네이티브 컴포넌트 런타임을 실행한다고 주장하지 않습니다. 네이티브 Bolt에서 단일 모드를 사용할 경우, 딥링크된 항목이 처음에 열리는 항목보다 우선합니다.
설치 명령은 컴포넌트 네임스페이스를 확인하고 필요한 에셋을 컴파일하는 Bolt Twig 애플리케이션 안에서 사용해야 합니다. 공개 저장소에서는 yarn setup과 yarn start를 통해 완전한 개발 환경을 제공합니다. 이는 참고용 환경이며, 두 줄만으로 프로덕션에 배포할 수 있는 방식은 아닙니다.
서버에서 렌더링하는 콘텐츠를 구현할 때는 Twig를 선택하고 애플리케이션에서 사용 중인 버전을 확인하세요.
아코디언 패키지를 설치하고, Bolt 애플리케이션 설정에서 기존 Twig 네임스페이스를 등록한 다음, 컴파일된 프로젝트 에셋을 포함하세요.
질문 예제를 완성된 형태로 렌더링한 뒤, 실제 프로젝트에서 한 번에 하나만 펼쳐지는 동작, 줄바꿈되는 트리거, 키보드 조작을 확인하세요.
문서 전체를 index.html로 저장하고 브라우저에서 여세요. Bolt Twig의 기반과 단일 아코디언 동작을 독립적으로 HTML/CSS 방식으로 구현한 예입니다. 시스템 글꼴 대체 설정을 사용하며 Bolt 런타임은 포함하지 않습니다.
html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Service journey workshop</title><style>*{box-sizing:border-box}body{margin:0;background:#f5f7fb;color:#001f5f;font:16px/1.6 system-ui,sans-serif}header{background:#001f5f;color:white;padding:38px 5%;display:grid;grid-template-columns:1.6fr 1fr;gap:30px}small{letter-spacing:.13em;font-size:11px;text-transform:uppercase}h1{font-size:clamp(32px,4vw,48px);line-height:1.12;max-width:650px;margin:16px 0}header p{max-width:550px;color:#d7e2f2}svg{width:100%;max-width:310px;align-self:center;justify-self:center}main{display:grid;grid-template-columns:1fr 1.6fr;gap:40px;padding:32px 5%}h2{font-size:23px;line-height:1.25}aside p{font-size:14px}dl{font-size:14px}dt{font-weight:700;margin-top:18px}dd{margin:2px 0}section{background:white;border-top:3px solid #10a5ac}article{border-bottom:1px solid #d7e2f2}button{font:600 16px/1.5 system-ui;width:100%;display:flex;justify-content:space-between;gap:20px;text-align:left;padding:22px 24px;border:0;background:white;color:#001f5f;cursor:pointer}button:hover{background:#f0f5fc}button:focus-visible{outline:3px solid #005154;outline-offset:-4px}.answer{padding:0 24px 24px;color:#303744;font-size:15px}.answer p{margin:0}footer{padding:0 5% 22px;color:#555;font-size:11px}@media(max-width:700px){header{grid-template-columns:1fr;padding:28px 6%}svg{display:none}main{grid-template-columns:1fr;padding:24px 6%;gap:16px}button{padding:20px}dl{display:flex;flex-wrap:wrap;gap:24px}dt{margin:0}}</style><header><div><small>Field notes · Live workshop</small><h1>Make your service journey simpler.</h1><p>A practical session for turning a complex request into a clear next step.</p></div><svg viewBox="0 0 300 200" aria-hidden="true"><path d="M30 100H115M115 100V40H230M115 100V160H230" fill="none" stroke="#86cac6" stroke-width="4"/><circle cx="30" cy="100" r="22" fill="#f76923"/><rect x="95" y="80" width="40" height="40" rx="5" fill="#10a5ac"/><rect x="210" y="20" width="70" height="40" rx="6" fill="#d7e2f2"/><rect x="210" y="140" width="70" height="40" rx="6" fill="#ffc836"/></svg></header><main><aside><small>Before you join</small><h2>One journey.<br>A clearer direction.</h2><p>Map a request, find a point of friction, and rewrite the next step together.</p><dl><div><dt>Format</dt><dd>Live, small-group exercise</dd></div><div><dt>Length</dt><dd>45 minutes</dd></div><div><dt>Example only</dt><dd>No registration is collected</dd></div></dl></aside><div><h2>Useful to know</h2><section aria-label="Workshop questions"><article><h3 style="margin:0"><button aria-expanded="true" aria-controls="a1" id="q1">What should I bring?<span aria-hidden="true">−</span></button></h3><div class="answer" id="a1"><p>Bring a laptop and one workflow you want to simplify. A short description of the request and its current outcome is enough.</p></div></article><article><h3 style="margin:0"><button aria-expanded="false" aria-controls="a2" id="q2">Will there be a recording?<span aria-hidden="true">+</span></button></h3><div class="answer" id="a2" hidden><p>This workshop is live only. The written exercise is included so you can revisit the method with your team.</p></div></article><article><h3 style="margin:0"><button aria-expanded="false" aria-controls="a3" id="q3">Who is this session for?<span aria-hidden="true">+</span></button></h3><div class="answer" id="a3" hidden><p>Content teams and developers working on service journeys. No prior experience with the workshop format is required.</p></div></article></section></div></main><footer>Independent Bolt Twig interpretation · verified palette and spacing references · system font fallback</footer><script>const qs=[...document.querySelectorAll('button')];qs.forEach(b=>b.onclick=()=>{const open=b.getAttribute('aria-expanded')!=='true';qs.forEach(x=>{let yes=x===b&&open;x.setAttribute('aria-expanded',yes);x.lastElementChild.textContent=yes?'−':'+';document.getElementById(x.getAttribute('aria-controls')).hidden=!yes})});</script></html>
한 번에 하나만 여는 질문 목록은 Bolt 딥 링크를 지원하지 않습니다. Twig 예제는 기본 통합 경로이며, 워크숍의 핵심 정보는 접힌 답변 밖에 표시됩니다.
답변을 하나씩 펼치는 워크숍 질문
항목 템플릿으로 각 질문을 렌더링하고, 마크업을 모은 뒤 상위 아코디언에 전달하세요.
twig
{% set questions %}
{% include '@bolt-components-accordion/accordion-item.twig' with {
trigger: 'What should I bring?',
content: '<p>Bring a laptop and one workflow you want to simplify.</p>',
open: true
} only %}
{% include '@bolt-components-accordion/accordion-item.twig' with {
trigger: 'Will there be a recording?',
content: '<p>This workshop is live only. The written exercise is included.</p>'
} only %}
{% include '@bolt-components-accordion/accordion-item.twig' with {
trigger: 'Who is this session for?',
content: '<p>Content teams and developers working on service journeys.</p>'
} only %}
{% endset %}
{% include '@bolt-components-accordion/accordion.twig' with {
content: questions,
single: true,
spacing: 'medium',
icon_valign: 'top'
} only %}
설정된 Bolt Twig 애플리케이션에서 사용하세요. 공식 컴포넌트는 순수 HTML 사용 진입점을 제공하지 않습니다.
single은 동시에 펼쳐지는 항목 수를 하나로 제한합니다. 딥 링크가 지정된 경우 처음 열려 있는 항목 설정보다 우선합니다.
스키마에는 large가 가장 큰 간격 옵션으로 기재되어 있지만, 문서 예제에서는 xlarge를 사용합니다. 이 예제에서는 스키마에 맞는 값을 사용합니다.
04
Pega Bolt 디자인 시스템 에이전트 설정
구현 시작점
패키지 명령은 컴포넌트를 추가할 뿐, 독립형 웹사이트를 만들지는 않습니다. 프로젝트에 등록된 @bolt-components-accordion Twig 네임스페이스와 컴파일된 Bolt 에셋을 사용하세요. 저장소 개발 환경 설정과 애플리케이션 통합은 서로 다른 경로이며, 어느 쪽도 현재 BoltDS React API에 해당하지 않습니다.
bash
# In an existing Bolt Twig application with its asset pipeline configured:
npm install @bolt/components-accordion
# To inspect the complete official development environment instead:
git clone https://github.com/boltdesignsystem/bolt.git
cd bolt
yarn setup
yarn start
프로젝트를 위한 프롬프트
에이전트 프롬프트
검증된 남색/청록색 팔레트, 유동형 타이포그래피 계층, 서로 구분된 x/y 간격 척도를 적용해 Bolt Twig 워크숍 리소스 페이지를 만드세요. 핵심 정보는 항상 표시하세요. accordion-item.twig를 accordion.twig 안에서 구성하고, single true와 medium 간격을 사용하세요. Twig 경로를 React API로 사용하지 마세요.
05
Pega Bolt 디자인 시스템 출처와 범위
이 가이드는 공개 Bolt Twig / Pattern Lab 구현에 중점을 둡니다. 현재 Bolt 홈페이지에서는 애플리케이션 및 포털용 BoltDS React도 제공합니다. 두 구현은 문서와 버전 관리가 서로 다릅니다. 미리보기는 독립적으로 만든 HTML 해석이며 Bolt 런타임이 아닙니다.