Cart items 블록은 장바구니의 라인 아이템 목록으로, 구매자가 추가한 각 상품을 이미지, 제목, 옵션(variant), 가격, 수량 스테퍼, 제거 컨트롤과 함께 렌더링해요. 필수 블록이며, 장바구니의 하위 블록(Product 행, Subscription upgrade, Custom code)을 담는 컨테이너로서 라인별 하위 블록이 연결되는 구조를 제공해요.

Product 행
행 자체는 상품 이미지(가능한 경우 상품 페이지로 연결), 제목, 옵션, 가격 및 취소선 처리된 compare-at 가격, 수량 스테퍼, 제거 버튼을 렌더링해요. 번들 라인은 구성 요소의 펼침 목록을 표시해요.
텍스트 스타일
스타일을 지정할 수 있는 텍스트 요소는 카테고리별로 그룹화되어 있어요:
Product
- Product title — 각 라인의 상품 이름이에요. 커스텀 폰트 패밀리도 지원해요.
- Variant — 옵션 라벨이에요(예: Size: Medium).
- Subscription plan — 구독 라인에 표시되는 읽기 전용 플랜 라벨이에요.
- Price — 라인의 현재 가격이에요.
- Compare-at price — 취소선 처리된 원래 가격이에요.
- Savings — 절약 라벨이에요(예: Save $5.00). Size와 line height만 지정할 수 있어요 — 굵기와 색상은 위의 Rich Text Editor에서 설정해요.
- Bundle toggle — 번들의 구성 요소 목록을 확장하는 펼침 헤더예요.
- Bundle item title — 번들 내부 각 구성 요소의 제목이에요.
- Bundle item variant — 각 번들 구성 요소의 옵션 라벨이에요.
이 설정은 Cart items 블록의 라인 아이템 할인 태그에만 적용돼요. Summary 블록의 할인 코드 태그는 별도로 스타일이 지정돼요.
하위 블록과 배치 방식
- Product 행 앞에 배치된 하위 블록은 각 라인에서 상품 콘텐츠 위에 표시돼요.
- Product 행 뒤에 배치된 하위 블록은 각 라인에서 상품 콘텐츠 아래에 표시돼요.
동작 방식
- 장바구니에 아이템이 없으면 드로어가 빈 상태로 전환되고 이 블록은 표시되지 않아요.
- 장바구니 변경은 한 번에 하나씩 실행돼요. 수량 업데이트나 제거가 진행되는 동안에는 장바구니 일관성을 유지하기 위해 행의 컨트롤이 비활성화되고, 변경이 완료되면 다시 활성화돼요.
- 라인의 수량을 1 미만으로 낮추면 해당 라인이 제거돼요. 스토어가 거부하는 수량(예: 재고 초과)은 마지막 유효 값으로 다시 동기화돼요.
- 번들은 하나의 단위로 변경돼요. 번들의 앵커 라인에서 수량을 조정하면 전체 번들이 한 번의 작업으로 배율 조정돼요 — 자식 아이템이 앵커당 3개로 포함되어 있다면, 앵커를 1에서 2로 올리면 그 자식은 6이 돼요. 앵커를 제거하면 번들의 모든 구성원이 한꺼번에 제거돼요.
- 일부 번들은 수량을 변경할 수 없어요. 번들의 자식 중 하나라도 소수 비율(예: 앵커당 1.5개)로 포함되어 있으면 해당 번들의 수량 스테퍼가 잠겨요: +/− 버튼과 수량 필드가 모두 비활성화되고, 입력한 수량도 허용되지 않아요. 번들 제거는 여전히 가능해요.
- 구독 라인은 플랜을 표시해요. 라인에 판매 플랜이 있고 Subscription upgrade 하위 블록이 꺼져 있거나 추가되지 않은 경우, Product 행이 옵션 아래에 읽기 전용 플랜 라벨을 표시해요 — 예: Delivers every month (save 30%). 해당 하위 블록이 활성화되면 자체 선택기에서 플랜을 표시하므로, 중복되지 않도록 읽기 전용 라벨이 숨겨져요.
배치 및 제한
- 영역: 본문.
- 최대 개수: 장바구니 상태당 1개.
- 상태: 채워진 장바구니에서만.
- 잠겨 있으며 기본으로 추가돼요. Cart items는 제거하거나 숨길 수 없고, 위치만 변경할 수 있어요.
커스텀 템플릿
라인 콘텐츠
수량과 제거
번들 렌더링
bundle.children이 번들 내용을 담고 있어요. 자식은 절대 자체 행으로 나타나지 않으므로, 렌더링하지 않으면 구매자가 번들에 무엇이 들어 있는지 볼 수 없어요:
key가 null이므로, 위와 같이 인덱스를 대신 사용하세요.