@thorprovider/blocks 1.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (859) hide show
  1. package/README.md +274 -46
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts +21 -0
  4. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts.map +1 -0
  5. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js +147 -0
  6. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js.map +1 -0
  7. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs +153 -0
  8. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs.map +1 -0
  9. package/dist/blocks/application/app-shells/app-shell-1.d.ts +27 -0
  10. package/dist/blocks/application/app-shells/app-shell-1.d.ts.map +1 -0
  11. package/dist/blocks/application/app-shells/app-shell-1.js +150 -0
  12. package/dist/blocks/application/app-shells/app-shell-1.js.map +1 -0
  13. package/dist/blocks/application/app-shells/app-shell-1.mjs +123 -0
  14. package/dist/blocks/application/app-shells/app-shell-1.mjs.map +1 -0
  15. package/dist/blocks/application/login-forms/login-page.d.ts +42 -0
  16. package/dist/blocks/application/login-forms/login-page.d.ts.map +1 -0
  17. package/dist/blocks/application/login-forms/login-page.js +209 -0
  18. package/dist/blocks/application/login-forms/login-page.js.map +1 -0
  19. package/dist/blocks/application/login-forms/login-page.mjs +185 -0
  20. package/dist/blocks/application/login-forms/login-page.mjs.map +1 -0
  21. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts +3 -0
  22. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts.map +1 -0
  23. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js +74 -0
  24. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js.map +1 -0
  25. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs +50 -0
  26. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs.map +1 -0
  27. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts +42 -0
  28. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts.map +1 -0
  29. package/dist/blocks/application/password-recovery/forgot-password-page-1.js +293 -0
  30. package/dist/blocks/application/password-recovery/forgot-password-page-1.js.map +1 -0
  31. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs +259 -0
  32. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs.map +1 -0
  33. package/dist/blocks/application/signup-forms/signup-page-1.d.ts +41 -0
  34. package/dist/blocks/application/signup-forms/signup-page-1.d.ts.map +1 -0
  35. package/dist/blocks/application/signup-forms/signup-page-1.js +195 -0
  36. package/dist/blocks/application/signup-forms/signup-page-1.js.map +1 -0
  37. package/dist/blocks/application/signup-forms/signup-page-1.mjs +171 -0
  38. package/dist/blocks/application/signup-forms/signup-page-1.mjs.map +1 -0
  39. package/dist/blocks/application/verification/verify-1.d.ts +35 -0
  40. package/dist/blocks/application/verification/verify-1.d.ts.map +1 -0
  41. package/dist/blocks/application/verification/verify-1.js +243 -0
  42. package/dist/blocks/application/verification/verify-1.js.map +1 -0
  43. package/dist/blocks/application/verification/verify-1.mjs +219 -0
  44. package/dist/blocks/application/verification/verify-1.mjs.map +1 -0
  45. package/dist/blocks/application/verification/verify-confetti.d.ts +22 -0
  46. package/dist/blocks/application/verification/verify-confetti.d.ts.map +1 -0
  47. package/dist/blocks/application/verification/verify-confetti.js +145 -0
  48. package/dist/blocks/application/verification/verify-confetti.js.map +1 -0
  49. package/dist/blocks/application/verification/verify-confetti.mjs +121 -0
  50. package/dist/blocks/application/verification/verify-confetti.mjs.map +1 -0
  51. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts +39 -0
  52. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts.map +1 -0
  53. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js +180 -0
  54. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js.map +1 -0
  55. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs +156 -0
  56. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs.map +1 -0
  57. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts +236 -0
  58. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts.map +1 -0
  59. package/dist/blocks/e-commerce/category-filters/category-listing.js +562 -0
  60. package/dist/blocks/e-commerce/category-filters/category-listing.js.map +1 -0
  61. package/dist/blocks/e-commerce/category-filters/category-listing.mjs +539 -0
  62. package/dist/blocks/e-commerce/category-filters/category-listing.mjs.map +1 -0
  63. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts +4 -0
  64. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts.map +1 -0
  65. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +97 -0
  66. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -0
  67. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +73 -0
  68. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -0
  69. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts +41 -0
  70. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts.map +1 -0
  71. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js +115 -0
  72. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js.map +1 -0
  73. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs +91 -0
  74. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs.map +1 -0
  75. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts +107 -0
  76. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts.map +1 -0
  77. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js +180 -0
  78. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js.map +1 -0
  79. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs +156 -0
  80. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs.map +1 -0
  81. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +13 -0
  82. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -0
  83. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +180 -0
  84. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -0
  85. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +156 -0
  86. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -0
  87. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts +12 -0
  88. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -0
  89. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +50 -0
  90. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -0
  91. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +33 -0
  92. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -0
  93. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts +11 -0
  94. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts.map +1 -0
  95. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js +50 -0
  96. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js.map +1 -0
  97. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs +25 -0
  98. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs.map +1 -0
  99. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts +5 -0
  100. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts.map +1 -0
  101. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js +17 -0
  102. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js.map +1 -0
  103. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs +1 -0
  104. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs.map +1 -0
  105. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +20 -0
  106. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -0
  107. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +176 -0
  108. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -0
  109. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +152 -0
  110. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -0
  111. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +12 -0
  112. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -0
  113. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +93 -0
  114. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -0
  115. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +69 -0
  116. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -0
  117. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts +11 -0
  118. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts.map +1 -0
  119. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js +76 -0
  120. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js.map +1 -0
  121. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs +52 -0
  122. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs.map +1 -0
  123. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +11 -0
  124. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -0
  125. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +64 -0
  126. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -0
  127. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +40 -0
  128. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -0
  129. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +17 -0
  130. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -0
  131. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +199 -0
  132. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -0
  133. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +175 -0
  134. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -0
  135. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +164 -0
  136. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -0
  137. package/dist/blocks/e-commerce/checkout-forms/checkout.js +351 -0
  138. package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -0
  139. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +327 -0
  140. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -0
  141. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts +28 -0
  142. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts.map +1 -0
  143. package/dist/blocks/e-commerce/navigation/back-to-top.js +78 -0
  144. package/dist/blocks/e-commerce/navigation/back-to-top.js.map +1 -0
  145. package/dist/blocks/e-commerce/navigation/back-to-top.mjs +52 -0
  146. package/dist/blocks/e-commerce/navigation/back-to-top.mjs.map +1 -0
  147. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts +61 -0
  148. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts.map +1 -0
  149. package/dist/blocks/e-commerce/navigation/breadcrumb.js +111 -0
  150. package/dist/blocks/e-commerce/navigation/breadcrumb.js.map +1 -0
  151. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs +93 -0
  152. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs.map +1 -0
  153. package/dist/blocks/e-commerce/navigation/category-icon.d.ts +28 -0
  154. package/dist/blocks/e-commerce/navigation/category-icon.d.ts.map +1 -0
  155. package/dist/blocks/e-commerce/navigation/category-icon.js +86 -0
  156. package/dist/blocks/e-commerce/navigation/category-icon.js.map +1 -0
  157. package/dist/blocks/e-commerce/navigation/category-icon.mjs +79 -0
  158. package/dist/blocks/e-commerce/navigation/category-icon.mjs.map +1 -0
  159. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts +112 -0
  160. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts.map +1 -0
  161. package/dist/blocks/e-commerce/navigation/mega-menu.js +250 -0
  162. package/dist/blocks/e-commerce/navigation/mega-menu.js.map +1 -0
  163. package/dist/blocks/e-commerce/navigation/mega-menu.mjs +228 -0
  164. package/dist/blocks/e-commerce/navigation/mega-menu.mjs.map +1 -0
  165. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts +71 -0
  166. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts.map +1 -0
  167. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js +94 -0
  168. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js.map +1 -0
  169. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs +68 -0
  170. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs.map +1 -0
  171. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts +121 -0
  172. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts.map +1 -0
  173. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js +257 -0
  174. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js.map +1 -0
  175. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs +235 -0
  176. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs.map +1 -0
  177. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts +25 -0
  178. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts.map +1 -0
  179. package/dist/blocks/e-commerce/navigation/skip-to-content.js +55 -0
  180. package/dist/blocks/e-commerce/navigation/skip-to-content.js.map +1 -0
  181. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs +30 -0
  182. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs.map +1 -0
  183. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts +23 -0
  184. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts.map +1 -0
  185. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js +127 -0
  186. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js.map +1 -0
  187. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs +111 -0
  188. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs.map +1 -0
  189. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts +66 -0
  190. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -0
  191. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +280 -0
  192. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -0
  193. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +263 -0
  194. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -0
  195. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts +13 -0
  196. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts.map +1 -0
  197. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js +83 -0
  198. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js.map +1 -0
  199. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs +59 -0
  200. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs.map +1 -0
  201. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts +8 -0
  202. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts.map +1 -0
  203. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js +73 -0
  204. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js.map +1 -0
  205. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs +49 -0
  206. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs.map +1 -0
  207. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts +121 -0
  208. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -0
  209. package/dist/blocks/e-commerce/navigation/storefront-navbar.js +424 -0
  210. package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -0
  211. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +399 -0
  212. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -0
  213. package/dist/blocks/e-commerce/order-history/order-history.d.ts +74 -0
  214. package/dist/blocks/e-commerce/order-history/order-history.d.ts.map +1 -0
  215. package/dist/blocks/e-commerce/order-history/order-history.js +161 -0
  216. package/dist/blocks/e-commerce/order-history/order-history.js.map +1 -0
  217. package/dist/blocks/e-commerce/order-history/order-history.mjs +141 -0
  218. package/dist/blocks/e-commerce/order-history/order-history.mjs.map +1 -0
  219. package/dist/blocks/e-commerce/order-history/order-line.d.ts +50 -0
  220. package/dist/blocks/e-commerce/order-history/order-line.d.ts.map +1 -0
  221. package/dist/blocks/e-commerce/order-history/order-line.js +75 -0
  222. package/dist/blocks/e-commerce/order-history/order-line.js.map +1 -0
  223. package/dist/blocks/e-commerce/order-history/order-line.mjs +49 -0
  224. package/dist/blocks/e-commerce/order-history/order-line.mjs.map +1 -0
  225. package/dist/blocks/e-commerce/product-categories/category-card.d.ts +9 -0
  226. package/dist/blocks/e-commerce/product-categories/category-card.d.ts.map +1 -0
  227. package/dist/blocks/e-commerce/product-categories/category-card.js +154 -0
  228. package/dist/blocks/e-commerce/product-categories/category-card.js.map +1 -0
  229. package/dist/blocks/e-commerce/product-categories/category-card.mjs +134 -0
  230. package/dist/blocks/e-commerce/product-categories/category-card.mjs.map +1 -0
  231. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts +15 -0
  232. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts.map +1 -0
  233. package/dist/blocks/e-commerce/product-categories/category-shared.js +101 -0
  234. package/dist/blocks/e-commerce/product-categories/category-shared.js.map +1 -0
  235. package/dist/blocks/e-commerce/product-categories/category-shared.mjs +97 -0
  236. package/dist/blocks/e-commerce/product-categories/category-shared.mjs.map +1 -0
  237. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts +10 -0
  238. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts.map +1 -0
  239. package/dist/blocks/e-commerce/product-categories/product-category-grid.js +138 -0
  240. package/dist/blocks/e-commerce/product-categories/product-category-grid.js.map +1 -0
  241. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs +114 -0
  242. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs.map +1 -0
  243. package/dist/blocks/e-commerce/product-categories/product-category.d.ts +41 -0
  244. package/dist/blocks/e-commerce/product-categories/product-category.d.ts.map +1 -0
  245. package/dist/blocks/e-commerce/product-categories/product-category.js +319 -0
  246. package/dist/blocks/e-commerce/product-categories/product-category.js.map +1 -0
  247. package/dist/blocks/e-commerce/product-categories/product-category.mjs +322 -0
  248. package/dist/blocks/e-commerce/product-categories/product-category.mjs.map +1 -0
  249. package/dist/blocks/e-commerce/product-list/product-card.d.ts +47 -0
  250. package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -0
  251. package/dist/blocks/e-commerce/product-list/product-card.js +361 -0
  252. package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -0
  253. package/dist/blocks/e-commerce/product-list/product-card.mjs +337 -0
  254. package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -0
  255. package/dist/blocks/e-commerce/product-list/product-grid.d.ts +28 -0
  256. package/dist/blocks/e-commerce/product-list/product-grid.d.ts.map +1 -0
  257. package/dist/blocks/e-commerce/product-list/product-grid.js +92 -0
  258. package/dist/blocks/e-commerce/product-list/product-grid.js.map +1 -0
  259. package/dist/blocks/e-commerce/product-list/product-grid.mjs +68 -0
  260. package/dist/blocks/e-commerce/product-list/product-grid.mjs.map +1 -0
  261. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts +30 -0
  262. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -0
  263. package/dist/blocks/e-commerce/product-list/product-showcase-1.js +245 -0
  264. package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -0
  265. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +221 -0
  266. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -0
  267. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts +20 -0
  268. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts.map +1 -0
  269. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js +71 -0
  270. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js.map +1 -0
  271. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs +47 -0
  272. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs.map +1 -0
  273. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts +15 -0
  274. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts.map +1 -0
  275. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js +118 -0
  276. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js.map +1 -0
  277. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs +94 -0
  278. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs.map +1 -0
  279. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts +26 -0
  280. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts.map +1 -0
  281. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js +85 -0
  282. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js.map +1 -0
  283. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs +61 -0
  284. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs.map +1 -0
  285. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts +32 -0
  286. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts.map +1 -0
  287. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js +79 -0
  288. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js.map +1 -0
  289. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs +51 -0
  290. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs.map +1 -0
  291. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts +121 -0
  292. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts.map +1 -0
  293. package/dist/blocks/e-commerce/product-overview/product-overview.js +844 -0
  294. package/dist/blocks/e-commerce/product-overview/product-overview.js.map +1 -0
  295. package/dist/blocks/e-commerce/product-overview/product-overview.mjs +821 -0
  296. package/dist/blocks/e-commerce/product-overview/product-overview.mjs.map +1 -0
  297. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts +17 -0
  298. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts.map +1 -0
  299. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js +123 -0
  300. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js.map +1 -0
  301. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs +99 -0
  302. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs.map +1 -0
  303. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts +20 -0
  304. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -0
  305. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +271 -0
  306. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -0
  307. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +253 -0
  308. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -0
  309. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts +68 -0
  310. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts.map +1 -0
  311. package/dist/blocks/e-commerce/product-overview/product-quick-view.js +84 -0
  312. package/dist/blocks/e-commerce/product-overview/product-quick-view.js.map +1 -0
  313. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs +60 -0
  314. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs.map +1 -0
  315. package/dist/blocks/e-commerce/reviews/review-card.d.ts +60 -0
  316. package/dist/blocks/e-commerce/reviews/review-card.d.ts.map +1 -0
  317. package/dist/blocks/e-commerce/reviews/review-card.js +166 -0
  318. package/dist/blocks/e-commerce/reviews/review-card.js.map +1 -0
  319. package/dist/blocks/e-commerce/reviews/review-card.mjs +139 -0
  320. package/dist/blocks/e-commerce/reviews/review-card.mjs.map +1 -0
  321. package/dist/blocks/e-commerce/reviews/review-composer.d.ts +50 -0
  322. package/dist/blocks/e-commerce/reviews/review-composer.d.ts.map +1 -0
  323. package/dist/blocks/e-commerce/reviews/review-composer.js +180 -0
  324. package/dist/blocks/e-commerce/reviews/review-composer.js.map +1 -0
  325. package/dist/blocks/e-commerce/reviews/review-composer.mjs +155 -0
  326. package/dist/blocks/e-commerce/reviews/review-composer.mjs.map +1 -0
  327. package/dist/blocks/e-commerce/reviews/review-list.d.ts +40 -0
  328. package/dist/blocks/e-commerce/reviews/review-list.d.ts.map +1 -0
  329. package/dist/blocks/e-commerce/reviews/review-list.js +138 -0
  330. package/dist/blocks/e-commerce/reviews/review-list.js.map +1 -0
  331. package/dist/blocks/e-commerce/reviews/review-list.mjs +119 -0
  332. package/dist/blocks/e-commerce/reviews/review-list.mjs.map +1 -0
  333. package/dist/blocks/e-commerce/reviews/review-summary.d.ts +49 -0
  334. package/dist/blocks/e-commerce/reviews/review-summary.d.ts.map +1 -0
  335. package/dist/blocks/e-commerce/reviews/review-summary.js +150 -0
  336. package/dist/blocks/e-commerce/reviews/review-summary.js.map +1 -0
  337. package/dist/blocks/e-commerce/reviews/review-summary.mjs +124 -0
  338. package/dist/blocks/e-commerce/reviews/review-summary.mjs.map +1 -0
  339. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts +98 -0
  340. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts.map +1 -0
  341. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js +417 -0
  342. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js.map +1 -0
  343. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs +393 -0
  344. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs.map +1 -0
  345. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts +13 -0
  346. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts.map +1 -0
  347. package/dist/blocks/e-commerce/store-containers/store-container-1.js +45 -0
  348. package/dist/blocks/e-commerce/store-containers/store-container-1.js.map +1 -0
  349. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs +21 -0
  350. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs.map +1 -0
  351. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts +163 -0
  352. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -0
  353. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +810 -0
  354. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -0
  355. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +786 -0
  356. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -0
  357. package/dist/blocks/marketing/banners/avatar-group.d.ts +8 -0
  358. package/dist/blocks/marketing/banners/avatar-group.d.ts.map +1 -0
  359. package/dist/blocks/marketing/banners/avatar-group.js +90 -0
  360. package/dist/blocks/marketing/banners/avatar-group.js.map +1 -0
  361. package/dist/blocks/marketing/banners/avatar-group.mjs +56 -0
  362. package/dist/blocks/marketing/banners/avatar-group.mjs.map +1 -0
  363. package/dist/blocks/marketing/banners/banner-1.d.ts +26 -0
  364. package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -0
  365. package/dist/blocks/marketing/banners/banner-1.js +177 -0
  366. package/dist/blocks/marketing/banners/banner-1.js.map +1 -0
  367. package/dist/blocks/marketing/banners/banner-1.mjs +153 -0
  368. package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -0
  369. package/dist/blocks/marketing/cta/cta-section-1.d.ts +13 -0
  370. package/dist/blocks/marketing/cta/cta-section-1.d.ts.map +1 -0
  371. package/dist/blocks/marketing/cta/cta-section-1.js +116 -0
  372. package/dist/blocks/marketing/cta/cta-section-1.js.map +1 -0
  373. package/dist/blocks/marketing/cta/cta-section-1.mjs +92 -0
  374. package/dist/blocks/marketing/cta/cta-section-1.mjs.map +1 -0
  375. package/dist/blocks/marketing/faq/faq-block-1.d.ts +16 -0
  376. package/dist/blocks/marketing/faq/faq-block-1.d.ts.map +1 -0
  377. package/dist/blocks/marketing/faq/faq-block-1.js +49 -0
  378. package/dist/blocks/marketing/faq/faq-block-1.js.map +1 -0
  379. package/dist/blocks/marketing/faq/faq-block-1.mjs +25 -0
  380. package/dist/blocks/marketing/faq/faq-block-1.mjs.map +1 -0
  381. package/dist/blocks/marketing/features/feature.d.ts +45 -0
  382. package/dist/blocks/marketing/features/feature.d.ts.map +1 -0
  383. package/dist/blocks/marketing/features/feature.js +135 -0
  384. package/dist/blocks/marketing/features/feature.js.map +1 -0
  385. package/dist/blocks/marketing/features/feature.mjs +111 -0
  386. package/dist/blocks/marketing/features/feature.mjs.map +1 -0
  387. package/dist/blocks/marketing/footers/footer-section.d.ts +59 -0
  388. package/dist/blocks/marketing/footers/footer-section.d.ts.map +1 -0
  389. package/dist/blocks/marketing/footers/footer-section.js +356 -0
  390. package/dist/blocks/marketing/footers/footer-section.js.map +1 -0
  391. package/dist/blocks/marketing/footers/footer-section.mjs +332 -0
  392. package/dist/blocks/marketing/footers/footer-section.mjs.map +1 -0
  393. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts +9 -0
  394. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts.map +1 -0
  395. package/dist/blocks/marketing/hero-sections/avatar-group.js +92 -0
  396. package/dist/blocks/marketing/hero-sections/avatar-group.js.map +1 -0
  397. package/dist/blocks/marketing/hero-sections/avatar-group.mjs +58 -0
  398. package/dist/blocks/marketing/hero-sections/avatar-group.mjs.map +1 -0
  399. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts +27 -0
  400. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts.map +1 -0
  401. package/dist/blocks/marketing/hero-sections/hero-section-1.js +124 -0
  402. package/dist/blocks/marketing/hero-sections/hero-section-1.js.map +1 -0
  403. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs +100 -0
  404. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs.map +1 -0
  405. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts +19 -0
  406. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts.map +1 -0
  407. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js +63 -0
  408. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js.map +1 -0
  409. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs +39 -0
  410. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs.map +1 -0
  411. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts +13 -0
  412. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts.map +1 -0
  413. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js +49 -0
  414. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js.map +1 -0
  415. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs +25 -0
  416. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs.map +1 -0
  417. package/dist/blocks/marketing/navbars/navbar.d.ts +80 -0
  418. package/dist/blocks/marketing/navbars/navbar.d.ts.map +1 -0
  419. package/dist/blocks/marketing/navbars/navbar.js +484 -0
  420. package/dist/blocks/marketing/navbars/navbar.js.map +1 -0
  421. package/dist/blocks/marketing/navbars/navbar.mjs +475 -0
  422. package/dist/blocks/marketing/navbars/navbar.mjs.map +1 -0
  423. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts +23 -0
  424. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts.map +1 -0
  425. package/dist/blocks/marketing/pricing/pricing-section-1.js +89 -0
  426. package/dist/blocks/marketing/pricing/pricing-section-1.js.map +1 -0
  427. package/dist/blocks/marketing/pricing/pricing-section-1.mjs +65 -0
  428. package/dist/blocks/marketing/pricing/pricing-section-1.mjs.map +1 -0
  429. package/dist/blocks/marketing/statistics/statistic-1.d.ts +19 -0
  430. package/dist/blocks/marketing/statistics/statistic-1.d.ts.map +1 -0
  431. package/dist/blocks/marketing/statistics/statistic-1.js +83 -0
  432. package/dist/blocks/marketing/statistics/statistic-1.js.map +1 -0
  433. package/dist/blocks/marketing/statistics/statistic-1.mjs +59 -0
  434. package/dist/blocks/marketing/statistics/statistic-1.mjs.map +1 -0
  435. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts +29 -0
  436. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts.map +1 -0
  437. package/dist/blocks/marketing/testimonials/testimonial-section.js +173 -0
  438. package/dist/blocks/marketing/testimonials/testimonial-section.js.map +1 -0
  439. package/dist/blocks/marketing/testimonials/testimonial-section.mjs +155 -0
  440. package/dist/blocks/marketing/testimonials/testimonial-section.mjs.map +1 -0
  441. package/dist/blocks/shared/reaction-toggle.d.ts +14 -0
  442. package/dist/blocks/shared/reaction-toggle.d.ts.map +1 -0
  443. package/dist/blocks/shared/reaction-toggle.js +138 -0
  444. package/dist/blocks/shared/reaction-toggle.js.map +1 -0
  445. package/dist/blocks/shared/reaction-toggle.mjs +114 -0
  446. package/dist/blocks/shared/reaction-toggle.mjs.map +1 -0
  447. package/dist/hooks/use-mobile.d.ts +2 -0
  448. package/dist/hooks/use-mobile.d.ts.map +1 -0
  449. package/dist/hooks/use-mobile.js +53 -0
  450. package/dist/hooks/use-mobile.js.map +1 -0
  451. package/dist/hooks/use-mobile.mjs +19 -0
  452. package/dist/hooks/use-mobile.mjs.map +1 -0
  453. package/dist/index.d.ts +100 -0
  454. package/dist/index.d.ts.map +1 -0
  455. package/dist/index.js +339 -0
  456. package/dist/index.js.map +1 -0
  457. package/dist/index.mjs +238 -0
  458. package/dist/index.mjs.map +1 -0
  459. package/{src/lib/cart.ts → dist/lib/cart.d.ts} +2 -3
  460. package/dist/lib/cart.d.ts.map +1 -0
  461. package/dist/lib/cart.js +31 -0
  462. package/dist/lib/cart.js.map +1 -0
  463. package/dist/lib/cart.mjs +7 -0
  464. package/dist/lib/cart.mjs.map +1 -0
  465. package/dist/lib/contracts.d.ts +4008 -0
  466. package/dist/lib/contracts.d.ts.map +1 -0
  467. package/dist/lib/contracts.js +828 -0
  468. package/dist/lib/contracts.js.map +1 -0
  469. package/dist/lib/contracts.mjs +737 -0
  470. package/dist/lib/contracts.mjs.map +1 -0
  471. package/dist/lib/money.d.ts +28 -0
  472. package/dist/lib/money.d.ts.map +1 -0
  473. package/dist/lib/money.js +50 -0
  474. package/dist/lib/money.js.map +1 -0
  475. package/dist/lib/money.mjs +24 -0
  476. package/dist/lib/money.mjs.map +1 -0
  477. package/dist/lib/types/menu.d.ts +40 -0
  478. package/dist/lib/types/menu.d.ts.map +1 -0
  479. package/dist/lib/types/menu.js +50 -0
  480. package/dist/lib/types/menu.js.map +1 -0
  481. package/dist/lib/types/menu.mjs +25 -0
  482. package/dist/lib/types/menu.mjs.map +1 -0
  483. package/dist/lib/types.d.ts +5 -0
  484. package/dist/lib/types.d.ts.map +1 -0
  485. package/dist/lib/types.js +17 -0
  486. package/dist/lib/types.js.map +1 -0
  487. package/dist/lib/types.mjs +1 -0
  488. package/dist/lib/types.mjs.map +1 -0
  489. package/dist/lib/utils.d.ts +7 -0
  490. package/dist/lib/utils.d.ts.map +1 -0
  491. package/dist/lib/utils.js +33 -0
  492. package/dist/lib/utils.js.map +1 -0
  493. package/dist/lib/utils.mjs +9 -0
  494. package/dist/lib/utils.mjs.map +1 -0
  495. package/dist/ui/accordion.d.ts +8 -0
  496. package/dist/ui/accordion.d.ts.map +1 -0
  497. package/dist/ui/accordion.js +93 -0
  498. package/dist/ui/accordion.js.map +1 -0
  499. package/dist/ui/accordion.mjs +66 -0
  500. package/dist/ui/accordion.mjs.map +1 -0
  501. package/dist/ui/avatar.d.ts +12 -0
  502. package/dist/ui/avatar.d.ts.map +1 -0
  503. package/dist/ui/avatar.js +134 -0
  504. package/dist/ui/avatar.js.map +1 -0
  505. package/{src/ui/avatar.tsx → dist/ui/avatar.mjs} +67 -70
  506. package/dist/ui/avatar.mjs.map +1 -0
  507. package/dist/ui/badge.d.ts +10 -0
  508. package/dist/ui/badge.d.ts.map +1 -0
  509. package/dist/ui/badge.js +69 -0
  510. package/dist/ui/badge.js.map +1 -0
  511. package/dist/ui/badge.mjs +44 -0
  512. package/dist/ui/badge.mjs.map +1 -0
  513. package/dist/ui/breadcrumb.d.ts +12 -0
  514. package/dist/ui/breadcrumb.d.ts.map +1 -0
  515. package/dist/ui/breadcrumb.js +134 -0
  516. package/dist/ui/breadcrumb.js.map +1 -0
  517. package/dist/ui/breadcrumb.mjs +104 -0
  518. package/dist/ui/breadcrumb.mjs.map +1 -0
  519. package/dist/ui/button-group.d.ts +12 -0
  520. package/dist/ui/button-group.d.ts.map +1 -0
  521. package/dist/ui/button-group.js +104 -0
  522. package/dist/ui/button-group.js.map +1 -0
  523. package/dist/ui/button-group.mjs +77 -0
  524. package/dist/ui/button-group.mjs.map +1 -0
  525. package/dist/ui/button.d.ts +11 -0
  526. package/dist/ui/button.d.ts.map +1 -0
  527. package/dist/ui/button.js +82 -0
  528. package/dist/ui/button.js.map +1 -0
  529. package/dist/ui/button.mjs +57 -0
  530. package/dist/ui/button.mjs.map +1 -0
  531. package/dist/ui/card.d.ts +10 -0
  532. package/dist/ui/card.d.ts.map +1 -0
  533. package/dist/ui/card.js +121 -0
  534. package/dist/ui/card.js.map +1 -0
  535. package/dist/ui/card.mjs +91 -0
  536. package/dist/ui/card.mjs.map +1 -0
  537. package/dist/ui/carousel.d.ts +20 -0
  538. package/dist/ui/carousel.d.ts.map +1 -0
  539. package/dist/ui/carousel.js +238 -0
  540. package/dist/ui/carousel.js.map +1 -0
  541. package/dist/ui/carousel.mjs +200 -0
  542. package/dist/ui/carousel.mjs.map +1 -0
  543. package/dist/ui/dialog.d.ts +18 -0
  544. package/dist/ui/dialog.d.ts.map +1 -0
  545. package/dist/ui/dialog.js +181 -0
  546. package/dist/ui/dialog.js.map +1 -0
  547. package/dist/ui/dialog.mjs +148 -0
  548. package/dist/ui/dialog.mjs.map +1 -0
  549. package/dist/ui/drawer.d.ts +14 -0
  550. package/dist/ui/drawer.d.ts.map +1 -0
  551. package/dist/ui/drawer.js +163 -0
  552. package/dist/ui/drawer.js.map +1 -0
  553. package/dist/ui/drawer.mjs +130 -0
  554. package/dist/ui/drawer.mjs.map +1 -0
  555. package/dist/ui/dropdown-menu.d.ts +26 -0
  556. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  557. package/dist/ui/dropdown-menu.js +271 -0
  558. package/dist/ui/dropdown-menu.js.map +1 -0
  559. package/dist/ui/dropdown-menu.mjs +233 -0
  560. package/dist/ui/dropdown-menu.mjs.map +1 -0
  561. package/dist/ui/empty.d.ts +12 -0
  562. package/dist/ui/empty.d.ts.map +1 -0
  563. package/dist/ui/empty.js +132 -0
  564. package/dist/ui/empty.js.map +1 -0
  565. package/dist/ui/empty.mjs +103 -0
  566. package/dist/ui/empty.mjs.map +1 -0
  567. package/dist/ui/field.d.ts +25 -0
  568. package/dist/ui/field.d.ts.map +1 -0
  569. package/dist/ui/field.js +264 -0
  570. package/dist/ui/field.js.map +1 -0
  571. package/{src/ui/field.tsx → dist/ui/field.mjs} +142 -159
  572. package/dist/ui/field.mjs.map +1 -0
  573. package/dist/ui/input-group.d.ts +17 -0
  574. package/dist/ui/input-group.d.ts.map +1 -0
  575. package/dist/ui/input-group.js +185 -0
  576. package/dist/ui/input-group.js.map +1 -0
  577. package/{src/ui/input-group.tsx → dist/ui/input-group.mjs} +92 -106
  578. package/dist/ui/input-group.mjs.map +1 -0
  579. package/dist/ui/input-otp.d.ts +12 -0
  580. package/dist/ui/input-otp.d.ts.map +1 -0
  581. package/dist/ui/input-otp.js +105 -0
  582. package/dist/ui/input-otp.js.map +1 -0
  583. package/dist/ui/input-otp.mjs +68 -0
  584. package/dist/ui/input-otp.mjs.map +1 -0
  585. package/dist/ui/input.d.ts +4 -0
  586. package/dist/ui/input.d.ts.map +1 -0
  587. package/dist/ui/input.js +46 -0
  588. package/dist/ui/input.js.map +1 -0
  589. package/{src/ui/input.tsx → dist/ui/input.mjs} +17 -15
  590. package/dist/ui/input.mjs.map +1 -0
  591. package/dist/ui/label.d.ts +5 -0
  592. package/dist/ui/label.d.ts.map +1 -0
  593. package/dist/ui/label.js +48 -0
  594. package/dist/ui/label.js.map +1 -0
  595. package/dist/ui/label.mjs +24 -0
  596. package/dist/ui/label.mjs.map +1 -0
  597. package/dist/ui/navigation-menu.d.ts +15 -0
  598. package/dist/ui/navigation-menu.d.ts.map +1 -0
  599. package/dist/ui/navigation-menu.js +203 -0
  600. package/dist/ui/navigation-menu.js.map +1 -0
  601. package/{src/ui/navigation-menu.tsx → dist/ui/navigation-menu.mjs} +116 -112
  602. package/dist/ui/navigation-menu.mjs.map +1 -0
  603. package/dist/ui/pagination.d.ts +14 -0
  604. package/dist/ui/pagination.d.ts.map +1 -0
  605. package/dist/ui/pagination.js +149 -0
  606. package/dist/ui/pagination.js.map +1 -0
  607. package/dist/ui/pagination.mjs +123 -0
  608. package/dist/ui/pagination.mjs.map +1 -0
  609. package/dist/ui/progress.d.ts +5 -0
  610. package/dist/ui/progress.d.ts.map +1 -0
  611. package/dist/ui/progress.js +57 -0
  612. package/dist/ui/progress.js.map +1 -0
  613. package/dist/ui/progress.mjs +33 -0
  614. package/dist/ui/progress.mjs.map +1 -0
  615. package/dist/ui/radio-group.d.ts +6 -0
  616. package/dist/ui/radio-group.d.ts.map +1 -0
  617. package/dist/ui/radio-group.js +72 -0
  618. package/dist/ui/radio-group.js.map +1 -0
  619. package/dist/ui/radio-group.mjs +47 -0
  620. package/dist/ui/radio-group.mjs.map +1 -0
  621. package/dist/ui/select.d.ts +16 -0
  622. package/dist/ui/select.d.ts.map +1 -0
  623. package/dist/ui/select.js +213 -0
  624. package/dist/ui/select.js.map +1 -0
  625. package/dist/ui/select.mjs +180 -0
  626. package/dist/ui/select.mjs.map +1 -0
  627. package/dist/ui/separator.d.ts +5 -0
  628. package/dist/ui/separator.d.ts.map +1 -0
  629. package/dist/ui/separator.js +52 -0
  630. package/dist/ui/separator.js.map +1 -0
  631. package/dist/ui/separator.mjs +28 -0
  632. package/dist/ui/separator.mjs.map +1 -0
  633. package/dist/ui/sheet.d.ts +15 -0
  634. package/dist/ui/sheet.d.ts.map +1 -0
  635. package/dist/ui/sheet.js +160 -0
  636. package/dist/ui/sheet.js.map +1 -0
  637. package/dist/ui/sheet.mjs +129 -0
  638. package/dist/ui/sheet.mjs.map +1 -0
  639. package/dist/ui/sidebar.d.ts +70 -0
  640. package/dist/ui/sidebar.d.ts.map +1 -0
  641. package/dist/ui/sidebar.js +697 -0
  642. package/dist/ui/sidebar.js.map +1 -0
  643. package/dist/ui/sidebar.mjs +651 -0
  644. package/dist/ui/sidebar.mjs.map +1 -0
  645. package/dist/ui/skeleton.d.ts +3 -0
  646. package/dist/ui/skeleton.d.ts.map +1 -0
  647. package/dist/ui/skeleton.js +40 -0
  648. package/dist/ui/skeleton.js.map +1 -0
  649. package/dist/ui/skeleton.mjs +16 -0
  650. package/dist/ui/skeleton.mjs.map +1 -0
  651. package/dist/ui/table.d.ts +11 -0
  652. package/dist/ui/table.d.ts.map +1 -0
  653. package/dist/ui/table.js +147 -0
  654. package/dist/ui/table.js.map +1 -0
  655. package/dist/ui/table.mjs +116 -0
  656. package/dist/ui/table.mjs.map +1 -0
  657. package/dist/ui/tabs.d.ts +12 -0
  658. package/dist/ui/tabs.d.ts.map +1 -0
  659. package/dist/ui/tabs.js +121 -0
  660. package/dist/ui/tabs.js.map +1 -0
  661. package/{src/ui/tabs.tsx → dist/ui/tabs.mjs} +59 -56
  662. package/dist/ui/tabs.mjs.map +1 -0
  663. package/dist/ui/textarea.d.ts +4 -0
  664. package/dist/ui/textarea.d.ts.map +1 -0
  665. package/dist/ui/textarea.js +43 -0
  666. package/dist/ui/textarea.js.map +1 -0
  667. package/{src/ui/textarea.tsx → dist/ui/textarea.mjs} +16 -14
  668. package/dist/ui/textarea.mjs.map +1 -0
  669. package/dist/ui/toggle-group.d.ts +10 -0
  670. package/dist/ui/toggle-group.d.ts.map +1 -0
  671. package/dist/ui/toggle-group.js +105 -0
  672. package/dist/ui/toggle-group.js.map +1 -0
  673. package/dist/ui/toggle-group.mjs +70 -0
  674. package/dist/ui/toggle-group.mjs.map +1 -0
  675. package/dist/ui/toggle.d.ts +10 -0
  676. package/dist/ui/toggle.d.ts.map +1 -0
  677. package/dist/ui/toggle.js +70 -0
  678. package/dist/ui/toggle.js.map +1 -0
  679. package/{src/ui/toggle.tsx → dist/ui/toggle.mjs} +25 -26
  680. package/dist/ui/toggle.mjs.map +1 -0
  681. package/dist/ui/tooltip.d.ts +8 -0
  682. package/dist/ui/tooltip.d.ts.map +1 -0
  683. package/dist/ui/tooltip.js +84 -0
  684. package/dist/ui/tooltip.js.map +1 -0
  685. package/dist/ui/tooltip.mjs +57 -0
  686. package/dist/ui/tooltip.mjs.map +1 -0
  687. package/package.json +8 -1
  688. package/AGENTS.md +0 -1
  689. package/CHANGELOG.md +0 -107
  690. package/components.json +0 -33
  691. package/docs/standards/data-contracts.md +0 -81
  692. package/docs/standards/theming.md +0 -112
  693. package/scripts/fix-esm-extensions.mjs +0 -40
  694. package/src/blocks/application/app-shells/app-shell-1-sidebar.tsx +0 -198
  695. package/src/blocks/application/app-shells/app-shell-1.tsx +0 -196
  696. package/src/blocks/application/login-forms/login-page-1.tsx +0 -246
  697. package/src/blocks/application/login-forms/login-page-2.tsx +0 -207
  698. package/src/blocks/application/password-recovery/forgot-password-page-1-brand-mark.tsx +0 -38
  699. package/src/blocks/application/password-recovery/forgot-password-page-1.tsx +0 -320
  700. package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -231
  701. package/src/blocks/application/verification/verify-1.tsx +0 -307
  702. package/src/blocks/application/verification/verify-confetti.tsx +0 -192
  703. package/src/blocks/e-commerce/category-filters/category-filter-1.tsx +0 -260
  704. package/src/blocks/e-commerce/category-filters/category-filter-2-filter-panel.tsx +0 -222
  705. package/src/blocks/e-commerce/category-filters/category-filter-2.test.tsx +0 -513
  706. package/src/blocks/e-commerce/category-filters/category-filter-2.tsx +0 -921
  707. package/src/blocks/e-commerce/category-filters/category-filter-4-chip-rail.tsx +0 -57
  708. package/src/blocks/e-commerce/category-filters/category-filter-4-drawer.tsx +0 -124
  709. package/src/blocks/e-commerce/category-filters/category-filter-4-fields.tsx +0 -170
  710. package/src/blocks/e-commerce/category-filters/category-filter-4-sidebar.tsx +0 -52
  711. package/src/blocks/e-commerce/category-filters/category-filter-4-sort-sheet.tsx +0 -57
  712. package/src/blocks/e-commerce/category-filters/category-filter-4-state.ts +0 -68
  713. package/src/blocks/e-commerce/category-filters/category-filter-4.tsx +0 -298
  714. package/src/blocks/e-commerce/checkout-forms/card-formatting.test.ts +0 -47
  715. package/src/blocks/e-commerce/checkout-forms/card-formatting.ts +0 -9
  716. package/src/blocks/e-commerce/checkout-forms/checkbox-check.tsx +0 -74
  717. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +0 -195
  718. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +0 -136
  719. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +0 -329
  720. package/src/blocks/e-commerce/checkout-forms/checkout-field-feedback.tsx +0 -29
  721. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-contact-step.tsx +0 -96
  722. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-country-field.tsx +0 -51
  723. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-order-summary.tsx +0 -252
  724. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-payment-step.tsx +0 -188
  725. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-progress.tsx +0 -36
  726. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-shipping-step.tsx +0 -156
  727. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.test.tsx +0 -216
  728. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.tsx +0 -338
  729. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-order-summary.tsx +0 -130
  730. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-payment-card.tsx +0 -175
  731. package/src/blocks/e-commerce/checkout-forms/checkout-form-2-shipping-card.tsx +0 -190
  732. package/src/blocks/e-commerce/checkout-forms/checkout-form-2.tsx +0 -312
  733. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-information-step.tsx +0 -91
  734. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-order-summary.tsx +0 -110
  735. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-payment-step.tsx +0 -137
  736. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-progress.tsx +0 -68
  737. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-review-step.tsx +0 -79
  738. package/src/blocks/e-commerce/checkout-forms/checkout-form-3-shipping-step.tsx +0 -172
  739. package/src/blocks/e-commerce/checkout-forms/checkout-form-3.tsx +0 -392
  740. package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
  741. package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +0 -27
  742. package/src/blocks/e-commerce/navigation/back-to-top.tsx +0 -71
  743. package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +0 -174
  744. package/src/blocks/e-commerce/navigation/breadcrumb.tsx +0 -130
  745. package/src/blocks/e-commerce/navigation/category-icon.test.tsx +0 -54
  746. package/src/blocks/e-commerce/navigation/category-icon.tsx +0 -94
  747. package/src/blocks/e-commerce/navigation/mega-menu.test.tsx +0 -139
  748. package/src/blocks/e-commerce/navigation/mega-menu.tsx +0 -271
  749. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +0 -74
  750. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +0 -78
  751. package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +0 -192
  752. package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +0 -278
  753. package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +0 -35
  754. package/src/blocks/e-commerce/navigation/skip-to-content.tsx +0 -37
  755. package/src/blocks/e-commerce/order-history/order-history-1.tsx +0 -159
  756. package/src/blocks/e-commerce/order-history/order-history-2.tsx +0 -222
  757. package/src/blocks/e-commerce/product-categories/category-card-grid.test.tsx +0 -122
  758. package/src/blocks/e-commerce/product-categories/category-card.test.tsx +0 -68
  759. package/src/blocks/e-commerce/product-categories/category-card.tsx +0 -172
  760. package/src/blocks/e-commerce/product-categories/category-grid.test.tsx +0 -67
  761. package/src/blocks/e-commerce/product-categories/category-shared.tsx +0 -109
  762. package/src/blocks/e-commerce/product-categories/product-category-grid.tsx +0 -170
  763. package/src/blocks/e-commerce/product-categories/product-category.test.tsx +0 -266
  764. package/src/blocks/e-commerce/product-categories/product-category.tsx +0 -462
  765. package/src/blocks/e-commerce/product-list/product-card.test.tsx +0 -263
  766. package/src/blocks/e-commerce/product-list/product-card.tsx +0 -424
  767. package/src/blocks/e-commerce/product-list/product-grid.test.tsx +0 -162
  768. package/src/blocks/e-commerce/product-list/product-grid.tsx +0 -114
  769. package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +0 -78
  770. package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +0 -277
  771. package/src/blocks/e-commerce/product-overview/product-overview-gallery.tsx +0 -71
  772. package/src/blocks/e-commerce/product-overview/product-overview-lightbox-tab.tsx +0 -116
  773. package/src/blocks/e-commerce/product-overview/product-overview-reviews-tab.tsx +0 -105
  774. package/src/blocks/e-commerce/product-overview/product-overview-tabs.tsx +0 -70
  775. package/src/blocks/e-commerce/product-overview/product-overview.test.tsx +0 -283
  776. package/src/blocks/e-commerce/product-overview/product-overview.tsx +0 -1186
  777. package/src/blocks/e-commerce/product-overview/product-quick-view-card.tsx +0 -135
  778. package/src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx +0 -393
  779. package/src/blocks/e-commerce/product-overview/product-quick-view.tsx +0 -136
  780. package/src/blocks/e-commerce/reviews/review-rating-1-review-form.tsx +0 -133
  781. package/src/blocks/e-commerce/reviews/review-rating-1.tsx +0 -178
  782. package/src/blocks/e-commerce/reviews/review-rating-2.tsx +0 -245
  783. package/src/blocks/e-commerce/shopping-carts/shopping-cart.test.tsx +0 -399
  784. package/src/blocks/e-commerce/shopping-carts/shopping-cart.tsx +0 -628
  785. package/src/blocks/e-commerce/store-containers/store-container-1.tsx +0 -29
  786. package/src/blocks/e-commerce/storefront-hero/storefront-hero.test.tsx +0 -412
  787. package/src/blocks/e-commerce/storefront-hero/storefront-hero.tsx +0 -1283
  788. package/src/blocks/marketing/banners/avatar-group.tsx +0 -69
  789. package/src/blocks/marketing/banners/banner-1.tsx +0 -188
  790. package/src/blocks/marketing/cta/cta-section-1.tsx +0 -112
  791. package/src/blocks/marketing/faq/faq-block-1.tsx +0 -45
  792. package/src/blocks/marketing/features/feature.test.tsx +0 -153
  793. package/src/blocks/marketing/features/feature.tsx +0 -195
  794. package/src/blocks/marketing/footers/footer-section-1.test.tsx +0 -117
  795. package/src/blocks/marketing/footers/footer-section-1.tsx +0 -178
  796. package/src/blocks/marketing/footers/footer-section-3.tsx +0 -192
  797. package/src/blocks/marketing/footers/footer-section-4.tsx +0 -355
  798. package/src/blocks/marketing/hero-sections/avatar-group.tsx +0 -86
  799. package/src/blocks/marketing/hero-sections/hero-section-1.tsx +0 -135
  800. package/src/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.tsx +0 -52
  801. package/src/blocks/marketing/logo-clouds/logo-cloud-1.tsx +0 -56
  802. package/src/blocks/marketing/navbars/navbar-1.tsx +0 -267
  803. package/src/blocks/marketing/navbars/navbar-2.tsx +0 -351
  804. package/src/blocks/marketing/navbars/navbar-3.tsx +0 -303
  805. package/src/blocks/marketing/navbars/navbar-4-account-menu.test.tsx +0 -56
  806. package/src/blocks/marketing/navbars/navbar-4-account-menu.tsx +0 -134
  807. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.test.tsx +0 -204
  808. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.tsx +0 -371
  809. package/src/blocks/marketing/navbars/navbar-4-like-button.tsx +0 -177
  810. package/src/blocks/marketing/navbars/navbar-4-mobile-nav.tsx +0 -104
  811. package/src/blocks/marketing/navbars/navbar-4-product-grid.tsx +0 -219
  812. package/src/blocks/marketing/navbars/navbar-4-search-bar.tsx +0 -52
  813. package/src/blocks/marketing/navbars/navbar-4.test.tsx +0 -264
  814. package/src/blocks/marketing/navbars/navbar-4.tsx +0 -604
  815. package/src/blocks/marketing/pricing/pricing-section-1.tsx +0 -94
  816. package/src/blocks/marketing/statistics/statistic-1.tsx +0 -93
  817. package/src/blocks/marketing/testimonials/testimonial-1.tsx +0 -141
  818. package/src/blocks/marketing/testimonials/testimonial-2.tsx +0 -108
  819. package/src/blocks/shared/reaction-toggle.tsx +0 -145
  820. package/src/hooks/use-mobile.ts +0 -19
  821. package/src/index.ts +0 -285
  822. package/src/lib/cart.test.ts +0 -15
  823. package/src/lib/contracts-curated.test.ts +0 -225
  824. package/src/lib/contracts-server-boundary.test.ts +0 -52
  825. package/src/lib/contracts.test.ts +0 -173
  826. package/src/lib/contracts.ts +0 -795
  827. package/src/lib/money.test.ts +0 -64
  828. package/src/lib/money.ts +0 -65
  829. package/src/lib/types/menu.ts +0 -43
  830. package/src/lib/types.ts +0 -4
  831. package/src/lib/utils.ts +0 -10
  832. package/src/ui/accordion.tsx +0 -65
  833. package/src/ui/badge.tsx +0 -47
  834. package/src/ui/breadcrumb.tsx +0 -108
  835. package/src/ui/button-group.tsx +0 -83
  836. package/src/ui/button.tsx +0 -63
  837. package/src/ui/card.tsx +0 -91
  838. package/src/ui/carousel.tsx +0 -241
  839. package/src/ui/dialog.tsx +0 -158
  840. package/src/ui/drawer.tsx +0 -134
  841. package/src/ui/dropdown-menu.tsx +0 -256
  842. package/src/ui/empty.tsx +0 -103
  843. package/src/ui/input-otp.tsx +0 -76
  844. package/src/ui/label.tsx +0 -23
  845. package/src/ui/pagination.tsx +0 -127
  846. package/src/ui/progress.tsx +0 -30
  847. package/src/ui/radio-group.tsx +0 -44
  848. package/src/ui/select.tsx +0 -189
  849. package/src/ui/separator.tsx +0 -27
  850. package/src/ui/sheet.tsx +0 -142
  851. package/src/ui/sidebar.tsx +0 -726
  852. package/src/ui/skeleton.tsx +0 -13
  853. package/src/ui/table.tsx +0 -115
  854. package/src/ui/toggle-group.tsx +0 -83
  855. package/src/ui/tooltip.tsx +0 -56
  856. package/tsconfig.build.json +0 -12
  857. package/tsconfig.json +0 -20
  858. package/tsup.config.ts +0 -19
  859. package/vitest.config.ts +0 -17
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/navigation/storefront-navbar.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from 'lucide-react'\n\nimport { Button } from '../../../ui/button'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../../../ui/sheet'\nimport { cn } from '../../../lib/utils'\n\nimport { StorefrontNavbarAccountMenu, type AccountMenuItem, type StoreUser } from './storefront-navbar-account-menu'\nimport { StorefrontNavbarCartSheet, type CartItem, type CartSheetState } from './storefront-navbar-cart-sheet'\nimport type { UtilityLink } from './storefront-navbar-mobile-nav'\nimport { StorefrontNavbarSearchBar } from './storefront-navbar-search-bar'\nimport { MegaMenu } from './mega-menu'\nimport { MobileCategoryDrawer } from './mobile-category-drawer'\nimport type { MenuItem } from '../../../lib/types/menu'\nimport type { Money } from '@thorprovider/types'\nimport type { StoreCategory } from '../../../lib/contracts'\n\nfunction toMenuItem(category: StoreCategory): MenuItem {\n return {\n id: category.href,\n label: category.label,\n href: category.href,\n children: category.children?.map(toMenuItem),\n }\n}\n\n/**\n * Drawer entries come from three sources (categories, utility links, account\n * link). Hosts may reuse the same href across sources (e.g. a placeholder\n * href), which would produce duplicate React keys if passed through as-is.\n * Dedupe by href so every rendered item gets a unique id.\n */\nfunction uniqueById<T extends { id: string }>(items: T[]): T[] {\n const seen = new Set<string>()\n return items.filter((item) => {\n if (seen.has(item.id)) return false\n seen.add(item.id)\n return true\n })\n}\n\nexport interface LogoAccent {\n /** Trailing segment of `logoText` to render with the accent styling. */\n text: string\n /** Consumer-supplied classes for the accent span (e.g. a brand color token). */\n className?: string\n}\n\nfunction Logo({ text, href, accent }: { text: string; href?: string; accent?: LogoAccent }) {\n const className =\n 'focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none'\n\n const accentText = accent?.text ?? ''\n const hasAccent = accentText.length > 0 && text.endsWith(accentText)\n const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text\n\n const content = (\n <>\n <svg viewBox='0 0 32 32' aria-hidden='true' className='text-primary size-7' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z'\n fill='currentColor'\n />\n <path\n d='M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z'\n fill='currentColor'\n />\n <path\n d='M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z'\n fill='currentColor'\n />\n <path\n d='M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z'\n fill='currentColor'\n />\n <path\n d='M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z'\n fill='currentColor'\n />\n <path d='M21.1694 10.5806L14.5651 17.1849' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <path d='M22.1694 14.5806L18.5632 18.1868' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <circle cx='13.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n <circle cx='22.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n </svg>\n <span className='text-base font-semibold tracking-tight'>\n {baseText}\n {hasAccent ? <span className={accent?.className}>{accentText}</span> : null}\n </span>\n </>\n )\n\n if (!href) {\n return <span className={className}>{content}</span>\n }\n\n return (\n <a href={href} className={className}>\n {content}\n </a>\n )\n}\n\ntype CartBadgeProps = {\n count: number\n}\n\n/**\n * Transitions.dev `notification-badge`: diagonal slide + spring pop when the\n * count appears or changes. Positioned outside the bag so it never covers the icon.\n */\nfunction CartBadge({ count }: CartBadgeProps) {\n const reduceMotion = useReducedMotion()\n\n return (\n <AnimatePresence>\n {count > 0 ? (\n <motion.span\n key='badge-shell'\n className='bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background'\n initial={\n reduceMotion\n ? false\n : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: 'blur(2px)' }\n }\n animate={{ scale: 1, x: 0, y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={\n reduceMotion\n ? { opacity: 0 }\n : {\n scale: 0,\n opacity: 0,\n filter: 'blur(2px)',\n transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] },\n }\n }\n transition={\n reduceMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 520, damping: 18, mass: 0.6 }\n }\n style={{ willChange: 'transform, opacity, filter' }}\n >\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.span\n key={count}\n className='block'\n initial={reduceMotion ? false : { y: 8, opacity: 0, filter: 'blur(2px)' }}\n animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={reduceMotion ? undefined : { y: -8, opacity: 0, filter: 'blur(2px)' }}\n transition={{ duration: 0.22, ease: [0.22, 1, 0.36, 1] }}\n >\n {count > 99 ? '99+' : count}\n </motion.span>\n </AnimatePresence>\n </motion.span>\n ) : null}\n </AnimatePresence>\n )\n}\n\nexport interface StorefrontNavbarAccountRetryProps {\n /** Consumer-owned reconciliation in flight; holds the affordance inert. */\n pending?: boolean\n /** Consumer-owned recovery action. Without it the affordance is inert. */\n onRetry?: () => void\n}\n\n/**\n * Recovery affordance for an unavailable session. The block never resolves the\n * session itself: it surfaces the state and dispatches the consumer's retry.\n * Extracted (hooks-free) so the dispatch is testable without a DOM.\n */\nexport function StorefrontNavbarAccountRetry({ pending = false, onRetry }: StorefrontNavbarAccountRetryProps) {\n return (\n <Button\n variant='ghost'\n size='icon'\n className='size-11'\n disabled={pending || !onRetry}\n aria-label='Retry account session'\n title='Account session unavailable'\n onClick={onRetry}\n >\n <RotateCcw aria-hidden='true' />\n </Button>\n )\n}\n\nexport interface StorefrontNavbarProps {\n storeCategories: StoreCategory[]\n /**\n * Optional note shown in the desktop utility strip. When omitted (or empty)\n * and there are no `utilityLinks`, the strip is not rendered at all, so a\n * block with no optional content paints no empty decorative chrome.\n */\n shippingNote?: string\n utilityLinks: UtilityLink[]\n logoText: string\n logoHref?: string\n /**\n * Optional accent for a trailing segment of `logoText` (e.g. the \"Cuba\" in\n * \"ElectroCuba\"). When omitted, or when `text` is not a trailing segment of\n * `logoText`, the wordmark renders unchanged.\n */\n logoAccent?: LogoAccent\n /** Account destination for anonymous shoppers on every viewport. */\n accountHref?: string\n /**\n * When `false`, no search control is rendered at all — neither the desktop\n * input, the mobile trigger, nor the mobile panel. Defaults to `true` so\n * legacy consumers keep the existing self-contained search. The generated\n * storefront passes `false` while no verified global search contract exists\n * (E2 task 5.4), so no global search is presented as working.\n */\n /**\n * The storefront's current route path. When it matches a destination the link\n * is marked as the current page (accessibly, beyond color alone).\n */\n currentPath?: string\n showSearch?: boolean\n searchQuery?: string\n onSearchChange?: (value: string) => void\n items?: CartItem[]\n /**\n * Quantity DELTA for a backend cart line-item id. The boundary converts the\n * delta into an absolute quantity against the authoritative current line\n * quantity before mutating the cart.\n */\n onQtyChange?: (id: string, delta: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n /** Authoritative backend subtotal for the mini-cart. */\n subtotal?: Money\n /** Shown when an authoritative subtotal is supplied but absent/malformed. */\n subtotalUnavailableLabel?: string\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n user?: StoreUser\n accountMenuItems?: AccountMenuItem[]\n onHelp?: () => void\n onSignOut?: () => void\n accountPending?: boolean\n accountUnavailable?: boolean\n onAccountRetry?: () => void\n onCheckout?: () => void\n onViewCart?: () => void\n /**\n * Controlled visibility for the cart sheet. When provided, the sheet opens\n * and closes from this value and `onCartOpenChange` instead of internal\n * state, so a host can share one cart surface across the navbar trigger and\n * successful add-to-cart. Omit both to keep the legacy uncontrolled sheet.\n */\n cartOpen?: boolean\n /** Change handler paired with `cartOpen` for a controlled sheet. */\n onCartOpenChange?: (open: boolean) => void\n /**\n * Backend-authoritative cart rendering for the sheet. When `true`, line\n * amounts use each item's canonical `lineTotal` Money and never fall back to\n * numeric `price * qty`. Omit for the legacy numeric rendering.\n */\n canonicalCart?: boolean\n /** Cart read/mutation lifecycle for the sheet. */\n cartState?: CartSheetState\n /** Message shown when `cartState` is `error`. */\n cartErrorLabel?: string\n /** Recovery action label for the error state. */\n cartRetryLabel?: string\n /** Recovery action invoked from the error state. */\n onCartRetry?: () => void\n /** When `true`, the sheet's checkout action is suppressed (checkout not installed). */\n checkoutUnavailable?: boolean\n /** When `true`, the sheet's checkout action is disabled (cart not ready). */\n checkoutDisabled?: boolean\n /** When `true`, the sheet's review action is suppressed (cart view not installed). */\n viewCartUnavailable?: boolean\n /**\n * Consumer-supplied classes merged onto the outer `<header>` as the final\n * argument, so a semantic surface such as `bg-brand-nav\n * text-brand-nav-foreground` overrides the default `bg-background`. Purely\n * presentational: no layout, structure, or behavior changes.\n */\n className?: string\n}\n\nexport function StorefrontNavbar({\n storeCategories,\n shippingNote = '',\n utilityLinks,\n logoText,\n logoHref,\n logoAccent,\n accountHref,\n currentPath,\n showSearch = true,\n searchQuery: searchQueryProp,\n onSearchChange,\n items: itemsProp,\n onQtyChange: onQtyChangeProp,\n onRemove: onRemoveProp,\n subtotal,\n subtotalUnavailableLabel,\n formatMoney,\n user,\n accountMenuItems,\n onHelp,\n onSignOut,\n accountPending = false,\n accountUnavailable = false,\n onAccountRetry,\n onCheckout,\n onViewCart,\n cartOpen,\n onCartOpenChange,\n canonicalCart,\n cartState,\n cartErrorLabel,\n cartRetryLabel,\n onCartRetry,\n checkoutUnavailable,\n checkoutDisabled,\n viewCartUnavailable,\n className,\n}: StorefrontNavbarProps) {\n /**\n * Integration seam\n * ----------------\n * Pass cart + search from your storefront, or leave uncontrolled for a\n * self-contained demo. Controlled props win when provided.\n */\n const [internalItems, setInternalItems] = useState<CartItem[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [searchOpen, setSearchOpen] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const searchTriggerRef = useRef<HTMLButtonElement>(null)\n\n const items = itemsProp ?? internalItems\n const searchQuery = searchQueryProp ?? internalSearch\n\n const setSearchQuery = (value: string) => {\n onSearchChange?.(value)\n if (searchQueryProp === undefined) {\n setInternalSearch(value)\n }\n }\n\n const changeQty =\n onQtyChangeProp ??\n ((id: string, delta: number) =>\n setInternalItems(current =>\n current.flatMap(item => {\n if (item.id !== id) {\n return item\n }\n\n const qty = item.qty + delta\n return qty <= 0 ? [] : [{ ...item, qty }]\n }),\n ))\n\n const removeItem =\n onRemoveProp ?? ((id: string) => setInternalItems(current => current.filter(item => item.id !== id)))\n\n const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items])\n\n useEffect(() => {\n if (!showSearch || !searchOpen) {\n return\n }\n\n document.getElementById('store-search-mobile')?.focus()\n }, [searchOpen, showSearch])\n\n const dismissSearch = () => {\n setSearchOpen(false)\n searchTriggerRef.current?.focus()\n }\n\n // When the consumer overrides the header surface via `className`, the nav\n // links inherit its text color and need an explicit hover foreground so\n // `hover:bg-muted` never paints white-on-light; otherwise they keep the\n // default foreground (and the default hover surface).\n const navLinkColor =\n className !== undefined ? 'text-inherit hover:text-foreground' : 'text-foreground'\n // The current page is marked beyond color: an accessible current state plus a\n // visible weight/underline, and nothing when no destination matches.\n const isCurrent = (href?: string) => href !== undefined && href === currentPath\n\n // The desktop utility strip is decorative chrome: it is painted only when it\n // has content (a non-empty note or at least one utility link), never empty.\n const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0\n\n return (\n <header\n className={cn(\n 'border-border sticky top-0 z-40 w-full border-b backdrop-blur-md',\n className ?? 'bg-background/95 supports-backdrop-filter:bg-background/80',\n )}\n >\n {hasUtilityContent ? (\n <div className='bg-foreground text-background hidden lg:block'>\n <div className='mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8'>\n <p className='text-background/80'>{shippingNote}</p>\n <ul className='flex items-center gap-5'>\n {utilityLinks.map(link => (\n <li key={`${link.href}:${link.label}`}>\n <a\n href={link.href}\n className='text-background/80 hover:text-background transition-colors duration-150'\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n ) : null}\n\n <div className='mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8'>\n <Button\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Open menu'\n aria-expanded={menuOpen}\n onClick={() => setMenuOpen(open => !open)}\n >\n <Menu />\n </Button>\n\n <MobileCategoryDrawer\n categories={uniqueById([\n ...storeCategories.map(toMenuItem),\n ...utilityLinks.map(link => ({ id: link.href, label: link.label, href: link.href })),\n ...(accountHref ? [{ id: accountHref, label: 'Account', href: accountHref }] : []),\n ])}\n collections={[]}\n open={menuOpen}\n onClose={() => setMenuOpen(false)}\n viewAllHref=''\n />\n\n <div className='flex-1 lg:flex-none'>\n <Logo text={logoText} href={logoHref} accent={logoAccent} />\n </div>\n\n <nav aria-label='Store' className='hidden flex-1 lg:block'>\n <ul className='flex items-center gap-0.5'>\n {storeCategories.map(category =>\n category.children && category.children.length > 0 ? (\n <li key={category.href} className='group relative'>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n <div className='invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100'>\n <MegaMenu\n categories={[toMenuItem(category)]}\n collections={[]}\n collectionsHref=''\n categoryColumnTitle={category.label}\n />\n </div>\n </li>\n ) : (\n <li key={category.href}>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n </li>\n ),\n )}\n </ul>\n </nav>\n\n <div className='flex items-center gap-1.5'>\n {showSearch ? (\n <>\n <div className='hidden lg:block lg:w-64'>\n <StorefrontNavbarSearchBar\n id='store-search'\n value={searchQuery}\n onValueChange={setSearchQuery}\n />\n </div>\n\n <Button\n ref={searchTriggerRef}\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Search products'\n aria-expanded={searchOpen}\n onClick={() => setSearchOpen(open => !open)}\n >\n {searchOpen ? <X /> : <Search />}\n </Button>\n </>\n ) : null}\n\n {accountUnavailable ? (\n <StorefrontNavbarAccountRetry pending={accountPending} onRetry={onAccountRetry} />\n ) : user ? (\n <StorefrontNavbarAccountMenu\n user={user}\n items={accountMenuItems}\n onHelp={onHelp}\n onSignOut={onSignOut}\n pending={accountPending}\n />\n ) : accountHref ? (\n accountPending ? (\n <Button variant='ghost' size='icon' className='size-11' disabled aria-label='Loading account session'>\n <UserRound aria-hidden='true' />\n </Button>\n ) : (\n <Button variant='ghost' size='icon' className='size-11' asChild>\n <a href={accountHref} aria-label='Account' aria-current={isCurrent(accountHref) ? 'page' : undefined}>\n <UserRound aria-hidden='true' />\n </a>\n </Button>\n )\n ) : null}\n\n <Sheet\n {...(cartOpen !== undefined ? { open: cartOpen, onOpenChange: onCartOpenChange } : {})}\n >\n <SheetTrigger asChild>\n <Button\n variant='ghost'\n size='icon'\n className='relative overflow-visible'\n aria-label={`Cart, ${count} ${count === 1 ? 'item' : 'items'}`}\n >\n <ShoppingBag className='size-5' />\n <CartBadge count={count} />\n </Button>\n </SheetTrigger>\n <SheetContent side='right' className='flex w-full max-w-sm flex-col gap-0 p-0'>\n <SheetHeader className='border-border border-b'>\n <SheetTitle className='text-left text-base'>\n Cart{count > 0 ? ` (${count})` : ''}\n </SheetTitle>\n </SheetHeader>\n <StorefrontNavbarCartSheet\n items={items}\n onQtyChange={changeQty}\n onRemove={removeItem}\n subtotal={subtotal}\n subtotalUnavailableLabel={subtotalUnavailableLabel}\n formatMoney={formatMoney}\n onCheckout={onCheckout}\n onViewCart={onViewCart}\n canonical={canonicalCart}\n state={cartState}\n errorLabel={cartErrorLabel}\n retryLabel={cartRetryLabel}\n onRetry={onCartRetry}\n checkoutUnavailable={checkoutUnavailable}\n checkoutDisabled={checkoutDisabled}\n viewCartUnavailable={viewCartUnavailable}\n />\n </SheetContent>\n </Sheet>\n </div>\n </div>\n\n <p aria-live='polite' className='sr-only'>\n {`Cart contains ${count} ${count === 1 ? 'item' : 'items'}`}\n </p>\n\n {showSearch && searchOpen ? (\n <div className='border-border flex flex-col gap-0 border-t p-4 lg:hidden'>\n <StorefrontNavbarSearchBar\n id='store-search-mobile'\n value={searchQuery}\n onValueChange={setSearchQuery}\n onDismiss={dismissSearch}\n />\n </div>\n ) : null}\n </header>\n )\n}\n\nexport default StorefrontNavbar\n"],"mappings":"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","names":["import_react"]}
@@ -0,0 +1,399 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useRef, useState } from "react";
4
+ import { AnimatePresence, motion, useReducedMotion } from "motion/react";
5
+ import { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from "lucide-react";
6
+ import { Button } from "../../../ui/button.mjs";
7
+ import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "../../../ui/sheet.mjs";
8
+ import { cn } from "../../../lib/utils.mjs";
9
+ import { StorefrontNavbarAccountMenu } from "./storefront-navbar-account-menu.mjs";
10
+ import { StorefrontNavbarCartSheet } from "./storefront-navbar-cart-sheet.mjs";
11
+ import { StorefrontNavbarSearchBar } from "./storefront-navbar-search-bar.mjs";
12
+ import { MegaMenu } from "./mega-menu.mjs";
13
+ import { MobileCategoryDrawer } from "./mobile-category-drawer.mjs";
14
+ function toMenuItem(category) {
15
+ return {
16
+ id: category.href,
17
+ label: category.label,
18
+ href: category.href,
19
+ children: category.children?.map(toMenuItem)
20
+ };
21
+ }
22
+ function uniqueById(items) {
23
+ const seen = /* @__PURE__ */ new Set();
24
+ return items.filter((item) => {
25
+ if (seen.has(item.id)) return false;
26
+ seen.add(item.id);
27
+ return true;
28
+ });
29
+ }
30
+ function Logo({ text, href, accent }) {
31
+ const className = "focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none";
32
+ const accentText = accent?.text ?? "";
33
+ const hasAccent = accentText.length > 0 && text.endsWith(accentText);
34
+ const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text;
35
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
36
+ /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 32 32", "aria-hidden": "true", className: "text-primary size-7", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
37
+ /* @__PURE__ */ jsx(
38
+ "path",
39
+ {
40
+ d: "M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z",
41
+ fill: "currentColor"
42
+ }
43
+ ),
44
+ /* @__PURE__ */ jsx(
45
+ "path",
46
+ {
47
+ d: "M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z",
48
+ fill: "currentColor"
49
+ }
50
+ ),
51
+ /* @__PURE__ */ jsx(
52
+ "path",
53
+ {
54
+ d: "M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z",
55
+ fill: "currentColor"
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsx(
59
+ "path",
60
+ {
61
+ d: "M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z",
62
+ fill: "currentColor"
63
+ }
64
+ ),
65
+ /* @__PURE__ */ jsx(
66
+ "path",
67
+ {
68
+ d: "M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z",
69
+ fill: "currentColor"
70
+ }
71
+ ),
72
+ /* @__PURE__ */ jsx("path", { d: "M21.1694 10.5806L14.5651 17.1849", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }),
73
+ /* @__PURE__ */ jsx("path", { d: "M22.1694 14.5806L18.5632 18.1868", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }),
74
+ /* @__PURE__ */ jsx("circle", { cx: "13.1", cy: "26.1", r: "1.7", stroke: "currentColor", strokeWidth: "1.2" }),
75
+ /* @__PURE__ */ jsx("circle", { cx: "22.1", cy: "26.1", r: "1.7", stroke: "currentColor", strokeWidth: "1.2" })
76
+ ] }),
77
+ /* @__PURE__ */ jsxs("span", { className: "text-base font-semibold tracking-tight", children: [
78
+ baseText,
79
+ hasAccent ? /* @__PURE__ */ jsx("span", { className: accent?.className, children: accentText }) : null
80
+ ] })
81
+ ] });
82
+ if (!href) {
83
+ return /* @__PURE__ */ jsx("span", { className, children: content });
84
+ }
85
+ return /* @__PURE__ */ jsx("a", { href, className, children: content });
86
+ }
87
+ function CartBadge({ count }) {
88
+ const reduceMotion = useReducedMotion();
89
+ return /* @__PURE__ */ jsx(AnimatePresence, { children: count > 0 ? /* @__PURE__ */ jsx(
90
+ motion.span,
91
+ {
92
+ className: "bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background",
93
+ initial: reduceMotion ? false : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: "blur(2px)" },
94
+ animate: { scale: 1, x: 0, y: 0, opacity: 1, filter: "blur(0px)" },
95
+ exit: reduceMotion ? { opacity: 0 } : {
96
+ scale: 0,
97
+ opacity: 0,
98
+ filter: "blur(2px)",
99
+ transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] }
100
+ },
101
+ transition: reduceMotion ? { duration: 0 } : { type: "spring", stiffness: 520, damping: 18, mass: 0.6 },
102
+ style: { willChange: "transform, opacity, filter" },
103
+ children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", initial: false, children: /* @__PURE__ */ jsx(
104
+ motion.span,
105
+ {
106
+ className: "block",
107
+ initial: reduceMotion ? false : { y: 8, opacity: 0, filter: "blur(2px)" },
108
+ animate: { y: 0, opacity: 1, filter: "blur(0px)" },
109
+ exit: reduceMotion ? void 0 : { y: -8, opacity: 0, filter: "blur(2px)" },
110
+ transition: { duration: 0.22, ease: [0.22, 1, 0.36, 1] },
111
+ children: count > 99 ? "99+" : count
112
+ },
113
+ count
114
+ ) })
115
+ },
116
+ "badge-shell"
117
+ ) : null });
118
+ }
119
+ function StorefrontNavbarAccountRetry({ pending = false, onRetry }) {
120
+ return /* @__PURE__ */ jsx(
121
+ Button,
122
+ {
123
+ variant: "ghost",
124
+ size: "icon",
125
+ className: "size-11",
126
+ disabled: pending || !onRetry,
127
+ "aria-label": "Retry account session",
128
+ title: "Account session unavailable",
129
+ onClick: onRetry,
130
+ children: /* @__PURE__ */ jsx(RotateCcw, { "aria-hidden": "true" })
131
+ }
132
+ );
133
+ }
134
+ function StorefrontNavbar({
135
+ storeCategories,
136
+ shippingNote = "",
137
+ utilityLinks,
138
+ logoText,
139
+ logoHref,
140
+ logoAccent,
141
+ accountHref,
142
+ currentPath,
143
+ showSearch = true,
144
+ searchQuery: searchQueryProp,
145
+ onSearchChange,
146
+ items: itemsProp,
147
+ onQtyChange: onQtyChangeProp,
148
+ onRemove: onRemoveProp,
149
+ subtotal,
150
+ subtotalUnavailableLabel,
151
+ formatMoney,
152
+ user,
153
+ accountMenuItems,
154
+ onHelp,
155
+ onSignOut,
156
+ accountPending = false,
157
+ accountUnavailable = false,
158
+ onAccountRetry,
159
+ onCheckout,
160
+ onViewCart,
161
+ cartOpen,
162
+ onCartOpenChange,
163
+ canonicalCart,
164
+ cartState,
165
+ cartErrorLabel,
166
+ cartRetryLabel,
167
+ onCartRetry,
168
+ checkoutUnavailable,
169
+ checkoutDisabled,
170
+ viewCartUnavailable,
171
+ className
172
+ }) {
173
+ const [internalItems, setInternalItems] = useState([]);
174
+ const [internalSearch, setInternalSearch] = useState("");
175
+ const [searchOpen, setSearchOpen] = useState(false);
176
+ const [menuOpen, setMenuOpen] = useState(false);
177
+ const searchTriggerRef = useRef(null);
178
+ const items = itemsProp ?? internalItems;
179
+ const searchQuery = searchQueryProp ?? internalSearch;
180
+ const setSearchQuery = (value) => {
181
+ onSearchChange?.(value);
182
+ if (searchQueryProp === void 0) {
183
+ setInternalSearch(value);
184
+ }
185
+ };
186
+ const changeQty = onQtyChangeProp ?? ((id, delta) => setInternalItems(
187
+ (current) => current.flatMap((item) => {
188
+ if (item.id !== id) {
189
+ return item;
190
+ }
191
+ const qty = item.qty + delta;
192
+ return qty <= 0 ? [] : [{ ...item, qty }];
193
+ })
194
+ ));
195
+ const removeItem = onRemoveProp ?? ((id) => setInternalItems((current) => current.filter((item) => item.id !== id)));
196
+ const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items]);
197
+ useEffect(() => {
198
+ if (!showSearch || !searchOpen) {
199
+ return;
200
+ }
201
+ document.getElementById("store-search-mobile")?.focus();
202
+ }, [searchOpen, showSearch]);
203
+ const dismissSearch = () => {
204
+ setSearchOpen(false);
205
+ searchTriggerRef.current?.focus();
206
+ };
207
+ const navLinkColor = className !== void 0 ? "text-inherit hover:text-foreground" : "text-foreground";
208
+ const isCurrent = (href) => href !== void 0 && href === currentPath;
209
+ const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0;
210
+ return /* @__PURE__ */ jsxs(
211
+ "header",
212
+ {
213
+ className: cn(
214
+ "border-border sticky top-0 z-40 w-full border-b backdrop-blur-md",
215
+ className ?? "bg-background/95 supports-backdrop-filter:bg-background/80"
216
+ ),
217
+ children: [
218
+ hasUtilityContent ? /* @__PURE__ */ jsx("div", { className: "bg-foreground text-background hidden lg:block", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8", children: [
219
+ /* @__PURE__ */ jsx("p", { className: "text-background/80", children: shippingNote }),
220
+ /* @__PURE__ */ jsx("ul", { className: "flex items-center gap-5", children: utilityLinks.map((link) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
221
+ "a",
222
+ {
223
+ href: link.href,
224
+ className: "text-background/80 hover:text-background transition-colors duration-150",
225
+ children: link.label
226
+ }
227
+ ) }, `${link.href}:${link.label}`)) })
228
+ ] }) }) : null,
229
+ /* @__PURE__ */ jsxs("div", { className: "mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8", children: [
230
+ /* @__PURE__ */ jsx(
231
+ Button,
232
+ {
233
+ variant: "ghost",
234
+ size: "icon",
235
+ className: "lg:hidden",
236
+ "aria-label": "Open menu",
237
+ "aria-expanded": menuOpen,
238
+ onClick: () => setMenuOpen((open) => !open),
239
+ children: /* @__PURE__ */ jsx(Menu, {})
240
+ }
241
+ ),
242
+ /* @__PURE__ */ jsx(
243
+ MobileCategoryDrawer,
244
+ {
245
+ categories: uniqueById([
246
+ ...storeCategories.map(toMenuItem),
247
+ ...utilityLinks.map((link) => ({ id: link.href, label: link.label, href: link.href })),
248
+ ...accountHref ? [{ id: accountHref, label: "Account", href: accountHref }] : []
249
+ ]),
250
+ collections: [],
251
+ open: menuOpen,
252
+ onClose: () => setMenuOpen(false),
253
+ viewAllHref: ""
254
+ }
255
+ ),
256
+ /* @__PURE__ */ jsx("div", { className: "flex-1 lg:flex-none", children: /* @__PURE__ */ jsx(Logo, { text: logoText, href: logoHref, accent: logoAccent }) }),
257
+ /* @__PURE__ */ jsx("nav", { "aria-label": "Store", className: "hidden flex-1 lg:block", children: /* @__PURE__ */ jsx("ul", { className: "flex items-center gap-0.5", children: storeCategories.map(
258
+ (category) => category.children && category.children.length > 0 ? /* @__PURE__ */ jsxs("li", { className: "group relative", children: [
259
+ /* @__PURE__ */ jsx(
260
+ "a",
261
+ {
262
+ href: category.href,
263
+ "aria-current": isCurrent(category.href) ? "page" : void 0,
264
+ className: cn(
265
+ "hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none",
266
+ category.emphasis ? "text-destructive" : navLinkColor,
267
+ isCurrent(category.href) && "font-semibold underline underline-offset-4"
268
+ ),
269
+ children: category.label
270
+ }
271
+ ),
272
+ /* @__PURE__ */ jsx("div", { className: "invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100", children: /* @__PURE__ */ jsx(
273
+ MegaMenu,
274
+ {
275
+ categories: [toMenuItem(category)],
276
+ collections: [],
277
+ collectionsHref: "",
278
+ categoryColumnTitle: category.label
279
+ }
280
+ ) })
281
+ ] }, category.href) : /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
282
+ "a",
283
+ {
284
+ href: category.href,
285
+ "aria-current": isCurrent(category.href) ? "page" : void 0,
286
+ className: cn(
287
+ "hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none",
288
+ category.emphasis ? "text-destructive" : navLinkColor,
289
+ isCurrent(category.href) && "font-semibold underline underline-offset-4"
290
+ ),
291
+ children: category.label
292
+ }
293
+ ) }, category.href)
294
+ ) }) }),
295
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
296
+ showSearch ? /* @__PURE__ */ jsxs(Fragment, { children: [
297
+ /* @__PURE__ */ jsx("div", { className: "hidden lg:block lg:w-64", children: /* @__PURE__ */ jsx(
298
+ StorefrontNavbarSearchBar,
299
+ {
300
+ id: "store-search",
301
+ value: searchQuery,
302
+ onValueChange: setSearchQuery
303
+ }
304
+ ) }),
305
+ /* @__PURE__ */ jsx(
306
+ Button,
307
+ {
308
+ ref: searchTriggerRef,
309
+ variant: "ghost",
310
+ size: "icon",
311
+ className: "lg:hidden",
312
+ "aria-label": "Search products",
313
+ "aria-expanded": searchOpen,
314
+ onClick: () => setSearchOpen((open) => !open),
315
+ children: searchOpen ? /* @__PURE__ */ jsx(X, {}) : /* @__PURE__ */ jsx(Search, {})
316
+ }
317
+ )
318
+ ] }) : null,
319
+ accountUnavailable ? /* @__PURE__ */ jsx(StorefrontNavbarAccountRetry, { pending: accountPending, onRetry: onAccountRetry }) : user ? /* @__PURE__ */ jsx(
320
+ StorefrontNavbarAccountMenu,
321
+ {
322
+ user,
323
+ items: accountMenuItems,
324
+ onHelp,
325
+ onSignOut,
326
+ pending: accountPending
327
+ }
328
+ ) : accountHref ? accountPending ? /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", className: "size-11", disabled: true, "aria-label": "Loading account session", children: /* @__PURE__ */ jsx(UserRound, { "aria-hidden": "true" }) }) : /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", className: "size-11", asChild: true, children: /* @__PURE__ */ jsx("a", { href: accountHref, "aria-label": "Account", "aria-current": isCurrent(accountHref) ? "page" : void 0, children: /* @__PURE__ */ jsx(UserRound, { "aria-hidden": "true" }) }) }) : null,
329
+ /* @__PURE__ */ jsxs(
330
+ Sheet,
331
+ {
332
+ ...cartOpen !== void 0 ? { open: cartOpen, onOpenChange: onCartOpenChange } : {},
333
+ children: [
334
+ /* @__PURE__ */ jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
335
+ Button,
336
+ {
337
+ variant: "ghost",
338
+ size: "icon",
339
+ className: "relative overflow-visible",
340
+ "aria-label": `Cart, ${count} ${count === 1 ? "item" : "items"}`,
341
+ children: [
342
+ /* @__PURE__ */ jsx(ShoppingBag, { className: "size-5" }),
343
+ /* @__PURE__ */ jsx(CartBadge, { count })
344
+ ]
345
+ }
346
+ ) }),
347
+ /* @__PURE__ */ jsxs(SheetContent, { side: "right", className: "flex w-full max-w-sm flex-col gap-0 p-0", children: [
348
+ /* @__PURE__ */ jsx(SheetHeader, { className: "border-border border-b", children: /* @__PURE__ */ jsxs(SheetTitle, { className: "text-left text-base", children: [
349
+ "Cart",
350
+ count > 0 ? ` (${count})` : ""
351
+ ] }) }),
352
+ /* @__PURE__ */ jsx(
353
+ StorefrontNavbarCartSheet,
354
+ {
355
+ items,
356
+ onQtyChange: changeQty,
357
+ onRemove: removeItem,
358
+ subtotal,
359
+ subtotalUnavailableLabel,
360
+ formatMoney,
361
+ onCheckout,
362
+ onViewCart,
363
+ canonical: canonicalCart,
364
+ state: cartState,
365
+ errorLabel: cartErrorLabel,
366
+ retryLabel: cartRetryLabel,
367
+ onRetry: onCartRetry,
368
+ checkoutUnavailable,
369
+ checkoutDisabled,
370
+ viewCartUnavailable
371
+ }
372
+ )
373
+ ] })
374
+ ]
375
+ }
376
+ )
377
+ ] })
378
+ ] }),
379
+ /* @__PURE__ */ jsx("p", { "aria-live": "polite", className: "sr-only", children: `Cart contains ${count} ${count === 1 ? "item" : "items"}` }),
380
+ showSearch && searchOpen ? /* @__PURE__ */ jsx("div", { className: "border-border flex flex-col gap-0 border-t p-4 lg:hidden", children: /* @__PURE__ */ jsx(
381
+ StorefrontNavbarSearchBar,
382
+ {
383
+ id: "store-search-mobile",
384
+ value: searchQuery,
385
+ onValueChange: setSearchQuery,
386
+ onDismiss: dismissSearch
387
+ }
388
+ ) }) : null
389
+ ]
390
+ }
391
+ );
392
+ }
393
+ var storefront_navbar_default = StorefrontNavbar;
394
+ export {
395
+ StorefrontNavbar,
396
+ StorefrontNavbarAccountRetry,
397
+ storefront_navbar_default as default
398
+ };
399
+ //# sourceMappingURL=storefront-navbar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/navigation/storefront-navbar.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from 'lucide-react'\n\nimport { Button } from '../../../ui/button'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../../../ui/sheet'\nimport { cn } from '../../../lib/utils'\n\nimport { StorefrontNavbarAccountMenu, type AccountMenuItem, type StoreUser } from './storefront-navbar-account-menu'\nimport { StorefrontNavbarCartSheet, type CartItem, type CartSheetState } from './storefront-navbar-cart-sheet'\nimport type { UtilityLink } from './storefront-navbar-mobile-nav'\nimport { StorefrontNavbarSearchBar } from './storefront-navbar-search-bar'\nimport { MegaMenu } from './mega-menu'\nimport { MobileCategoryDrawer } from './mobile-category-drawer'\nimport type { MenuItem } from '../../../lib/types/menu'\nimport type { Money } from '@thorprovider/types'\nimport type { StoreCategory } from '../../../lib/contracts'\n\nfunction toMenuItem(category: StoreCategory): MenuItem {\n return {\n id: category.href,\n label: category.label,\n href: category.href,\n children: category.children?.map(toMenuItem),\n }\n}\n\n/**\n * Drawer entries come from three sources (categories, utility links, account\n * link). Hosts may reuse the same href across sources (e.g. a placeholder\n * href), which would produce duplicate React keys if passed through as-is.\n * Dedupe by href so every rendered item gets a unique id.\n */\nfunction uniqueById<T extends { id: string }>(items: T[]): T[] {\n const seen = new Set<string>()\n return items.filter((item) => {\n if (seen.has(item.id)) return false\n seen.add(item.id)\n return true\n })\n}\n\nexport interface LogoAccent {\n /** Trailing segment of `logoText` to render with the accent styling. */\n text: string\n /** Consumer-supplied classes for the accent span (e.g. a brand color token). */\n className?: string\n}\n\nfunction Logo({ text, href, accent }: { text: string; href?: string; accent?: LogoAccent }) {\n const className =\n 'focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none'\n\n const accentText = accent?.text ?? ''\n const hasAccent = accentText.length > 0 && text.endsWith(accentText)\n const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text\n\n const content = (\n <>\n <svg viewBox='0 0 32 32' aria-hidden='true' className='text-primary size-7' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z'\n fill='currentColor'\n />\n <path\n d='M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z'\n fill='currentColor'\n />\n <path\n d='M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z'\n fill='currentColor'\n />\n <path\n d='M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z'\n fill='currentColor'\n />\n <path\n d='M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z'\n fill='currentColor'\n />\n <path d='M21.1694 10.5806L14.5651 17.1849' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <path d='M22.1694 14.5806L18.5632 18.1868' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <circle cx='13.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n <circle cx='22.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n </svg>\n <span className='text-base font-semibold tracking-tight'>\n {baseText}\n {hasAccent ? <span className={accent?.className}>{accentText}</span> : null}\n </span>\n </>\n )\n\n if (!href) {\n return <span className={className}>{content}</span>\n }\n\n return (\n <a href={href} className={className}>\n {content}\n </a>\n )\n}\n\ntype CartBadgeProps = {\n count: number\n}\n\n/**\n * Transitions.dev `notification-badge`: diagonal slide + spring pop when the\n * count appears or changes. Positioned outside the bag so it never covers the icon.\n */\nfunction CartBadge({ count }: CartBadgeProps) {\n const reduceMotion = useReducedMotion()\n\n return (\n <AnimatePresence>\n {count > 0 ? (\n <motion.span\n key='badge-shell'\n className='bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background'\n initial={\n reduceMotion\n ? false\n : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: 'blur(2px)' }\n }\n animate={{ scale: 1, x: 0, y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={\n reduceMotion\n ? { opacity: 0 }\n : {\n scale: 0,\n opacity: 0,\n filter: 'blur(2px)',\n transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] },\n }\n }\n transition={\n reduceMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 520, damping: 18, mass: 0.6 }\n }\n style={{ willChange: 'transform, opacity, filter' }}\n >\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.span\n key={count}\n className='block'\n initial={reduceMotion ? false : { y: 8, opacity: 0, filter: 'blur(2px)' }}\n animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={reduceMotion ? undefined : { y: -8, opacity: 0, filter: 'blur(2px)' }}\n transition={{ duration: 0.22, ease: [0.22, 1, 0.36, 1] }}\n >\n {count > 99 ? '99+' : count}\n </motion.span>\n </AnimatePresence>\n </motion.span>\n ) : null}\n </AnimatePresence>\n )\n}\n\nexport interface StorefrontNavbarAccountRetryProps {\n /** Consumer-owned reconciliation in flight; holds the affordance inert. */\n pending?: boolean\n /** Consumer-owned recovery action. Without it the affordance is inert. */\n onRetry?: () => void\n}\n\n/**\n * Recovery affordance for an unavailable session. The block never resolves the\n * session itself: it surfaces the state and dispatches the consumer's retry.\n * Extracted (hooks-free) so the dispatch is testable without a DOM.\n */\nexport function StorefrontNavbarAccountRetry({ pending = false, onRetry }: StorefrontNavbarAccountRetryProps) {\n return (\n <Button\n variant='ghost'\n size='icon'\n className='size-11'\n disabled={pending || !onRetry}\n aria-label='Retry account session'\n title='Account session unavailable'\n onClick={onRetry}\n >\n <RotateCcw aria-hidden='true' />\n </Button>\n )\n}\n\nexport interface StorefrontNavbarProps {\n storeCategories: StoreCategory[]\n /**\n * Optional note shown in the desktop utility strip. When omitted (or empty)\n * and there are no `utilityLinks`, the strip is not rendered at all, so a\n * block with no optional content paints no empty decorative chrome.\n */\n shippingNote?: string\n utilityLinks: UtilityLink[]\n logoText: string\n logoHref?: string\n /**\n * Optional accent for a trailing segment of `logoText` (e.g. the \"Cuba\" in\n * \"ElectroCuba\"). When omitted, or when `text` is not a trailing segment of\n * `logoText`, the wordmark renders unchanged.\n */\n logoAccent?: LogoAccent\n /** Account destination for anonymous shoppers on every viewport. */\n accountHref?: string\n /**\n * When `false`, no search control is rendered at all — neither the desktop\n * input, the mobile trigger, nor the mobile panel. Defaults to `true` so\n * legacy consumers keep the existing self-contained search. The generated\n * storefront passes `false` while no verified global search contract exists\n * (E2 task 5.4), so no global search is presented as working.\n */\n /**\n * The storefront's current route path. When it matches a destination the link\n * is marked as the current page (accessibly, beyond color alone).\n */\n currentPath?: string\n showSearch?: boolean\n searchQuery?: string\n onSearchChange?: (value: string) => void\n items?: CartItem[]\n /**\n * Quantity DELTA for a backend cart line-item id. The boundary converts the\n * delta into an absolute quantity against the authoritative current line\n * quantity before mutating the cart.\n */\n onQtyChange?: (id: string, delta: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n /** Authoritative backend subtotal for the mini-cart. */\n subtotal?: Money\n /** Shown when an authoritative subtotal is supplied but absent/malformed. */\n subtotalUnavailableLabel?: string\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n user?: StoreUser\n accountMenuItems?: AccountMenuItem[]\n onHelp?: () => void\n onSignOut?: () => void\n accountPending?: boolean\n accountUnavailable?: boolean\n onAccountRetry?: () => void\n onCheckout?: () => void\n onViewCart?: () => void\n /**\n * Controlled visibility for the cart sheet. When provided, the sheet opens\n * and closes from this value and `onCartOpenChange` instead of internal\n * state, so a host can share one cart surface across the navbar trigger and\n * successful add-to-cart. Omit both to keep the legacy uncontrolled sheet.\n */\n cartOpen?: boolean\n /** Change handler paired with `cartOpen` for a controlled sheet. */\n onCartOpenChange?: (open: boolean) => void\n /**\n * Backend-authoritative cart rendering for the sheet. When `true`, line\n * amounts use each item's canonical `lineTotal` Money and never fall back to\n * numeric `price * qty`. Omit for the legacy numeric rendering.\n */\n canonicalCart?: boolean\n /** Cart read/mutation lifecycle for the sheet. */\n cartState?: CartSheetState\n /** Message shown when `cartState` is `error`. */\n cartErrorLabel?: string\n /** Recovery action label for the error state. */\n cartRetryLabel?: string\n /** Recovery action invoked from the error state. */\n onCartRetry?: () => void\n /** When `true`, the sheet's checkout action is suppressed (checkout not installed). */\n checkoutUnavailable?: boolean\n /** When `true`, the sheet's checkout action is disabled (cart not ready). */\n checkoutDisabled?: boolean\n /** When `true`, the sheet's review action is suppressed (cart view not installed). */\n viewCartUnavailable?: boolean\n /**\n * Consumer-supplied classes merged onto the outer `<header>` as the final\n * argument, so a semantic surface such as `bg-brand-nav\n * text-brand-nav-foreground` overrides the default `bg-background`. Purely\n * presentational: no layout, structure, or behavior changes.\n */\n className?: string\n}\n\nexport function StorefrontNavbar({\n storeCategories,\n shippingNote = '',\n utilityLinks,\n logoText,\n logoHref,\n logoAccent,\n accountHref,\n currentPath,\n showSearch = true,\n searchQuery: searchQueryProp,\n onSearchChange,\n items: itemsProp,\n onQtyChange: onQtyChangeProp,\n onRemove: onRemoveProp,\n subtotal,\n subtotalUnavailableLabel,\n formatMoney,\n user,\n accountMenuItems,\n onHelp,\n onSignOut,\n accountPending = false,\n accountUnavailable = false,\n onAccountRetry,\n onCheckout,\n onViewCart,\n cartOpen,\n onCartOpenChange,\n canonicalCart,\n cartState,\n cartErrorLabel,\n cartRetryLabel,\n onCartRetry,\n checkoutUnavailable,\n checkoutDisabled,\n viewCartUnavailable,\n className,\n}: StorefrontNavbarProps) {\n /**\n * Integration seam\n * ----------------\n * Pass cart + search from your storefront, or leave uncontrolled for a\n * self-contained demo. Controlled props win when provided.\n */\n const [internalItems, setInternalItems] = useState<CartItem[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [searchOpen, setSearchOpen] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const searchTriggerRef = useRef<HTMLButtonElement>(null)\n\n const items = itemsProp ?? internalItems\n const searchQuery = searchQueryProp ?? internalSearch\n\n const setSearchQuery = (value: string) => {\n onSearchChange?.(value)\n if (searchQueryProp === undefined) {\n setInternalSearch(value)\n }\n }\n\n const changeQty =\n onQtyChangeProp ??\n ((id: string, delta: number) =>\n setInternalItems(current =>\n current.flatMap(item => {\n if (item.id !== id) {\n return item\n }\n\n const qty = item.qty + delta\n return qty <= 0 ? [] : [{ ...item, qty }]\n }),\n ))\n\n const removeItem =\n onRemoveProp ?? ((id: string) => setInternalItems(current => current.filter(item => item.id !== id)))\n\n const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items])\n\n useEffect(() => {\n if (!showSearch || !searchOpen) {\n return\n }\n\n document.getElementById('store-search-mobile')?.focus()\n }, [searchOpen, showSearch])\n\n const dismissSearch = () => {\n setSearchOpen(false)\n searchTriggerRef.current?.focus()\n }\n\n // When the consumer overrides the header surface via `className`, the nav\n // links inherit its text color and need an explicit hover foreground so\n // `hover:bg-muted` never paints white-on-light; otherwise they keep the\n // default foreground (and the default hover surface).\n const navLinkColor =\n className !== undefined ? 'text-inherit hover:text-foreground' : 'text-foreground'\n // The current page is marked beyond color: an accessible current state plus a\n // visible weight/underline, and nothing when no destination matches.\n const isCurrent = (href?: string) => href !== undefined && href === currentPath\n\n // The desktop utility strip is decorative chrome: it is painted only when it\n // has content (a non-empty note or at least one utility link), never empty.\n const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0\n\n return (\n <header\n className={cn(\n 'border-border sticky top-0 z-40 w-full border-b backdrop-blur-md',\n className ?? 'bg-background/95 supports-backdrop-filter:bg-background/80',\n )}\n >\n {hasUtilityContent ? (\n <div className='bg-foreground text-background hidden lg:block'>\n <div className='mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8'>\n <p className='text-background/80'>{shippingNote}</p>\n <ul className='flex items-center gap-5'>\n {utilityLinks.map(link => (\n <li key={`${link.href}:${link.label}`}>\n <a\n href={link.href}\n className='text-background/80 hover:text-background transition-colors duration-150'\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n ) : null}\n\n <div className='mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8'>\n <Button\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Open menu'\n aria-expanded={menuOpen}\n onClick={() => setMenuOpen(open => !open)}\n >\n <Menu />\n </Button>\n\n <MobileCategoryDrawer\n categories={uniqueById([\n ...storeCategories.map(toMenuItem),\n ...utilityLinks.map(link => ({ id: link.href, label: link.label, href: link.href })),\n ...(accountHref ? [{ id: accountHref, label: 'Account', href: accountHref }] : []),\n ])}\n collections={[]}\n open={menuOpen}\n onClose={() => setMenuOpen(false)}\n viewAllHref=''\n />\n\n <div className='flex-1 lg:flex-none'>\n <Logo text={logoText} href={logoHref} accent={logoAccent} />\n </div>\n\n <nav aria-label='Store' className='hidden flex-1 lg:block'>\n <ul className='flex items-center gap-0.5'>\n {storeCategories.map(category =>\n category.children && category.children.length > 0 ? (\n <li key={category.href} className='group relative'>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n <div className='invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100'>\n <MegaMenu\n categories={[toMenuItem(category)]}\n collections={[]}\n collectionsHref=''\n categoryColumnTitle={category.label}\n />\n </div>\n </li>\n ) : (\n <li key={category.href}>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n </li>\n ),\n )}\n </ul>\n </nav>\n\n <div className='flex items-center gap-1.5'>\n {showSearch ? (\n <>\n <div className='hidden lg:block lg:w-64'>\n <StorefrontNavbarSearchBar\n id='store-search'\n value={searchQuery}\n onValueChange={setSearchQuery}\n />\n </div>\n\n <Button\n ref={searchTriggerRef}\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Search products'\n aria-expanded={searchOpen}\n onClick={() => setSearchOpen(open => !open)}\n >\n {searchOpen ? <X /> : <Search />}\n </Button>\n </>\n ) : null}\n\n {accountUnavailable ? (\n <StorefrontNavbarAccountRetry pending={accountPending} onRetry={onAccountRetry} />\n ) : user ? (\n <StorefrontNavbarAccountMenu\n user={user}\n items={accountMenuItems}\n onHelp={onHelp}\n onSignOut={onSignOut}\n pending={accountPending}\n />\n ) : accountHref ? (\n accountPending ? (\n <Button variant='ghost' size='icon' className='size-11' disabled aria-label='Loading account session'>\n <UserRound aria-hidden='true' />\n </Button>\n ) : (\n <Button variant='ghost' size='icon' className='size-11' asChild>\n <a href={accountHref} aria-label='Account' aria-current={isCurrent(accountHref) ? 'page' : undefined}>\n <UserRound aria-hidden='true' />\n </a>\n </Button>\n )\n ) : null}\n\n <Sheet\n {...(cartOpen !== undefined ? { open: cartOpen, onOpenChange: onCartOpenChange } : {})}\n >\n <SheetTrigger asChild>\n <Button\n variant='ghost'\n size='icon'\n className='relative overflow-visible'\n aria-label={`Cart, ${count} ${count === 1 ? 'item' : 'items'}`}\n >\n <ShoppingBag className='size-5' />\n <CartBadge count={count} />\n </Button>\n </SheetTrigger>\n <SheetContent side='right' className='flex w-full max-w-sm flex-col gap-0 p-0'>\n <SheetHeader className='border-border border-b'>\n <SheetTitle className='text-left text-base'>\n Cart{count > 0 ? ` (${count})` : ''}\n </SheetTitle>\n </SheetHeader>\n <StorefrontNavbarCartSheet\n items={items}\n onQtyChange={changeQty}\n onRemove={removeItem}\n subtotal={subtotal}\n subtotalUnavailableLabel={subtotalUnavailableLabel}\n formatMoney={formatMoney}\n onCheckout={onCheckout}\n onViewCart={onViewCart}\n canonical={canonicalCart}\n state={cartState}\n errorLabel={cartErrorLabel}\n retryLabel={cartRetryLabel}\n onRetry={onCartRetry}\n checkoutUnavailable={checkoutUnavailable}\n checkoutDisabled={checkoutDisabled}\n viewCartUnavailable={viewCartUnavailable}\n />\n </SheetContent>\n </Sheet>\n </div>\n </div>\n\n <p aria-live='polite' className='sr-only'>\n {`Cart contains ${count} ${count === 1 ? 'item' : 'items'}`}\n </p>\n\n {showSearch && searchOpen ? (\n <div className='border-border flex flex-col gap-0 border-t p-4 lg:hidden'>\n <StorefrontNavbarSearchBar\n id='store-search-mobile'\n value={searchQuery}\n onValueChange={setSearchQuery}\n onDismiss={dismissSearch}\n />\n </div>\n ) : null}\n </header>\n )\n}\n\nexport default StorefrontNavbar\n"],"mappings":"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","names":[]}
@@ -0,0 +1,74 @@
1
+ import type { Money } from '@thorprovider/types';
2
+ import { type OrderLineData } from './order-line';
3
+ export type OrderHistoryPresentation = 'cards' | 'rows';
4
+ /** Semantic badge tone. The host owns the mapping from its status model. */
5
+ export type OrderHistoryStatusTone = 'default' | 'secondary' | 'destructive' | 'outline';
6
+ /** Order status as data: the label is rendered and the tone styles it. */
7
+ export interface OrderHistoryStatus {
8
+ label: string;
9
+ tone?: OrderHistoryStatusTone;
10
+ }
11
+ /**
12
+ * Canonical order-history row: one order of the collection.
13
+ *
14
+ * `id` is the backend order identity — the React key and the value reported to
15
+ * `onViewOrder`/`onTrackOrder`. `total` is the backend order total and is
16
+ * rendered verbatim: the collection never sums its lines.
17
+ */
18
+ export interface OrderHistoryOrder {
19
+ /** Backend order identity. Used as the React key; never rendered. */
20
+ id: string;
21
+ /** Human-readable order number, rendered through `orderLabel`. */
22
+ number: string;
23
+ /** Placement date, already formatted by the host. */
24
+ date: string;
25
+ status: OrderHistoryStatus;
26
+ /** Backend order total. Rendered verbatim; a malformed amount is unavailable. */
27
+ total: Money;
28
+ items: OrderLineData[];
29
+ /** When true (and `onTrackOrder` is supplied) the tracking action renders. */
30
+ trackable?: boolean;
31
+ }
32
+ /** Every user-facing string the collection renders. All are overridable. */
33
+ export interface OrderHistoryLabels {
34
+ title: string;
35
+ description: string;
36
+ orderLabel: string;
37
+ placedOnLabel: string;
38
+ quantityLabel: string;
39
+ totalLabel: string;
40
+ viewOrderLabel: string;
41
+ trackOrderLabel: string;
42
+ amountUnavailableLabel: string;
43
+ emptyLabel: string;
44
+ }
45
+ export interface OrderHistoryProps {
46
+ orders: OrderHistoryOrder[];
47
+ /**
48
+ * Bounded structure switch. `cards` (default) renders one card per order;
49
+ * `rows` renders one bordered row per order. Both accept the same data and
50
+ * report the same actions. Responsiveness is CSS only.
51
+ */
52
+ presentation?: OrderHistoryPresentation;
53
+ labels?: Partial<OrderHistoryLabels>;
54
+ /** Locale used to format amounts from their own currency code. */
55
+ locale?: string;
56
+ /** Host amount formatter; wins over `locale`. */
57
+ formatMoney?: (money: Money) => string;
58
+ /** Report the backend order id of the order whose detail should open. */
59
+ onViewOrder?: (id: string) => void;
60
+ /** Report the backend order id of the order to track. */
61
+ onTrackOrder?: (id: string) => void;
62
+ className?: string;
63
+ }
64
+ /**
65
+ * The canonical order-history collection section.
66
+ *
67
+ * It renders exactly the orders it is given: pagination, ordering, detail,
68
+ * loading/error states, and the money values all belong to the host. The block
69
+ * holds no selection state, never counts the collection, never compares a
70
+ * status label to a literal, and never measures the viewport.
71
+ */
72
+ export declare function OrderHistory({ orders, presentation, labels, locale, formatMoney: formatMoneyProp, onViewOrder, onTrackOrder, className, }: OrderHistoryProps): import("react").JSX.Element;
73
+ export default OrderHistory;
74
+ //# sourceMappingURL=order-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-history.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/order-history/order-history.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAKhD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AAErB,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAA;AAEvD,4EAA4E;AAC5E,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAA;AAExF,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,sBAAsB,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAA;IACV,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,kBAAkB,CAAA;IAC1B,iFAAiF;IACjF,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,EAAE,CAAA;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAA;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAA;IACtC,yEAAyE;IACzE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,yDAAyD;IACzD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAoBD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,YAAsB,EACtB,MAAM,EACN,MAAM,EACN,WAAW,EAAE,eAAe,EAC5B,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,+BAgJnB;AAED,eAAe,YAAY,CAAA"}