These tags capture a child as a template, remove it from the DOM, and clone it per item.
These tags capture a child as a template, remove it from the DOM, and clone it per item. The template must exist before runtime or the container renders nothing (rule SSK-107).
| Container | What it captures as template | Cloned per | Notes |
|---|---|---|---|
storesynk-list | its first element child (must be, or contain, a storesynk-product) | collection product | clone fed via provideProduct(); sets [ss-loading]/[ss-empty] |
search-result-list | its first element child (must be, or contain, a storesynk-product) | search result | same engine as storesynk-list; [ss-loading]/[ss-empty] |
predictive-search | first search-result-item, else first storesynk-product (also needs an <input>) | suggestion | the template’s parent element becomes the results dropdown; [ss-open]/[ss-loading] |
cart-line-list | its first cart-line child | cart line | clone fed via provideLine() |
cart-discount-list / cart-order-discount-list | its first cart-discount child | discount chip / order discount | clone fed via provideDiscount() |
cart-line | per-line context owner (cloned by cart-line-list, not itself a clone-container) | - | holds the show-line-* displayers + line controls |
show-thumbnail | self-cloning: the index-less instance is the template; clones itself, one per media, assigning index | media item | hidden entirely when ≤1 media |
change-option (swatch/radio modes) | first option-value (or first <option> / radio wrapper) | option value | clones the per-value template; select mode clones first <option> |
change-selling-plan | its first selling-plan-option child | one per real selling plan (frequency) | marks the active one [ss-active] + aria-pressed; sets [ss-empty] when there are no plans or in one-time mode |
change-line-selling-plan | its first selling-plan-option child | one per plan on the cart line’s merchandise (frequency) | the cart counterpart; same template, leaves and [ss-active]/aria-pressed treatment; [ss-empty] when the line has no plans or the line is one-time |
product-list | its first element child (must be, or contain, a storesynk-product) | listed product | clone fed via provideProduct(); appends only the new tail on load-more; [ss-loading]/[ss-empty] |
filter-list | its first filter-group (whose inner filter-value is the per-value template) | facet group → facet value | zero-config: renders every LIST facet Shopify returns; [ss-empty] |
change-filter | its first filter-value child | one facet value | custom single-facet UX; paints show-filter-swatch; [ss-empty] when the facet is absent |
active-filter-list | its first element child (the chip template, e.g. active-filter-item) | applied filter | removable chips; [ss-empty] when none applied |
storesynk-bundle | its first element child (must be, or contain, a bundle-offer) | live bundle | bundles module; clone’s offer fed via provideBundle(); [ss-loading]/[ss-empty] |
bundle-member-list | its first element child (must be, or contain, a storesynk-product member card) | bundle member | card fed via provideProduct() (variants filtered to the member’s allowed set - its change-options offer only those combos; one allowed ⇒ no selector) + a per-clone bundleMemberContext; selection updates refresh cards in place (no re-clone) |
storesynk-volume-discount | its first element child (must contain a volume-tier-list) | live volume discount | volume-discount module; cloned once for the winning discount; provides volumeDiscountContext; [ss-loading]/[ss-empty] |
volume-tier-list | its first element child (must be, or contain, a volume-tier) | tier row | ARIA radiogroup; clone fed a per-row volumeTierContext; selection/price updates refresh rows in place (no re-clone) |
storesynk-customer-pricing | its first element child (free-form template - show-pricing-* displayers, a <log-in>, or hardcoded copy; never the regular show-price/show-compare-price/show-unit-price - those stay siblings of the widget, SSK-111) | the one live rule | customer-pricing widget; cloned once for the winning rule when in a renderable state (prompt/member); provides customerPricingContext; [ss-member] in member mode; [ss-loading]/[ss-empty] |
storesynk-mix-match | its first element child (must be, or contain, a mix-match-offer) | live mix-match bundle | mix-match module; the clone’s offer fed via provideLive(); [ss-loading]/[ss-empty] |
mix-match-section-list | its first element child (must be, or contain, a mix-match-section) | section | per-clone section context; owns the accordion state; selection updates refresh clones in place (no re-clone) |
mix-match-item-list | its first element child (must be, or contain, a storesynk-product pool card) | pool product | card fed via provideProduct() (bundle member-card machinery, truncation included) + a per-card item context; ss-selected while picked; selection updates refresh cards in place |
mix-match-selection-list | its first element child (the pick template; show-selection-overflow may follow it) | picked item (capped by max) | per-clone pick context; [ss-empty] while nothing is picked |
storesynk-addons | its first element child (the per-offer template, free-form - typically show-addons-title + an addon-list; only its presence is required) | the ONE live add-ons offer (cloned once for the overlap-rule winner) | product-addons module; provides addonsContext; [ss-loading]/[ss-empty] |
addon-list | its first element child (must be, or contain, a storesynk-product row card) | add-on row | card fed via provideProduct() (bundle member-card machinery - variant restriction + truncation included) + a per-clone row context; ss-selected while ticked; selection updates refresh cards in place (no re-clone) |
Not a clone container:
change-purchase-option- and its cart counterpartchange-line-purchase-option- toggles[ss-active]on its author-providedpurchase-optionchildren (expects two:value="single"andvalue="recurring") - it captures no template, so SSK-107 does not apply to either.show-metafieldclones ametafield-itemtemplate only forlist.*metafield types, so it too has no SSK-107 obligation (a scalar metafield renders with no template).Conditional clone container:
change-country/change-languageclone a first-childlocale-valueonly in template (pill) mode - but their default is native-<select>mode (an author<select>is adopted, or one is auto-created), which needs no template. So the pickers carry no SSK-107 obligation: a picker with neither a<select>nor alocale-valuejust auto-creates the<select>. (A picker that has alocale-valuebut whose leaves are outside it still trips SSK-108 for the stray leaf.)
Imported from the Storesynk skill v0.1.0 (references/component-reference.md). To change this page, change it there.