commit 2115f7b08cdeddd74ba5abc63b6e7e17d8f434de Author: Axel Kee Date: Thu Jul 2 17:21:52 2026 +0800 Original Dawn theme code diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..b6f4285 Binary files /dev/null and b/.DS_Store differ diff --git a/snippets/card-product.liquid b/snippets/card-product.liquid new file mode 100644 index 0000000..b65762b --- /dev/null +++ b/snippets/card-product.liquid @@ -0,0 +1,627 @@ +{% comment %} + Renders a product card + + Accepts: + - card_product: {Object} Product Liquid object (optional) + - media_aspect_ratio: {String} Size of the product image card. Values are "square" and "portrait". Default is "square" (optional) + - image_shape: {String} Image mask to apply to the product image card. Values are "arch", "blob", "chevronleft", "chevronright", "diamond", "parallelogram", and "round". (optional) + - show_secondary_image: {Boolean} Show the secondary image on hover. Default: false (optional) + - show_vendor: {Boolean} Show the product vendor. Default: false + - show_rating: {Boolean} Show the product rating. Default: false + - extend_height: {Boolean} Card height extends to available container space. Default: true (optional) + - lazy_load: {Boolean} Image should be lazy loaded. Default: true (optional) + - skip_styles: {Boolean} Don't include component styles. Useful when rendering multiple product cards in a loop. Default: false (optional) + - quick_add: {Boolean} Show the quick add button. + - section_id: {String} The ID of the section that contains this card. + - horizontal_class: {Boolean} Add a card--horizontal class if set to true. Default: false (optional) + - horizontal_quick_add: {Boolean} Changes the quick add button styles when set to true. Default: false (optional) + - placeholder_image: {String} The placeholder image to use when no product exists. Default: 'product-apparel-2' (optional) + + Usage: + {% render 'card-product', show_vendor: section.settings.show_vendor %} +{% endcomment %} +{%- unless skip_styles -%} + {{ 'component-rating.css' | asset_url | stylesheet_tag }} + {{ 'component-volume-pricing.css' | asset_url | stylesheet_tag }} + + {{ 'component-price.css' | asset_url | stylesheet_tag }} + {{ 'quick-order-list.css' | asset_url | stylesheet_tag }} + {{ 'quantity-popover.css' | asset_url | stylesheet_tag }} +{%- endunless -%} +{%- if card_product and card_product != empty -%} + {%- liquid + assign ratio = 1 + if card_product.featured_media and media_aspect_ratio == 'portrait' + assign ratio = 0.8 + elsif card_product.featured_media and media_aspect_ratio == 'adapt' + assign ratio = card_product.featured_media.aspect_ratio + endif + if ratio == 0 or ratio == null + assign ratio = 1 + endif + -%} + + + + +{%- else -%} + {%- liquid + assign ratio = 1 + assign placeholder = true + if media_aspect_ratio == 'portrait' + assign ratio = 0.8 + endif + -%} + +{%- endif -%} diff --git a/snippets/price.liquid b/snippets/price.liquid new file mode 100644 index 0000000..eb91056 --- /dev/null +++ b/snippets/price.liquid @@ -0,0 +1,125 @@ +{% comment %} + Renders a list of product's price (regular, sale) + + Accepts: + - product: {Object} Product Liquid object (optional) + - placeholder: {Boolean} Renders a placeholder price (optional) + - use_variant: {Boolean} Renders selected or first variant price instead of overall product pricing (optional) + - show_badges: {Boolean} Renders 'Sale' and 'Sold Out' tags if the product matches the condition (optional) + - price_class: {String} Adds a price class to the price element (optional) + - show_compare_at_price: {Boolean} Renders the compare at price if the product matches the condition (optional) + + Usage: + {% render 'price', product: product %} +{% endcomment %} +{%- liquid + if use_variant + assign target = product.selected_or_first_available_variant + elsif placeholder + assign target = null + else + assign target = product + endif + + assign compare_at_price = target.compare_at_price + assign price = target.price | default: 1999 + assign price_min = product.price_min + assign price_max = product.price_max + assign available = target.available | default: false + assign money_price = price | money + assign money_price_min = price_min | money + assign money_price_max = price_max | money + if settings.currency_code_enabled + assign money_price = price | money_with_currency + assign money_price_min = price_min | money_with_currency + assign money_price_max = price_max | money_with_currency + endif + + if target == product and product.price_varies + assign money_price = 'products.product.price.from_price_html' | t: price: money_price + endif +-%} + +{%- unless target == null and placeholder == null -%} +
+
+ {%- comment -%} + Explanation of description list: + - div.price__regular: Displayed when there are no variants on sale + - div.price__sale: Displayed when a variant is a sale + {%- endcomment -%} +
+ {%- if product.quantity_price_breaks_configured? -%} + {%- if show_compare_at_price and compare_at_price -%} + {%- unless product.price_varies == false and product.compare_at_price_varies %} + + {{- 'products.product.price.regular_price' | t -}} + + + + {% if settings.currency_code_enabled %} + {{ compare_at_price | money_with_currency }} + {% else %} + {{ compare_at_price | money }} + {% endif %} + + + {%- endunless -%} + {%- endif -%} + {{ 'products.product.price.regular_price' | t }} + + {{- + 'products.product.volume_pricing.price_range' + | t: minimum: money_price_min, maximum: money_price_max + -}} + + {%- else -%} + {{ 'products.product.price.regular_price' | t }} + + {{ money_price }} + + {%- endif -%} +
+
+ {%- unless product.price_varies == false and product.compare_at_price_varies %} + {{ 'products.product.price.regular_price' | t }} + + + {% if settings.currency_code_enabled %} + {{ compare_at_price | money_with_currency }} + {% else %} + {{ compare_at_price | money }} + {% endif %} + + + {%- endunless -%} + {{ 'products.product.price.sale_price' | t }} + + {{ money_price }} + +
+ {%- if product.selected_or_first_available_variant.unit_price_measurement -%} + {% render 'unit-price', price: product.selected_or_first_available_variant.unit_price, measurement: product.selected_or_first_available_variant.unit_price_measurement %} + {%- endif -%} +
+ {%- if show_badges -%} + + {{ 'products.product.on_sale' | t }} + + + + {{ 'products.product.sold_out' | t }} + + {%- endif -%} +
+{% endunless %}