diff --git a/.monorepo-source.json b/.monorepo-source.json
index f558cdc..19dd882 100644
--- a/.monorepo-source.json
+++ b/.monorepo-source.json
@@ -1,7 +1,7 @@
{
"productId": "funkycommerce-headless",
"repository": "coded-letter/superfunky-theme",
- "source": "coded-letter/coded-letter-monorepo@d3df02900ae9d6ca232dad2f5098e430012f2418",
+ "source": "coded-letter/coded-letter-monorepo@47e086c8cc6dd1cbbdbfa426f90ca34ba3123a17",
"sourcePath": "workspace/backend/wordpress/themes/free/funkycommerce-headless",
"installSlug": "funkycommerce-headless",
"kind": "theme",
diff --git a/assets/storefront-ui-strings/en.json b/assets/storefront-ui-strings/en.json
index 279e346..7a3c789 100644
--- a/assets/storefront-ui-strings/en.json
+++ b/assets/storefront-ui-strings/en.json
@@ -673,5 +673,154 @@
"community.product.field.sku": "SKU",
"community.product.field.stock": "Stock quantity",
"community.product.field.category": "Category",
- "community.product.submit": "List product"
+ "community.product.submit": "List product",
+ "navigation.back_to_top": "Back to top",
+ "nav.shop": "Shop",
+ "nav.blog": "Blog",
+ "inquiry.error": "The inquiry could not be sent. Please try again.",
+ "inquiry.success": "Your inquiry has been sent. We'll follow up by email shortly.",
+ "inquiry.field.name": "Name",
+ "inquiry.field.email": "Email",
+ "inquiry.field.message": "Message",
+ "inquiry.sending": "Sending…",
+ "review.summary_count": "Reviews: {count}",
+ "review.read_more": "Read more",
+ "review.hide": "Hide",
+ "review.awaiting_moderation": "Awaiting moderation",
+ "review.field.name": "Name",
+ "review.field.email": "Email",
+ "review.field.reply_placeholder": "Write a reply…",
+ "review.field.rating": "Rating",
+ "review.field.rating_aria": "Rating out of 5",
+ "review.field.star_aria": "{count} stars",
+ "review.field.comment": "Comment",
+ "review.post_reply": "Post reply",
+ "review.cancel": "Cancel",
+ "review.reply": "Reply",
+ "review.form_title": "Leave a review",
+ "review.form_note": "Submissions are held for moderation and only appear once approved.",
+ "review.error.required": "All fields are required.",
+ "review.error.invalid_email": "Please enter a valid email address.",
+ "review.success": "Your submission has been recorded and awaits approval.",
+ "review.submitting": "Submitting…",
+ "review.submit": "Submit",
+ "review.discussion_layout": "Discussion layout",
+ "review.section_heading": "Customer reviews",
+ "review.form_title_product": "Review this product",
+ "product.in_stock": "In stock",
+ "product.out_of_stock": "Out of stock",
+ "product.price_unavailable": "Price unavailable",
+ "product.quantity": "Quantity",
+ "product.link_unavailable": "Product link unavailable",
+ "product.details_heading": "Product details",
+ "product.attributes_heading": "Product attributes",
+ "product.meta.sku": "SKU",
+ "product.meta.categories": "Categories",
+ "product.meta.brands": "Brands",
+ "product.meta.tags": "Tags",
+ "product.related": "Related products",
+ "product.upsells": "You may also like",
+ "product.cross_sells": "Frequently bought together",
+ "loading.product_archive": "Loading product archive",
+ "loading.post_archive": "Loading {taxonomy} archive",
+ "loading.product_brands": "Loading product brands",
+ "error.product_brands_unavailable": "Product brands unavailable",
+ "archive.taxonomy.category": "Category",
+ "archive.taxonomy.tag": "Tag",
+ "archive.taxonomy.brand": "Brand",
+ "archive.collection_unavailable": "This collection is temporarily unavailable.",
+ "archive.collection_not_found": "This collection is unavailable.",
+ "archive.product_not_found": "Product {taxonomy} not found",
+ "archive.no_products_category": "No products found in this category.",
+ "archive.no_products_tag": "No products found with this tag.",
+ "archive.no_products_brand": "No products found for this brand.",
+ "archive.product_description": "Browse products in the {name} {taxonomy}.",
+ "archive.all_brands": "All brands",
+ "archive.all_products": "All products",
+ "archive.product_taxonomy_aria": "Product {taxonomy} archives",
+ "archive.products_title": "{title} products",
+ "archive.no_products": "No products yet",
+ "archive.browse_shop": "Browse the shop",
+ "archive.post_taxonomy_unavailable": "{taxonomy} unavailable",
+ "archive.post_taxonomy_not_found": "{taxonomy} not found",
+ "archive.post_tag_description": "Browse every published post tagged #{name}.",
+ "archive.post_category_description": "Explore published stories filed under {name}.",
+ "archive.all_posts": "All posts",
+ "archive.post_taxonomy_aria": "{taxonomy} archives",
+ "archive.tagged_title": "Tagged #{name}",
+ "archive.posts_title": "{name} posts",
+ "archive.no_posts": "No published posts are connected to this {taxonomy}.",
+ "archive.has_more_posts": "This archive contains more posts than this page currently shows.",
+ "archive.back_to_blog": "Back to blog",
+ "archive.back_to_shop": "Back to shop",
+ "archive.product_brands_title": "Product brands",
+ "archive.product_brands_kicker": "Shop by maker",
+ "archive.product_brands_description": "Browse every brand with products available in the catalog.",
+ "archive.brand_product_count": "Products: {count}",
+ "archive.no_brands": "No product brands yet",
+ "archive.no_brands_message": "No non-empty product brands are currently published.",
+ "archive.browse_products": "Browse products",
+ "archive.entry_count": "Public entries: {count}",
+ "comment.section_heading": "Comments",
+ "comment.discussion_heading": "Discussion",
+ "comment.form_title": "Join the discussion",
+ "comment.form_note": "Comments are held for moderation and only appear once approved.",
+ "comment.recent": "Recent comments",
+ "comment.no_approved": "No approved comments matched this section.",
+ "comment.on_post": "On “{title}”",
+ "review.no_approved": "No approved product reviews matched this section.",
+ "loading.comments": "Loading comments",
+ "loading.authors": "Loading authors",
+ "loading.community_tags": "Loading community tags",
+ "loading.community_authors": "Loading community authors",
+ "loading.community_tag": "Loading community tag",
+ "error.authors_unavailable": "Authors unavailable",
+ "error.community_tags_unavailable": "Community tags unavailable",
+ "error.community_authors_unavailable": "Community authors unavailable",
+ "error.community_tag_unavailable": "Community tag unavailable",
+ "archive.authors_title": "Authors",
+ "archive.authors_kicker": "Journal contributors",
+ "archive.authors_description": "Meet every author with published {language} stories.",
+ "archive.author_article_count": "Articles: {count}",
+ "archive.no_authors": "No authors yet",
+ "archive.no_authors_message": "No {language} authors have published stories yet.",
+ "archive.browse_stories": "Browse stories",
+ "archive.community": "Community",
+ "archive.back_to_community": "Back to community",
+ "archive.community_tags_title": "Community tags",
+ "archive.community_tags_kicker": "Explore by topic",
+ "archive.community_tags_description": "Browse every tag used by published {language} community posts.",
+ "archive.tag_post_count": "Posts: {count}",
+ "archive.no_community_tags": "No community tags yet",
+ "archive.no_community_tags_message": "No tags are assigned to published community posts.",
+ "archive.browse_community_posts": "Browse community posts",
+ "archive.community_authors_title": "Community authors",
+ "archive.community_authors_kicker": "Creators and collaborators",
+ "archive.community_authors_description": "Discover public creators and collaborators who publish community content.",
+ "archive.no_community_authors": "No community authors yet",
+ "archive.no_community_authors_message": "No public creators or collaborators are currently available.",
+ "archive.browse_community_tags": "Browse all community tags",
+ "archive.community_tag_title": "#{name} — Community tag",
+ "archive.community_tag_kicker": "Community tag",
+ "archive.community_tag_description": "Browse {count} published community posts tagged #{name}.",
+ "archive.community_tag_summary": "Posts: {posts} · Public profiles: {profiles}",
+ "product.not_found": "Product not found",
+ "product.not_found_message": "The store has no published product matching “{identifier}”.",
+ "product.information_aria": "Product information",
+ "post.not_found": "Post not found",
+ "post.not_found_message": "The site has no published post at “{uri}”.",
+ "loading.author": "Loading author",
+ "archive.author_description": "Published {language} articles by {name}.",
+ "rating.load_error": "The rating could not be loaded.",
+ "rating.storage_error": "Secure rating storage is unavailable.",
+ "rating.save_error": "The rating could not be saved.",
+ "rating.aria": "Standalone rating",
+ "rating.not_rated": "Not rated yet",
+ "rating.average": "{average} out of 5",
+ "rating.count": "Ratings: {count}",
+ "rating.legend": "Rate this content from one to five stars",
+ "rating.star_aria": "{count} stars",
+ "rating.saving": "Saving…",
+ "rating.saved_hint": "Your rating is saved. Choose another star to update it.",
+ "rating.choose": "Choose a star"
}
diff --git a/assets/storefront-ui-strings/ja.json b/assets/storefront-ui-strings/ja.json
index 80ea73d..fd0b97c 100644
--- a/assets/storefront-ui-strings/ja.json
+++ b/assets/storefront-ui-strings/ja.json
@@ -673,5 +673,154 @@
"community.product.field.sku": "SKU",
"community.product.field.stock": "在庫数",
"community.product.field.category": "カテゴリー",
- "community.product.submit": "商品を出品する"
+ "community.product.submit": "商品を出品する",
+ "navigation.back_to_top": "ページ上部へ",
+ "nav.shop": "ショップ",
+ "nav.blog": "ブログ",
+ "inquiry.error": "お問い合わせを送信できませんでした。もう一度お試しください。",
+ "inquiry.success": "お問い合わせを送信しました。まもなくメールでご連絡します。",
+ "inquiry.field.name": "お名前",
+ "inquiry.field.email": "メールアドレス",
+ "inquiry.field.message": "メッセージ",
+ "inquiry.sending": "送信中…",
+ "review.summary_count": "レビュー数: {count}",
+ "review.read_more": "続きを読む",
+ "review.hide": "閉じる",
+ "review.awaiting_moderation": "承認待ち",
+ "review.field.name": "お名前",
+ "review.field.email": "メールアドレス",
+ "review.field.reply_placeholder": "返信を書く…",
+ "review.field.rating": "評価",
+ "review.field.rating_aria": "5段階評価",
+ "review.field.star_aria": "{count}つ星",
+ "review.field.comment": "コメント",
+ "review.post_reply": "返信を投稿",
+ "review.cancel": "キャンセル",
+ "review.reply": "返信",
+ "review.form_title": "レビューを投稿",
+ "review.form_note": "投稿は承認後に公開されます。",
+ "review.error.required": "すべての項目を入力してください。",
+ "review.error.invalid_email": "有効なメールアドレスを入力してください。",
+ "review.success": "投稿を受け付けました。承認をお待ちください。",
+ "review.submitting": "送信中…",
+ "review.submit": "送信",
+ "review.discussion_layout": "ディスカッションのレイアウト",
+ "review.section_heading": "カスタマーレビュー",
+ "review.form_title_product": "この商品をレビュー",
+ "product.in_stock": "在庫あり",
+ "product.out_of_stock": "在庫切れ",
+ "product.price_unavailable": "価格情報なし",
+ "product.quantity": "数量",
+ "product.link_unavailable": "商品リンクを利用できません",
+ "product.details_heading": "商品詳細",
+ "product.attributes_heading": "商品属性",
+ "product.meta.sku": "SKU",
+ "product.meta.categories": "カテゴリー",
+ "product.meta.brands": "ブランド",
+ "product.meta.tags": "タグ",
+ "product.related": "関連商品",
+ "product.upsells": "おすすめ商品",
+ "product.cross_sells": "よく一緒に購入される商品",
+ "loading.product_archive": "商品アーカイブを読み込み中",
+ "loading.post_archive": "{taxonomy}アーカイブを読み込み中",
+ "loading.product_brands": "商品ブランドを読み込み中",
+ "error.product_brands_unavailable": "商品ブランドを利用できません",
+ "archive.taxonomy.category": "カテゴリー",
+ "archive.taxonomy.tag": "タグ",
+ "archive.taxonomy.brand": "ブランド",
+ "archive.collection_unavailable": "このコレクションは一時的に利用できません。",
+ "archive.collection_not_found": "このコレクションは利用できません。",
+ "archive.product_not_found": "商品{taxonomy}が見つかりません",
+ "archive.no_products_category": "このカテゴリーに商品はありません。",
+ "archive.no_products_tag": "このタグの商品はありません。",
+ "archive.no_products_brand": "このブランドの商品はありません。",
+ "archive.product_description": "{name}の{taxonomy}の商品を見る。",
+ "archive.all_brands": "すべてのブランド",
+ "archive.all_products": "すべての商品",
+ "archive.product_taxonomy_aria": "商品{taxonomy}アーカイブ",
+ "archive.products_title": "{title}の商品",
+ "archive.no_products": "商品はまだありません",
+ "archive.browse_shop": "ショップを見る",
+ "archive.post_taxonomy_unavailable": "{taxonomy}を利用できません",
+ "archive.post_taxonomy_not_found": "{taxonomy}が見つかりません",
+ "archive.post_tag_description": "#{name}タグの公開記事を見る。",
+ "archive.post_category_description": "{name}カテゴリーの公開記事を見る。",
+ "archive.all_posts": "すべての記事",
+ "archive.post_taxonomy_aria": "{taxonomy}アーカイブ",
+ "archive.tagged_title": "#{name}タグ",
+ "archive.posts_title": "{name}の記事",
+ "archive.no_posts": "この{taxonomy}に公開記事はありません。",
+ "archive.has_more_posts": "このアーカイブには現在のページに表示されていない記事があります。",
+ "archive.back_to_blog": "ブログに戻る",
+ "archive.back_to_shop": "ショップに戻る",
+ "archive.product_brands_title": "商品ブランド",
+ "archive.product_brands_kicker": "メーカーから探す",
+ "archive.product_brands_description": "カタログで購入できるすべてのブランドを見る。",
+ "archive.brand_product_count": "商品数: {count}",
+ "archive.no_brands": "商品ブランドはまだありません",
+ "archive.no_brands_message": "商品を含むブランドは現在公開されていません。",
+ "archive.browse_products": "商品を見る",
+ "archive.entry_count": "公開項目数: {count}",
+ "comment.section_heading": "コメント",
+ "comment.discussion_heading": "ディスカッション",
+ "comment.form_title": "ディスカッションに参加",
+ "comment.form_note": "コメントは承認後に公開されます。",
+ "comment.recent": "最近のコメント",
+ "comment.no_approved": "このセクションに一致する承認済みコメントはありません。",
+ "comment.on_post": "「{title}」へのコメント",
+ "review.no_approved": "このセクションに一致する承認済み商品レビューはありません。",
+ "loading.comments": "コメントを読み込み中",
+ "loading.authors": "著者を読み込み中",
+ "loading.community_tags": "コミュニティタグを読み込み中",
+ "loading.community_authors": "コミュニティ著者を読み込み中",
+ "loading.community_tag": "コミュニティタグを読み込み中",
+ "error.authors_unavailable": "著者を利用できません",
+ "error.community_tags_unavailable": "コミュニティタグを利用できません",
+ "error.community_authors_unavailable": "コミュニティ著者を利用できません",
+ "error.community_tag_unavailable": "コミュニティタグを利用できません",
+ "archive.authors_title": "著者",
+ "archive.authors_kicker": "ブログ投稿者",
+ "archive.authors_description": "{language}の記事を公開しているすべての著者を見る。",
+ "archive.author_article_count": "記事数: {count}",
+ "archive.no_authors": "著者はまだいません",
+ "archive.no_authors_message": "{language}の記事を公開した著者はまだいません。",
+ "archive.browse_stories": "記事を見る",
+ "archive.community": "コミュニティ",
+ "archive.back_to_community": "コミュニティに戻る",
+ "archive.community_tags_title": "コミュニティタグ",
+ "archive.community_tags_kicker": "トピックから探す",
+ "archive.community_tags_description": "{language}の公開コミュニティ投稿で使用されているすべてのタグを見る。",
+ "archive.tag_post_count": "投稿数: {count}",
+ "archive.no_community_tags": "コミュニティタグはまだありません",
+ "archive.no_community_tags_message": "公開コミュニティ投稿にタグが設定されていません。",
+ "archive.browse_community_posts": "コミュニティ投稿を見る",
+ "archive.community_authors_title": "コミュニティ著者",
+ "archive.community_authors_kicker": "クリエイターと協力者",
+ "archive.community_authors_description": "コミュニティコンテンツを公開するクリエイターと協力者を見る。",
+ "archive.no_community_authors": "コミュニティ著者はまだいません",
+ "archive.no_community_authors_message": "公開中のクリエイターまたは協力者はいません。",
+ "archive.browse_community_tags": "すべてのコミュニティタグを見る",
+ "archive.community_tag_title": "#{name} — コミュニティタグ",
+ "archive.community_tag_kicker": "コミュニティタグ",
+ "archive.community_tag_description": "#{name}タグの公開コミュニティ投稿{count}件を見る。",
+ "archive.community_tag_summary": "投稿: {posts} · 公開プロフィール: {profiles}",
+ "product.not_found": "商品が見つかりません",
+ "product.not_found_message": "「{identifier}」に一致する公開商品はありません。",
+ "product.information_aria": "商品情報",
+ "post.not_found": "記事が見つかりません",
+ "post.not_found_message": "「{uri}」に公開記事はありません。",
+ "loading.author": "著者を読み込み中",
+ "archive.author_description": "{name}による{language}の記事。",
+ "rating.load_error": "評価を読み込めませんでした。",
+ "rating.storage_error": "安全な評価ストレージを利用できません。",
+ "rating.save_error": "評価を保存できませんでした。",
+ "rating.aria": "コンテンツ評価",
+ "rating.not_rated": "まだ評価されていません",
+ "rating.average": "5点中{average}",
+ "rating.count": "評価数: {count}",
+ "rating.legend": "1つ星から5つ星で評価",
+ "rating.star_aria": "{count}つ星",
+ "rating.saving": "保存中…",
+ "rating.saved_hint": "評価を保存しました。別の星を選ぶと更新できます。",
+ "rating.choose": "星を選択"
}
diff --git a/assets/storefront-ui-strings/pl.json b/assets/storefront-ui-strings/pl.json
index 706526b..d618e08 100644
--- a/assets/storefront-ui-strings/pl.json
+++ b/assets/storefront-ui-strings/pl.json
@@ -673,5 +673,154 @@
"community.product.field.sku": "SKU",
"community.product.field.stock": "Stan magazynowy",
"community.product.field.category": "Kategoria",
- "community.product.submit": "Wystaw produkt"
+ "community.product.submit": "Wystaw produkt",
+ "navigation.back_to_top": "Wróć na górę",
+ "nav.shop": "Sklep",
+ "nav.blog": "Blog",
+ "inquiry.error": "Nie udało się wysłać zapytania. Spróbuj ponownie.",
+ "inquiry.success": "Zapytanie zostało wysłane. Wkrótce odpowiemy e-mailem.",
+ "inquiry.field.name": "Imię i nazwisko",
+ "inquiry.field.email": "E-mail",
+ "inquiry.field.message": "Wiadomość",
+ "inquiry.sending": "Wysyłanie…",
+ "review.summary_count": "Liczba opinii: {count}",
+ "review.read_more": "Czytaj więcej",
+ "review.hide": "Ukryj",
+ "review.awaiting_moderation": "Oczekuje na moderację",
+ "review.field.name": "Imię i nazwisko",
+ "review.field.email": "E-mail",
+ "review.field.reply_placeholder": "Napisz odpowiedź…",
+ "review.field.rating": "Ocena",
+ "review.field.rating_aria": "Ocena w skali do 5",
+ "review.field.star_aria": "Liczba gwiazdek: {count}",
+ "review.field.comment": "Komentarz",
+ "review.post_reply": "Opublikuj odpowiedź",
+ "review.cancel": "Anuluj",
+ "review.reply": "Odpowiedz",
+ "review.form_title": "Dodaj opinię",
+ "review.form_note": "Zgłoszenia są moderowane i pojawią się po zatwierdzeniu.",
+ "review.error.required": "Wszystkie pola są wymagane.",
+ "review.error.invalid_email": "Podaj prawidłowy adres e-mail.",
+ "review.success": "Zgłoszenie zostało zapisane i oczekuje na zatwierdzenie.",
+ "review.submitting": "Wysyłanie…",
+ "review.submit": "Wyślij",
+ "review.discussion_layout": "Układ dyskusji",
+ "review.section_heading": "Opinie klientów",
+ "review.form_title_product": "Oceń ten produkt",
+ "product.in_stock": "Dostępny",
+ "product.out_of_stock": "Brak w magazynie",
+ "product.price_unavailable": "Cena niedostępna",
+ "product.quantity": "Ilość",
+ "product.link_unavailable": "Link do produktu jest niedostępny",
+ "product.details_heading": "Szczegóły produktu",
+ "product.attributes_heading": "Atrybuty produktu",
+ "product.meta.sku": "SKU",
+ "product.meta.categories": "Kategorie",
+ "product.meta.brands": "Marki",
+ "product.meta.tags": "Tagi",
+ "product.related": "Produkty powiązane",
+ "product.upsells": "Może Ci się również spodobać",
+ "product.cross_sells": "Często kupowane razem",
+ "loading.product_archive": "Ładowanie archiwum produktów",
+ "loading.post_archive": "Ładowanie archiwum: {taxonomy}",
+ "loading.product_brands": "Ładowanie marek produktów",
+ "error.product_brands_unavailable": "Marki produktów są niedostępne",
+ "archive.taxonomy.category": "Kategoria",
+ "archive.taxonomy.tag": "Tag",
+ "archive.taxonomy.brand": "Marka",
+ "archive.collection_unavailable": "Ta kolekcja jest chwilowo niedostępna.",
+ "archive.collection_not_found": "Ta kolekcja jest niedostępna.",
+ "archive.product_not_found": "Nie znaleziono archiwum produktów: {taxonomy}",
+ "archive.no_products_category": "Nie znaleziono produktów w tej kategorii.",
+ "archive.no_products_tag": "Nie znaleziono produktów z tym tagiem.",
+ "archive.no_products_brand": "Nie znaleziono produktów tej marki.",
+ "archive.product_description": "Przeglądaj produkty w archiwum {taxonomy}: {name}.",
+ "archive.all_brands": "Wszystkie marki",
+ "archive.all_products": "Wszystkie produkty",
+ "archive.product_taxonomy_aria": "Archiwa produktów: {taxonomy}",
+ "archive.products_title": "Produkty: {title}",
+ "archive.no_products": "Brak produktów",
+ "archive.browse_shop": "Przejdź do sklepu",
+ "archive.post_taxonomy_unavailable": "Archiwum {taxonomy} jest niedostępne",
+ "archive.post_taxonomy_not_found": "Nie znaleziono archiwum: {taxonomy}",
+ "archive.post_tag_description": "Przeglądaj wszystkie opublikowane wpisy oznaczone #{name}.",
+ "archive.post_category_description": "Przeglądaj opublikowane wpisy w kategorii {name}.",
+ "archive.all_posts": "Wszystkie wpisy",
+ "archive.post_taxonomy_aria": "Archiwa wpisów: {taxonomy}",
+ "archive.tagged_title": "Oznaczone #{name}",
+ "archive.posts_title": "Wpisy: {name}",
+ "archive.no_posts": "Brak opublikowanych wpisów w archiwum {taxonomy}.",
+ "archive.has_more_posts": "To archiwum zawiera więcej wpisów niż obecnie wyświetla strona.",
+ "archive.back_to_blog": "Wróć do bloga",
+ "archive.back_to_shop": "Wróć do sklepu",
+ "archive.product_brands_title": "Marki produktów",
+ "archive.product_brands_kicker": "Kupuj według marki",
+ "archive.product_brands_description": "Przeglądaj wszystkie marki z produktami dostępnymi w katalogu.",
+ "archive.brand_product_count": "Liczba produktów: {count}",
+ "archive.no_brands": "Brak marek produktów",
+ "archive.no_brands_message": "Obecnie nie opublikowano żadnych niepustych marek produktów.",
+ "archive.browse_products": "Przeglądaj produkty",
+ "archive.entry_count": "Liczba publicznych pozycji: {count}",
+ "comment.section_heading": "Komentarze",
+ "comment.discussion_heading": "Dyskusja",
+ "comment.form_title": "Dołącz do dyskusji",
+ "comment.form_note": "Komentarze są moderowane i pojawią się po zatwierdzeniu.",
+ "comment.recent": "Najnowsze komentarze",
+ "comment.no_approved": "Brak zatwierdzonych komentarzy pasujących do tej sekcji.",
+ "comment.on_post": "Wpis „{title}”",
+ "review.no_approved": "Brak zatwierdzonych opinii o produktach pasujących do tej sekcji.",
+ "loading.comments": "Ładowanie komentarzy",
+ "loading.authors": "Ładowanie autorów",
+ "loading.community_tags": "Ładowanie tagów społeczności",
+ "loading.community_authors": "Ładowanie autorów społeczności",
+ "loading.community_tag": "Ładowanie tagu społeczności",
+ "error.authors_unavailable": "Autorzy są niedostępni",
+ "error.community_tags_unavailable": "Tagi społeczności są niedostępne",
+ "error.community_authors_unavailable": "Autorzy społeczności są niedostępni",
+ "error.community_tag_unavailable": "Tag społeczności jest niedostępny",
+ "archive.authors_title": "Autorzy",
+ "archive.authors_kicker": "Autorzy bloga",
+ "archive.authors_description": "Poznaj wszystkich autorów opublikowanych artykułów w języku {language}.",
+ "archive.author_article_count": "Liczba artykułów: {count}",
+ "archive.no_authors": "Brak autorów",
+ "archive.no_authors_message": "Żaden autor nie opublikował jeszcze artykułów w języku {language}.",
+ "archive.browse_stories": "Przeglądaj artykuły",
+ "archive.community": "Społeczność",
+ "archive.back_to_community": "Wróć do społeczności",
+ "archive.community_tags_title": "Tagi społeczności",
+ "archive.community_tags_kicker": "Przeglądaj według tematu",
+ "archive.community_tags_description": "Przeglądaj wszystkie tagi użyte w opublikowanych wpisach społeczności w języku {language}.",
+ "archive.tag_post_count": "Liczba wpisów: {count}",
+ "archive.no_community_tags": "Brak tagów społeczności",
+ "archive.no_community_tags_message": "Do opublikowanych wpisów społeczności nie przypisano żadnych tagów.",
+ "archive.browse_community_posts": "Przeglądaj wpisy społeczności",
+ "archive.community_authors_title": "Autorzy społeczności",
+ "archive.community_authors_kicker": "Twórcy i współpracownicy",
+ "archive.community_authors_description": "Poznaj publicznych twórców i współpracowników publikujących treści społeczności.",
+ "archive.no_community_authors": "Brak autorów społeczności",
+ "archive.no_community_authors_message": "Obecnie nie ma publicznych twórców ani współpracowników.",
+ "archive.browse_community_tags": "Przeglądaj wszystkie tagi społeczności",
+ "archive.community_tag_title": "#{name} — tag społeczności",
+ "archive.community_tag_kicker": "Tag społeczności",
+ "archive.community_tag_description": "Przeglądaj opublikowane wpisy społeczności ({count}) oznaczone #{name}.",
+ "archive.community_tag_summary": "Wpisy: {posts} · Profile publiczne: {profiles}",
+ "product.not_found": "Nie znaleziono produktu",
+ "product.not_found_message": "Sklep nie ma opublikowanego produktu pasującego do „{identifier}”.",
+ "product.information_aria": "Informacje o produkcie",
+ "post.not_found": "Nie znaleziono wpisu",
+ "post.not_found_message": "Witryna nie ma opublikowanego wpisu pod adresem „{uri}”.",
+ "loading.author": "Ładowanie autora",
+ "archive.author_description": "Artykuły w języku {language} opublikowane przez: {name}.",
+ "rating.load_error": "Nie udało się wczytać oceny.",
+ "rating.storage_error": "Bezpieczne przechowywanie oceny jest niedostępne.",
+ "rating.save_error": "Nie udało się zapisać oceny.",
+ "rating.aria": "Ocena treści",
+ "rating.not_rated": "Brak ocen",
+ "rating.average": "{average} na 5",
+ "rating.count": "Liczba ocen: {count}",
+ "rating.legend": "Oceń treść od jednej do pięciu gwiazdek",
+ "rating.star_aria": "Liczba gwiazdek: {count}",
+ "rating.saving": "Zapisywanie…",
+ "rating.saved_hint": "Ocena została zapisana. Wybierz inną gwiazdkę, aby ją zmienić.",
+ "rating.choose": "Wybierz gwiazdkę"
}
diff --git a/functions.php b/functions.php
index b49a5ab..fe7c530 100644
--- a/functions.php
+++ b/functions.php
@@ -9,7 +9,7 @@
exit;
}
-define( 'FUNKYCOMMERCE_HEADLESS_VERSION', '1.2.18' );
+define( 'FUNKYCOMMERCE_HEADLESS_VERSION', '1.2.19' );
/**
* Whether Superfunky Pro is active and licensed.
diff --git a/inc/control-center-schema.php b/inc/control-center-schema.php
index 74056e2..f37a0a0 100644
--- a/inc/control-center-schema.php
+++ b/inc/control-center-schema.php
@@ -256,6 +256,9 @@ function funkycommerce_layout_control_fields() {
'layout_product_page' => $select( __( 'Product page template', 'funkycommerce-headless' ), 'classic', array( 'classic', 'studio' ), 'product_page_layout' ),
'layout_related_products_columns' => $select( __( 'Related products columns', 'funkycommerce-headless' ), '4', array( '2', '3', '4' ), 'related_products_columns' ),
'layout_show_studio_related_products_under_meta' => $toggle( __( 'Show related products under categories and brands in Studio', 'funkycommerce-headless' ), 'no', 'show_studio_related_products_under_meta' ),
+ 'layout_product_page_wishlist_button' => $select( __( 'Product page wishlist button', 'funkycommerce-headless' ), 'full', array( 'full', 'icon', 'disabled' ), 'product_page_wishlist_button_layout' ),
+ 'layout_product_page_wishlist_icon' => $select( __( 'Product page wishlist icon', 'funkycommerce-headless' ), 'heart', array( 'heart', 'star', 'bookmark' ), 'product_page_wishlist_icon' ),
+ 'layout_product_descriptions_order' => $select( __( 'Product descriptions order', 'funkycommerce-headless' ), 'short-first', array( 'short-first', 'long-first' ), 'product_descriptions_order' ),
'layout_checkout_store_mode' => $select( __( 'Checkout store mode', 'funkycommerce-headless' ), 'physical', array( 'physical', 'digital' ), 'checkout_store_mode' ),
'layout_checkout_coupon_position' => $select( __( 'Checkout coupon position', 'funkycommerce-headless' ), 'inline', array( 'inline', 'top' ), 'checkout_coupon_position' ),
'layout_checkout_payment_position' => $select( __( 'Checkout payment position', 'funkycommerce-headless' ), 'left', array( 'left', 'right' ), 'checkout_payment_position' ),
@@ -271,18 +274,23 @@ function funkycommerce_layout_control_fields() {
'layout_header_sticky' => $toggle( __( 'Sticky header', 'funkycommerce-headless' ), 'yes', 'header_sticky' ),
'layout_header_search_variant' => $select( __( 'Header search layout', 'funkycommerce-headless' ), 'full-width', array( 'full-width', 'expandable' ), 'header_search_variant' ),
'layout_header_logo_variant' => $select( __( 'Header logo layout', 'funkycommerce-headless' ), 'text-image', array( 'text', 'image', 'text-image' ), 'header_logo_variant' ),
+ 'layout_header_arrangement' => $select( __( 'Header content arrangement', 'funkycommerce-headless' ), 'classic', array( 'classic', 'single-row', 'centered' ), 'header_arrangement' ),
'layout_cart_trigger_variant' => $select( __( 'Header cart behavior', 'funkycommerce-headless' ), 'drawer', array( 'drawer', 'dropdown' ), 'cart_trigger_variant' ),
'layout_show_cart_promoted_product' => $toggle( __( 'Show promoted product in empty cart', 'funkycommerce-headless' ), 'yes', 'show_cart_drawer_promoted_product' ),
'layout_show_all_cart_promoted_products' => $toggle( __( 'Show all featured products in empty cart', 'funkycommerce-headless' ), 'no', 'show_all_cart_promoted_products' ),
'layout_show_footer' => $toggle( __( 'Show footer', 'funkycommerce-headless' ), 'yes', 'show_footer' ),
- 'layout_footer_columns' => $select( __( 'Footer columns', 'funkycommerce-headless' ), 'grid-4', array( 'grid-4', 'grid-2-wide', 'accordion-single' ), 'footer_columns_layout' ),
+ 'layout_footer_columns' => $select( __( 'Footer columns', 'funkycommerce-headless' ), 'grid-4', array( 'grid-1', 'grid-2-wide', 'grid-4', 'grid-5', 'grid-6', 'grid-7', 'accordion-single' ), 'footer_columns_layout' ),
'layout_footer_newsletter' => $select( __( 'Footer newsletter layout', 'funkycommerce-headless' ), 'banner', array( 'banner', 'centered', 'image-bg' ), 'footer_newsletter_layout' ),
'layout_show_footer_newsletter' => $toggle( __( 'Show footer newsletter', 'funkycommerce-headless' ), 'yes', 'show_footer_newsletter' ),
'layout_footer_assistant' => $select( __( 'Footer assistant / player layout', 'funkycommerce-headless' ), 'side-by-side', array( 'side-by-side', 'tabbed', 'stacked' ), 'footer_assistant_layout' ),
'layout_footer_logo_variant' => $select( __( 'Footer logo layout', 'funkycommerce-headless' ), 'text-image', array( 'text', 'image', 'text-image' ), 'footer_logo_variant' ),
'layout_footer_bottom_bar' => $select( __( 'Footer bottom bar layout', 'funkycommerce-headless' ), 'split', array( 'split', 'centered' ), 'footer_bottom_bar_layout' ),
'layout_footer_extra_wrapper' => $select( __( 'Footer extra wrapper layout', 'funkycommerce-headless' ), 'inline', array( 'inline', 'full-bleed' ), 'footer_extra_wrapper_layout' ),
+ 'layout_show_back_to_top' => $toggle( __( 'Show back-to-top button', 'funkycommerce-headless' ), 'yes', 'show_back_to_top' ),
+ 'layout_back_to_top_style' => $select( __( 'Back-to-top button style', 'funkycommerce-headless' ), 'filled', array( 'filled', 'outline', 'ghost' ), 'back_to_top_style' ),
+ 'layout_back_to_top_icon' => $select( __( 'Back-to-top button icon', 'funkycommerce-headless' ), 'arrow', array( 'arrow', 'chevron', 'text' ), 'back_to_top_icon' ),
+ 'layout_back_to_top_placement' => $select( __( 'Back-to-top button placement', 'funkycommerce-headless' ), 'bottom-right', array( 'bottom-right', 'bottom-left', 'bottom-center' ), 'back_to_top_placement' ),
);
foreach ( array(
@@ -442,6 +450,15 @@ function funkycommerce_control_center_sections() {
'sanitize' => 'html',
'description' => __( 'Basic HTML is allowed, including links.', 'funkycommerce-headless' ),
),
+ 'show_theme_credit' => array( 'label' => __( 'Show theme credit', 'funkycommerce-headless' ), 'type' => 'toggle', 'tier' => 'pro', 'default' => 'yes' ),
+ 'theme_credit_text' => array(
+ 'label' => __( 'Theme credit text', 'funkycommerce-headless' ),
+ 'type' => 'textarea',
+ 'tier' => 'pro',
+ 'default' => 'Made with superfuky WP theme by Coded Letter.',
+ 'sanitize' => 'html',
+ 'description' => __( 'PRO sites may customize or hide this credit. Free sites always display the bundled attribution.', 'funkycommerce-headless' ),
+ ),
'social_links' => array( 'label' => __( 'Social profiles', 'funkycommerce-headless' ), 'type' => 'social_links', 'tier' => 'free', 'default' => array(), 'description' => __( 'Free theme feature. Add any supported platform more than once; every profile opens in a new tab.', 'funkycommerce-headless' ) ),
'newsletter_heading' => array( 'label' => __( 'Newsletter heading', 'funkycommerce-headless' ), 'type' => 'text', 'tier' => 'free' ),
'newsletter_text' => array( 'label' => __( 'Newsletter supporting text', 'funkycommerce-headless' ), 'type' => 'textarea', 'tier' => 'free' ),
diff --git a/inc/control-center.php b/inc/control-center.php
index 89d82be..f252e5a 100644
--- a/inc/control-center.php
+++ b/inc/control-center.php
@@ -733,6 +733,10 @@ function funkycommerce_storefront_control_settings( $language = '' ) {
$assistant_show_footer = $has_surface_settings ? 'yes' === $settings['ai_assistant_show_footer'] : 'footer' === $legacy_placement;
$assistant_show_fixed = $has_surface_settings ? 'yes' === $settings['ai_assistant_show_fixed'] : 'fixed' === $legacy_placement;
$assistant_placement = $assistant_show_header ? 'header' : ( $assistant_show_fixed ? 'fixed' : 'footer' );
+ $default_theme_credit = 'Made with superfuky WP theme by Coded Letter.';
+ $theme_credit = funkycommerce_is_pro()
+ ? wp_kses_post( (string) ( $settings['theme_credit_text'] ?? $default_theme_credit ) )
+ : $default_theme_credit;
return array(
'branding' => array(
@@ -766,6 +770,8 @@ function funkycommerce_storefront_control_settings( $language = '' ) {
'newsletterPrivacyLabel' => (string) ( $settings['newsletter_privacy_label'] ?? '' ),
'extraHtml' => (string) ( $settings['footer_extra_content'] ?? '' ),
'copyrightText' => wp_kses_post( (string) ( $settings['copyright_text'] ?? '' ) ),
+ 'themeCredit' => $theme_credit ?: $default_theme_credit,
+ 'showThemeCredit' => ! funkycommerce_is_pro() || 'yes' === ( $settings['show_theme_credit'] ?? 'yes' ),
'spotifyPlaylistUrl' => funkycommerce_normalize_spotify_playlist_url( $settings['spotify_playlist_url'] ?? '' ),
'spotifyPlaylistEmbedUrl' => funkycommerce_spotify_playlist_embed_url( $settings['spotify_playlist_url'] ?? '' ),
'spotifyPlayerTitle' => sanitize_text_field( (string) ( $settings['spotify_player_title'] ?? '' ) ),
diff --git a/inc/navigation-commerce.php b/inc/navigation-commerce.php
index df81c46..9ed5f0f 100644
--- a/inc/navigation-commerce.php
+++ b/inc/navigation-commerce.php
@@ -394,6 +394,8 @@ function funkycommerce_register_navigation_commerce_graphql() {
'newsletterPrivacyLabel' => array( 'type' => array( 'non_null' => 'String' ) ),
'extraHtml' => array( 'type' => array( 'non_null' => 'String' ) ),
'copyrightText' => array( 'type' => array( 'non_null' => 'String' ) ),
+ 'themeCredit' => array( 'type' => array( 'non_null' => 'String' ) ),
+ 'showThemeCredit' => array( 'type' => array( 'non_null' => 'Boolean' ) ),
'spotifyPlaylistUrl' => array( 'type' => 'String' ),
'spotifyPlaylistEmbedUrl' => array( 'type' => 'String' ),
'spotifyPlayerTitle' => array( 'type' => array( 'non_null' => 'String' ) ),
diff --git a/package-lock.json b/package-lock.json
index a2c49a9..bc1069a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "funkycommerce-headless-theme",
- "version": "1.2.18",
+ "version": "1.2.19",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "funkycommerce-headless-theme",
- "version": "1.2.18",
+ "version": "1.2.19",
"devDependencies": {
"autoprefixer": "^10.4.20",
"esbuild": "^0.28.2",
diff --git a/package.json b/package.json
index ce2bfcc..8c26d84 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "funkycommerce-headless-theme",
"private": true,
- "version": "1.2.18",
+ "version": "1.2.19",
"description": "Tailwind/build tooling for the FunkyCommerce Headless WordPress theme's native frontend assets (block templates, template parts, loader, and Spotify slot).",
"scripts": {
"build:css": "tailwindcss -i ./assets/css/theme-source.css -o ./assets/dist/theme.css --minify",
diff --git a/readme.txt b/readme.txt
index 3fc5c30..6855740 100644
--- a/readme.txt
+++ b/readme.txt
@@ -4,7 +4,7 @@ Tags: headless, woocommerce, wpgraphql, full-site-editing
Requires at least: 6.7
Tested up to: 6.8
Requires PHP: 7.4
-Stable tag: 1.2.18
+Stable tag: 1.2.19
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -15,6 +15,12 @@ Control Center, the theme also ships a complete native WordPress rendering path
"Native frontend theme" below) with accessible header/footer/navigation templates and
core front/home/singular/archive/search/404 routes styled to match the storefront.
+== 1.2.19 highlights ==
+
+* Preserves product image aspect ratios in galleries and lightboxes and serves linked media-library PDFs through the storefront domain.
+* Keeps all public archive surfaces indexable and completes translated archive, inquiry, rating, review, comment, and related-product UI.
+* Adds product wishlist and description-order controls, expanded footer/header layouts, an accessible back-to-top button, and persistent free-theme attribution.
+
== 1.2.18 highlights ==
* Allows safe HTML links in the free-theme footer copyright field.
diff --git a/style.css b/style.css
index 8cd51e7..379f130 100644
--- a/style.css
+++ b/style.css
@@ -7,7 +7,7 @@ Description: A minimal, content-first block theme for polished WordPress preview
Requires at least: 6.7
Tested up to: 6.8
Requires PHP: 7.4
-Version: 1.2.18
+Version: 1.2.19
Update URI: https://github.com/coded-letter/superfunky-theme
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html