@salla.sa/twilight-theme-engine 1.0.18 → 1.0.20

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 (187) hide show
  1. package/dist/{AddToCartForm-7FMFOLAO.js → AddToCartForm-CIECUCZA.js} +3 -3
  2. package/dist/{AddToCartForm-7FMFOLAO.js.map → AddToCartForm-CIECUCZA.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-W5ICQM3U.js → BlogAuthorPage-2E2F2QS2.js} +11 -11
  4. package/dist/{BlogAuthorPage-W5ICQM3U.js.map → BlogAuthorPage-2E2F2QS2.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-UUZDL7PK.js → BlogCategoryPage-RQUYCRPX.js} +11 -11
  6. package/dist/{BlogCategoryPage-UUZDL7PK.js.map → BlogCategoryPage-RQUYCRPX.js.map} +1 -1
  7. package/dist/{BlogPage-UQIHCREX.js → BlogPage-4LAXPYGX.js} +9 -9
  8. package/dist/{BlogPage-UQIHCREX.js.map → BlogPage-4LAXPYGX.js.map} +1 -1
  9. package/dist/{BlogSinglePage-6ECR6HCG.js → BlogSinglePage-C5236HUA.js} +9 -9
  10. package/dist/{BlogSinglePage-6ECR6HCG.js.map → BlogSinglePage-C5236HUA.js.map} +1 -1
  11. package/dist/{BlogTagPage-I76TH7LK.js → BlogTagPage-CM4KSUFE.js} +11 -11
  12. package/dist/{BlogTagPage-I76TH7LK.js.map → BlogTagPage-CM4KSUFE.js.map} +1 -1
  13. package/dist/{BrandsPage-GH6GNA5H.js → BrandsPage-NKZMOZSZ.js} +9 -9
  14. package/dist/{BrandsPage-GH6GNA5H.js.map → BrandsPage-NKZMOZSZ.js.map} +1 -1
  15. package/dist/{Breadcrumb-3RJ4S56Y.js → Breadcrumb-34XQ6PMD.js} +9 -9
  16. package/dist/{Breadcrumb-3RJ4S56Y.js.map → Breadcrumb-34XQ6PMD.js.map} +1 -1
  17. package/dist/{CartItem-DDZBCDQN.js → CartItem-MQQK5S4C.js} +9 -9
  18. package/dist/{CartItem-DDZBCDQN.js.map → CartItem-MQQK5S4C.js.map} +1 -1
  19. package/dist/{CartSummary-5AK4BKOP.js → CartSummary-GUS25WHY.js} +9 -9
  20. package/dist/{CartSummary-5AK4BKOP.js.map → CartSummary-GUS25WHY.js.map} +1 -1
  21. package/dist/{Copyright-IJ3JV33Y.js → Copyright-27APDWRX.js} +3 -3
  22. package/dist/{Copyright-IJ3JV33Y.js.map → Copyright-27APDWRX.js.map} +1 -1
  23. package/dist/{CustomerLayout-DPAZ3RTE.js → CustomerLayout-LJOF63SO.js} +9 -9
  24. package/dist/{CustomerLayout-DPAZ3RTE.js.map → CustomerLayout-LJOF63SO.js.map} +1 -1
  25. package/dist/{Footer-N6QKS3XH.js → Footer-6U5OYVCY.js} +9 -9
  26. package/dist/{Footer-N6QKS3XH.js.map → Footer-6U5OYVCY.js.map} +1 -1
  27. package/dist/{Header-ZECHJRYK.js → Header-ZTLAALOG.js} +4 -4
  28. package/dist/{Header-ZECHJRYK.js.map → Header-ZTLAALOG.js.map} +1 -1
  29. package/dist/{LoyaltyPage-Z3QYWZHH.js → LoyaltyPage-ZWAL7OZY.js} +10 -10
  30. package/dist/{LoyaltyPage-Z3QYWZHH.js.map → LoyaltyPage-ZWAL7OZY.js.map} +1 -1
  31. package/dist/{MainMenu-L6NN3ECP.js → MainMenu-VMX2F7YG.js} +6 -6
  32. package/dist/{MainMenu-L6NN3ECP.js.map → MainMenu-VMX2F7YG.js.map} +1 -1
  33. package/dist/{MasterLayout-AZOZT6UU.js → MasterLayout-ABJMLUFZ.js} +9 -9
  34. package/dist/{MasterLayout-AZOZT6UU.js.map → MasterLayout-ABJMLUFZ.js.map} +1 -1
  35. package/dist/{MobileMenu-L4VVXAPT.js → MobileMenu-PLHN3ADM.js} +10 -10
  36. package/dist/{MobileMenu-L4VVXAPT.js.map → MobileMenu-PLHN3ADM.js.map} +1 -1
  37. package/dist/{NotificationsPage-SQCA57AN.js → NotificationsPage-QVJV32FO.js} +9 -9
  38. package/dist/{NotificationsPage-SQCA57AN.js.map → NotificationsPage-QVJV32FO.js.map} +1 -1
  39. package/dist/{OrderSinglePage-TMSDKWCI.js → OrderSinglePage-HZQDE3T6.js} +10 -10
  40. package/dist/{OrderSinglePage-TMSDKWCI.js.map → OrderSinglePage-HZQDE3T6.js.map} +1 -1
  41. package/dist/{OrdersPage-SY46YSAT.js → OrdersPage-NATGDGVM.js} +10 -10
  42. package/dist/{OrdersPage-SY46YSAT.js.map → OrdersPage-NATGDGVM.js.map} +1 -1
  43. package/dist/{PageSingle-EMXL2MAZ.js → PageSingle-H33LLMHH.js} +3 -3
  44. package/dist/{PageSingle-EMXL2MAZ.js.map → PageSingle-H33LLMHH.js.map} +1 -1
  45. package/dist/{ProductDetails-NSFZTPRU.js → ProductDetails-UAJQH46Y.js} +3 -3
  46. package/dist/{ProductDetails-NSFZTPRU.js.map → ProductDetails-UAJQH46Y.js.map} +1 -1
  47. package/dist/{ProfilePage-E2X5KVT5.js → ProfilePage-REICPRPO.js} +9 -9
  48. package/dist/{ProfilePage-E2X5KVT5.js.map → ProfilePage-REICPRPO.js.map} +1 -1
  49. package/dist/{SeoCartWidget-NPJ7OZKX.js → SeoCartWidget-2SZCXC6C.js} +9 -9
  50. package/dist/{SeoCartWidget-NPJ7OZKX.js.map → SeoCartWidget-2SZCXC6C.js.map} +1 -1
  51. package/dist/{SettingsPage-CPQ6S2QD.js → SettingsPage-SAWJUVUN.js} +9 -9
  52. package/dist/{SettingsPage-CPQ6S2QD.js.map → SettingsPage-SAWJUVUN.js.map} +1 -1
  53. package/dist/{StoreClosedNotification-6PJ3QFZ2.js → StoreClosedNotification-WFRDR7WA.js} +10 -10
  54. package/dist/{StoreClosedNotification-6PJ3QFZ2.js.map → StoreClosedNotification-WFRDR7WA.js.map} +1 -1
  55. package/dist/{TestimonialsPage-D5F7J7OP.js → TestimonialsPage-JPT5IGK2.js} +3 -3
  56. package/dist/{TestimonialsPage-D5F7J7OP.js.map → TestimonialsPage-JPT5IGK2.js.map} +1 -1
  57. package/dist/{ThankYouPage-CKEUZOYW.js → ThankYouPage-G5MUKOGP.js} +9 -9
  58. package/dist/{ThankYouPage-CKEUZOYW.js.map → ThankYouPage-G5MUKOGP.js.map} +1 -1
  59. package/dist/{WalletPage-GWQOIVDG.js → WalletPage-VQWVBHWW.js} +10 -10
  60. package/dist/{WalletPage-GWQOIVDG.js.map → WalletPage-VQWVBHWW.js.map} +1 -1
  61. package/dist/{WishlistPage-IMRL4E6R.js → WishlistPage-5IYTXOYT.js} +10 -10
  62. package/dist/{WishlistPage-IMRL4E6R.js.map → WishlistPage-5IYTXOYT.js.map} +1 -1
  63. package/dist/api/apps.d.ts +2 -0
  64. package/dist/api/apps.d.ts.map +1 -1
  65. package/dist/api/apps.js +2 -2
  66. package/dist/api/apps.js.map +1 -1
  67. package/dist/api/brands.js +3 -3
  68. package/dist/api/cart.js +3 -3
  69. package/dist/api/category.js +3 -3
  70. package/dist/api/client.d.ts +8 -3
  71. package/dist/api/client.d.ts.map +1 -1
  72. package/dist/api/client.js +2 -2
  73. package/dist/api/home.js +3 -3
  74. package/dist/api/loyalty.js +3 -3
  75. package/dist/api/menu.js +3 -3
  76. package/dist/api/notification.js +3 -3
  77. package/dist/api/order.js +3 -3
  78. package/dist/api/page.js +3 -3
  79. package/dist/api/product.js +3 -3
  80. package/dist/api/profile.js +2 -2
  81. package/dist/api/store.js +3 -3
  82. package/dist/api/translations.js +3 -3
  83. package/dist/api/user.js +3 -3
  84. package/dist/api/wishlist.js +3 -3
  85. package/dist/{chunk-4FDWOXCP.js → chunk-2V5MRDHQ.js} +10 -9
  86. package/dist/chunk-2V5MRDHQ.js.map +1 -0
  87. package/dist/{chunk-5VTFDD6X.js → chunk-2Z6EOHMB.js} +3 -3
  88. package/dist/{chunk-5VTFDD6X.js.map → chunk-2Z6EOHMB.js.map} +1 -1
  89. package/dist/{chunk-R5PUDC5R.js → chunk-33G2WUWG.js} +7 -6
  90. package/dist/chunk-33G2WUWG.js.map +1 -0
  91. package/dist/{chunk-JIUCZ46V.js → chunk-3TTJ75XL.js} +5 -5
  92. package/dist/{chunk-JIUCZ46V.js.map → chunk-3TTJ75XL.js.map} +1 -1
  93. package/dist/{chunk-NIMTL44J.js → chunk-4C4ZVSYC.js} +4 -4
  94. package/dist/{chunk-NIMTL44J.js.map → chunk-4C4ZVSYC.js.map} +1 -1
  95. package/dist/{chunk-HNSBWBPJ.js → chunk-4DKOABYV.js} +6 -6
  96. package/dist/{chunk-HNSBWBPJ.js.map → chunk-4DKOABYV.js.map} +1 -1
  97. package/dist/{chunk-BECDAXJK.js → chunk-5QTXGXQ4.js} +3 -3
  98. package/dist/{chunk-BECDAXJK.js.map → chunk-5QTXGXQ4.js.map} +1 -1
  99. package/dist/chunk-6HGG4GII.js +14 -0
  100. package/dist/{chunk-5BUBB4IH.js.map → chunk-6HGG4GII.js.map} +1 -1
  101. package/dist/{chunk-IFXOMSLZ.js → chunk-7WEGTIL3.js} +3 -3
  102. package/dist/{chunk-IFXOMSLZ.js.map → chunk-7WEGTIL3.js.map} +1 -1
  103. package/dist/{chunk-F7R52XEM.js → chunk-AVTHVTA5.js} +5 -5
  104. package/dist/{chunk-F7R52XEM.js.map → chunk-AVTHVTA5.js.map} +1 -1
  105. package/dist/{chunk-7IU7GSH7.js → chunk-BB46SJTK.js} +3 -3
  106. package/dist/{chunk-7IU7GSH7.js.map → chunk-BB46SJTK.js.map} +1 -1
  107. package/dist/{chunk-UKG7IY3Y.js → chunk-D2LY5L4Z.js} +8 -8
  108. package/dist/chunk-D2LY5L4Z.js.map +1 -0
  109. package/dist/{chunk-JROOVJB4.js → chunk-DKF6GTQ4.js} +3 -3
  110. package/dist/{chunk-JROOVJB4.js.map → chunk-DKF6GTQ4.js.map} +1 -1
  111. package/dist/{chunk-IYX6MIBK.js → chunk-ELYMWPBG.js} +3 -3
  112. package/dist/{chunk-IYX6MIBK.js.map → chunk-ELYMWPBG.js.map} +1 -1
  113. package/dist/{chunk-7RPELJEI.js → chunk-F7X2IHA2.js} +3 -3
  114. package/dist/{chunk-7RPELJEI.js.map → chunk-F7X2IHA2.js.map} +1 -1
  115. package/dist/{chunk-QYL5OHAV.js → chunk-FUH74TV3.js} +53 -30
  116. package/dist/chunk-FUH74TV3.js.map +1 -0
  117. package/dist/{chunk-Q6M55SHW.js → chunk-GCXKFC34.js} +3 -3
  118. package/dist/{chunk-Q6M55SHW.js.map → chunk-GCXKFC34.js.map} +1 -1
  119. package/dist/{chunk-B4U7IIQE.js → chunk-HNIUGQA3.js} +3 -3
  120. package/dist/{chunk-B4U7IIQE.js.map → chunk-HNIUGQA3.js.map} +1 -1
  121. package/dist/{chunk-D3ENQQB5.js → chunk-KAEHFQCJ.js} +3 -3
  122. package/dist/{chunk-D3ENQQB5.js.map → chunk-KAEHFQCJ.js.map} +1 -1
  123. package/dist/{chunk-LFUAPNOJ.js → chunk-KVMFR4FN.js} +3 -3
  124. package/dist/{chunk-LFUAPNOJ.js.map → chunk-KVMFR4FN.js.map} +1 -1
  125. package/dist/{chunk-7CW2C2MJ.js → chunk-LSZEBJYM.js} +3 -3
  126. package/dist/{chunk-7CW2C2MJ.js.map → chunk-LSZEBJYM.js.map} +1 -1
  127. package/dist/{chunk-7SPFPL73.js → chunk-PPHY7D7Y.js} +3 -3
  128. package/dist/{chunk-7SPFPL73.js.map → chunk-PPHY7D7Y.js.map} +1 -1
  129. package/dist/{chunk-HLFPC75E.js → chunk-UVWTPNGO.js} +5 -5
  130. package/dist/{chunk-HLFPC75E.js.map → chunk-UVWTPNGO.js.map} +1 -1
  131. package/dist/{chunk-42437XWT.js → chunk-W2LYNXAS.js} +3 -3
  132. package/dist/{chunk-42437XWT.js.map → chunk-W2LYNXAS.js.map} +1 -1
  133. package/dist/{chunk-WW774FMD.js → chunk-W7KPAKOF.js} +3 -3
  134. package/dist/{chunk-WW774FMD.js.map → chunk-W7KPAKOF.js.map} +1 -1
  135. package/dist/{chunk-233MP3WJ.js → chunk-WA4A34G7.js} +3 -3
  136. package/dist/{chunk-233MP3WJ.js.map → chunk-WA4A34G7.js.map} +1 -1
  137. package/dist/{chunk-AAWKRFEW.js → chunk-XBYPAJQR.js} +3 -3
  138. package/dist/{chunk-AAWKRFEW.js.map → chunk-XBYPAJQR.js.map} +1 -1
  139. package/dist/{chunk-CQ5HN3OJ.js → chunk-XCUNSPXR.js} +3 -3
  140. package/dist/{chunk-CQ5HN3OJ.js.map → chunk-XCUNSPXR.js.map} +1 -1
  141. package/dist/{chunk-ZLKMSS5N.js → chunk-ZBASHNPK.js} +3 -3
  142. package/dist/{chunk-ZLKMSS5N.js.map → chunk-ZBASHNPK.js.map} +1 -1
  143. package/dist/{chunk-HGTEMXVL.js → chunk-ZVRRUEVF.js} +4 -4
  144. package/dist/{chunk-HGTEMXVL.js.map → chunk-ZVRRUEVF.js.map} +1 -1
  145. package/dist/components/cart/index.js +1 -1
  146. package/dist/components/common/index.js +1 -1
  147. package/dist/components/drawer/index.js +7 -7
  148. package/dist/components/home/index.js +10 -10
  149. package/dist/components/layout/index.js +5 -5
  150. package/dist/components/product/index.js +8 -8
  151. package/dist/components/store/index.js +9 -9
  152. package/dist/{document-class-P2XLWGWN.js → document-class-SQJXMFBI.js} +7 -7
  153. package/dist/{document-class-P2XLWGWN.js.map → document-class-SQJXMFBI.js.map} +1 -1
  154. package/dist/hooks/index.js +7 -7
  155. package/dist/hooks/useGtm.js +7 -7
  156. package/dist/hooks/useMoney.js +7 -7
  157. package/dist/hooks/useStore.js +7 -7
  158. package/dist/hooks/useUser.js +4 -4
  159. package/dist/index.js +7 -7
  160. package/dist/{not-found-DMYOREW7.js → not-found-55WSAE63.js} +9 -9
  161. package/dist/{not-found-DMYOREW7.js.map → not-found-55WSAE63.js.map} +1 -1
  162. package/dist/providers/index.js +7 -7
  163. package/dist/providers/twilight-init.d.ts.map +1 -1
  164. package/dist/routes/account/orders.js +4 -4
  165. package/dist/routes/account.js +12 -12
  166. package/dist/routes/blog.js +8 -8
  167. package/dist/routes/brands.js +4 -4
  168. package/dist/routes/cart.js +15 -15
  169. package/dist/routes/home.js +12 -12
  170. package/dist/routes/loyalty.js +4 -4
  171. package/dist/routes/page.js +4 -4
  172. package/dist/routes/product-listing.js +12 -12
  173. package/dist/routes/product.js +10 -10
  174. package/dist/routes/root/beforeLoad.d.ts.map +1 -1
  175. package/dist/routes/testimonials.js +1 -1
  176. package/dist/routes/thank-you.js +4 -4
  177. package/dist/skeleton.js +12 -12
  178. package/dist/tanstack.js +6 -6
  179. package/dist/utils/cookies.d.ts +27 -0
  180. package/dist/utils/cookies.d.ts.map +1 -1
  181. package/dist/utils/index.js +1 -1
  182. package/package.json +1 -1
  183. package/dist/chunk-4FDWOXCP.js.map +0 -1
  184. package/dist/chunk-5BUBB4IH.js +0 -14
  185. package/dist/chunk-QYL5OHAV.js.map +0 -1
  186. package/dist/chunk-R5PUDC5R.js.map +0 -1
  187. package/dist/chunk-UKG7IY3Y.js.map +0 -1
@@ -1,10 +1,10 @@
1
- import { Header } from './chunk-HLFPC75E.js';
1
+ import { Header } from './chunk-UVWTPNGO.js';
2
2
  import { Copyright } from './chunk-JKIRRMBU.js';
3
3
  import { useDevSettingsOverrides } from './chunk-2JV6WZ6O.js';
4
4
  import { color } from './chunk-VVZNW5CB.js';
5
5
  import { useLocation, useIsHome, NavigationInterceptor } from './chunk-ZBTCQZVO.js';
6
- import { useUser } from './chunk-JROOVJB4.js';
7
- import { AUTH_TOKEN_COOKIE_NAME, clearAuthTokenCookie, syncSdkLocale } from './chunk-QYL5OHAV.js';
6
+ import { useUser } from './chunk-DKF6GTQ4.js';
7
+ import { AUTH_TOKEN_COOKIE_NAME, clearAuthTokenCookie, syncSdkLocale, syncScopeCookie } from './chunk-FUH74TV3.js';
8
8
  import { getTwilightContext, updateTwilightContext } from './chunk-WI7TR7RK.js';
9
9
  import { useAsset } from './chunk-Z653O7MX.js';
10
10
  import { DocumentClassProvider, useDocumentClass } from './chunk-JWXJPJBO.js';
@@ -13,7 +13,7 @@ import { FALLBACK_LOCALE, getLanguageInfo } from './chunk-T72DAX7R.js';
13
13
  import { WidgetHead } from './chunk-RJPPO3ET.js';
14
14
  import { HookSlot } from './chunk-Q7VWURUR.js';
15
15
  import { hookRegistry } from './chunk-GU2KUQVD.js';
16
- import { Image } from './chunk-42437XWT.js';
16
+ import { Image } from './chunk-W2LYNXAS.js';
17
17
  import { Link } from './chunk-AXW67SY7.js';
18
18
  import { LazyImageModal } from './chunk-CUG6VOLM.js';
19
19
  import { Toaster } from './chunk-OBSAH7K6.js';
@@ -105,7 +105,7 @@ function ThemeDocumentSync({
105
105
  }
106
106
 
107
107
  // src/utils/engine-version.ts
108
- var ENGINE_VERSION = "1.0.18" ;
108
+ var ENGINE_VERSION = "1.0.20" ;
109
109
 
110
110
  // src/providers/twilight-init.ts
111
111
  function getSalla() {
@@ -182,6 +182,7 @@ function useTwilightInit({
182
182
  } catch {
183
183
  }
184
184
  syncSdkLocale(initialLocale);
185
+ syncScopeCookie();
185
186
  setReady(true);
186
187
  document.dispatchEvent(new CustomEvent("theme::ready"));
187
188
  onReady?.({
@@ -208,7 +209,7 @@ var navigationSetups = {
208
209
  };
209
210
  var routeDocumentSyncs = {
210
211
  tanstack: lazy(
211
- () => import('./document-class-P2XLWGWN.js').then((m) => ({
212
+ () => import('./document-class-SQJXMFBI.js').then((m) => ({
212
213
  default: m.TanStackDocumentSync
213
214
  }))
214
215
  )
@@ -740,7 +741,7 @@ var LazySiftSnippet = lazy(
740
741
  () => import('./SiftSnippet-5FCU6TR6.js').then((m) => ({ default: m.SiftSnippet }))
741
742
  );
742
743
  var LazyStoreClosedNotification = lazy(
743
- () => import('./StoreClosedNotification-6PJ3QFZ2.js').then((m) => ({
744
+ () => import('./StoreClosedNotification-WFRDR7WA.js').then((m) => ({
744
745
  default: m.StoreClosedNotification
745
746
  }))
746
747
  );
@@ -1203,5 +1204,5 @@ function useStore() {
1203
1204
  }
1204
1205
 
1205
1206
  export { Footer, MasterLayout, TwilightProvider, registerDefaultHooks, registerDocumentSync, routeDocumentSyncs, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore };
1206
- //# sourceMappingURL=chunk-4FDWOXCP.js.map
1207
- //# sourceMappingURL=chunk-4FDWOXCP.js.map
1207
+ //# sourceMappingURL=chunk-2V5MRDHQ.js.map
1208
+ //# sourceMappingURL=chunk-2V5MRDHQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/apply-theme.ts","../src/providers/twilight-theme.ts","../src/utils/engine-version.ts","../src/providers/twilight-init.ts","../src/providers/navigation-setups.ts","../src/providers/DocumentSyncRegistry.ts","../src/hooks/useDate.ts","../src/hooks/useNumber.ts","../src/hooks/useMoney.tsx","../src/hooks/useGtm.ts","../src/hooks/useOpeningHours.ts","../src/hooks/usePageConfig.ts","../src/utils/breadcrumb.ts","../src/hooks/useBreadcrumbs.ts","../src/hooks/registerDefaultHooks.tsx","../src/components/layout/Footer.tsx","../src/components/layout/MasterLayout.tsx","../src/providers/TwilightProvider.tsx","../src/hooks/useStore.ts"],"names":["color","useEffect","lazy","useMemo","useState","jsx","jsxs","Fragment","Suspense","getSalla","React","useCallback"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,SAAS,WAAW,KAAA,EAAoB;AAC7C,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,EAAA,MAAM,OAA2B,EAAC;AAElC,EAAA,IAAI,KAAA,CAAM,MAAM,IAAA,EAAM;AACpB,IAAA,IAAA,CAAK,IAAA;AAAA,MACH,CAAC,aAAA,EAAe,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,MAC/B,CAAC,cAAA,EAAgB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,MAChC,CAAC,gBAAA,EAAkB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,MAClC,CAAC,eAAA,EAAiB,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,OAAA,CAAS,CAAA;AAAA,MAC7C,CAAC,aAAA,EAAe,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,KAAA,CAAO;AAAA,KAC3C;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,KAAA,EAAAA,MAAAA,EAAM,GAAI,KAAA;AAClB,EAAA,IAAIA,MAAAA,EAAO;AACT,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,cAAA,EAAgB,SAAS,CAAC,CAAA;AAErC,IAAA,IAAIA,OAAM,OAAA,EAAS;AACjB,MAAA,MAAM,CAAA,GAAI,KAAA,CAAUA,MAAAA,CAAM,OAAO,CAAA;AACjC,MAAA,IAAA,CAAK,IAAA;AAAA,QACH,CAAC,iBAAA,EAAmBA,MAAAA,CAAM,OAAO,CAAA;AAAA,QACjC,CAAC,sBAAA,EAAwB,CAAA,CAAE,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,QACvC,CAAC,uBAAA,EAAyB,CAAA,CAAE,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,QACzC,CAAC,eAAA,EAAiBA,MAAAA,CAAM,OAAO,CAAA;AAAA,QAC/B,CAAC,mBAAA,EAAqBA,MAAAA,CAAM,OAAO;AAAA,OACrC;AAAA,IACF;AAEA,IAAA,IAAIA,OAAM,YAAA,EAAc;AACtB,MAAA,IAAA,CAAK,IAAA;AAAA,QACH,CAAC,yBAAA,EAA2BA,MAAAA,CAAM,YAAY,CAAA;AAAA,QAC9C,CAAC,sBAAA,EAAwBA,MAAAA,CAAM,YAAY,CAAA;AAAA,QAC3C,CAAC,sBAAA,EAAwBA,MAAAA,CAAM,YAAY;AAAA,OAC7C;AAAA,IACF;AAEA,IAAA,IAAIA,OAAM,eAAA,EAAiB;AACzB,MAAA,IAAA,CAAK,IAAA,CAAK,CAAC,yBAAA,EAA2BA,MAAAA,CAAM,eAAe,CAAC,CAAA;AAAA,IAC9D;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,IAAA,CAAK,CAAC,eAAA,EAAiB,MAAM,CAAC,CAAA;AAEnC,EAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,GAAG,CAAA,IAAK,IAAA,EAAM;AAC9B,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,EAAM,GAAG,CAAA;AAAA,EAClC;AACF;;;AC/CO,SAAS,YAAY,IAAA,EAAyC;AACnE,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,IAAA,GAAO,IAAA,CACV,WAAA,EAAY,CACZ,OAAA,CAAQ,eAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AACzB,EAAA,OAAO,IAAA,GAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA,GAAK,IAAA;AACjC;AAEO,SAAS,iBAAA,CAAkB;AAAA,EAChC,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAKS;AACP,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,KAAA,CAAM,IAAA,GAAO,CAAA,MAAA,EAAS,KAAA,CAAM,IAAI,CAAA,CAAA,GAAK,IAAA;AAAA,IACrC,CAAA,WAAA,EAAc,KAAA,CAAM,KAAA,EAAO,OAAA,GAAU,SAAS,OAAO,CAAA,CAAA;AAAA,IACrD,SAAA;AAAA,IACA,KAAA,CAAM,IAAA,KAAS,SAAA,GAAY,cAAA,GAAiB,IAAA;AAAA,IAC5C,WAAA,CAAY,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IAC5B,kBAAkB,gBAAA,GAAmB,IAAA;AAAA,IACrC,KAAA,CAAM,QAAA,EAAU,cAAA,GAAiB,gBAAA,GAAmB,iBAAA;AAAA,IACpD,KAAA,CAAM,QAAA,EAAU,cAAA,GAAiB,gBAAA,GAAmB,IAAA;AAAA,IACpD,KAAA,CAAM,QAAA,EAAU,kBAAA,GAAqB,uBAAA,GAA0B;AAAA,GACjE,CAAE,OAAO,OAAO,CAAA;AAEhB,EAAA,gBAAA,CAAiB;AAAA,IACf,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,SAAA,EAAU;AAAA,IACrC,IAAA,EAAM,EAAE,KAAA,EAAO,WAAA;AAAY,GAC5B,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,IAAA;AACT;;;ACvCO,IAAM,cAAA,GAC0C,QAAA,CAA8B;;;ACGrF,SAAS,QAAA,GAAiC;AACxC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,MAAA;AAC1C,EAAA,OAAO,MAAA,CAAO,KAAA;AAChB;AAqBO,SAAS,eAAA,CAAgB;AAAA,EAC9B,KAAA,EAAO,MAAA;AAAA,EACP,WAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,EAAS,QAAA;AAAA,EACT;AACF,CAAA,EAAkD;AAChD,EAAA,MAAM,SAAA,GAAY,OAAO,MAAA,KAAW,WAAA;AACpC,EAAA,MAAM,eAAA,GAAkB,gBAAgB,aAAa,CAAA;AACrD,EAAA,MAAM,YAAA,GAAe,WAAA;AAErB,EAAA,MAAM,CAAC,SAAS,QAAQ,CAAA,GAAI,SAAkB,MAAM,CAAC,CAAC,YAAY,CAAA;AAClE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAA;AAAA,IAChC,MAAO,YAAA,EAAc,KAAA,IAAoB;AAAC,GAC5C;AACA,EAAA,MAAM,CAAC,SAAS,CAAA,GAAI,QAAA,CAAgB,MAAM;AACxC,IAAA,MAAM,QAAQ,YAAA,EAAc,KAAA;AAC5B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,KAAA,CAAM,MAAA,IAAU,eAAA,CAAgB,GAAA,KAAQ;AAAA,OAClD;AAAA,IACF;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,eAAA,CAAgB,GAAA,KAAQ,KAAA,EAAM;AAAA,EACjD,CAAC,CAAA;AAMD,EAAA,MAAM,eAAe,uBAAA,EAAwB;AAC7C,EAAA,MAAM,SAAA,GAAY,QAAe,MAAM;AACrC,IAAA,IAAI,MAAA,CAAA,IAAA,CAAY,GAAA,CAAI,GAAA,IAAO,YAAA,CAAa,OAAA,EAAS;AAC/C,MAAA,MAAM,YAAY,YAAA,CAAa,QAAA;AAC/B,MAAA,IAAI,aAAa,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,SAAS,CAAA,EAAG;AAClD,QAAA,OAAO;AAAA,UACL,GAAG,SAAA;AAAA,UACH,QAAA,EAAU,EAAE,GAAI,SAAA,CAAU,YAAY,EAAC,EAAI,GAAG,SAAA;AAAU,SAC1D;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT,CAAA,EAAG,CAAC,SAAA,EAAW,YAAY,CAAC,CAAA;AAC5B,EAAA,MAAM,CAAC,QAAQ,CAAA,GAAI,QAAA,CAA+B,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,eAAe,CAAA,GAAI,QAAA,CAAkB,KAAK,CAAA;AAEjD,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,SAAA,EAAW;AAC9B,IAAA,MAAM,MAAM,QAAA,EAAS;AACrB,IAAA,GAAA,EAAK,MAAA,EAAQ,GAAA,GAAM,cAAA,EAAgB,SAAA,CAAU,UAAU,KAAK,CAAA;AAC5D,IAAA,MAAA,CAAO,gBAAA,GAAmB,MAAA,CAAO,SAAA,CAAU,QAAA,EAAU,oBAAoB,IAAI,CAAA;AAAA,EAC/E,CAAA,EAAG,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAEzB,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,MAAM,QAAA,EAAS;AACrB,IAAA,IAAI,CAAC,GAAA,EAAK;AAKV,IAAA,MAAM,eAAA,GAAkB,GAAA;AACxB,IAAA,eAAA,CAAgB,WAAW,EAAE,GAAG,eAAA,CAAgB,QAAA,EAAU,QAAQ,cAAA,EAAe;AAEjF,IAAA,IAAI,aAAA,EAAe;AAIjB,MAAA,aAAA,CAAc,aAAa,CAAA;AAAA,IAC7B;AAEA,IAAA,IAAI,OAAO,GAAA,CAAI,IAAA,KAAS,UAAA,EAAY;AAEpC,IAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,IAAA,MAAM,UAAU,GAAA,CAAI,IAAA;AACpB,IAAA,MAAM,WAAW,OAAA,GACb;AAAA,MACE,GAAG,YAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACJ,GAAG,OAAA;AAAA,QACH,KAAK,OAAA,CAAQ,GAAA,IAAO,IAAI,QAAA,CAAS,QAAA,GAAW,IAAI,QAAA,CAAS;AAAA;AAC3D,KACF,GACA,YAAA;AAEJ,IAAA,GAAA,CAAI,KAAK,QAAQ,CAAA;AAEjB,IAAA,MAAM,UAAU,YAAY;AAC1B,MAAA,IAAI;AACF,QAAA,MAAM,IAAI,OAAA,EAAQ;AAAA,MACpB,CAAA,CAAA,MAAQ;AAAA,MAER;AAIA,MAAA,aAAA,CAAc,aAAa,CAAA;AAQ3B,MAAA,eAAA,EAAgB;AAEhB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,QAAA,CAAS,aAAA,CAAc,IAAI,WAAA,CAAY,cAAc,CAAC,CAAA;AAEtD,MAAA,OAAA,GAAU;AAAA,QACR,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAA,EAAQ;AAAA,EAEV,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AChKO,IAAM,gBAAA,GAAqF;AAAA,EAChG,QAAA,EAAU,IAAA;AAAA,IAAK,MACb,OAAO,0BAAwB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,eAAA,EAAgB,CAAE;AAAA,GAC/E;AAAA,EACA,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,0BAAsB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,eAAA,GAAkB,CAAC;AACjG,CAAA;ACOO,IAAM,kBAAA,GAA8D;AAAA,EACzE,QAAA,EAAUC,IAAAA;AAAA,IAAK,MACb,OAAO,8BAA4B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,MAChD,SAAS,CAAA,CAAE;AAAA,KACb,CAAE;AAAA;AACJ;AAAA;AAGF;AAMO,SAAS,oBAAA,CAAqB,WAAmB,SAAA,EAA0C;AAChG,EAAA,kBAAA,CAAmB,SAAS,CAAA,GAAI,SAAA;AAClC;;;ACnBA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI,CAAC,KAAA,EAAO,uBAAO,IAAI,IAAA,EAAK;AAC5B,EAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,KAAA;AAClC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAI,KAAK,KAAK,CAAA;AACpD,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,MAAA,IAAU,OAAO,OAAO,IAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC5E,EAAA,OAAO,IAAI,KAAK,KAAK,CAAA;AACvB;AAkBO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,cAAA,EAAe;AAElC,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,EAAiB,UAAA,GAAyB,QAAA,KAAqB;AAC7E,IAAA,MAAM,OAAA,GAAU,cAAc,IAAI,CAAA;AAElC,IAAA,MAAM,gBAAA,GAAmE;AAAA,MACvE,IAAA,EAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,MAAM,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK,SAAA,EAAU;AAAA,MACxE,MAAM,EAAE,IAAA,EAAM,WAAW,KAAA,EAAO,MAAA,EAAQ,KAAK,SAAA,EAAU;AAAA,MACvD,QAAQ,EAAE,IAAA,EAAM,WAAW,KAAA,EAAO,MAAA,EAAQ,KAAK,SAAA,EAAU;AAAA,MACzD,OAAO,EAAE,IAAA,EAAM,WAAW,KAAA,EAAO,OAAA,EAAS,KAAK,SAAA,EAAU;AAAA,MACzD,IAAA,EAAM,EAAE,IAAA,EAAM,SAAA,EAAW,QAAQ,SAAA;AAAU,KAC7C;AAEA,IAAA,IAAI;AACF,MAAA,OAAO,IAAI,KAAK,cAAA,CAAe,MAAA,EAAQ,iBAAiB,UAAU,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,IACrF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,OAAA,CAAQ,mBAAmB,MAAM,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAA4B;AACvC,IAAA,MAAM,OAAA,GAAU,cAAc,IAAI,CAAA;AAClC,IAAA,MAAM,aAAA,GAAgB,KAAK,KAAA,CAAA,CAAO,IAAA,CAAK,KAAI,GAAI,OAAA,CAAQ,OAAA,EAAQ,IAAK,GAAI,CAAA;AAExE,IAAA,MAAM,KAAA,GACJ;AAAA,MACE,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAU,SAAS,OAAA,EAAS;AAAA,MACvD,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,MAAA,EAAS,SAAS,MAAA,EAAQ;AAAA,MACtD,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,SAAS,MAAA,EAAO;AAAA,MACnD,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,MAChD,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAS,IAAA,EAAK;AAAA,MAC/C,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,EAAA,EAAI,SAAS,EAAA,EAAG;AAAA,MAC7C,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA;AAAE,KAC7C;AAEF,IAAA,KAAA,MAAW,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,MAAa,KAAA,EAAO;AAChD,MAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,aAAA,GAAgB,OAAO,CAAA;AAChD,QAAA,IAAI;AACF,UAAA,OAAO,IAAI,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,EAAE,SAAS,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,YAC7E,CAAC,KAAA;AAAA,YACD;AAAA,WACF;AAAA,QACF,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,IAAI,IAAA,CAAK,kBAAA,CAAmB,IAAA,EAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,EAAO,IAAI,CAAA;AAAA,QACnF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA,GAAI,0BAAA,GAAS,UAAA;AAAA,EAC5C,CAAA;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,kBAAK,IAAI,MAAK,EAAE;AACxC;;;ACvFA,IAAM,eAAA,GAAkB,CAAC,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAG,CAAA;AAEzE,IAAM,QAAA,GAAW,CAAC,KAAA,KAAmC;AACnD,EAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,EAAA,OAAO,GAAA,CAAI,QAAQ,QAAA,EAAU,CAAC,MAAM,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAClE,CAAA;AAyBO,SAAS,SAAA,GAA6B;AAC3C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,iBAAA,GAAoB,KAAA,EAAO,QAAA,EAAU,sBAAA,IAA0B,KAAA;AAErE,EAAA,MAAM,MAAA,GAAS,CAAC,MAAA,KAAoC;AAClD,IAAA,OAAO,iBAAA,GAAoB,QAAA,CAAS,MAAM,CAAA,GAAI,OAAO,MAAM,CAAA;AAAA,EAC7D,CAAA;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,MAAA;AAAA;AAAA,IAEA,QAAA;AAAA;AAAA,IAEA;AAAA,GACF;AACF;AC5CA,IAAM,SAAA,GAAY,IAAA;AAClB,IAAM,YAAA,GAAe,KAAA;AAErB,IAAM,SAAA,uBAAgB,GAAA,EAA+B;AACrD,SAAS,aAAA,CAAc,KAAa,IAAA,EAAmD;AACrF,EAAA,MAAM,MAAM,CAAA,EAAG,GAAG,IAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA;AAC1C,EAAA,IAAI,GAAA,GAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAC3B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,GAAA,GAAM,IAAI,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,IAAI,CAAA;AACrC,IAAA,SAAA,CAAU,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,GAAA;AACT;AAWA,IAAM,KAAA,GAAQ,CAAC,WAAA,KAAgC;AAC7C,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AACpD,EAAA,MAAM,UAAA,GAAa,QAAQ,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC9D,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA;AACrC,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,OAAO,WAAW,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA;AAChD,CAAA;AAOA,IAAM,OAAA,GAAU,CAAC,KAAA,KAA4B;AAC3C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,KAAK,CAAA,IAAK,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,IAAA;AAC1E,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,MAAA,GAAS,WAAW,KAAK,CAAA;AAC/B,IAAA,OAAO,CAAC,KAAA,CAAM,MAAM,CAAA,IAAK,SAAS,MAAM,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAyBO,SAAS,QAAA,GAA2B;AACzC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,cAAA,EAAe;AAClC,EAAA,MAAM,iBAAA,GAAoB,KAAA,EAAO,QAAA,EAAU,sBAAA,IAA0B,KAAA;AAErE,EAAA,MAAM,MAAA,GAAS,CACb,MAAA,EACA,OAAA,KACoB;AACpB,IAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,KAAA;AACtC,IAAA,MAAM,GAAA,GAAM,SAAS,MAAA,IAAU,MAAA;AAC/B,IAAA,MAAM,IAAA,GAAO,SAAS,IAAA,IAAQ,SAAA;AAG9B,IAAA,IAAI,MAAA,IAAU,IAAA,IAAQ,MAAA,KAAW,EAAA,EAAI;AACnC,MAAA,MAAM,WAAW,IAAA,KAAS,SAAA,GAAY,KAAA,EAAO,QAAA,EAAU,SAAS,kBAAA,GAAqB,KAAA;AAErF,MAAA,OAAO,WAAW,GAAA,GAAM,EAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,gBAAgB,OAAO,MAAA,KAAW,QAAA,GAAW,UAAA,CAAW,MAAM,CAAA,GAAI,MAAA;AAExE,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,KAAK,OAAO,MAAA;AACzD,IAAA,IAAI,KAAA,CAAM,aAAa,CAAA,EAAG,OAAO,OAAO,MAAM,CAAA;AAG9C,IAAA,IAAI,CAAC,aAAA,IAAiB,aAAA,KAAkB,CAAA,EAAG;AAEzC,MAAA,MAAM,WAAW,IAAA,KAAS,SAAA,GAAY,KAAA,EAAO,QAAA,EAAU,SAAS,kBAAA,GAAqB,KAAA;AAErF,MAAA,OAAO,WAAW,GAAA,GAAM,EAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,SAAA,GAAY,cAAc,GAAA,EAAK;AAAA,MACjC,qBAAA,EAAuB,CAAA;AAAA,MACvB,qBAAA,EAAuB;AAAA,KACxB,CAAA,CAAE,MAAA,CAAO,aAAa,CAAA;AAGvB,IAAA,IAAI,iBAAA,IAAqB,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AAClD,MAAA,SAAA,GAAY,SAAA,CAAU,QAAQ,QAAA,EAAU,CAAC,MAAM,8DAAA,CAAa,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1E;AAGA,IAAA,IAAI,aAAa,YAAA,EAAc;AAC7B,MAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,QAAU,GAAA;AAAA,wBAAC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,WAAA,EAAY;AAAA,OAAA,EACvC,CAAA;AAAA,IAEJ;AAGA,IAAA,IAAI;AACF,MAAA,OAAO,cAAc,GAAA,EAAK;AAAA,QACxB,KAAA,EAAO,UAAA;AAAA,QACP,QAAA;AAAA,QACA,qBAAA,EAAuB,CAAA;AAAA,QACvB,qBAAA,EAAuB;AAAA,OACxB,CAAA,CAAE,MAAA,CAAO,aAAa,CAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,IACjC;AAAA,EACF,CAAA;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAQ;AAClC;ACvGA,SAAS,QAAQ,MAAA,EAAwB;AACvC,EAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAC1E;AAGA,SAAS,SAAA,CAAU,SAAkB,SAAA,EAA8D;AACjG,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,UAAA;AAAA,IACf,KAAA,EAAO,QAAQ,KAAA,EAAO,IAAA;AAAA,IACtB,QAAA,EAAU,QAAQ,QAAA,EAAU,IAAA;AAAA,IAC5B,QAAA,EAAU,CAAA;AAAA,IACV,GAAG;AAAA,GACL;AACF;AAGA,SAAS,WAAA,CAAY,OAAA,EAAmB,QAAA,GAAW,KAAA,EAAe;AAChE,EAAA,OAAO,SAAS,QAAA,IAAY,QAAA;AAC9B;AAmBO,SAAS,MAAA,GAAuB;AACrC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA,EAAQ;AAE/B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,GAAA;AACrC,EAAA,MAAM,OAAA,GAAU,CAAC,EAAE,MAAA,IAAU,OAAO,MAAA,GAAS,CAAA,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,IAAA,EAAM,WAAA,EAAa,aAAA,IAAiB,KAAA;AAErD,EAAA,MAAM,IAAA,GAAO,WAAA;AAAA,IACX,CAAC,IAAA,KAAkC;AACjC,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,SAAA,IAAa,EAAC;AACxC,MAAA,MAAA,CAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,CAAC,QAAA,KAAqB,IAAA,CAAK,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAEhG,EAAA,MAAM,MAAA,GAAS,WAAA;AAAA,IACb,CAAC,YACC,IAAA,CAAK;AAAA,MACH,KAAA,EAAO,QAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,YAAA,EAAc,WAAA,CAAY,OAAA,EAAS,QAAQ,CAAA;AAAA,QAC3C,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAAA,QAC1B,QAAQ,EAAE,QAAA,EAAU,CAAC,SAAA,CAAU,OAAO,CAAC,CAAA;AAAE;AAC3C,KACD,CAAA;AAAA,IACH,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,MAAM,WAAA,GAAc,WAAA;AAAA,IAClB,CAAC,UAAqB,IAAA,KAAkB;AACtC,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAK;AAAA,QACH,KAAA,EAAO,aAAA;AAAA,QACP,SAAA,EAAW;AAAA,UACT,YAAA,EAAc,WAAA,CAAY,QAAA,CAAS,CAAC,GAAG,QAAQ,CAAA;AAAA,UAC/C,QAAA,EAAU,QAAQ,aAAa,CAAA;AAAA,UAC/B,WAAA,EAAa;AAAA,YACX,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM,SAAA,CAAU,CAAA,EAAG,EAAE,QAAA,EAAU,CAAA,GAAI,CAAA,EAAG,IAAA,EAAM,CAAC;AAAA;AAC1E;AACF,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,MAAM,KAAA,GAAQ,WAAA;AAAA,IACZ,CAAC,OAAA,EAAkB,IAAA,EAAe,QAAA,KAChC,IAAA,CAAK;AAAA,MACH,KAAA,EAAO,OAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,YAAA,EAAc,WAAA,CAAY,OAAA,EAAS,QAAQ,CAAA;AAAA,QAC3C,QAAA,EAAU,QAAQ,OAAO,CAAA;AAAA,QACzB,KAAA,EAAO;AAAA,UACL,WAAA,EAAa,EAAE,IAAA,EAAK;AAAA,UACpB,QAAA,EAAU,CAAC,SAAA,CAAU,OAAA,EAAS,EAAE,QAAA,EAAU,IAAA,EAAM,CAAC;AAAA;AACnD;AACF,KACD,CAAA;AAAA,IACH,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,MAAM,GAAA,GAAM,WAAA;AAAA,IACV,CAAC,OAAA,EAAkB,QAAA,GAAW,CAAA,KAC5B,IAAA,CAAK;AAAA,MACH,KAAA,EAAO,WAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,YAAA,EAAc,WAAA,CAAY,OAAA,EAAS,QAAQ,CAAA;AAAA,QAC3C,QAAA,EAAU,QAAQ,WAAW,CAAA;AAAA,QAC7B,GAAA,EAAK,EAAE,QAAA,EAAU,CAAC,SAAA,CAAU,SAAS,EAAE,QAAA,EAAU,CAAC,CAAA;AAAE;AACtD,KACD,CAAA;AAAA,IACH,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,MAAM,MAAA,GAAS,WAAA;AAAA,IACb,CAAC,SACC,IAAA,CAAK;AAAA,MACH,KAAA,EAAO,gBAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,YAAA,EAAc,QAAA;AAAA,QACd,QAAA,EAAU,QAAQ,gBAAgB,CAAA;AAAA,QAClC,MAAA,EAAQ;AAAA,UACN,QAAA,EAAU;AAAA,YACR;AAAA,cACE,IAAI,IAAA,CAAK,UAAA;AAAA,cACT,MAAM,IAAA,CAAK,YAAA;AAAA,cACX,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA,KAAU,WAAW,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,CAAM,MAAA;AAAA,cAChE,UAAU,IAAA,CAAK;AAAA;AACjB;AACF;AACF;AACF,KACD,CAAA;AAAA,IACH,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,IAAA,EAAY,IAAA,GAAO,CAAA,KAClB,IAAA,CAAK;AAAA,MACH,KAAA,EAAO,UAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,YAAA,EAAc,QAAA;AAAA,QACd,QAAA,EAAU,QAAQ,UAAU,CAAA;AAAA,QAC5B,QAAA,EAAU;AAAA,UACR,WAAA,EAAa,EAAE,IAAA,EAAM,EAAA,EAAI,KAAK,EAAA,EAAG;AAAA,UACjC,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,YAClC,IAAI,IAAA,CAAK,UAAA;AAAA,YACT,MAAM,IAAA,CAAK,YAAA;AAAA,YACX,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA,KAAU,WAAW,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,CAAM,MAAA;AAAA,YAChE,UAAU,IAAA,CAAK;AAAA,WACjB,CAAE;AAAA;AACJ;AACF,KACD,CAAA;AAAA,IACH,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,OAAA,EAA0B,IAAA,KACzB,IAAA,CAAK;AAAA,MACH,KAAA,EAAO,UAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,YAAA,EAAc,QAAA;AAAA,QACd,QAAA,EAAU,QAAQ,UAAU,CAAA;AAAA,QAC5B,QAAA,EAAU;AAAA,UACR,WAAA,EAAa;AAAA,YACX,EAAA,EAAI,OAAA;AAAA,YACJ,SAAS,IAAA,CAAK,KAAA;AAAA,YACd,KAAK,IAAA,CAAK,UAAA;AAAA,YACV,QAAQ,IAAA,CAAK;AAAA,WACf;AAAA,UACA,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,YAClC,IAAI,IAAA,CAAK,UAAA;AAAA,YACT,MAAM,IAAA,CAAK,YAAA;AAAA,YACX,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA,KAAU,WAAW,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,CAAM,MAAA;AAAA,YAChE,UAAU,IAAA,CAAK;AAAA,WACjB,CAAE;AAAA;AACJ;AACF,KACD,CAAA;AAAA,IACH,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,aAAa,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAS;AAChG;AC1NA,IAAM,IAAA,GAAoB;AAAA,EACxB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,SAAA,GAAoC;AAAA,EACxC,MAAA,EAAQ,oBAAA;AAAA,EACR,OAAA,EAAS,qBAAA;AAAA,EACT,SAAA,EAAW,uBAAA;AAAA,EACX,QAAA,EAAU,sBAAA;AAAA,EACV,MAAA,EAAQ,oBAAA;AAAA,EACR,QAAA,EAAU,sBAAA;AAAA,EACV,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,UAAA,GAAqC;AAAA,EACzC,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAyBA,SAAS,UAAU,OAAA,EAAyB;AAC1C,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,EAAK,CAAE,WAAA,EAAY;AAC3C,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,oCAAoC,CAAA;AAEhE,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACjC,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AAExB,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,KAAA,GAAQ,EAAA,EAAI;AACnC,IAAA,KAAA,IAAS,EAAA;AAAA,EACX,CAAA,MAAA,IAAW,QAAA,KAAa,IAAA,IAAQ,KAAA,KAAU,EAAA,EAAI;AAC5C,IAAA,KAAA,GAAQ,CAAA;AAAA,EACV;AAEA,EAAA,OAAO,QAAQ,EAAA,GAAK,OAAA;AACtB;AAMA,SAAS,YAAY,MAAA,EAAqC;AACxD,EAAA,OAAO,MAAA,CACJ,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAClD,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AAChC,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AAE9B,IAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AAAA,EACtB,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,CAAA,KAA4B,MAAM,IAAA,IAAQ,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,GAAG,CAAA;AACtE;AAKA,SAAS,WAAW,KAAA,EAA0B;AAC5C,EAAA,OAAO,IAAA,CAAK,QAAQ,CAAC,CAAA;AACvB;AAKA,SAAS,YAAY,IAAA,EAAoB;AACvC,EAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,EAAO;AAC1B,EAAA,OAAO,KAAA,KAAU,CAAA,GAAI,CAAA,GAAI,KAAA,GAAQ,CAAA;AACnC;AAKA,SAAS,iBAAiB,IAAA,EAAoB;AAC5C,EAAA,OAAO,IAAA,CAAK,QAAA,EAAS,GAAI,EAAA,GAAK,KAAK,UAAA,EAAW;AAChD;AAKA,SAAS,UAAA,CAAW,MAAc,MAAA,EAAoC;AACpE,EAAA,OAAO,MAAA,CAAO,KAAK,CAAC,KAAA,KAAU,QAAQ,KAAA,CAAM,KAAA,IAAS,IAAA,GAAO,KAAA,CAAM,GAAG,CAAA;AACvE;AAKA,SAAS,aAAA,CAAc,MAAc,MAAA,EAAmD;AACtF,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AAC3D,EAAA,OAAO,OAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,KAAA,GAAQ,IAAI,CAAA,IAAK,IAAA;AACvD;AAiBO,SAAS,gBAAgB,QAAA,EAAwD;AACtF,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,OAAOC,QAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,QAAA,EAAU,OAAA,IAAW,CAAC,UAAU,KAAA,EAAO;AAC1C,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,IAAA;AAAA;AAAA,QACR,SAAA,EAAW,KAAA;AAAA,QACX,QAAA,EAAU,IAAA;AAAA,QACV,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAEA,IAAA,MAAM,QAAQ,QAAA,CAAS,KAAA;AACvB,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,eAAA,GAAkB,YAAY,GAAG,CAAA;AACvC,IAAA,MAAM,WAAA,GAAc,iBAAiB,GAAG,CAAA;AAGxC,IAAA,MAAM,WAA2C,EAAC;AAClD,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,SAAA,GAAY,MAAM,GAAG,CAAA;AAC3B,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI;AAAA,QACd,MAAA,EAAQ,SAAA,GAAY,WAAA,CAAY,SAAS,IAAI;AAAC,OAChD;AAAA,IACF;AAGA,IAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,UAAA,CAAW,eAAe,CAAC,CAAA;AAC1D,IAAA,IAAI,UAAA,CAAW,WAAA,EAAa,aAAA,CAAc,MAAM,CAAA,EAAG;AACjD,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,IAAA;AAAA,QACR,SAAA,EAAW,IAAA;AAAA,QACX,QAAA,EAAU,IAAA;AAAA,QACV,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAIA,IAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,WAAA,EAAa,aAAA,CAAc,MAAM,CAAA;AACtE,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,GAAG,CAAA;AAC7B,MAAA,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,KAAA,GAAQ,EAAE,CAAA,EAAG,cAAA,CAAe,KAAA,GAAQ,EAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AAExF,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA,EAAW,IAAA;AAAA,QACX,QAAA;AAAA,QACA,iBAAA,EAAmB,cAAA,CAAe,QAAA,EAAU,CAAC;AAAA,OAC/C;AAAA,IACF;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AAC3B,MAAA,MAAM,YAAA,GAAA,CAAgB,kBAAkB,CAAA,IAAK,CAAA;AAC7C,MAAA,MAAM,WAAA,GAAc,WAAW,YAAY,CAAA;AAC3C,MAAA,MAAM,eAAA,GAAkB,SAAS,WAAW,CAAA;AAE5C,MAAA,IAAI,eAAA,CAAgB,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAErC,QAAA,MAAM,UAAA,GAAa,CAAC,GAAG,eAAA,CAAgB,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,EAAE,CAAC,CAAA;AAElF,QAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,GAAG,CAAA;AAC7B,QAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,CAAS,OAAA,EAAQ,GAAI,CAAC,CAAA;AACvC,QAAA,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,KAAA,GAAQ,EAAE,CAAA,EAAG,UAAA,CAAW,KAAA,GAAQ,EAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AAEhF,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,KAAA;AAAA,UACR,SAAA,EAAW,IAAA;AAAA,UACX,QAAA;AAAA,UACA,iBAAA,EAAmB,cAAA,CAAe,QAAA,EAAU,CAAC;AAAA,SAC/C;AAAA,MACF;AAAA,IACF;AAGA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU,IAAA;AAAA,MACV,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,CAAC,CAAC,CAAA;AAClB;AAMA,SAAS,cAAA,CAAe,MAAY,CAAA,EAAoC;AACtE,EAAA,MAAM,OAAA,GAAU,EAAE,SAAA,CAAU,UAAA,CAAW,YAAY,IAAI,CAAC,CAAC,CAAC,CAAA;AAC1D,EAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,EAAA,MAAM,OAAA,GAAU,KAAK,UAAA,EAAW,CAAE,UAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAC5D,EAAA,MAAM,OAAO,KAAA,IAAS,EAAA;AACtB,EAAA,MAAM,eAAe,KAAA,GAAQ,EAAA,GAAK,QAAQ,EAAA,GAAK,KAAA,KAAU,IAAI,EAAA,GAAK,KAAA;AAClE,EAAA,MAAM,WAAW,CAAA,CAAE,UAAA,CAAW,IAAA,GAAO,IAAA,GAAO,IAAI,CAAC,CAAA;AAEjD,EAAA,OAAO,GAAG,OAAO,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,EAAI,OAAO,IAAI,QAAQ,CAAA,CAAA;AAC1D;AC3MO,SAAS,cAAc,QAAA,EAAgC;AAC5D,EAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAAF,UAAU,MAAM;AACd,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,IAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK;AACvB,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,aAAA,EAAe;AAC1C,QAAA,OAAA,CAAQ,KAAK,sEAAsE,CAAA;AAAA,MACrF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,WAAA,CAAY,OAAA;AAC5B,IAAA,MAAM,MAAM,OAAA,CAAQ,GAAA,IAAO,OAAO,QAAA,CAAS,QAAA,GAAW,OAAO,QAAA,CAAS,MAAA;AAEtE,IAAA,KAAA,CAAM,MAAA,CAAO,IAAI,MAAA,EAAQ;AAAA,MACvB,GAAG,OAAA;AAAA,MACH;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AACP;;;AC5DA,IAAM,uBAAA,GAA0B,qBAAA;AAEzB,SAAS,qBAAA,GAA2C;AACzD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,cAAA,CAAe,OAAA,CAAQ,uBAAuB,CAAA;AAC1D,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,IAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACpC,IAAA,OAAO,OAAO,SAAS,QAAA,IAAY,OAAO,QAAQ,QAAA,GAAW,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,IAAA;AAAA,EAC/E,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,SAAS,sBAAsB,UAAA,EAA8B;AAClE,EAAA,IAAI;AACF,IAAA,cAAA,CAAe,OAAA,CAAQ,uBAAA,EAAyB,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA;AAAA,EAC5E,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;;;ACfO,SAAS,eAAe,IAAA,EAAkC;AAC/D,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIG,SAA4B,IAAI,CAAA;AAE1E,EAAAH,UAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM,SAAS,gBAAA,EAAkB;AACnC,MAAA,MAAM,MAAM,qBAAA,EAAsB;AAClC,MAAA,IAAI,GAAA,mBAAsB,GAAG,CAAA;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAErB,IAAA,IAAI,CAAC,UAAU,IAAA,EAAM;AACnB,MAAA,qBAAA,CAAsB,EAAE,MAAM,IAAA,CAAK,KAAA,EAAO,KAAK,QAAA,CAAS,QAAA,GAAW,QAAA,CAAS,SAAA,EAAW,CAAA;AAAA,IACzF;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,MAAA,EAAQ,SAAS,QAAA,EAAU,QAAA,CAAS,SAAS,CAAC,CAAA;AAExD,EAAA,OAAOE,QAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AAEnB,IAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAQ;AAC5B,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,gBAAA,IAAoB,aAAA,EAAe;AACnD,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,EAAA,CAAG,EAAE,CAAA;AACnC,QAAA,OAAO,IAAA,GAAO,CAAC,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,EAAG,aAAA,EAAe,IAAI,CAAA,GAAI,IAAA,CAAK,WAAA;AAAA,MAClE;AACA,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACd;AAEA,IAAA,IAAI,MAAA,SAAe,EAAC;AAEpB,IAAA,MAAM,OAAmB,EAAE,IAAA,EAAM,EAAE,oBAAoB,CAAA,EAAG,KAAK,GAAA,EAAI;AACnE,IAAA,OAAO,CAAC,MAAM,EAAE,IAAA,EAAM,KAAK,KAAA,EAAO,GAAA,EAAK,QAAA,CAAS,QAAA,EAAU,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAA,CAAS,UAAU,IAAA,EAAM,CAAA,EAAG,aAAa,CAAC,CAAA;AACxD;AC1BA,IAAM,aAAA,GAAgBD,IAAAA;AAAA,EAAK,MACzB,OAAO,yBAAkC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,aAAA,EAAc,CAAE;AACvF,CAAA;AAEA,IAAM,eAAA,GAAkBA,IAAAA;AAAA,EAAK,MAC3B,OAAO,+BAAwC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,eAAA,EAAgB,CAAE;AAC/F,CAAA;AAEA,IAAM,eAAA,GAAkBA,IAAAA;AAAA,EAAK,MAC3B,OAAO,2BAAoC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,WAAA,EAAY,CAAE;AACvF,CAAA;AAEA,IAAM,2BAAA,GAA8BA,IAAAA;AAAA,EAAK,MACvC,OAAO,uCAA6C,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,IACjE,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AAGA,IAAM,oBAAA,GAAuBA,IAAAA;AAAA,EAAK,MAChC,OAAO,gCAAqC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,gBAAA,EAAiB,CAAE;AAC7F,CAAA;AAEA,IAAM,wBAAA,GAA2BA,IAAAA;AAAA,EAAK,MACpC,OAAO,oCAAyC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,IAC7D,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AAKA,SAAS,UAAA,CAAW,EAAE,QAAA,EAAS,EAAiC;AAC9D,EAAA,IAAI,CAAC,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,KAAK,MAAA,EAAQ;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEG,GAAAA,CAAC,QAAA,EAAA,EAAS,QAAA,EAAU,MAClB,QAAA,kBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,EAC3D,CAAA;AAEJ;AAKA,SAAS,cAAA,CAAe,EAAE,QAAA,EAAS,EAAiC;AAClE,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA,EAAQ;AAE/B,EAAA,IAAI,CAAC,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,MAAM,IAAA,EAAM;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,KAAS,MAAA,IAAU,KAAK,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,GAAI,EAAA;AAExE,EAAA,uBACEA,GAAAA,CAAC,QAAA,EAAA,EAAS,QAAA,EAAU,MAClB,QAAA,kBAAAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,SAAS,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM,YAAwB,CAAA,EACzF,CAAA;AAEJ;AAKA,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAS,EAAiC;AACtE,EAAA,IAAI,CAAC,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,eAAe,OAAA,EAAS;AACtD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,IAAC,QAAA,EAAA,EAAS,QAAA,EAAU,MAClB,QAAA,kBAAAA,GAAAA,CAAC,+BAA4B,CAAA,EAC/B,CAAA;AAEJ;AAKA,SAAS,cAAA,GAAkC;AACzC,EAAA,uBACEA,IAAC,QAAA,EAAA,EAAS,QAAA,EAAU,MAClB,QAAA,kBAAAA,GAAAA,CAAC,mBAAgB,CAAA,EACnB,CAAA;AAEJ;AAMA,SAAS,iBAAA,CAAkB,EAAE,QAAA,EAAS,EAAiC;AAErE,EAAA,IAAI,CAAC,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,UAAU,WAAA,EAAa;AACrD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,IAAC,QAAA,EAAA,EAAS,QAAA,EAAU,MAClB,QAAA,kBAAAA,GAAAA,CAAC,wBAAqB,CAAA,EACxB,CAAA;AAEJ;AAMA,SAAS,2BAAA,CAA4B,EAAE,QAAA,EAAU,SAAA,EAAU,EAAiC;AAC1F,EAAA,IAAI,CAAC,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,QAAA,GAAW,qBAAqB,CAAA,EAAG;AACjE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,SAAA;AAGd,EAAA,MAAM,WAAA,GAAc,OAAO,IAAA,CAAK,CAAC,SAAS,CAAC,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,sBAAsB,CAAA;AAExF,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,IAAC,QAAA,EAAA,EAAS,QAAA,EAAU,MAClB,QAAA,kBAAAA,GAAAA,CAAC,4BAAyB,CAAA,EAC5B,CAAA;AAEJ;AAQA,SAAS,oBAAA,GAA6B;AAEpC,EAAA,YAAA,CAAa,QAAA,CAAA,YAAA,mBAA8B,YAAY,GAAG,CAAA;AAC1D,EAAA,YAAA,CAAa,QAAA,CAAA,YAAA,mBAA8B,gBAAgB,EAAE,CAAA;AAC7D,EAAA,YAAA,CAAa,QAAA,CAAA,YAAA,mBAA8B,oBAAoB,EAAE,CAAA;AAGjE,EAAA,YAAA,CAAa,QAAA,CAAA,UAAA,iBAA4B,gBAAgB,GAAG,CAAA;AAG5D,EAAA,YAAA,CAAa,QAAA,CAAS,mBAAA,EAAqB,iBAAA,EAAmB,GAAG,CAAA;AACjE,EAAA,YAAA,CAAa,QAAA,CAAS,kBAAA,EAAoB,2BAAA,EAA6B,GAAG,CAAA;AAC5E;AAGA,oBAAA,EAAqB;AC1Jd,SAAS,MAAA,GAAS;AACvB,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,WAAA,EAAY;AACrC,EAAA,MAAM,EAAE,GAAA,EAAI,GAAI,QAAA,EAAS;AACzB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAID,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,EAAE,CAAA;AAEjD,EAAA,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAA+C;AAC1E,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,aAAA,CAAc,OAAA,CAAQ,OAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,cAAA,CAAe,OAAA,IAAW,EAAE,CAAA;AACnD,IAAA,MAAM,GAAA,GAAM,KAAA,EAAO,aAAA,CAAc,KAAK,CAAA;AACtC,IAAA,MAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,GAAA;AAE5B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,cAAA,CAAe,MAAM,CAAA;AACrB,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEE,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,cAAA,EAAe,0BAAwB,IAAA,EACvD,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,cAAA,EAAe,CAAA;AAAA,oBAC9BA,GAAAA,CAAC,KAAA,EAAA,EAAI,YAAA,EAAW,QAAA,EAAS,SAAA,EAAU,qBAAA,EACjC,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,SAAA,EAAU,uBAAA,EACrB,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,KAAA,CAAM,IAAA,EAAK,CAAA,EAClB,CAAA;AAAA,QACC,KAAA,CAAM,+BACLA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,yBAAA;AAAA,YACV,uBAAA,EAAyB,EAAE,MAAA,EAAQ,KAAA,CAAM,WAAA;AAAY;AAAA,SACvD;AAAA,wBAGFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,0BAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,YAAA,EAAa,CAAA,EACtC,CAAA;AAAA,wBAEAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,gBAAA,EAAA,EAAkB,GAAI,KAAA,CAAM,QAAA,EAAU,cAAA,GAAiB,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,EAAC,EAAI,CAAA;AAAA,UAE7E,KAAA,CAAM,UAAU,GAAA,EAAK,MAAA,oBACpBC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8CAAA,EACZ,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,QAAA,EAAU,GAAA,EAAK,WAAA,oBACpBD,GAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,eAAA,EAAc,iBAAA;AAAA,gBACd,IAAA,EAAK,IAAA;AAAA,gBACL,YAAA,EAAY,KAAA,CAAM,QAAA,EAAU,GAAA,EAAK,MAAA;AAAA,gBACjC,OAAA,EAAS,mBAAA;AAAA,gBAET,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,EAAA;AAAA,oBACP,MAAA,EAAQ,EAAA;AAAA,oBACR,GAAA,EAAK,IAAI,yBAAyB,CAAA;AAAA,oBAClC,SAAA,EAAU,qDAAA;AAAA,oBACV,GAAA,EAAI,iBAAA;AAAA,oBACJ,OAAA,EAAQ,MAAA;AAAA,oBACR,QAAA,EAAS;AAAA;AAAA;AACX;AAAA,aACF;AAAA,4BAEFC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAD,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BACV,QAAA,EAAA,CAAA,CAAE,4BAAA,EAA8B,YAAY,CAAA,EAC/C,CAAA;AAAA,8BACAA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,CAAM,QAAA,EAAU,KAAK,MAAA,EAAO;AAAA,aAAA,EACtD;AAAA,WAAA,EACF;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,2BAAA,EAA6B,iBAAiB,CAAA,EAAE,CAAA;AAAA,wBACvDA,GAAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAO,QAAA,EAAS;AAAA,OAAA,EAC7B,CAAA;AAAA,sBAGAC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,aAAA,EAAe,CAAA,CAAE,sBAAA,EAAwB,eAAe;AAAA;AAAA,SAC1D;AAAA,wBAEAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BACb,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAA,GAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,SAAA,EAAW,CAAA,CAAE,6BAAA,EAA+B,cAAc,CAAA;AAAA,UAC1D,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EACd,QAAA,kBAAAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,WAAA;AAAA,UACL,OAAA,EAAS,EAAE,SAAA,EAAW,KAAA,CAAM,IAAA,EAAK;AAAA,UACjC,0BAAUA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAW,MAAM,IAAA,EAAM;AAAA;AAAA,OAC9C,EACF,CAAA;AAAA,sBACAA,IAAC,aAAA,EAAA,EAAc;AAAA,KAAA,EACjB,CAAA;AAAA,oBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,IAAG,iBAAA,EAAkB,SAAA,EAAU,UAClC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,GAAA,EAAK,MAAM,QAAA,EAAU,GAAA,EAAK,eAAe,MAAA,EAAW,GAAA,EAAI,mBAAkB,CAAA,EACnF,CAAA;AAAA,oBAGAA,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,cAAA;AAAA,QACR,OAAA,EAAS,MAAM,iBAAA,CAAkB,KAAK,CAAA;AAAA,QACtC,GAAA,EAAK,WAAA;AAAA,QACL,GAAA,EAAI,iBAAA;AAAA,QACJ,KAAA,EAAO,CAAA,CAAE,iCAAA,EAAmC,iBAAiB;AAAA;AAAA,KAC/D;AAAA,oBACAA,GAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,YAAA,EAAa;AAAA,GAAA,EAC9B,CAAA;AAEJ;AC1IA,IAAM,eAAA,GAAkBH,IAAAA;AAAA,EAAK,MAC3B,OAAO,iDAAiD,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,IACrE,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AACA,IAAM,WAAA,GAAcA,IAAAA;AAAA,EAAK,MACvB,OAAO,4CAA4C,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,IAChE,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AACA,IAAM,eAAA,GAAkBA,IAAAA;AAAA,EAAK,MAC3B,OAAO,iDAAiD,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,IACrE,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AAEO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAS,EAAgB;AACtD,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,OAAA,EAAQ;AAE/B,EAAA,uBACEI,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,IAAC,MAAA,EAAA,EAAO,CAAA;AAAA,sBACRA,IAAC,MAAA,EAAA,EAAK,EAAA,EAAG,gBAAe,IAAA,EAAK,MAAA,EAAO,SAAA,EAAU,QAAA,EAC3C,QAAA,EACH,CAAA;AAAA,sBACAA,IAAC,MAAA,EAAA,EAAO;AAAA,KAAA,EACV,CAAA;AAAA,oBAEAA,GAAAA,CAACG,QAAAA,EAAA,EACC,QAAA,kBAAAH,GAAAA,CAAC,mBAAgB,CAAA,EACnB,CAAA;AAAA,IAEC,CAAC,UAAA,oBACAA,GAAAA,CAACG,QAAAA,EAAA,EACC,QAAA,kBAAAH,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAgB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,aAAA;AAAA,QACvC,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,cAAA;AAAA,QACxC,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,iBAAA;AAAA,QACxC,wBAAA,EAAwB;AAAA;AAAA,KAC1B,EACF,CAAA;AAAA,IAGD,OAAO,KAAA,oBACNA,GAAAA,CAACG,QAAAA,EAAA,EACC,QAAA,kBAAAH,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,UAAA,KAAe,UAAU,WAAA,GAAc,UAAA;AAAA,QAChE,wBAAA,EAAwB;AAAA;AAAA,KAC1B,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACtCA,IAAMI,YAAW,MAAO,OAAO,MAAA,KAAW,WAAA,GAAc,OAAO,KAAA,GAAQ,MAAA;AAEvE,IAAM,mBAAA,GAAsB;AAAA,EAC1B,MAAA,EACE,8HAAA;AAAA,EACF,KAAA,EACE,6FAAA;AAAA,EACF,IAAA,EAAM,6FAAA;AAAA,EACN,IAAA,EAAM,6FAAA;AAAA,EACN,KAAA,EAAO,oCAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAKO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,QAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR,QAAA;AAAA,EACA,YAAA,EAAc,iBAAA;AAAA,EACd,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS,EAAE,SAAA,EAAW,UAAA,EAAY,gBAAgB,IAAA,EAAK;AAAA,EACvD,KAAA,GAAQ,IAAA;AAAA,EACR,mBAAA,GAAsB,eAAA;AAAA,EACtB,cAAA,GAAiB,IAAA;AAAA,EACjB,UAAA,GAAa,IAAA;AAAA,EACb,QAAQ,eAAA,GAAkB;AAC5B,CAAA,EAA8C;AAC5C,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,EAAA,MAAM,aAAA,GAAgB,IAAI,MAAA,IAAU,eAAA;AACpC,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI;AACF,IAAA,WAAA,GAAc,GAAA,CAAI,QAAA;AAAA,EACpB,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIL,SAAwB,MAAM;AAC9D,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA,OAAO,GAAA,CAAI,SAAA,IAAa,MAAA,CAAO,YAAA,CAAa,QAAQ,sBAAsB,CAAA;AAAA,IAC5E;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAAH,UAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,IAAA,MAAM,MAAMQ,SAAAA,EAAS;AACrB,IAAA,IAAI,CAAC,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO;AAMvB,IAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAkB;AACzC,MAAA,QAAA,CAAS,MAAA,GAAS,GAAG,sBAAsB,CAAA,CAAA,EAAI,KAAK,CAAA,kBAAA,EAAqB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAE,CAAA,sBAAA,CAAA;AAAA,IAC5F,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,oBAAA;AAKxB,IAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,KAA2B;AACjD,MAAA,GAAA,CAAI,MAAA,EAAQ,GAAA,GAAM,WAAA,EAAa,IAAI,CAAA;AAAA,IACrC,CAAA;AAEA,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,sBAAsB,CAAA;AAEvD,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,YAAA,CAAa,QAAQ,CAAA;AACrB,MAAA,qBAAA,CAAsB,EAAE,SAAA,EAAW,QAAA,EAAU,CAAA;AAC7C,MAAA,cAAA,CAAe,MAAM,CAAA;AAAA,IACvB,CAAA;AAIA,IAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAmB;AAC7C,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,EAAO;AACzC,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,qBAAA,CAAsB,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA;AAC1C,MAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,MAAA,cAAA,CAAe,MAAM,CAAA;AAAA,IACvB,CAAA;AAEA,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,kBAAA,EAAmB,CAAE,SAAS,CAAA;AAC1D,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,qBAAA,CAAsB,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACzC,MAAA,cAAA,CAAe,OAAO,CAAA;AAGtB,MAAA,IAAI;AACF,QAAA,eAAA,EAAgB;AAAA,MAClB,CAAA,CAAA,MAAQ;AAAA,MAER;AAKA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAA,CAAO,WAAW,MAAM,MAAA,CAAO,QAAA,CAAS,MAAA,IAAU,IAAI,CAAA;AAAA,MACxD;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,qBAAqB,MAAM;AAC/B,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,qBAAA,CAAsB,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACzC,MAAA,cAAA,CAAe,OAAO,CAAA;AACtB,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,YAAA,CAAa,WAAW,sBAAsB,CAAA;AACrD,QAAA,GAAA,CAAI,OAAA,CAAQ,SAAS,sBAAsB,CAAA;AAC3C,QAAA,eAAA,EAAgB;AAAA,MAClB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAEA,IAAA,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,WAAW,CAAA;AACrC,IAAA,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,YAAY,CAAA;AACvC,IAAA,GAAA,CAAI,KAAA,CAAM,EAAA,CAAG,qBAAA,EAAuB,kBAAkB,CAAA;AACtD,IAAA,GAAA,CAAI,KAAA,CAAM,EAAA,CAAG,qBAAA,EAAuB,kBAAkB,CAAA;AAEtD,IAAA,GAAA,CAAI,KAAA,CAAM,EAAA,CAAG,qBAAA,EAAuB,kBAAkB,CAAA;AAEtD,IAAA,OAAO,MAAM;AAEX,MAAA,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,gBAAA,EAAkB,WAAW,CAAA;AAC3C,MAAA,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,iBAAA,EAAmB,YAAY,CAAA;AAC7C,MAAA,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,qBAAA,EAAuB,kBAAkB,CAAA;AACvD,MAAA,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,qBAAA,EAAuB,kBAAkB,CAAA;AACvD,MAAA,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,qBAAA,EAAuB,kBAAkB,CAAA;AAAA,IACzD,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,EAAE,SAAS,SAAA,EAAW,YAAA,EAAc,WAAW,QAAA,EAAU,eAAA,KAC7D,eAAA,CAAgB;AAAA,IACd,KAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AAEH,EAAA,MAAM,MAAA,GAASN,QAAwB,OAAO,EAAE,OAAM,CAAA,EAAI,CAAC,KAAK,CAAC,CAAA;AAEjE,EAAA,MAAM,GAAA,GAAMA,OAAAA;AAAA,IACV,OAAO;AAAA,MACL,cAAA,EAAgB,CAAC,KAAA,KACf,OAAA,CAAQ,eAAe,CAAA,oBAAA,EAAkB,KAAK,CAAA,CAAA,CAAA,EAAK,mBAAA,CAAoB,MAAM,CAAA;AAAA,MAC/E,KAAA,EAAO,CAAC,KAAA,KAAU,OAAA,CAAQ,MAAM,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,mBAAA,CAAoB,KAAK,CAAA;AAAA,MACvE,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA,EAAS;AAAA,MACjC,KAAA,EAAO,CAAC,KAAA,EAAO,KAAA,KACb,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAA,EAAM,KAAK,CAAA,GAAA,CAAA,EAAO,mBAAA,CAAoB,KAAA,EAAO,mBAAA,CAAoB,OAAO,KAAK,CAAA;AAAA,MAC3F,IAAA,EAAM,CAAC,KAAA,EAAO,KAAA,KACZ,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAA,EAAM,KAAK,CAAA,GAAA,CAAA,EAAO,mBAAA,CAAoB,IAAA,EAAM,mBAAA,CAAoB,OAAO,KAAK,CAAA;AAAA,MAC1F,IAAA,EAAM,CAAC,KAAA,EAAO,KAAA,KACZ,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAA,EAAM,KAAK,CAAA,GAAA,CAAA,EAAO,mBAAA,CAAoB,IAAA,EAAM,mBAAA,CAAoB,OAAO,KAAK,CAAA;AAAA,MAC1F,KAAA,EAAO,CAAC,KAAA,EAAO,KAAA,KACb,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAA,EAAM,KAAK,CAAA,GAAA,CAAA,EAAO,mBAAA,CAAoB,KAAA,EAAO,mBAAA,CAAoB,OAAO,KAAK,CAAA;AAAA,MAC3F,GAAA,EAAK,CAAC,KAAA,EAAO,KAAA,KAAU;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,oBAAoB,KAAK,CAAA;AACnD,QAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AAAA,MACnB,CAAA;AAAA,MACA,KAAA,EAAO,CAAC,KAAA,EAAO,KAAA,KAAU;AACvB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,oBAAoB,KAAK,CAAA;AACnD,QAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,MACrB;AAAA,KACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAA,GAAeA,OAAAA;AAAA,IACnB,OAAO;AAAA,MACL,OAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,SAAA,EAAW,YAAA;AAAA,MACX,KAAA,EAAO,SAAA;AAAA,MACP,QAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAI,KAAA,GAAQ;AACV,QAAA,OAAOM,SAAAA,EAAS;AAAA,MAClB,CAAA;AAAA,MACA,IAAI,QAAA,GAAW;AACb,QAAA,OAAO,oBAAmB,CAAE,QAAA;AAAA,MAC9B,CAAA;AAAA,MACA,IAAI,MAAA,GAAS;AACX,QAAA,OAAO,oBAAmB,CAAE,MAAA;AAAA,MAC9B,CAAA;AAAA,MACA,IAAI,OAAA,GAAU;AACZ,QAAA,OAAO,oBAAmB,CAAE,OAAA;AAAA,MAC9B,CAAA;AAAA,MACA,IAAI,QAAA,GAAW;AACb,QAAA,OAAO,oBAAmB,CAAE,QAAA;AAAA,MAC9B,CAAA;AAAA,MACA,IAAI,SAAA,GAAY;AACd,QAAA,OAAO,SAAA;AAAA,MACT,CAAA;AAAA,MACA,IAAI,IAAA,GAAO;AACT,QAAA,OAAO,oBAAmB,CAAE,IAAA;AAAA,MAC9B,CAAA;AAAA,MACA,IAAI,GAAA,GAAM;AACR,QAAA,OAAO,oBAAmB,CAAE,GAAA;AAAA,MAC9B,CAAA;AAAA,MACA,IAAI,MAAA,GAAS;AACX,QAAA,OAAO,oBAAmB,CAAE,MAAA;AAAA,MAC9B;AAAA,KACF,CAAA;AAAA,IACA,CAAC,SAAS,SAAA,EAAW,YAAA,EAAc,WAAW,QAAA,EAAU,MAAA,EAAQ,KAAK,SAAS;AAAA,GAChF;AAEA,EAAA,MAAM,SAAA,GAAY,MAAA,KAAW,KAAA,GAAS,MAAA,EAAQ,aAAa,UAAA,GAAc,IAAA;AACzE,EAAA,MAAM,YAAA,GAAe,SAAA,GAAY,gBAAA,CAAiB,SAAS,CAAA,GAAI,IAAA;AAC/D,EAAA,MAAM,gBAAA,GAAmB,UAAA,IAAc,SAAA,GAAY,kBAAA,CAAmB,SAAS,CAAA,GAAI,IAAA;AACnF,EAAA,MAAM,cAAA,GAAiB,MAAA,KAAW,KAAA,KAAU,MAAA,EAAQ,cAAA,IAAkB,IAAA,CAAA;AAEtE,EAAA,MAAM,mBAAA,GAAsBN,OAAAA;AAAA,IAC1B,MAAO,gBAAA,GAAmBO,MAAAA,CAAM,aAAA,CAAc,gBAAgB,CAAA,GAAI,IAAA;AAAA,IAClE,CAAC,gBAAgB;AAAA,GACnB;AAEA,EAAA,MAAM,UAAA,GAAaP,QAAQ,MAAM;AAC/B,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,OAAO;AAAA,MACL,eAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YAAA,GAAeA,QAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAExB,IAAA,MAAM,KAAA,GAAQ,WAAW,eAAA,mBACvBE,IAAC,UAAA,CAAW,eAAA,EAAX,EAA4B,QAAA,EAAS,CAAA,GAEtC,QAAA;AAGF,IAAA,MAAM,OAAA,mBACJC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAF,IAAC,UAAA,EAAA,EAAW,CAAA;AAAA,sBACZA,GAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAA,YAAA,mBAA2B,CAAA;AAAA,sBACrCC,IAAAA,CAACE,QAAAA,EAAA,EAAS,UAAU,IAAA,EACjB,QAAA,EAAA;AAAA,QAAA,UAAA,CAAW,yBACVH,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,gBAAgB,UAAA,CAAW,mBAAA;AAAA,YAC3B,gBAAgB,UAAA,CAAW;AAAA;AAAA,SAC7B;AAAA,QAED,UAAA,CAAW,cAAA,oBAAkBA,GAAAA,CAAC,qBAAA,EAAA,EAAsB;AAAA,OAAA,EACvD,CAAA;AAAA,MACC,KAAA;AAAA,sBACDA,GAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAA,UAAA,iBAAyB;AAAA,KAAA,EACrC,CAAA;AAGF,IAAA,IAAI,WAAW,YAAA,EAAc;AAC3B,MAAA,OAAOK,MAAAA,CAAM,aAAA,CAAc,UAAA,CAAW,YAAA,EAAc,MAAM,OAAO,CAAA;AAAA,IACnE;AACA,IAAA,OAAO,OAAA;AAAA,EAET,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,MAAM,YAAA,GAAeP,QAAQ,MAAM,kBAAA,GAAqB,IAAA,EAAM,CAAC,aAAa,CAAC,CAAA;AAE7E,EAAA,uBACEE,GAAAA,CAAC,qBAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,YAAA,EAC/B,QAAA,kBAAAC,IAAAA,CAAC,YAAA,EAAA,EAAa,cAA4B,iBAAA,EACxC,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,SAAA;AAAA,QACP,MAAA,EAAQ,aAAA;AAAA,QACR,SAAA,EAAW,oBAAmB,CAAE,GAAA;AAAA,QAChC;AAAA;AAAA,KACF;AAAA,IACC,mBAAA;AAAA,IACA,CAAC,OAAA,oBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,QAAA,oBAAYA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAkB,CAAA,EAAG,CAAA;AAAA,IAEnF;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;;;AClSO,SAAS,QAAA,GAA2B;AACzC,EAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,KAAU,WAAA,EAAY;AAEhD,EAAA,MAAM,OAAA,GAAUM,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,GAAA,EAAI;AAC9B,MAAA,IAAI,IAAA,EAAM,KAAA,IAAS,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AACjD,QAAA,SAAA,CAAU,CAAC,UAAU,EAAE,GAAG,MAAM,GAAI,IAAA,CAAK,OAAyB,CAAE,CAAA;AAAA,MACtE;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,SAAS,CAAC,CAAA;AAErB,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,OAAA,EAAQ;AAC7B","file":"chunk-2V5MRDHQ.js","sourcesContent":["import type { Theme } from '../types';\nimport { color as makeColor } from './color';\n\nexport function applyTheme(theme: Theme): void {\n if (typeof document === 'undefined') return;\n\n const vars: [string, string][] = [];\n\n if (theme.font?.name) {\n vars.push(\n ['--font-main', theme.font.name],\n ['--font-light', theme.font.name],\n ['--font-regular', theme.font.name],\n ['--font-medium', `${theme.font.name}-Medium`],\n ['--font-bold', `${theme.font.name}-Bold`]\n );\n }\n\n const { color } = theme;\n if (color) {\n vars.push(['--color-text', '#222222']);\n\n if (color.primary) {\n const c = makeColor(color.primary);\n vars.push(\n ['--color-primary', color.primary],\n ['--color-primary-dark', c.darken(0.15)],\n ['--color-primary-light', c.lighten(0.15)],\n ['--color-title', color.primary],\n ['--color-secondary', color.primary]\n );\n }\n\n if (color.reverse_text) {\n vars.push(\n ['--color-primary-reverse', color.reverse_text],\n ['--color-text-reverse', color.reverse_text],\n ['--color-reverse-text', color.reverse_text]\n );\n }\n\n if (color.reverse_primary) {\n vars.push(['--color-reverse-primary', color.reverse_primary]);\n }\n }\n\n vars.push(['--page-height', '100%']);\n\n const root = document.documentElement;\n for (const [prop, val] of vars) {\n root.style.setProperty(prop, val);\n }\n}\n","import { useEffect } from 'react';\nimport { applyTheme } from '../utils/apply-theme';\nimport { useDocumentClass } from '../hooks/useDocumentClass';\nimport type { Theme } from '../types';\n\nexport function fontToClass(name: string | undefined): string | null {\n if (!name) return null;\n const slug = name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n return slug ? `font-${slug}` : null;\n}\n\nexport function ThemeDocumentSync({\n theme,\n locale,\n direction,\n isMobileWebview,\n}: {\n theme: Theme;\n locale: string;\n direction: 'rtl' | 'ltr';\n isMobileWebview: boolean;\n}): null {\n const bodyClasses = [\n theme.name ? `salla-${theme.name}` : null,\n `color-mode-${theme.color?.is_dark ? 'dark' : 'light'}`,\n direction,\n theme.mode === 'preview' ? 'preview-mode' : null,\n fontToClass(theme.font?.name),\n isMobileWebview ? 'mobile-webview' : null,\n theme.settings?.footer_is_dark ? 'footer-is-dark' : 'footer-is-light',\n theme.settings?.topnav_is_dark ? 'topnav-is-dark' : null,\n theme.settings?.sticky_add_to_cart ? 'is-sticky-product-bar' : null,\n ].filter(Boolean) as string[];\n\n useDocumentClass({\n html: { lang: locale, dir: direction },\n body: { class: bodyClasses },\n });\n\n useEffect(() => {\n applyTheme(theme);\n }, [theme]);\n\n return null;\n}\n","/**\n * The engine's own build version, injected by tsup `define` when dist is\n * built. Falls back to 'dev' when the source runs unbundled (vitest, direct\n * src imports in the monorepo).\n *\n * Exposed at runtime as `salla.versions.engine` by `useTwilightInit` so a\n * storefront can always be asked which engine build rendered it.\n */\nexport const ENGINE_VERSION: string =\n typeof __TWILIGHT_ENGINE_VERSION__ !== 'undefined' ? __TWILIGHT_ENGINE_VERSION__ : 'dev';\n","import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react';\nimport type { SallaCurrency, SallaSDK } from 'src/types/salla-sdk';\nimport { useDevSettingsOverrides } from '../dev/dev-settings-store';\nimport { getTwilightContext } from '../twilight/context';\nimport type { Store, Theme } from '../types';\nimport { syncScopeCookie } from '../utils/cookies';\nimport { ENGINE_VERSION } from '../utils/engine-version';\nimport { type StoreContext, syncSdkLocale } from '../utils/sdk-helpers';\nimport { getLanguageInfo } from './locale-constants';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getSalla(): SallaSDK | undefined {\n if (typeof window === 'undefined') return undefined;\n return window.salla;\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\nexport interface UseTwilightInitOptions {\n debug: boolean;\n initialData?: StoreContext | Record<string, unknown>;\n onReady?: (data: { store: Store; theme: Theme }) => void;\n onError?: (error: Error) => void;\n initialLocale: string;\n}\n\nexport interface UseTwilightInitReturn {\n isReady: boolean;\n storeData: Store;\n setStoreData: Dispatch<SetStateAction<Store>>;\n themeData: Theme;\n currency: SallaCurrency | null;\n isMobileWebview: boolean;\n}\n\nexport function useTwilightInit({\n debug: _debug,\n initialData,\n onReady,\n onError: _onError,\n initialLocale,\n}: UseTwilightInitOptions): UseTwilightInitReturn {\n const isBrowser = typeof window !== 'undefined';\n const initialLanguage = getLanguageInfo(initialLocale);\n const settingsData = initialData as StoreContext | undefined;\n\n const [isReady, setReady] = useState<boolean>(() => !!settingsData);\n const [storeData, setStoreData] = useState<Store>(\n () => (settingsData?.store as Store) ?? ({} as Store)\n );\n const [baseTheme] = useState<Theme>(() => {\n const theme = settingsData?.theme as Partial<Theme> | undefined;\n if (theme) {\n return {\n ...theme,\n is_rtl: theme.is_rtl ?? initialLanguage.dir === 'rtl',\n } as Theme;\n }\n return { is_rtl: initialLanguage.dir === 'rtl' } as Theme;\n });\n\n // Dev-mode only: overlay the settings the DevSettingsWidget has enabled onto\n // the real theme so the storefront renders with them live. `import.meta.env.DEV`\n // is statically false in production builds, so this whole branch (and the\n // overrides hook's effect) is dead-code-eliminated from the shipped bundle.\n const devOverrides = useDevSettingsOverrides();\n const themeData = useMemo<Theme>(() => {\n if (import.meta.env.DEV && devOverrides.enabled) {\n const overrides = devOverrides.settings;\n if (overrides && Object.keys(overrides).length > 0) {\n return {\n ...baseTheme,\n settings: { ...(baseTheme.settings ?? {}), ...overrides } as Theme['settings'],\n };\n }\n }\n return baseTheme;\n }, [baseTheme, devOverrides]);\n const [currency] = useState<SallaCurrency | null>(null);\n const [isMobileWebview] = useState<boolean>(false); // todo :: add a flage in the store data for mobile\n\n useEffect(() => {\n if (!isBrowser || !themeData) return;\n const sdk = getSalla();\n sdk?.config?.set?.('theme.is_rtl', themeData.is_rtl ?? false);\n window.enable_more_menu = String(themeData.settings?.enable_more_menu ?? true);\n }, [themeData, isBrowser]);\n\n useEffect(() => {\n const sdk = getSalla();\n if (!sdk) return;\n\n // Expose which engine build rendered this storefront (salla.versions.engine)\n // for debugging and support tooling. Merged, not assigned, so other Salla\n // packages can register their own versions on the same object.\n const sdkWithVersions = sdk as SallaSDK & { versions?: Record<string, string> };\n sdkWithVersions.versions = { ...sdkWithVersions.versions, engine: ENGINE_VERSION };\n\n if (initialLocale) {\n // Sync UI translations + the SDK's axios accept-language header to the route locale.\n // The header set may be a no-op now if the SDK isn't fully ready; it's re-asserted\n // after onReady below, and on every navigation in rootBeforeLoad.\n syncSdkLocale(initialLocale);\n }\n\n if (typeof sdk.init !== 'function') return;\n\n const ctx = getTwilightContext();\n const pageCtx = ctx.page;\n const initData = pageCtx\n ? {\n ...settingsData,\n page: {\n ...pageCtx,\n url: pageCtx.url ?? ctx.location.pathname + ctx.location.searchStr,\n },\n }\n : settingsData;\n\n sdk.init(initData);\n\n const initSdk = async () => {\n try {\n await sdk.onReady();\n } catch {\n // sdk.onReady() may fail during partial initialization\n }\n\n // The SDK loads async; the sync above may have run against a not-yet-ready SDK.\n // Now that it's ready, re-assert so the very first SDK API calls use the route locale.\n syncSdkLocale(initialLocale);\n\n // Mirror the selected branch into the `scope` cookie so the NEXT SSR request keys\n // its settings query on the same scope the client does. rootBeforeLoad also calls\n // this, but only from a client-side navigation: on the initial load TanStack\n // restores the root match's __beforeLoadContext instead of re-running beforeLoad,\n // so a visitor who never navigates would otherwise never write the cookie. Here is\n // the earliest point salla.storage is guaranteed populated.\n syncScopeCookie();\n\n setReady(true);\n document.dispatchEvent(new CustomEvent('theme::ready'));\n\n onReady?.({\n store: storeData,\n theme: themeData,\n });\n };\n\n initSdk();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Intentional: SDK init runs once per locale change only\n }, [initialLocale]);\n\n return {\n isReady,\n storeData,\n setStoreData,\n themeData,\n currency,\n isMobileWebview,\n };\n}\n","import { lazy, type LazyExoticComponent, type FC, type ReactNode } from 'react';\n\nexport const navigationSetups: Record<string, LazyExoticComponent<FC<{ children: ReactNode }>>> = {\n tanstack: lazy(() =>\n import('../tanstack/navigation').then((m) => ({ default: m.NavigationSetup }))\n ),\n nextjs: lazy(() => import('../nextjs/navigation').then((m) => ({ default: m.NavigationSetup }))),\n};\n","import { lazy, type FC, type LazyExoticComponent } from 'react';\n\n/**\n * Registry for framework-specific document sync components.\n * Each framework (tanstack, nextjs, etc.) can register its own sync component.\n * Used by TwilightProvider to automatically apply route-based body classes.\n *\n * @example Adding a new framework\n * ```ts\n * import { registerDocumentSync } from '@salla.sa/twilight-theme-engine';\n *\n * registerDocumentSync('my-framework', lazy(() => import('./my-document-sync')));\n * ```\n */\nexport const routeDocumentSyncs: Record<string, LazyExoticComponent<FC>> = {\n tanstack: lazy(() =>\n import('../tanstack/document-class').then((m) => ({\n default: m.TanStackDocumentSync,\n }))\n ),\n // Add other frameworks here:\n // nextjs: lazy(() => import('../nextjs/document-sync').then(m => ({ default: m.NextjsDocumentSync }))),\n};\n\n/**\n * Register a framework-specific document sync component.\n * Convenience function for adding new frameworks to the registry.\n */\nexport function registerDocumentSync(framework: string, component: LazyExoticComponent<FC>): void {\n routeDocumentSyncs[framework] = component;\n}\n","import { useTranslation } from '../providers/I18nProvider';\n\ntype DateFormat = 'full' | 'long' | 'medium' | 'short' | 'time';\n\nexport type DateInput =\n | string\n | number\n | Date\n | { date: string; timezone_type: number; timezone: string }\n | undefined;\n\nfunction normalizeDate(input: DateInput): Date {\n if (!input) return new Date();\n if (input instanceof Date) return input;\n if (typeof input === 'number') return new Date(input);\n if (typeof input === 'object' && 'date' in input) return new Date(input.date);\n return new Date(input);\n}\n\nexport interface UseDateResult {\n format: (date: DateInput, formatType?: DateFormat) => string;\n ago: (date: DateInput) => string;\n now: Date;\n}\n\n/**\n * useDate - Hook for formatting dates\n *\n * @example\n * const { format, ago, now } = useDate();\n * format('2024-03-15') // 'March 15, 2024'\n * format('2024-03-15', 'full') // 'Friday, March 15, 2024'\n * ago(Date.now() - 3600000) // '1 hour ago'\n * now // current Date object\n */\nexport function useDate(): UseDateResult {\n const { locale } = useTranslation();\n\n const format = (date: DateInput, formatType: DateFormat = 'medium'): string => {\n const dateObj = normalizeDate(date);\n\n const formatOptionsMap: Record<DateFormat, Intl.DateTimeFormatOptions> = {\n full: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' },\n long: { year: 'numeric', month: 'long', day: 'numeric' },\n medium: { year: 'numeric', month: 'long', day: 'numeric' },\n short: { year: 'numeric', month: 'short', day: 'numeric' },\n time: { hour: '2-digit', minute: '2-digit' },\n };\n\n try {\n return new Intl.DateTimeFormat(locale, formatOptionsMap[formatType]).format(dateObj);\n } catch {\n return dateObj.toLocaleDateString(locale);\n }\n };\n\n const ago = (date: DateInput): string => {\n const dateObj = normalizeDate(date);\n const diffInSeconds = Math.floor((Date.now() - dateObj.getTime()) / 1000);\n\n const units: Array<{ unit: Intl.RelativeTimeFormatUnit; threshold: number; divisor: number }> =\n [\n { unit: 'year', threshold: 31536000, divisor: 31536000 },\n { unit: 'month', threshold: 2592000, divisor: 2592000 },\n { unit: 'week', threshold: 604800, divisor: 604800 },\n { unit: 'day', threshold: 86400, divisor: 86400 },\n { unit: 'hour', threshold: 3600, divisor: 3600 },\n { unit: 'minute', threshold: 60, divisor: 60 },\n { unit: 'second', threshold: 1, divisor: 1 },\n ];\n\n for (const { unit, threshold, divisor } of units) {\n if (diffInSeconds >= threshold) {\n const value = Math.floor(diffInSeconds / divisor);\n try {\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto', style: 'long' }).format(\n -value,\n unit\n );\n } catch {\n return new Intl.RelativeTimeFormat('en', { numeric: 'auto' }).format(-value, unit);\n }\n }\n }\n\n return locale.startsWith('ar') ? 'الآن' : 'just now';\n };\n\n return { format, ago, now: new Date() };\n}\n","import { useTwilight } from '../providers/TwilightProvider';\n\nconst ARABIC_NUMERALS = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n\nconst toArabic = (input: number | string): string => {\n const str = String(input);\n return str.replace(/[0-9]/g, (d) => ARABIC_NUMERALS[parseInt(d)]);\n};\n\n/**\n * UseNumberResult - Return type for useNumber hook\n */\nexport interface UseNumberResult {\n /** Format number with store settings */\n format: (number: number | string) => string;\n /** Convert to Arabic numerals */\n toArabic: (input: number | string) => string;\n /** Whether Arabic numerals are enabled */\n useArabicNumerals: boolean;\n}\n\n/**\n * useNumber - Hook for number formatting\n *\n * @returns Object with number formatting utilities\n *\n * @example\n * const { format, toArabic, useArabicNumerals } = useNumber();\n * format(1234) // '١٢٣٤' if arabic numbers enabled, else '1234'\n * toArabic(1234) // '١٢٣٤'\n * useArabicNumerals // boolean from store settings\n */\nexport function useNumber(): UseNumberResult {\n const { store } = useTwilight();\n const useArabicNumerals = store?.settings?.arabic_numbers_enabled ?? false;\n\n const format = (number: number | string): string => {\n return useArabicNumerals ? toArabic(number) : String(number);\n };\n\n return {\n /** Format number with store settings */\n format,\n /** Convert to Arabic numerals */\n toArabic,\n /** Whether Arabic numerals are enabled */\n useArabicNumerals,\n };\n}\n","import { useTwilight } from '../providers/TwilightProvider';\nimport { useTranslation } from '../providers/I18nProvider';\nimport React from 'react';\n\nconst AR_LOCALE = 'ar';\nconst SAR_CURRENCY = 'SAR';\n\nconst intlCache = new Map<string, Intl.NumberFormat>();\nfunction getCachedIntl(loc: string, opts: Intl.NumberFormatOptions): Intl.NumberFormat {\n const key = `${loc}|${JSON.stringify(opts)}`;\n let fmt = intlCache.get(key);\n if (!fmt) {\n fmt = new Intl.NumberFormat(loc, opts);\n intlCache.set(key, fmt);\n }\n return fmt;\n}\n\n/**\n * Parse a money string to a number.\n *\n * Locale-agnostic by design: normalises both Western (`,.`) and\n * Arabic-Indic (`٬`, `٫`) separators using fixed rules. Do NOT add\n * locale-dependent separator logic here — if per-locale rules are\n * ever needed, refactor back into the hook body where `locale`\n * is available.\n */\nconst parse = (moneyString: string): number => {\n const cleaned = moneyString.replace(/[^\\d.,٬٫]/g, '');\n const normalized = cleaned.replace(/٬/g, '').replace(/٫/g, '.');\n const parts = normalized.split(/[.,]/);\n if (parts.length > 2) {\n return parseFloat(`${parts.slice(0, -1).join('')}.${parts[parts.length - 1]}`);\n }\n return parseFloat(normalized.replace(/,/g, ''));\n};\n\n/**\n * Check if a value is a valid monetary amount.\n *\n * Locale-agnostic: accepts numbers and numeric strings only.\n */\nconst isValid = (value: unknown): boolean => {\n if (typeof value === 'number' && !isNaN(value) && isFinite(value)) return true;\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return !isNaN(parsed) && isFinite(parsed);\n }\n return false;\n};\n\n/**\n * UseMoneyResult - Return type for useMoney hook\n */\nexport interface UseMoneyResult {\n /** Format amount with currency */\n format: (\n amount: number | string | undefined,\n options?: { currency?: string; locale?: string; type?: 'product' | 'general' }\n ) => React.ReactNode;\n /** Parse money string to number */\n parse: (moneyString: string) => number;\n /** Check if value is valid monetary amount */\n isValid: (value: unknown) => boolean;\n}\n\n/**\n * useMoney - Hook for formatting monetary values\n *\n * @example\n * const { format, parse, isValid } = useMoney();\n * // Render price (SAR shows with icon):\n * <span>{format(100)}</span> // '100.00' with <i className=\"sicon-sar\" />\n */\nexport function useMoney(): UseMoneyResult {\n const { store } = useTwilight();\n const { locale } = useTranslation();\n const useArabicNumerals = store?.settings?.arabic_numbers_enabled ?? false;\n\n const format = (\n amount: number | string | undefined,\n options?: { currency?: string; locale?: string; type?: 'product' | 'general' }\n ): React.ReactNode => {\n const currency = options?.currency ?? 'SAR';\n const loc = options?.locale ?? locale;\n const type = options?.type ?? 'product'; // Default to 'product'\n\n // Handle undefined or null case\n if (amount == null || amount === '') {\n const showDash = type === 'product' ? store?.settings?.product?.show_price_as_dash : false; // General type defaults to not showing dash\n\n return showDash ? '-' : '';\n }\n\n const numericAmount = typeof amount === 'string' ? parseFloat(amount) : amount;\n\n if (typeof amount === 'string' && amount === '-') return amount;\n if (isNaN(numericAmount)) return String(amount);\n\n // Handle zero amounts with dash based on settings\n if (!numericAmount && numericAmount !== 0) {\n // This covers cases where amount evaluates to falsy but isn't explicitly 0\n const showDash = type === 'product' ? store?.settings?.product?.show_price_as_dash : false; // General type defaults to not showing dash\n\n return showDash ? '-' : '';\n }\n\n let formatted = getCachedIntl(loc, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(numericAmount);\n\n // Apply Arabic numerals if enabled\n if (useArabicNumerals && loc.startsWith(AR_LOCALE)) {\n formatted = formatted.replace(/[0-9]/g, (d) => '٠١٢٣٤٥٦٧٨٩'[parseInt(d)]);\n }\n\n // For SAR, return with icon element\n if (currency === SAR_CURRENCY) {\n return (\n <>\n {formatted} <i className=\"sicon-sar\" />\n </>\n );\n }\n\n // For non-SAR currencies, try standard currency formatting\n try {\n return getCachedIntl(loc, {\n style: 'currency',\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(numericAmount);\n } catch {\n return `${formatted} ${currency}`;\n }\n };\n\n return { format, parse, isValid };\n}\n","import { useCallback } from 'react';\nimport type { Product, Cart, CartItem } from '../types';\nimport { useTwilight } from '../providers/TwilightProvider';\nimport { useUser } from './useUser';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseGtmResult {\n /** Check if GTM is enabled */\n enabled: boolean;\n /** Raw push to dataLayer */\n push: (data: Record<string, unknown>) => void;\n /** Track page view */\n viewPage: (pageType: string) => void;\n /** Track product detail view */\n detail: (product: Product) => void;\n /** Track product impressions (listing) */\n impressions: (products: Product[], list?: string) => void;\n /** Track product click */\n click: (product: Product, list?: string, position?: number) => void;\n /** Track add to cart */\n add: (product: Product, quantity?: number) => void;\n /** Track remove from cart */\n remove: (item: CartItem) => void;\n /** Track checkout */\n checkout: (cart: Cart, step?: number) => void;\n /** Track purchase */\n purchase: (orderId: string | number, cart: Cart) => void;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Generate unique event ID */\nfunction eventId(prefix: string): string {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n}\n\n/** Convert Product to GTM format */\nfunction toProduct(product: Product, overrides?: Record<string, unknown>): Record<string, unknown> {\n return {\n id: product.id,\n name: product.name,\n price: product.sale_price,\n brand: product.brand?.name,\n category: product.category?.name,\n quantity: 1,\n ...overrides,\n };\n}\n\n/** Get currency from product or fallback */\nfunction getCurrency(product?: Product, fallback = 'SAR'): string {\n return product?.currency ?? fallback;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\n/**\n * useGtm - Google Tag Manager hook for tracking events\n *\n * @example\n * ```tsx\n * function ProductPage({ product }) {\n * const gtm = useGtm();\n *\n * useEffect(() => { gtm.detail(product); }, [product.id]);\n * return <button onClick={() => gtm.add(product)}>Add to Cart</button>;\n * }\n * ```\n */\nexport function useGtm(): UseGtmResult {\n const { store } = useTwilight();\n const { data: user } = useUser();\n\n const gtmIds = store.settings?.keys?.gtm;\n const enabled = !!(gtmIds && gtmIds.length > 0);\n const currency = user?.preferences?.currency_code ?? 'SAR';\n\n const push = useCallback(\n (data: Record<string, unknown>) => {\n if (!enabled) return;\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(data);\n },\n [enabled]\n );\n\n const viewPage = useCallback((pageType: string) => push({ event: 'viewPage', pageType }), [push]);\n\n const detail = useCallback(\n (product: Product) =>\n push({\n event: 'detail',\n ecommerce: {\n currencyCode: getCurrency(product, currency),\n event_id: eventId('detail'),\n detail: { products: [toProduct(product)] },\n },\n }),\n [push, currency]\n );\n\n const impressions = useCallback(\n (products: Product[], list?: string) => {\n if (products.length === 0) return;\n push({\n event: 'impressions',\n ecommerce: {\n currencyCode: getCurrency(products[0], currency),\n event_id: eventId('impressions'),\n impressions: {\n products: products.map((p, i) => toProduct(p, { position: i + 1, list })),\n },\n },\n });\n },\n [push, currency]\n );\n\n const click = useCallback(\n (product: Product, list?: string, position?: number) =>\n push({\n event: 'click',\n ecommerce: {\n currencyCode: getCurrency(product, currency),\n event_id: eventId('click'),\n click: {\n actionField: { list },\n products: [toProduct(product, { position, list })],\n },\n },\n }),\n [push, currency]\n );\n\n const add = useCallback(\n (product: Product, quantity = 1) =>\n push({\n event: 'addToCart',\n ecommerce: {\n currencyCode: getCurrency(product, currency),\n event_id: eventId('addToCart'),\n add: { products: [toProduct(product, { quantity })] },\n },\n }),\n [push, currency]\n );\n\n const remove = useCallback(\n (item: CartItem) =>\n push({\n event: 'removeFromCart',\n ecommerce: {\n currencyCode: currency,\n event_id: eventId('removeFromCart'),\n remove: {\n products: [\n {\n id: item.product_id,\n name: item.product_name,\n price: typeof item.price === 'number' ? item.price : item.price.amount,\n quantity: item.quantity,\n },\n ],\n },\n },\n }),\n [push, currency]\n );\n\n const checkout = useCallback(\n (cart: Cart, step = 1) =>\n push({\n event: 'checkout',\n ecommerce: {\n currencyCode: currency,\n event_id: eventId('checkout'),\n checkout: {\n actionField: { step, id: cart.id },\n products: cart.items.map((item) => ({\n id: item.product_id,\n name: item.product_name,\n price: typeof item.price === 'number' ? item.price : item.price.amount,\n quantity: item.quantity,\n })),\n },\n },\n }),\n [push, currency]\n );\n\n const purchase = useCallback(\n (orderId: string | number, cart: Cart) =>\n push({\n event: 'purchase',\n ecommerce: {\n currencyCode: currency,\n event_id: eventId('purchase'),\n purchase: {\n actionField: {\n id: orderId,\n revenue: cart.total,\n tax: cart.tax_amount,\n coupon: cart.coupon,\n },\n products: cart.items.map((item) => ({\n id: item.product_id,\n name: item.product_name,\n price: typeof item.price === 'number' ? item.price : item.price.amount,\n quantity: item.quantity,\n })),\n },\n },\n }),\n [push, currency]\n );\n\n return { enabled, push, viewPage, detail, impressions, click, add, remove, checkout, purchase };\n}\n","import { useMemo } from 'react';\nimport { useTranslation } from '../providers/I18nProvider';\nimport type { OpeningHoursSettings } from '../types';\n\ntype DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';\n\nconst DAYS: DayOfWeek[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n 'sunday',\n];\n\nconst DAY_NAMES: Record<string, string> = {\n monday: 'common.days.monday',\n tuesday: 'common.days.tuesday',\n wednesday: 'common.days.wednesday',\n thursday: 'common.days.thursday',\n friday: 'common.days.friday',\n saturday: 'common.days.saturday',\n sunday: 'common.days.sunday',\n};\n\nconst TIME_NAMES: Record<string, string> = {\n AM: 'common.time.am',\n PM: 'common.time.pm',\n};\n\ninterface ParsedTimeRange {\n start: number; // minutes from midnight\n end: number; // minutes from midnight\n}\n\ninterface DaySchedule {\n ranges: ParsedTimeRange[];\n}\n\nexport interface UseOpeningHoursResult {\n /** Whether the store is currently open */\n isOpen: boolean;\n /** Whether opening hours feature is enabled and configured */\n isEnabled: boolean;\n /** Next opening time as Date object, null if currently open or not configured */\n nextOpen: Date | null;\n /** Formatted next opening time string, empty if currently open or not configured */\n nextOpenFormatted: string;\n}\n\n/**\n * Parse a time string like \"09:00\" or \"9:00 AM\" to minutes from midnight.\n */\nfunction parseTime(timeStr: string): number {\n const cleaned = timeStr.trim().toLowerCase();\n const match = cleaned.match(/^(\\d{1,2}):(\\d{2})(?:\\s*(am|pm))?$/);\n\n if (!match) {\n return 0;\n }\n\n let hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const meridiem = match[3];\n\n if (meridiem === 'pm' && hours < 12) {\n hours += 12;\n } else if (meridiem === 'am' && hours === 12) {\n hours = 0;\n }\n\n return hours * 60 + minutes;\n}\n\n/**\n * Parse opening hours ranges for a day.\n * Input format: [\"09:00-12:00\", \"13:00-18:00\"] or [\"09:00 AM - 12:00 PM\"]\n */\nfunction parseRanges(ranges: string[]): ParsedTimeRange[] {\n return ranges\n .map((range) => {\n const parts = range.split('-').map((s) => s.trim());\n if (parts.length !== 2) return null;\n\n const start = parseTime(parts[0]);\n const end = parseTime(parts[1]);\n\n return { start, end };\n })\n .filter((r): r is ParsedTimeRange => r !== null && r.start < r.end);\n}\n\n/**\n * Convert day index (0 = Monday) to day name.\n */\nfunction indexToDay(index: number): DayOfWeek {\n return DAYS[index % 7];\n}\n\n/**\n * Get the day index for a date (0 = Monday, 6 = Sunday).\n */\nfunction getDayIndex(date: Date): number {\n const jsDay = date.getDay(); // 0 = Sunday, 1 = Monday, etc.\n return jsDay === 0 ? 6 : jsDay - 1; // Convert to 0 = Monday\n}\n\n/**\n * Get current time in minutes from midnight.\n */\nfunction getTimeInMinutes(date: Date): number {\n return date.getHours() * 60 + date.getMinutes();\n}\n\n/**\n * Check if the given time falls within any of the ranges.\n */\nfunction isInRanges(time: number, ranges: ParsedTimeRange[]): boolean {\n return ranges.some((range) => time >= range.start && time < range.end);\n}\n\n/**\n * Find the next time range that starts after the given time.\n */\nfunction findNextRange(time: number, ranges: ParsedTimeRange[]): ParsedTimeRange | null {\n const sorted = [...ranges].sort((a, b) => a.start - b.start);\n return sorted.find((range) => range.start > time) ?? null;\n}\n\n/**\n * useOpeningHours - Hook for checking store opening status and next open time.\n *\n * @param settings - Opening hours settings from the store\n * @returns Opening status information\n *\n * @example\n * ```tsx\n * const { isOpen, nextOpenFormatted } = useOpeningHours(store.settings.opening_hours);\n *\n * if (!isOpen) {\n * return <div>Store closed. Opens at {nextOpenFormatted}</div>;\n * }\n * ```\n */\nexport function useOpeningHours(settings?: OpeningHoursSettings): UseOpeningHoursResult {\n const { t } = useTranslation();\n\n return useMemo(() => {\n if (!settings?.enabled || !settings?.hours) {\n return {\n isOpen: true, // Assume open if not configured\n isEnabled: false,\n nextOpen: null,\n nextOpenFormatted: '',\n };\n }\n\n const hours = settings.hours;\n const now = new Date();\n const currentDayIndex = getDayIndex(now);\n const currentTime = getTimeInMinutes(now);\n\n // Build schedule for all days\n const schedule: Record<DayOfWeek, DaySchedule> = {} as Record<DayOfWeek, DaySchedule>;\n for (const day of DAYS) {\n const dayRanges = hours[day];\n schedule[day] = {\n ranges: dayRanges ? parseRanges(dayRanges) : [],\n };\n }\n\n // Check if currently open\n const todaySchedule = schedule[indexToDay(currentDayIndex)];\n if (isInRanges(currentTime, todaySchedule.ranges)) {\n return {\n isOpen: true,\n isEnabled: true,\n nextOpen: null,\n nextOpenFormatted: '',\n };\n }\n\n // Find next open time\n // Check remaining ranges today\n const nextRangeToday = findNextRange(currentTime, todaySchedule.ranges);\n if (nextRangeToday) {\n const nextOpen = new Date(now);\n nextOpen.setHours(Math.floor(nextRangeToday.start / 60), nextRangeToday.start % 60, 0, 0);\n\n return {\n isOpen: false,\n isEnabled: true,\n nextOpen,\n nextOpenFormatted: formatNextOpen(nextOpen, t),\n };\n }\n\n // Check subsequent days (up to 7 days ahead)\n for (let i = 1; i <= 7; i++) {\n const nextDayIndex = (currentDayIndex + i) % 7;\n const nextDayName = indexToDay(nextDayIndex);\n const nextDaySchedule = schedule[nextDayName];\n\n if (nextDaySchedule.ranges.length > 0) {\n // Get the first range of that day\n const firstRange = [...nextDaySchedule.ranges].sort((a, b) => a.start - b.start)[0];\n\n const nextOpen = new Date(now);\n nextOpen.setDate(nextOpen.getDate() + i);\n nextOpen.setHours(Math.floor(firstRange.start / 60), firstRange.start % 60, 0, 0);\n\n return {\n isOpen: false,\n isEnabled: true,\n nextOpen,\n nextOpenFormatted: formatNextOpen(nextOpen, t),\n };\n }\n }\n\n // No opening hours found in the next week - assume open\n return {\n isOpen: true,\n isEnabled: true,\n nextOpen: null,\n nextOpenFormatted: '',\n };\n }, [settings, t]);\n}\n\n/**\n * Format the next open time similar to the PHP widget.\n * Output: \"Sunday 09:00 AM\" (translated)\n */\nfunction formatNextOpen(date: Date, t: (key: string) => string): string {\n const dayName = t(DAY_NAMES[indexToDay(getDayIndex(date))]);\n const hours = date.getHours();\n const minutes = date.getMinutes().toString().padStart(2, '0');\n const isPM = hours >= 12;\n const displayHours = hours > 12 ? hours - 12 : hours === 0 ? 12 : hours;\n const meridiem = t(TIME_NAMES[isPM ? 'PM' : 'AM']);\n\n return `${dayName} ${displayHours}:${minutes} ${meridiem}`;\n}\n","import { useEffect, useRef } from 'react';\n\n/**\n * Page config data structure for salla.config.set('page', ...)\n */\nexport interface PageConfigData {\n slug: string;\n id?: string | number;\n title: string;\n /** Optional - defaults to current location pathname + search */\n url?: string;\n parent?: { id: string | number; name: string; url: string } | null;\n}\n\n/**\n * usePageConfig - Centralized hook for setting salla.config.page\n *\n * Replaces scattered salla?.config?.set('page', ...) calls across multiple pages.\n * Handles optional salla object safely.\n * Automatically uses current URL from router context if url not provided.\n *\n * @param pageData - Page configuration data to set\n *\n * @example\n * ```tsx\n * // URL is auto-detected from router context\n * usePageConfig({\n * slug: 'product.index',\n * id: categoryId,\n * title: category.name,\n * });\n *\n * // With explicit URL override\n * usePageConfig({\n * slug: 'product.index',\n * id: categoryId,\n * title: category.name,\n * url: '/custom-url',\n * });\n * ```\n */\nexport function usePageConfig(pageData: PageConfigData): void {\n const pageDataRef = useRef(pageData);\n pageDataRef.current = pageData;\n\n useEffect(() => {\n const salla = window.salla;\n if (!salla?.config?.set) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('[usePageConfig] salla.config.set not available. Page config not set.');\n }\n return;\n }\n\n const current = pageDataRef.current;\n const url = current.url ?? window.location.pathname + window.location.search;\n\n salla.config.set('page', {\n ...current,\n url,\n });\n }, []);\n}\n","import type { Breadcrumb } from '../types';\n\nconst BREADCRUMB_REFERRER_KEY = 'breadcrumb-referrer';\n\nexport function getBreadcrumbReferrer(): Breadcrumb | null {\n try {\n const raw = sessionStorage.getItem(BREADCRUMB_REFERRER_KEY);\n if (!raw) return null;\n const { name, url } = JSON.parse(raw);\n return typeof name === 'string' && typeof url === 'string' ? { name, url } : null;\n } catch {\n return null;\n }\n}\n\nexport function setBreadcrumbReferrer(breadcrumb: Breadcrumb): void {\n try {\n sessionStorage.setItem(BREADCRUMB_REFERRER_KEY, JSON.stringify(breadcrumb));\n } catch {\n // sessionStorage unavailable (private browsing quota, etc.)\n }\n}\n","import { useMemo, useEffect, useState } from 'react';\nimport { useLocation, useIsHome } from '../providers/NavigationProvider';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { getBreadcrumbReferrer, setBreadcrumbReferrer } from '../utils/breadcrumb';\nimport type { Breadcrumb, Page } from '../types';\n\nexport function useBreadcrumbs(page?: Page | null): Breadcrumb[] {\n const location = useLocation();\n const isHome = useIsHome();\n const { t } = useTranslation();\n\n const [referrerCrumb, setReferrerCrumb] = useState<Breadcrumb | null>(null);\n\n useEffect(() => {\n if (page?.slug === 'product.single') {\n const ref = getBreadcrumbReferrer();\n if (ref) setReferrerCrumb(ref);\n return;\n }\n\n setReferrerCrumb(null);\n\n if (!isHome && page) {\n setBreadcrumbReferrer({ name: page.title, url: location.pathname + location.searchStr });\n }\n }, [page, isHome, location.pathname, location.searchStr]);\n\n return useMemo(() => {\n if (!page) return [];\n\n if (page.breadcrumbs?.length) {\n if (page.slug === 'product.single' && referrerCrumb) {\n const last = page.breadcrumbs.at(-1);\n return last ? [page.breadcrumbs[0], referrerCrumb, last] : page.breadcrumbs;\n }\n return page.breadcrumbs;\n }\n\n if (isHome) return [];\n\n const home: Breadcrumb = { name: t('common.titles.home'), url: '/' };\n return [home, { name: page.title, url: location.pathname }];\n }, [isHome, location.pathname, page, t, referrerCrumb]);\n}\n","/**\n * Auto-registered default hooks for tracking/notification components.\n *\n * This module is imported automatically by hooks/index.ts to register\n * default handlers for body:start and body:end hooks.\n *\n * All handlers check conditions at render time via twilight context,\n * so they work without any setup from theme-custom.\n */\n\nimport React, { lazy, Suspense } from 'react';\nimport { hookRegistry } from './HookRegistry';\nimport { HookName } from '../types/hooks';\nimport type { HookContext } from './HookSlot';\nimport { useUser } from './useUser';\n\n// Lazy load tracking/notification components from theme-engine\nconst GoogleTagBody = lazy(() =>\n import('../components/tracking/GoogleTag').then((m) => ({ default: m.GoogleTagBody }))\n);\n\nconst TwilightBundles = lazy(() =>\n import('../components/tracking/TwilightBundles').then((m) => ({ default: m.TwilightBundles }))\n);\n\nconst LazySiftSnippet = lazy(() =>\n import('../components/tracking/SiftSnippet').then((m) => ({ default: m.SiftSnippet }))\n);\n\nconst LazyStoreClosedNotification = lazy(() =>\n import('../components/store/StoreClosedNotification').then((m) => ({\n default: m.StoreClosedNotification,\n }))\n);\n\n// Lazy load cart widget components\nconst LazyPriceQuoteButton = lazy(() =>\n import('../components/cart/PriceQuoteButton').then((m) => ({ default: m.PriceQuoteButton }))\n);\n\nconst LazyPreOrderNotification = lazy(() =>\n import('../components/cart/PreOrderNotification').then((m) => ({\n default: m.PreOrderNotification,\n }))\n);\n\n/**\n * GTM handler - renders GoogleTagBody if store has GTM keys configured.\n */\nfunction gtmHandler({ twilight }: HookContext): React.ReactNode {\n if (!twilight?.store?.settings?.keys?.gtm?.length) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <GoogleTagBody gtmIds={twilight.store.settings.keys.gtm} />\n </Suspense>\n );\n}\n\n/**\n * Sift handler - renders SiftSnippet if store has sift key configured.\n */\nfunction useSiftHandler({ twilight }: HookContext): React.ReactNode {\n const { data: user } = useUser();\n\n if (!twilight?.store?.settings?.keys?.sift) {\n return null;\n }\n\n const customerId = user?.type === 'user' && user.id ? String(user.id) : '';\n\n return (\n <Suspense fallback={null}>\n <LazySiftSnippet beaconKey={twilight.store.settings.keys.sift} customerId={customerId} />\n </Suspense>\n );\n}\n\n/**\n * Store closed notification handler - renders if opening hours feature is enabled.\n */\nfunction storeClosedHandler({ twilight }: HookContext): React.ReactNode {\n if (!twilight?.store?.settings?.opening_hours?.enabled) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <LazyStoreClosedNotification />\n </Suspense>\n );\n}\n\n/**\n * Twilight bundles handler - always renders (core tracking).\n */\nfunction bundlesHandler(): React.ReactNode {\n return (\n <Suspense fallback={null}>\n <TwilightBundles />\n </Suspense>\n );\n}\n\n/**\n * Price quote handler - renders if price-quote feature is enabled.\n * Twig: PriceQuoteWidget - checks feature('price-quote')->isAccessibleForCustomers()\n */\nfunction priceQuoteHandler({ twilight }: HookContext): React.ReactNode {\n // TODO: support price_quote in store settings API response\n if (!twilight?.store?.settings?.features?.price_quote) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <LazyPriceQuoteButton />\n </Suspense>\n );\n}\n\n/**\n * Pre-order notification handler - renders if cart has items with active pre-order campaigns.\n * Twig: PreOrderNotificationWidget - checks cart items for getHasActivePreorderCampaign()\n */\nfunction preOrderNotificationHandler({ twilight, cartItems }: HookContext): React.ReactNode {\n if (!twilight?.store?.settings?.features?.['pre-order-campaigns']) {\n return null;\n }\n\n const items = cartItems as\n | Array<{ has_pre_order_campaign?: boolean; parent_id?: unknown }>\n | undefined;\n const hasPreOrder = items?.some((item) => !item.parent_id && item.has_pre_order_campaign);\n\n if (!hasPreOrder) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <LazyPreOrderNotification />\n </Suspense>\n );\n}\n\n/**\n * Register all default hooks from theme-engine.\n * Called automatically on module import.\n *\n * Note: theme-custom can register additional handlers like AddProductToast.\n */\nfunction registerDefaultHooks(): void {\n // Body start hooks (tracking, notifications)\n hookRegistry.register(HookName.BODY_START, gtmHandler, 100);\n hookRegistry.register(HookName.BODY_START, useSiftHandler, 90);\n hookRegistry.register(HookName.BODY_START, storeClosedHandler, 80);\n\n // Body end hooks (bundles)\n hookRegistry.register(HookName.BODY_END, bundlesHandler, 100);\n\n // Cart hooks\n hookRegistry.register('cart:submit.start', priceQuoteHandler, 100);\n hookRegistry.register('cart:items.start', preOrderNotificationHandler, 100);\n}\n\n// Auto-register on module load\nregisterDefaultHooks();\n\nexport { registerDefaultHooks };\n","import { useState } from 'react';\nimport { SallaAppsIcons } from '@salla.sa/twilight-components-react/apps-icons';\nimport { SallaContacts } from '@salla.sa/twilight-components-react/contacts';\nimport { SallaMenu } from '@salla.sa/twilight-components-react/menu';\nimport { SallaPayments } from '@salla.sa/twilight-components-react/payments';\nimport { SallaSocial } from '@salla.sa/twilight-components-react/social';\nimport { SallaTrustBadges } from '@salla.sa/twilight-components-react/trust-badges';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { HookSlot } from '../../hooks/HookSlot';\nimport { Copyright } from './Copyright';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { Link, Image } from '../common';\nimport { ImageModal } from '../../components/modal';\nimport { useAsset } from '../../hooks';\n\nexport function Footer() {\n const { store, theme } = useTwilight();\n const { cdn } = useAsset();\n const { t } = useTranslation();\n const [isTaxModalOpen, setIsTaxModalOpen] = useState(false);\n const [taxImageSrc, setTaxImageSrc] = useState('');\n\n const handleTaxImageClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n const modalId = event.currentTarget.dataset.modalId;\n const modal = document.getElementById(modalId || '');\n const img = modal?.querySelector('img');\n const imgSrc = img?.dataset.src;\n\n if (imgSrc) {\n setTaxImageSrc(imgSrc);\n setIsTaxModalOpen(true);\n }\n };\n\n return (\n <footer className=\"store-footer\" suppressHydrationWarning>\n <HookSlot name=\"footer:start\" />\n <div aria-label=\"footer\" className=\"store-footer__inner\">\n <div className=\"container grid grid-cols-1 lg:grid-cols-6 gap-8 lg:gap-6\">\n {/* Store Info */}\n <div className=\"lg:col-span-2 rtl:lg:pl-20 ltr:lg:pr-20\">\n <Link to=\"/\" className=\"flex items-center m-0\">\n <h3>{store.name}</h3>\n </Link>\n {store.description && (\n <div\n className=\"max-w-sm leading-6 mb-6\"\n dangerouslySetInnerHTML={{ __html: store.description }}\n />\n )}\n\n <div className=\"hidden lg:block\">\n <SallaSocial className=\"block mb-6\" />\n </div>\n\n <div className=\"flex gap-4\">\n <SallaTrustBadges {...(theme.settings?.footer_is_dark ? { dark: true } : {})} />\n\n {store.settings?.tax?.number && (\n <div className=\"flex rtl:space-x-reverse space-x-2 items-end\">\n {store.settings?.tax?.certificate && (\n <a\n data-modal-id=\"modal-value-tax\"\n href=\"#/\"\n aria-label={store.settings?.tax?.number}\n onClick={handleTaxImageClick}\n >\n <img\n width={40}\n height={40}\n src={cdn('/images/placeholder.png')}\n className=\"w-10 rounded-sm hover:opacity-80 transition-opacity\"\n alt=\"value added tax\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </a>\n )}\n <div>\n <p className=\"text-sm text-text-grey mb-1\">\n {t('common.elements.tax_number', 'Tax Number')}\n </p>\n <b className=\"text-sm\">{store.settings?.tax?.number}</b>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Footer Links */}\n <div>\n <h3>{t('blocks.footer.pages_links', 'Important Links')}</h3>\n <SallaMenu source=\"footer\" />\n </div>\n\n {/* Contact Info */}\n <div>\n <SallaContacts\n contacts={store.contacts}\n contactsTitle={t('blocks.footer.social', 'Stay in touch')}\n />\n\n <div className=\"lg:hidden contact-social\">\n <SallaSocial />\n </div>\n </div>\n\n {/* App Icons */}\n <SallaAppsIcons\n apps={store.apps}\n appsTitle={t('blocks.footer.download_apps', 'Get our apps')}\n className=\"lg:col-span-2 rtl:lg:pr-20 ltr:lg:pl-20\"\n />\n </div>\n </div>\n\n {/* Copyright */}\n <div className=\"md:flex items-center justify-between py-4 container text-center\">\n <span className=\"text-sm copyright-text\">\n <HookSlot\n name=\"copyright\"\n context={{ storeName: store.name }}\n fallback={<Copyright storeName={store.name} />}\n />\n </span>\n <SallaPayments />\n </div>\n\n {/* Hidden modal content for data extraction */}\n <div id=\"modal-value-tax\" className=\"hidden\">\n <Image src={store.settings?.tax?.certificate || undefined} alt=\"Tax Certificate\" />\n </div>\n\n {/* Image Modal */}\n <ImageModal\n isOpen={isTaxModalOpen}\n onClose={() => setIsTaxModalOpen(false)}\n src={taxImageSrc}\n alt=\"Tax Certificate\"\n title={t('common.elements.tax_certificate', 'Tax Certificate')}\n />\n <HookSlot name=\"footer:end\" />\n </footer>\n );\n}\n","import { lazy, Suspense } from 'react';\nimport { Header } from './Header';\nimport { Footer } from './Footer';\nimport type { LayoutProps } from '../../types';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useUser } from '../../hooks';\n\nconst SallaLoginModal = lazy(() =>\n import('@salla.sa/twilight-components-react/login-modal').then((m) => ({\n default: m.SallaLoginModal,\n }))\n);\nconst SallaScopes = lazy(() =>\n import('@salla.sa/twilight-components-react/scopes').then((m) => ({\n default: m.SallaScopes,\n }))\n);\nconst SallaOfferModal = lazy(() =>\n import('@salla.sa/twilight-components-react/offer-modal').then((m) => ({\n default: m.SallaOfferModal,\n }))\n);\n\nexport function MasterLayout({ children }: LayoutProps) {\n const { store } = useTwilight();\n const { isLoggedIn } = useUser();\n\n return (\n <>\n <div className=\"app-inner flex flex-col min-h-full\">\n <Header />\n <main id=\"main-content\" role=\"main\" className=\"flex-1\">\n {children}\n </main>\n <Footer />\n </div>\n\n <Suspense>\n <SallaOfferModal />\n </Suspense>\n\n {!isLoggedIn && (\n <Suspense>\n <SallaLoginModal\n isEmailAllowed={store?.settings?.auth?.email_allowed}\n isMobileAllowed={store?.settings?.auth?.mobile_allowed}\n isEmailRequired={store?.settings?.auth?.is_email_required}\n suppressHydrationWarning\n />\n </Suspense>\n )}\n\n {store?.scope && (\n <Suspense>\n <SallaScopes\n selection={store?.scope?.display_as === 'popup' ? 'mandatory' : 'optional'}\n suppressHydrationWarning\n />\n </Suspense>\n )}\n </>\n );\n}\n","import React, { useMemo, Suspense, useState, useEffect } from 'react';\nimport { WidgetHead } from '../components/layout/WidgetHead';\nimport { HookSlot } from '../hooks/HookSlot';\nimport { HookName } from '../types/hooks';\nimport { DocumentClassProvider } from './DocumentClassProvider';\nimport { TwilightContext } from './twilight-context';\nimport { ThemeDocumentSync } from './twilight-theme';\nimport { useTwilightInit } from './twilight-init';\nimport { I18nProvider, FALLBACK_LOCALE } from './I18nProvider';\nimport { NavigationInterceptor } from './NavigationProvider';\nimport { navigationSetups } from './navigation-setups';\nimport { routeDocumentSyncs } from './DocumentSyncRegistry';\nimport { MasterLayout } from '../components/layout/MasterLayout';\nimport { Toaster } from '../components/toast/Toaster';\nimport { getTwilightContext, updateTwilightContext } from '../twilight/context';\nimport { AUTH_TOKEN_COOKIE_NAME, clearAuthTokenCookie } from '../utils/cookies';\nimport type {\n TwilightContextValue,\n TwilightConfig,\n TwilightProviderProps,\n TwilightLog,\n} from '../types/twilight';\nimport type { StoreContext } from '../api/store';\n\nconst getSalla = () => (typeof window !== 'undefined' ? window.salla : undefined);\n\nconst TWILIGHT_LOG_STYLES = {\n header:\n 'background: linear-gradient(90deg, #7c3aed, #6366f1); color: white; padding: 4px 8px; border-radius: 4px; font-weight: bold;',\n error:\n 'background: #dc2626; color: white; padding: 2px 6px; border-radius: 3px; font-weight: bold;',\n warn: 'background: #f59e0b; color: white; padding: 2px 6px; border-radius: 3px; font-weight: bold;',\n info: 'background: #3b82f6; color: white; padding: 2px 6px; border-radius: 3px; font-weight: bold;',\n label: 'color: #7c3aed; font-weight: bold;',\n value: 'color: inherit;',\n};\n\nexport { useTwilight } from './twilight-context';\nexport type { TwilightProviderProps };\n\nexport function TwilightProvider({\n children,\n debug = false,\n skeleton,\n translations: themeTranslations,\n onReady,\n onError,\n client = { framework: 'tanstack', interceptLinks: true },\n toast = true,\n toastMobilePosition = 'bottom-center',\n addToCartToast = true,\n routeClass = true,\n layout: LayoutComponent = MasterLayout,\n}: TwilightProviderProps): React.ReactElement {\n const ctx = getTwilightContext();\n const initialLocale = ctx.locale || FALLBACK_LOCALE;\n let initialData: StoreContext | undefined;\n try {\n initialData = ctx.settings;\n } catch {\n // Settings not initialized yet — loading state\n }\n\n // Auth token state for React re-renders on login/logout\n const [authToken, setAuthToken] = useState<string | null>(() => {\n if (typeof window !== 'undefined') {\n return ctx.authToken ?? window.localStorage.getItem(AUTH_TOKEN_COOKIE_NAME);\n }\n return null;\n });\n\n // SDK auth event listeners\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const sdk = getSalla();\n if (!sdk?.auth?.event) return;\n\n // Symmetric counterpart to handleTokenInvalid's clear below. path=/ + Lax so the\n // cookie is sent on the native webview's top-level navigation to /account/orders,\n // letting twilightMiddleware authenticate the SSR render — the SDK only stores the\n // token in localStorage, which the server can't read.\n const writeAuthCookie = (token: string) => {\n document.cookie = `${AUTH_TOKEN_COOKIE_NAME}=${token}; path=/; max-age=${60 * 60 * 24 * 30}; SameSite=Lax; Secure`;\n };\n\n const clearAuthCookie = clearAuthTokenCookie;\n\n // The SDK only refreshes `user.type` on a full page load, but our auth flows update\n // the UI without one — SDK components read it directly (e.g. salla-login-modal's\n // render bails for 'user' and never creates its inner modal), so keep it in sync.\n const setSdkUserType = (type: 'user' | 'guest') => {\n sdk.config?.set?.('user.type', type);\n };\n\n const handleLogin = () => {\n const newToken = sdk.storage.get(AUTH_TOKEN_COOKIE_NAME) as string | null;\n // logged.in can fire before the token is stored (iframe mirror) — don't clobber\n if (!newToken) return;\n setAuthToken(newToken);\n updateTwilightContext({ authToken: newToken });\n setSdkUserType('user');\n };\n\n // Fires on a fresh token fetch (login / web-session refresh — the native app flow).\n // Mirror the token into a cookie so SSR loads of authenticated pages are authenticated.\n const handleTokenFetched = (token: unknown) => {\n if (typeof token !== 'string' || !token) return;\n setAuthToken(token);\n updateTwilightContext({ authToken: token });\n writeAuthCookie(token);\n setSdkUserType('user');\n };\n\n const handleLogout = () => {\n const wasLoggedIn = Boolean(getTwilightContext().authToken);\n setAuthToken(null);\n updateTwilightContext({ authToken: null });\n setSdkUserType('guest');\n // Clear the SSR cookie too, otherwise a logged-out user's next full-page load\n // would still send a stale token to the server.\n try {\n clearAuthCookie();\n } catch {\n // Cookie removal may fail in restricted environments\n }\n // SDK logout redirects via location.href only after an accounts-iframe roundtrip\n // that can hang forever (iOS webview). If its redirect hasn't unloaded the page\n // by then, reload so SSR re-renders as guest. Guarded to logged-in users so the\n // SDK's force_logout guest flow can't reload-loop.\n if (wasLoggedIn) {\n window.setTimeout(() => window.location.reload(), 3500);\n }\n };\n\n const handleTokenInvalid = () => {\n setAuthToken(null);\n updateTwilightContext({ authToken: null });\n setSdkUserType('guest');\n try {\n window.localStorage.removeItem(AUTH_TOKEN_COOKIE_NAME);\n sdk.storage.remove?.(AUTH_TOKEN_COOKIE_NAME);\n clearAuthCookie();\n } catch {\n // Storage/cookie removal may fail in restricted environments\n }\n };\n\n sdk.auth.event.onLoggedIn(handleLogin);\n sdk.auth.event.onLoggedOut(handleLogout);\n sdk.event.on('auth::token.invalid', handleTokenInvalid);\n sdk.event.on('auth::token.fetched', handleTokenFetched);\n // fires on every token path, and BEFORE logged.in in the login-iframe flow\n sdk.event.on('api::token.injected', handleTokenFetched);\n\n return () => {\n // Sub-emitters use root salla.event.off for cleanup\n sdk.event.off('auth::loggedIn', handleLogin);\n sdk.event.off('auth::loggedOut', handleLogout);\n sdk.event.off('auth::token.invalid', handleTokenInvalid);\n sdk.event.off('auth::token.fetched', handleTokenFetched);\n sdk.event.off('api::token.injected', handleTokenFetched);\n };\n }, []);\n\n const { isReady, storeData, setStoreData, themeData, currency, isMobileWebview } =\n useTwilightInit({\n debug,\n initialData,\n onReady,\n onError,\n initialLocale,\n });\n\n const config = useMemo<TwilightConfig>(() => ({ debug }), [debug]);\n\n const log = useMemo<TwilightLog>(\n () => ({\n groupCollapsed: (title) =>\n console.groupCollapsed(`%c ⚡ Twilight: ${title} `, TWILIGHT_LOG_STYLES.header),\n group: (title) => console.group(`%c${title}`, TWILIGHT_LOG_STYLES.label),\n groupEnd: () => console.groupEnd(),\n error: (label, value) =>\n console.log(`%c[${label}]%c`, TWILIGHT_LOG_STYLES.error, TWILIGHT_LOG_STYLES.value, value),\n warn: (label, value) =>\n console.log(`%c[${label}]%c`, TWILIGHT_LOG_STYLES.warn, TWILIGHT_LOG_STYLES.value, value),\n info: (label, value) =>\n console.log(`%c[${label}]%c`, TWILIGHT_LOG_STYLES.info, TWILIGHT_LOG_STYLES.value, value),\n label: (label, value) =>\n console.log(`%c[${label}]%c`, TWILIGHT_LOG_STYLES.label, TWILIGHT_LOG_STYLES.value, value),\n dir: (label, value) => {\n console.log(`%c${label}`, TWILIGHT_LOG_STYLES.label);\n console.dir(value);\n },\n trace: (label, trace) => {\n console.log(`%c${label}`, TWILIGHT_LOG_STYLES.label);\n console.error(trace);\n },\n }),\n []\n );\n\n const contextValue = useMemo<TwilightContextValue>(\n () => ({\n isReady,\n store: storeData,\n _setStore: setStoreData,\n theme: themeData,\n currency,\n config,\n log,\n get salla() {\n return getSalla();\n },\n get settings() {\n return getTwilightContext().settings;\n },\n get locale() {\n return getTwilightContext().locale;\n },\n get routeId() {\n return getTwilightContext().routeId;\n },\n get location() {\n return getTwilightContext().location;\n },\n get authToken() {\n return authToken;\n },\n get i18n() {\n return getTwilightContext().i18n;\n },\n get dir() {\n return getTwilightContext().dir;\n },\n get extras() {\n return getTwilightContext().extras;\n },\n }),\n [isReady, storeData, setStoreData, themeData, currency, config, log, authToken]\n );\n\n const framework = client !== false ? (client?.framework ?? 'tanstack') : null;\n const LazyNavSetup = framework ? navigationSetups[framework] : null;\n const LazyDocumentSync = routeClass && framework ? routeDocumentSyncs[framework] : null;\n const interceptLinks = client !== false && (client?.interceptLinks ?? true);\n\n const documentSyncElement = useMemo(\n () => (LazyDocumentSync ? React.createElement(LazyDocumentSync) : null),\n [LazyDocumentSync]\n );\n\n const readyShell = useMemo(() => {\n if (!isReady) return null;\n return {\n LayoutComponent,\n LazyNavSetup,\n toast,\n toastMobilePosition,\n addToCartToast,\n interceptLinks,\n };\n }, [\n isReady,\n LazyNavSetup,\n LayoutComponent,\n toast,\n toastMobilePosition,\n addToCartToast,\n interceptLinks,\n ]);\n\n const readyContent = useMemo(() => {\n if (!readyShell) return null;\n\n const inner = readyShell.LayoutComponent ? (\n <readyShell.LayoutComponent>{children}</readyShell.LayoutComponent>\n ) : (\n children\n );\n\n const wrapped = (\n <>\n <WidgetHead />\n <HookSlot name={HookName.BODY_START} />\n <Suspense fallback={null}>\n {readyShell.toast && (\n <Toaster\n mobilePosition={readyShell.toastMobilePosition}\n addToCartToast={readyShell.addToCartToast}\n />\n )}\n {readyShell.interceptLinks && <NavigationInterceptor />}\n </Suspense>\n {inner}\n <HookSlot name={HookName.BODY_END} />\n </>\n );\n\n if (readyShell.LazyNavSetup) {\n return React.createElement(readyShell.LazyNavSetup, null, wrapped);\n }\n return wrapped;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [readyShell]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const i18nInstance = useMemo(() => getTwilightContext().i18n, [initialLocale]);\n\n return (\n <DocumentClassProvider>\n <TwilightContext.Provider value={contextValue}>\n <I18nProvider i18nInstance={i18nInstance} themeTranslations={themeTranslations}>\n <ThemeDocumentSync\n theme={themeData}\n locale={initialLocale}\n direction={getTwilightContext().dir}\n isMobileWebview={isMobileWebview}\n />\n {documentSyncElement}\n {!isReady && (\n <div className=\"loading-overlay\">{skeleton || <div className=\"loading-spinner\" />}</div>\n )}\n {readyContent}\n </I18nProvider>\n </TwilightContext.Provider>\n </DocumentClassProvider>\n );\n}\n\nexport default TwilightProvider;\n","import { useCallback } from 'react';\nimport { useTwilight } from '../providers/TwilightProvider';\nimport type { Store } from '../types';\n\n/**\n * UseStoreResult - Return type for useStore hook\n *\n * Extends the Store interface with a refresh method to re-fetch\n * the latest store configuration from the Salla SDK.\n */\nexport interface UseStoreResult extends Store {\n refresh: () => Promise<void>;\n}\n\n/**\n * useStore - Hook for accessing and managing store state\n *\n * Provides access to the store configuration and metadata from the\n * Twilight provider. Includes a refresh method to update the store\n * state with the latest data from the Salla SDK.\n *\n * @returns Store object with refresh() method to reload store data\n *\n * @example\n * ```tsx\n * function StoreInfo() {\n * const { name, currency, refresh } = useStore();\n *\n * return (\n * <div>\n * <h1>{name}</h1>\n * <button onClick={refresh}>Refresh store data</button>\n * <p>Current currency: {currency}</p>\n * </div>\n * );\n * }\n * ```\n */\nexport function useStore(): UseStoreResult {\n const { store, _setStore, salla } = useTwilight();\n\n const refresh = useCallback(async () => {\n if (!salla) return;\n try {\n const data = salla.config.all();\n if (data?.store && typeof data.store === 'object') {\n _setStore((prev) => ({ ...prev, ...(data.store as Partial<Store>) }));\n }\n } catch {\n // Silently ignore errors - store remains unchanged\n }\n }, [salla, _setStore]);\n\n return { ...store, refresh };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { api } from './chunk-UKG7IY3Y.js';
1
+ import { api } from './chunk-D2LY5L4Z.js';
2
2
  import { queryOptions } from '@tanstack/react-query';
3
3
 
4
4
  var wishlist = {
@@ -28,5 +28,5 @@ var wishlist = {
28
28
  };
29
29
 
30
30
  export { wishlist };
31
- //# sourceMappingURL=chunk-5VTFDD6X.js.map
32
- //# sourceMappingURL=chunk-5VTFDD6X.js.map
31
+ //# sourceMappingURL=chunk-2Z6EOHMB.js.map
32
+ //# sourceMappingURL=chunk-2Z6EOHMB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/wishlist.ts"],"names":[],"mappings":";;;AAeO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAA,EAAM,OAAO,MAAA,GAA6B,EAAC,KAAmC;AAC5E,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,UAAU,EAAA,EAAI,UAAA,EAAY,QAAO,GAAI,MAAA;AAEvD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,UAAU,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,GAAA,GAAM,GAAG,CAAA;AAAA,IACvD;AAEA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,SAAA,EAAY,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CACzD,IAAA,EAA2B;AAE9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA,CAAS,IAAA,IAAQ,EAAC;AAAA,MACzB,IAAA,EAAM,QAAA,CAAS,MAAA,EAAQ,IAAA,IAAQ;AAAA,KACjC;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,KACL,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,UAAA,EAAY,MAAA,EAAQ,MAAM,CAAA;AAAA,MACrC,OAAA,EAAS,CAAC,EAAE,MAAA,EAAO,KAAM,QAAA,CAAS,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ;AAAA,KAC7D;AAAA;AAEP","file":"chunk-5VTFDD6X.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { ProductsListResult, ProductsListResponse } from './product';\n\nexport interface WishlistListParams {\n page?: number;\n perPage?: number;\n filterable?: boolean;\n signal?: AbortSignal;\n}\n\n/**\n * Wishlist API — page-based pagination only.\n * Kept separate from product.list to avoid mixing cursor and page pagination strategies.\n */\nexport const wishlist = {\n list: async (params: WishlistListParams = {}): Promise<ProductsListResult> => {\n const { page = 1, perPage = 15, filterable, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('source', 'wishlist');\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n if (filterable !== undefined) {\n searchParams.set('filterable', filterable ? '1' : '0');\n }\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`products?${searchParams.toString()}`, options as any)\n .json<ProductsListResponse>();\n\n return {\n items: response.data ?? [],\n next: response.cursor?.next ?? null,\n };\n },\n\n queries: {\n list: (params: Omit<WishlistListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['wishlist', 'list', params],\n queryFn: ({ signal }) => wishlist.list({ ...params, signal }),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/wishlist.ts"],"names":[],"mappings":";;;AAeO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAA,EAAM,OAAO,MAAA,GAA6B,EAAC,KAAmC;AAC5E,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,UAAU,EAAA,EAAI,UAAA,EAAY,QAAO,GAAI,MAAA;AAEvD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,UAAU,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,GAAA,GAAM,GAAG,CAAA;AAAA,IACvD;AAEA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,SAAA,EAAY,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CACzD,IAAA,EAA2B;AAE9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA,CAAS,IAAA,IAAQ,EAAC;AAAA,MACzB,IAAA,EAAM,QAAA,CAAS,MAAA,EAAQ,IAAA,IAAQ;AAAA,KACjC;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,KACL,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,UAAA,EAAY,MAAA,EAAQ,MAAM,CAAA;AAAA,MACrC,OAAA,EAAS,CAAC,EAAE,MAAA,EAAO,KAAM,QAAA,CAAS,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ;AAAA,KAC7D;AAAA;AAEP","file":"chunk-2Z6EOHMB.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { ProductsListResult, ProductsListResponse } from './product';\n\nexport interface WishlistListParams {\n page?: number;\n perPage?: number;\n filterable?: boolean;\n signal?: AbortSignal;\n}\n\n/**\n * Wishlist API — page-based pagination only.\n * Kept separate from product.list to avoid mixing cursor and page pagination strategies.\n */\nexport const wishlist = {\n list: async (params: WishlistListParams = {}): Promise<ProductsListResult> => {\n const { page = 1, perPage = 15, filterable, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('source', 'wishlist');\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n if (filterable !== undefined) {\n searchParams.set('filterable', filterable ? '1' : '0');\n }\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`products?${searchParams.toString()}`, options as any)\n .json<ProductsListResponse>();\n\n return {\n items: response.data ?? [],\n next: response.cursor?.next ?? null,\n };\n },\n\n queries: {\n list: (params: Omit<WishlistListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['wishlist', 'list', params],\n queryFn: ({ signal }) => wishlist.list({ ...params, signal }),\n }),\n },\n};\n"]}
@@ -2,12 +2,12 @@ import { ErrorPage } from './chunk-Z4Y55HWX.js';
2
2
  import { ensureTwilightContextFromMatches, tanstackHeadAdapter } from './chunk-7P3CT2PM.js';
3
3
  import { dispatchRouteChanged } from './chunk-2CRMGVH6.js';
4
4
  import { resolveHead, mergeHead, setHeadAdapter } from './chunk-B3EFOE57.js';
5
- import { store } from './chunk-7SPFPL73.js';
6
- import { translations } from './chunk-233MP3WJ.js';
5
+ import { store } from './chunk-PPHY7D7Y.js';
6
+ import { translations } from './chunk-WA4A34G7.js';
7
7
  import { buildBaseHead } from './chunk-TZ3E5BN4.js';
8
8
  import { RedirectError, NotFoundError, UnauthorizedError } from './chunk-ZBTCQZVO.js';
9
9
  import { RouteId } from './chunk-MTONGOJD.js';
10
- import { AUTH_TOKEN_COOKIE_NAME, syncSdkLocale, extractTokenFromCookies } from './chunk-QYL5OHAV.js';
10
+ import { AUTH_TOKEN_COOKIE_NAME, syncSdkLocale, syncScopeCookie, extractTokenFromCookies } from './chunk-FUH74TV3.js';
11
11
  import { getTwilightContext, SettingsError, updateTwilightContext, createI18nInstance } from './chunk-WI7TR7RK.js';
12
12
  import { useDocumentClass } from './chunk-JWXJPJBO.js';
13
13
  import { toReactProps, mergeElementAttrs } from './chunk-CW625T2E.js';
@@ -36,6 +36,7 @@ async function rootBeforeLoad(ctx) {
36
36
  }
37
37
  updateTwilightContext({ locale });
38
38
  syncSdkLocale(locale);
39
+ syncScopeCookie();
39
40
  const [settingsResult, translationsResult] = await Promise.all([
40
41
  ctx.context.queryClient.ensureQueryData(store.queries.settings()),
41
42
  ctx.context.queryClient.ensureQueryData(translations.queries.byLocale())
@@ -303,7 +304,7 @@ function resolveRouteId(tanstackId) {
303
304
  return TANSTACK_ROUTE_ID_MAP[tanstackId] ?? tanstackId;
304
305
  }
305
306
  var LazyNotFoundPage = lazy(
306
- () => import('./not-found-DMYOREW7.js').then((m) => ({ default: m.NotFoundPage }))
307
+ () => import('./not-found-55WSAE63.js').then((m) => ({ default: m.NotFoundPage }))
307
308
  );
308
309
  function StoreUnavailablePage() {
309
310
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
@@ -621,5 +622,5 @@ function tanstackDocumentAdapter(descriptor) {
621
622
  }
622
623
 
623
624
  export { RouteDocumentSync, TanStackDocumentSync, createRouter, createTwilightRootRoute, rootHead, tanstackDocumentAdapter, useTanstackDocumentAttrs };
624
- //# sourceMappingURL=chunk-R5PUDC5R.js.map
625
- //# sourceMappingURL=chunk-R5PUDC5R.js.map
625
+ //# sourceMappingURL=chunk-33G2WUWG.js.map
626
+ //# sourceMappingURL=chunk-33G2WUWG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routes/root/beforeLoad.ts","../src/routes/root/head.ts","../src/tanstack/router.tsx","../src/tanstack/document-class.ts"],"names":["store","translations","createTanStackRouter"],"mappings":"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","file":"chunk-33G2WUWG.js","sourcesContent":["import type { QueryClient } from '@tanstack/react-query';\nimport { createIsomorphicFn } from '@tanstack/react-start';\nimport { getCookie } from '@tanstack/react-start/server';\nimport type { StoreContext } from '../../api/store';\nimport { store as storeApi } from '../../api/store';\nimport { translations } from '../../api/translations';\nimport { FALLBACK_LOCALE, getLanguageInfo } from '../../providers/locale-constants';\nimport { createI18nInstance } from '../../providers/i18n-factory';\nimport type { TwilightLocation } from '../../twilight/context';\nimport { getTwilightContext, updateTwilightContext } from '../../twilight/context';\nimport {\n AUTH_TOKEN_COOKIE_NAME,\n extractTokenFromCookies,\n syncScopeCookie,\n} from '../../utils/cookies';\nimport { syncSdkLocale } from '../../utils/sdk-helpers';\nimport { SettingsError } from '../../utils/errors';\n\n// Reads the `token` cookie from the incoming request on the SERVER. twilightMiddleware\n// extracts the same cookie into a custom ALS, but that ALS does NOT propagate to the\n// route's beforeLoad / React SSR render (they run in a different async scope), so the\n// token must be read again here from the framework's own request context. On the client\n// this is a no-op (the cookie is read from document.cookie below instead). The server\n// import is stripped from the client bundle by createIsomorphicFn.\nconst readServerCookieToken = createIsomorphicFn()\n .server((): string | null => {\n try {\n return getCookie(AUTH_TOKEN_COOKIE_NAME) ?? null;\n } catch {\n return null;\n }\n })\n .client((): string | null => null);\n\nexport interface BeforeLoadResult {\n settings: StoreContext;\n locale: string;\n dir: 'ltr' | 'rtl';\n authToken: string | null;\n}\n\nexport async function rootBeforeLoad(ctx: {\n params: Record<string, string>;\n location: TwilightLocation;\n context: {\n queryClient: QueryClient;\n setLocation?: (location: Partial<TwilightLocation>) => void;\n };\n serverContext?: {\n authToken?: string | null;\n };\n}): Promise<BeforeLoadResult> {\n const locale = ctx.params.locale || FALLBACK_LOCALE;\n const { dir } = getLanguageInfo(locale);\n\n if (ctx.context.setLocation) {\n ctx.context.setLocation(ctx.location);\n }\n\n // Set locale in context before any API calls so interceptor uses correct locale\n updateTwilightContext({ locale });\n\n // Re-assert the locale on the Salla SDK on every navigation. The SDK's axios\n // accept-language header drifts off the route locale (navigator.language default,\n // account-language override on profile fetch — see syncSdkLocale), which makes\n // SDK API calls (e.g. the cart's salla.api.cart.details) return wrong-locale data.\n syncSdkLocale(locale);\n\n // Mirror the SDK's selected branch into the `scope` cookie. The SDK persists the\n // selection in localStorage ONLY, so the server — which can only see cookies —\n // would otherwise compute scope=null for every visitor who picked a branch, and\n // the dehydrated settings query (keyed on the scope) would never match on the\n // client. No-op on the server and while the SDK storage API is still hydrating.\n syncScopeCookie();\n\n const [settingsResult, translationsResult] = await Promise.all([\n ctx.context.queryClient.ensureQueryData(storeApi.queries.settings()),\n ctx.context.queryClient.ensureQueryData(translations.queries.byLocale()),\n ]);\n\n if (!settingsResult) {\n throw new SettingsError('Failed to load store settings. Make sure VITE_STORE_DOMAIN is set.');\n }\n\n // Create i18n instance with loaded translations\n const i18n = createI18nInstance(locale, translationsResult ?? undefined);\n\n // Resolve authToken with fallback chain:\n // 1. SSR context (from middleware extracting cookies on server)\n // 2. The twilight context token. On the SERVER this is the token twilightMiddleware\n // extracted from the `token` cookie into the request ALS — reading it here is\n // essential, otherwise this loader's updateTwilightContext() below would\n // overwrite the middleware's token with null and every SSR render (e.g. the\n // account hub) would be unauthenticated. On the CLIENT it's the clientStore\n // token from hydration or a previous navigation.\n // 3. The `token` cookie read directly — client fallback when clientStore is empty\n // and salla.storage hasn't hydrated yet.\n // 4. Salla SDK storage (salla.storage.get('token'))\n let existingToken: string | null = null;\n try {\n existingToken = getTwilightContext().authToken;\n } catch {\n // No request context (e.g. server call outside the middleware ALS) — fall through.\n existingToken = null;\n }\n const cookieToken =\n typeof document !== 'undefined'\n ? extractTokenFromCookies(document.cookie, AUTH_TOKEN_COOKIE_NAME)\n : null;\n const sallaToken =\n typeof window !== 'undefined' && window.salla && typeof window.salla.storage.get === 'function'\n ? (window.salla.storage.get(AUTH_TOKEN_COOKIE_NAME) as string | null)\n : null;\n const serverCookieToken = readServerCookieToken();\n const authToken =\n ctx.serverContext?.authToken ??\n serverCookieToken ??\n existingToken ??\n cookieToken ??\n sallaToken ??\n null;\n\n updateTwilightContext({\n queryClient: ctx.context.queryClient,\n settings: settingsResult,\n locale,\n location: ctx.location,\n i18n,\n authToken,\n });\n\n return {\n settings: settingsResult,\n locale,\n dir,\n authToken,\n };\n}\n","import type { HeadResult } from '../../utils/head';\nimport { mergeHead, resolveHead } from '../../utils/head';\nimport { buildBaseHead } from '../../utils/baseHead';\nimport { FALLBACK_LOCALE } from '../../providers/locale-constants';\nimport { getTwilightContext } from '../../twilight/context';\nimport type { TwilightContextMatch } from '../../twilight/ensure-context';\nimport { ensureTwilightContextFromMatches } from '../../twilight/ensure-context';\nimport type { StoreContext } from '../../api/store';\nimport { SettingsError } from '../../utils/errors';\n\nconst SALLA_ICONS_CSS_URL = 'https://cdn.assets.salla.network/static/fonts/sallaicons.css?v=2.0.5';\nconst LIT_VERSION = '3.3.3';\nconst LIT_CDN_BASE = `https://cdn.assets.salla.network/static/lit/${LIT_VERSION}`;\n\nconst TWILIGHT_RELEASE_CDN = 'https://cdn.salla.network/js/twilight';\nconst TWILIGHT_DEV_CDN = 'https://cdn.assets.salla.network/dev/@salla.sa/twilight';\nconst DEFAULT_TWILIGHT_SDK_URL = `${TWILIGHT_DEV_CDN}/9b1ad668bb386735f64a045e4c13b4c5508ad4c8/twilight.esm.js`;\n\n/**\n * Which twilight.esm.js the storefront loads, in priority order:\n * 1. `VITE_TWILIGHT_URL` — full local/deployment override.\n * 2. `VITE_TWILIGHT_VERSION` — dev-CDN build override.\n * 3. `theme.twilight.version` from the settings endpoint — the platform-pinned\n * release used when no environment override is configured.\n * 4. The engine's own pinned dev build.\n */\nfunction readEnv(key: string): string | undefined {\n try {\n const vite = (import.meta as unknown as { env?: Record<string, string | undefined> }).env?.[\n key\n ];\n if (vite) return vite;\n } catch {\n /* import.meta.env not available in all environments */\n }\n return typeof process !== 'undefined' ? process.env?.[key] : undefined;\n}\n\nexport function resolveTwilightSdkUrl(settings?: StoreContext): string {\n const urlOverride = readEnv('VITE_TWILIGHT_URL');\n if (urlOverride) return urlOverride;\n\n const versionOverride = readEnv('VITE_TWILIGHT_VERSION');\n if (versionOverride) return `${TWILIGHT_DEV_CDN}/${versionOverride}/twilight.esm.js`;\n\n const pinnedVersion = settings?.theme?.twilight?.version;\n if (pinnedVersion) return `${TWILIGHT_RELEASE_CDN}/${pinnedVersion}/twilight.esm.js`;\n\n return DEFAULT_TWILIGHT_SDK_URL;\n}\n\nconst MEDIA_SWAP_SCRIPT = `\n(function(){var e=function(t){var l=document.getElementById(t);if(l){if(l.sheet||\"all\"===l.media)l.media=\"all\";else l.onload=function(){this.media=\"all\"}}};e(\"salla-theme-font\");e(\"salla-icons-css\")})();\n`.trim();\n\nconst LOADING_CSS = `\n.loading-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:#fff;z-index:9999}\n.loading-spinner{animation:spin 1s linear infinite;border-radius:9999px;height:3rem;width:3rem;border-bottom:2px solid var(--color-primary,#000)}\n@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}\nhtml,body{margin:0;padding:0;height:100%}\n`.trim();\n\n/** Escape JSON-stringified value for safe embedding inside an inline <script> tag. */\nconst escapeForInlineScript = (value: string): string =>\n value\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n\nconst SALLA_INIT_SCRIPT = `\nwindow.salla = window.Salla = window.Salla || window.salla || {};\nwindow.Salla.onReady = window.Salla.onReady || function(callback) {\n return new Promise(function(resolve) {\n if (window.Salla.status === 'ready') {\n var config = window.salla && window.salla.config && window.salla.config.all();\n resolve(callback ? callback(config) : config);\n } else {\n window.addEventListener('twilight::initiated', function(event) {\n resolve(callback ? callback(event.detail) : event.detail);\n }, { once: true });\n }\n });\n};\n`.trim();\n\nexport function rootHead(ctx: {\n params: Record<string, string>;\n matches?: readonly TwilightContextMatch[];\n}): HeadResult {\n // Re-run on the client during hydration, where the twilight module store may\n // still be empty. Recover it from the resolved match context so the head is\n // built from real settings instead of falling through to 'Store Unavailable'.\n ensureTwilightContextFromMatches(ctx.matches);\n\n let settings: StoreContext | undefined;\n try {\n settings = getTwilightContext().settings;\n } catch (e) {\n if (e instanceof SettingsError) {\n return resolveHead({\n title: 'Store Unavailable',\n });\n }\n throw e;\n }\n const locale = ctx.params.locale || FALLBACK_LOCALE;\n const store = settings?.store;\n\n const fontUrl = settings?.theme?.font?.url || settings?.theme?.font?.path;\n const fontUrlWithDisplay =\n fontUrl?.includes('fonts.googleapis.com') && !fontUrl.includes('display=')\n ? `${fontUrl}${fontUrl.includes('?') ? '&' : '?'}display=swap`\n : fontUrl;\n const favicon = store?.icon;\n const primaryColor = settings?.theme?.color?.primary;\n const twilightSdkUrl = resolveTwilightSdkUrl(settings);\n const isGoogleFont = fontUrl?.includes('fonts.googleapis.com');\n const fontFamilyName = settings?.theme?.font?.family_name;\n\n const customization = settings?.theme?.customization;\n const customJs = customization?.js?.trim();\n const customCss = customization?.css?.trim();\n const isCustomCssUrl = customCss?.startsWith('http') || customCss?.startsWith('//');\n const isCustomJsUrl = customJs?.startsWith('http') || customJs?.startsWith('//');\n\n const baseHead = buildBaseHead(settings, locale);\n\n return resolveHead(\n mergeHead(baseHead, {\n meta: [\n { name: 'robots', content: 'index, follow' },\n { name: 'msapplication-TileColor', content: '#ffffff' },\n ...(favicon ? [{ name: 'msapplication-TileImage', content: favicon }] : []),\n ...(primaryColor\n ? [\n { name: 'theme-color', content: primaryColor },\n { name: 'msapplication-navbutton-color', content: primaryColor },\n { name: 'apple-mobile-web-app-status-bar-style', content: primaryColor },\n ]\n : []),\n ],\n links: [\n { rel: 'preconnect', href: 'https://api.salla.dev' },\n { rel: 'preconnect', href: 'https://cdn.salla.sa' },\n { rel: 'preconnect', href: 'https://cdn.assets.salla.network', crossOrigin: 'anonymous' },\n ...(fontUrl\n ? [\n {\n rel: 'preconnect' as const,\n href: 'https://fonts.gstatic.com',\n crossOrigin: 'anonymous' as const,\n },\n ]\n : []),\n { rel: 'modulepreload', href: twilightSdkUrl },\n { rel: 'modulepreload', href: `${LIT_CDN_BASE}/lit.js` },\n ...(fontUrlWithDisplay\n ? [\n {\n id: 'salla-theme-font',\n rel: 'stylesheet',\n href: fontUrlWithDisplay,\n media: 'print',\n },\n ]\n : []),\n ...(fontUrlWithDisplay && !isGoogleFont && fontFamilyName\n ? [\n {\n id: 'salla-font-display-override',\n rel: 'preload',\n as: 'style',\n href: fontUrlWithDisplay,\n },\n ]\n : []),\n ...(favicon ? [{ rel: 'icon', href: favicon }] : []),\n ...(favicon\n ? [{ id: 'salla-apple-icon', rel: 'apple-touch-icon-precomposed', href: favicon }]\n : []),\n ...(isCustomCssUrl && customCss\n ? [{ id: 'salla-custom-css', rel: 'stylesheet', href: customCss }]\n : []),\n {\n id: 'salla-icons-css',\n rel: 'stylesheet',\n href: SALLA_ICONS_CSS_URL,\n media: 'print',\n },\n // {\n // id: 'intl-tel-input-css',\n // rel: 'stylesheet',\n // href: 'https://cdn.jsdelivr.net/npm/intl-tel-input@26.8.0/build/css/intlTelInput.css',\n // },\n ...(isCustomJsUrl && customJs\n ? [{ id: 'salla-custom-js-preload', rel: 'preload', as: 'script', href: customJs }]\n : []),\n ],\n styles: [\n { id: 'twilight-loading', children: LOADING_CSS },\n ...(!isGoogleFont && fontFamilyName\n ? [\n {\n id: 'salla-font-display-swap',\n children: `@font-face{font-family:\"${fontFamilyName}\";font-display:swap;src:local(\"${fontFamilyName}\")}`,\n },\n ]\n : []),\n ...(!isCustomCssUrl && customCss ? [{ id: 'salla-custom-css', children: customCss }] : []),\n ],\n importMap: [\n {\n imports: {\n lit: `${LIT_CDN_BASE}/lit.js`,\n 'lit/': `${LIT_CDN_BASE}/`,\n 'lit-html': `${LIT_CDN_BASE}/lit-html/lit-html.js`,\n 'lit-html/': `${LIT_CDN_BASE}/lit-html/`,\n 'lit-element': `${LIT_CDN_BASE}/lit-element/lit-element.js`,\n 'lit-element/': `${LIT_CDN_BASE}/lit-element/`,\n '@lit/reactive-element': `${LIT_CDN_BASE}/reactive-element/reactive-element.js`,\n '@lit/reactive-element/': `${LIT_CDN_BASE}/reactive-element/`,\n },\n },\n ],\n scripts: [\n { id: 'twilight-init', children: SALLA_INIT_SCRIPT },\n { id: 'salla-async-css', children: MEDIA_SWAP_SCRIPT },\n {\n id: 'salla-sdk',\n type: 'module',\n src: twilightSdkUrl,\n },\n ...(store?.settings?.ticketing_system_enabled\n ? [\n {\n id: 'salla-ticketing-script',\n src: 'https://cdn.assets.salla.network/latest/@salla.sa/ui-store-ticketing-system/ticketing-system.es.js',\n type: 'module',\n },\n ]\n : []),\n // Fast checkout for quick-purchase feature (product pages, landing pages)\n ...(store?.settings?.quick_order\n ? [\n {\n id: 'fast-checkout-js',\n type: 'module',\n src: 'https://cdn.assets.salla.network/mini-checkout/widget/widget.esm.js?v=0.0.9',\n },\n ]\n : []),\n ...(isCustomJsUrl && customJs\n ? [\n {\n id: 'salla-custom-js',\n children: `document.addEventListener('twilight::initiated',function(){var s=document.createElement('script');s.src=${escapeForInlineScript(JSON.stringify(customJs))};s.async=true;document.head.appendChild(s)},{once:true});`,\n },\n ]\n : []),\n ...(!isCustomJsUrl && customJs\n ? [\n {\n id: 'salla-custom-js',\n children: `try { ${customJs} } catch(e) { console.warn(\"[ThemeCustomization] Custom JS error:\", e); }`,\n },\n ]\n : []),\n ],\n })\n );\n}\n","import type { ReactNode } from 'react';\nimport { lazy, Suspense } from 'react';\nimport {\n createRouter as createTanStackRouter,\n createRootRouteWithContext,\n} from '@tanstack/react-router';\nimport type { RouterHistory } from '@tanstack/react-router';\nimport { QueryClient } from '@tanstack/react-query';\nimport { PageSkeleton } from '@salla.sa/twilight-components-react/skeletons';\nimport { setHeadAdapter } from '../utils/head';\nimport { tanstackHeadAdapter } from './head';\nimport { updateTwilightContext, type TwilightLocation } from '../twilight/context';\nimport { dispatchRouteChanged } from '../utils/sdk-events';\nimport { rootBeforeLoad, type BeforeLoadResult } from '../routes/root/beforeLoad';\nimport { rootHead } from '../routes/root/head';\nimport { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query';\nimport type { AnyRouter } from '@tanstack/react-router';\nimport { RouteId, type RouteIdType } from '../router/route-ids';\nimport { UnauthorizedError, NotFoundError, RedirectError } from '../providers/NavigationProvider';\nimport { ErrorPage } from '../components/common/ErrorPage';\nimport type { StoreContext } from '../api/store';\nimport { createI18nInstance } from '../providers/i18n-factory';\nimport type { TranslationMessages } from '../providers/I18nProvider';\n\n/**\n * Initial router context passed from createRouter to beforeLoad.\n */\nexport interface RouterInitialContext {\n queryClient: QueryClient;\n setLocation: (_location: Partial<TwilightLocation>) => void;\n}\n\n/**\n * TanStack Router ID Mapping\n *\n * Maps TanStack's auto-generated path-based route IDs to semantic RouteId constants.\n * This mapping is TanStack-specific because different frameworks generate route IDs differently:\n *\n * - TanStack: Uses file path as ID (e.g., '/{-$locale}/cart')\n * - Next.js: Uses file path without locale (e.g., '/cart')\n *\n * The mapping enables hooks like useIsHome(), useIsProduct() to work consistently\n * across frameworks while each framework has its own ID generation strategy.\n */\nexport const TANSTACK_ROUTE_ID_MAP: Record<string, RouteIdType> = {\n '/{-$locale}/': RouteId.INDEX,\n '/{-$locale}/cart': RouteId.CART,\n '/{-$locale}/search': RouteId.SEARCH,\n\n '/{-$locale}/latest-products': RouteId.PRODUCT_INDEX_LATEST,\n '/{-$locale}/most-sales-products': RouteId.PRODUCT_INDEX_SALES,\n '/{-$locale}/offers': RouteId.PRODUCT_INDEX_OFFERS,\n\n '/{-$locale}/$slug/c{$id}': RouteId.PRODUCT_INDEX,\n '/{-$locale}/$slug/p{$id}': RouteId.PRODUCT_SINGLE,\n '/{-$locale}/$slug/brand-{$id}': RouteId.BRANDS_SINGLE,\n '/{-$locale}/$slug/tag-{$id}': RouteId.PRODUCT_INDEX_TAG,\n '/{-$locale}/$slug/page-{$id}': RouteId.PAGE_SINGLE,\n\n '/{-$locale}/blog': RouteId.BLOG_INDEX,\n '/{-$locale}/blog/$slug/a-{$id}': RouteId.BLOG_SINGLE,\n '/{-$locale}/blog/$slug/c-{$id}': RouteId.BLOG_INDEX_CATEGORY,\n '/{-$locale}/blog/$slug/tag-{$id}': RouteId.BLOG_INDEX_TAG,\n '/{-$locale}/blog/author/$id': RouteId.BLOG_INDEX_AUTHOR,\n\n '/{-$locale}/brands': RouteId.BRANDS_INDEX,\n '/{-$locale}/brands/$id': RouteId.BRANDS_SINGLE,\n '/{-$locale}/tags/$id': RouteId.PRODUCT_INDEX_TAG,\n\n '/{-$locale}/profile': RouteId.CUSTOMER_PROFILE,\n '/{-$locale}/wishlist': RouteId.CUSTOMER_WISHLIST,\n '/{-$locale}/wallet': RouteId.CUSTOMER_WALLET,\n '/{-$locale}/notifications': RouteId.CUSTOMER_NOTIFICATIONS,\n '/{-$locale}/settings': RouteId.CUSTOMER_SETTINGS,\n '/{-$locale}/orders': RouteId.CUSTOMER_ORDERS_INDEX,\n '/{-$locale}/order/$id': RouteId.CUSTOMER_ORDERS_SINGLE,\n '/{-$locale}/pending-orders': RouteId.CUSTOMER_ORDERS_INDEX_PENDING,\n\n '/{-$locale}/loyalty': RouteId.LOYALTY,\n '/{-$locale}/testimonials': RouteId.TESTIMONIALS,\n '/{-$locale}/thankyou/$orderId': RouteId.THANK_YOU,\n};\n\n/**\n * Resolves a TanStack route ID to a semantic RouteId constant.\n * Falls back to the original ID if no mapping exists.\n * @internal Exported for testing\n */\nexport function resolveRouteId(tanstackId: string): string {\n return TANSTACK_ROUTE_ID_MAP[tanstackId] ?? tanstackId;\n}\n\n// Lazy load NotFoundPage for code splitting\nconst LazyNotFoundPage = lazy(() =>\n import('../routes/not-found').then((m) => ({ default: m.NotFoundPage }))\n);\n\n/**\n * Error component shown when the root route fails to load.\n * This renders a minimal HTML page with error details.\n */\nfunction StoreUnavailablePage() {\n return (\n <>\n <div\n style={{\n position: 'fixed',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: '#f9fafb',\n }}\n >\n <div style={{ textAlign: 'center', padding: '2rem' }}>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>\n Store is temporarily unavailable\n </h1>\n <p style={{ color: '#6b7280' }}>\n We&apos;re having trouble loading the store. Please try again in a moment.\n </p>\n <button\n type=\"button\"\n onClick={() => window.location.reload()}\n style={{\n marginTop: '1rem',\n padding: '0.75rem 1.5rem',\n fontSize: '1rem',\n border: 'none',\n borderRadius: '0.5rem',\n background: '#111827',\n color: '#fff',\n cursor: 'pointer',\n }}\n >\n Retry\n </button>\n </div>\n </div>\n </>\n );\n}\n\nfunction RootErrorComponent({ error: _error }: { error: Error }) {\n return (\n <html lang=\"ar\" dir=\"rtl\">\n <head>\n <meta charSet=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Store Unavailable</title>\n </head>\n <body style={{ margin: 0, fontFamily: 'sans-serif' }}>\n <StoreUnavailablePage />\n </body>\n </html>\n );\n}\n\n/**\n * Creates the root route pre-configured with RouterInitialContext.\n * beforeLoad will fetch settings/translations, loader returns serializable data.\n *\n * @example\n * ```ts\n * export const Route = createTwilightRootRoute()({ shellComponent });\n * ```\n */\nexport function createTwilightRootRoute() {\n const factory = createRootRouteWithContext<RouterInitialContext>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- TanStack Router factory expects `any` for spread options\n return (options: any) =>\n factory({\n beforeLoad: rootBeforeLoad,\n head: rootHead,\n errorComponent: RootErrorComponent,\n ...options,\n });\n}\n\n/**\n * Default error component for route-level errors.\n */\nexport function DefaultErrorComponent({ error }: { error: Error }) {\n if (error instanceof RedirectError) {\n return null;\n }\n\n if (error instanceof NotFoundError) {\n return <ErrorPage code={404} message={error.message} />;\n }\n\n if (error instanceof UnauthorizedError) {\n return <ErrorPage code={401} message={error.message} showAction={false} />;\n }\n\n if ((error as any)?.response) {\n return <ErrorPage code={400} message={error.message} />;\n }\n\n return <ErrorPage code={500} message={error.message} />;\n}\n\n/**\n * SSR integration for Twilight context — mirrors TanStack Query's\n * `setupRouterSsrQueryIntegration` pattern.\n *\n * On the **server**: wraps `router.options.dehydrate` to include twilight\n * context data (settings, locale, location, authToken) alongside the router state.\n *\n * On the **client**: wraps `router.options.hydrate` to populate the module-level\n * store from the root match's `__beforeLoadContext` BEFORE head functions re-run.\n * TanStack's `hydrate()` calls `router.options.hydrate()` at line 114 of\n * `ssr-client.ts`, right before it re-evaluates head functions (line 120+).\n * By populating the store here, `getTwilightContext().settings` is available\n * to `rootHead()` and all child head functions during client hydration.\n */\nfunction setupTwilightSsrIntegration(router: AnyRouter, queryClient: QueryClient): void {\n if (typeof window === 'undefined') {\n // Server: also populate twilightCtx from root match context on dehydrate\n return;\n }\n\n // Client: hook into router.options.hydrate to populate the module store\n // from the root match's __beforeLoadContext (set by rootBeforeLoad on the server)\n const ogHydrate = router.options.hydrate;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n router.options.hydrate = async (dehydratedData: any) => {\n await ogHydrate?.(dehydratedData);\n hydrateTwilightContext(router, queryClient);\n };\n}\n\nfunction warnHydrationBail(reason: string): void {\n // Silent failure here is what blanks the storefront: every head function that\n // runs next reads `getTwilightContext().settings`, which throws when the store\n // is empty. `ensureTwilightContextFromMatches` recovers at the point of use,\n // but the bail still signals a regression worth seeing in dev.\n if (import.meta.env?.DEV) {\n console.warn(`[Twilight] Could not hydrate twilight context: ${reason}`);\n }\n}\n\nfunction hydrateTwilightContext(router: AnyRouter, queryClient: QueryClient): void {\n const rootMatch = router.state?.matches?.[0];\n if (!rootMatch) {\n warnHydrationBail('no root match in router state');\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const beforeLoadCtx = (rootMatch as any).__beforeLoadContext as BeforeLoadResult | undefined;\n const matchCtx = rootMatch.context as Record<string, unknown> | undefined;\n\n const settings = (beforeLoadCtx?.settings ?? matchCtx?.settings) as StoreContext | undefined;\n const locale = (beforeLoadCtx?.locale ?? matchCtx?.locale) as string | undefined;\n const authToken = (beforeLoadCtx?.authToken ?? matchCtx?.authToken) as string | null;\n\n if (!settings || !locale) {\n warnHydrationBail(\n `root match carried no ${!settings ? 'settings' : 'locale'} (beforeLoadContext and context both empty)`\n );\n return;\n }\n\n const translations = queryClient.getQueryData(['translations']) as\n | TranslationMessages\n | undefined;\n const i18n = createI18nInstance(locale, translations);\n\n const location = router.state?.location\n ? {\n href: router.state.location.href,\n pathname: router.state.location.pathname,\n search: router.state.location.search as Record<string, unknown>,\n searchStr: router.state.location.searchStr,\n state: router.state.location.state as unknown as Record<string, unknown>,\n hash: router.state.location.hash,\n }\n : undefined;\n\n const matches = router.state?.matches;\n const page = matches?.reduceRight(\n (found, m) => found ?? ((m as any).loaderData?.page ? (m as any).loaderData.page : null),\n null as any\n );\n\n // Resolve routeId on the initial load too — `onResolved` only fires on later\n // navigations, so without this the store keeps the empty default until the\n // first SPA navigation (breaks useRouteId/useIsHome on first paint/refresh).\n const leafMatch = matches?.[matches.length - 1];\n const routeId = leafMatch?.routeId ? resolveRouteId(leafMatch.routeId as string) : undefined;\n\n updateTwilightContext({\n queryClient,\n settings,\n locale,\n i18n,\n authToken,\n location,\n page,\n routeId,\n });\n}\n\n/**\n * Options for creating the TanStack Router instance.\n */\nexport interface CreateRouterOptions {\n defaultPendingComponent?: (() => ReactNode) | false;\n defaultPendingMs?: number;\n defaultPendingMinMs?: number;\n defaultStaleTime?: number;\n history?: RouterHistory;\n}\n\n/**\n * Creates and configures the TanStack Router instance for the Twilight theme.\n *\n * This router is pre-configured with:\n * - Route tree generated by the TanStack Router plugin\n * - Intent-based preload for better performance\n * - Scroll restoration for better UX\n * - Locale-aware default NotFoundPage (redirects `/cart` → `/ar/cart`)\n * - Trailing slash normalization for consistent URL handling\n * - Page skeleton shown during route transitions (via `defaultPendingComponent`)\n * - SSR query integration for Cloudflare compatibility\n *\n * @param routeTree - The generated route tree from the consuming project\n * @param options - Optional overrides for pending component behavior\n * @returns Configured TanStack Router instance\n */\nexport function createRouter(routeTree: any, options?: CreateRouterOptions) {\n setHeadAdapter(tanstackHeadAdapter);\n\n const {\n defaultPendingComponent: pendingOpt,\n defaultPendingMs = 100,\n defaultPendingMinMs = 200,\n defaultStaleTime = Infinity,\n history,\n } = options ?? {};\n\n const pendingComponent =\n pendingOpt === false ? undefined : (pendingOpt ?? (() => <PageSkeleton />));\n\n const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 60_000,\n gcTime: 5 * 60_000,\n retry: 1,\n refetchOnWindowFocus: false,\n },\n mutations: {\n retry: 0,\n },\n },\n });\n\n // Store queryClient in the holder for access by loaders via getTwilightContext()\n updateTwilightContext({ queryClient });\n\n const router = createTanStackRouter({\n routeTree,\n ...(history ? { history } : {}),\n context: {\n queryClient,\n setLocation: (location: Partial<TwilightLocation>) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n updateTwilightContext({ location } as any);\n },\n },\n defaultPreload: 'intent',\n scrollRestoration: true,\n scrollRestorationBehavior: 'instant',\n trailingSlash: 'never',\n defaultStaleTime,\n defaultNotFoundComponent: () => (\n <Suspense fallback={<PageSkeleton />}>\n <LazyNotFoundPage />\n </Suspense>\n ),\n defaultPendingComponent: pendingComponent,\n defaultPendingMs,\n defaultPendingMinMs,\n defaultErrorComponent: DefaultErrorComponent,\n });\n\n // Setup SSR query integration (native, with incremental streaming)\n setupRouterSsrQueryIntegration({ router, queryClient });\n\n // Setup Twilight SSR integration — populates the module store from\n // dehydrated match context BEFORE head functions re-run on the client.\n // This mirrors how setupRouterSsrQueryIntegration hydrates QueryClient.\n setupTwilightSsrIntegration(router, queryClient);\n\n // Subscribe to navigation events to sync location and routeId\n function syncNavigationState() {\n const state = router?.state;\n if (!state?.location) return;\n\n const loc = state.location;\n updateTwilightContext({\n location: {\n href: loc.href,\n pathname: loc.pathname,\n search: loc.search as Record<string, unknown>,\n searchStr: loc.searchStr,\n state: loc.state as unknown as Record<string, unknown>,\n hash: loc.hash,\n },\n });\n\n const matches = state.matches;\n const leafMatch = matches[matches.length - 1];\n if (leafMatch?.routeId) {\n const semanticId = resolveRouteId(leafMatch.routeId as string);\n updateTwilightContext({ routeId: semanticId });\n }\n\n const rootMatch = state.matches[0];\n if (rootMatch?.context) {\n const ctx = rootMatch.context as BeforeLoadResult;\n if (ctx?.settings) {\n updateTwilightContext({ settings: ctx.settings, locale: ctx.locale });\n }\n }\n }\n\n // Extract page from matches as soon as loaders complete (before components mount),\n // so useTwilightInit's useEffect sees page data when it calls sdk.init().\n router.subscribe('onLoad', () => {\n const matches = router.state?.matches;\n if (!matches) return;\n const page = matches.reduceRight(\n (found, m) => found ?? ((m as any).loaderData?.page ? (m as any).loaderData.page : null),\n null as any\n );\n if (page) {\n updateTwilightContext({ page });\n // Set page config for SDK\n const salla = window.salla;\n salla?.config?.set?.('page', {\n ...page,\n url: page.url ?? router.state.location.pathname + router.state.location.searchStr,\n });\n }\n });\n\n // Sync location, routeId, and settings after navigation fully resolves\n router.subscribe('onResolved', () => {\n syncNavigationState();\n dispatchRouteChanged();\n });\n\n return router;\n}\n\ndeclare module '@tanstack/react-router' {\n interface Register {\n router: ReturnType<typeof createRouter>;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- Required by TanStack Router module augmentation pattern\n interface RouterContext extends RouterInitialContext {}\n}\n","import { useRouterState } from '@tanstack/react-router';\nimport {\n mergeElementAttrs,\n toReactProps,\n type DocumentElementDescriptor,\n} from '../utils/document-class';\nimport { useDocumentClass } from '../hooks/useDocumentClass';\nimport { updateTwilightContext } from '../twilight/context';\nimport { resolveRouteId } from './router';\n\n// ============================================================================\n// Route → body class map (mirrors PHP Route2Class::generateClassString)\n// Keyed by TanStack Router route ID (the path passed to createFileRoute).\n// null = intentionally classless (e.g. root layout routes).\n// ============================================================================\n\nconst ROUTE_CLASS_MAP: Record<string, string | null> = {\n '/{-$locale}/': 'index',\n '/{-$locale}/cart': 'cart',\n '/{-$locale}/$slug/c{$id}': 'product-index',\n '/{-$locale}/offers': 'product-index-offers',\n '/{-$locale}/latest-products': 'product-index-latest',\n '/{-$locale}/most-sales-products': 'product-index-sales',\n '/{-$locale}/search': 'product-index-search',\n '/{-$locale}/$slug/tag-{$id}': 'product-index-tag',\n '/{-$locale}/tags/$id': 'product-index-tag',\n '/{-$locale}/$slug/p{$id}': 'product-single',\n '/{-$locale}/$slug/page-{$id}': 'page-single',\n '/{-$locale}/page/$slug': 'page-single',\n '/{-$locale}/p/$slug': 'page-single',\n '/{-$locale}/thankyou/$orderId': 'thank-you',\n '/{-$locale}/orders': 'customer-orders-index',\n '/{-$locale}/pending-orders': 'customer-orders-index-pending', // redirect to /orders?status=pending\n '/{-$locale}/order/$id': 'customer-orders-single',\n '/{-$locale}/profile': 'customer-profile',\n '/{-$locale}/wallet': 'customer-wallet',\n '/{-$locale}/wishlist': 'customer-wishlist',\n '/{-$locale}/notifications': 'customer-notifications',\n '/{-$locale}/testimonials': 'testimonials',\n '/{-$locale}/brands': 'brands-index',\n '/{-$locale}/brands/$id': 'brands-single',\n '/{-$locale}/$slug/brand-{$id}': 'brands-single',\n '/{-$locale}/blog': 'blog-index',\n '/{-$locale}/blog/$slug/a-{$id}': 'blog-single',\n '/{-$locale}/blog/$slug/c-{$id}': 'blog-index-category',\n '/{-$locale}/blog/$slug/tag-{$id}': 'blog-index-tag',\n '/{-$locale}/blog/author/$id': 'blog-index-author',\n '/{-$locale}/loyalty': 'loyalty',\n};\n\n// ============================================================================\n// RouteDocumentSync — resolves body class from active route ID at runtime.\n// ============================================================================\n\n/**\n * Applies the per-route body class by looking up the deepest active route ID\n * in the built-in route→class map.\n *\n * For custom routes not in the built-in map, use `useDocumentClass` directly\n * inside your route component.\n *\n * Note: This will throw if rendered outside a TanStack Router context.\n * Use TanStackDocumentSync for safe usage inside TwilightProvider.\n */\nexport function RouteDocumentSync(): null {\n const matches = useRouterState({ select: (s) => s.matches });\n\n let routeClass: string | null = null;\n for (let i = matches.length - 1; i >= 0; i--) {\n const id = matches[i].routeId;\n if (id in ROUTE_CLASS_MAP) {\n routeClass = ROUTE_CLASS_MAP[id];\n break;\n }\n }\n\n useDocumentClass(routeClass ? { body: { class: routeClass } } : {});\n return null;\n}\n\n/**\n * Safe version of RouteDocumentSync for use in TwilightProvider.\n * Handles being rendered outside a TanStack Router context gracefully.\n * Uses a wrapper component pattern to conditionally render hooks.\n */\nexport function TanStackDocumentSync(): null {\n const matches = useRouterState({ select: (s) => s.matches }) || [];\n\n // On the server routeId is never synced (onResolved is client-only), so useIsHome()\n // etc. disagree with the client and cause hydration mismatches. Sync it here — this\n // renders before the layout. Client already has it from onResolved.\n if (typeof window === 'undefined') {\n const leaf = matches[matches.length - 1];\n if (leaf?.routeId) {\n updateTwilightContext({ routeId: resolveRouteId(leaf.routeId as string) });\n }\n }\n\n let routeClass: string | null = null;\n for (let i = matches.length - 1; i >= 0; i--) {\n const id = matches[i].routeId;\n if (id in ROUTE_CLASS_MAP) {\n routeClass = ROUTE_CLASS_MAP[id];\n break;\n }\n }\n\n useDocumentClass(routeClass ? { body: { class: routeClass } } : {});\n return null;\n}\n\n// ============================================================================\n// Type augmentation — extend TanStack Router's staticData type\n// ============================================================================\n\ndeclare module '@tanstack/react-router' {\n interface StaticDataRouteOption {\n documentAttrs?: DocumentElementDescriptor;\n }\n}\n\nexport interface TanstackRouteStaticData {\n documentAttrs?: DocumentElementDescriptor;\n}\n\n// ============================================================================\n// useTanstackDocumentAttrs — for TanStack Start SSR root layouts\n// ============================================================================\n\n/**\n * Read and merge `<body>` / `<html>` attributes from all currently active\n * route matches (via `staticData.documentAttrs`).\n *\n * Returns React-ready prop objects ready to spread onto `<html>` and `<body>`.\n */\nexport function useTanstackDocumentAttrs(): {\n bodyAttrs: Record<string, string>;\n htmlAttrs: Record<string, string>;\n} {\n const matches = useRouterState({ select: (s) => s.matches });\n\n const bodyDescriptors = matches.map(\n (m) => (m.staticData as TanstackRouteStaticData | undefined)?.documentAttrs?.body ?? {}\n );\n const htmlDescriptors = matches.map(\n (m) => (m.staticData as TanstackRouteStaticData | undefined)?.documentAttrs?.html ?? {}\n );\n\n return {\n bodyAttrs: toReactProps(mergeElementAttrs(bodyDescriptors)),\n htmlAttrs: toReactProps(mergeElementAttrs(htmlDescriptors)),\n };\n}\n\n/**\n * Pure adapter: converts a `DocumentElementDescriptor` to React-ready props.\n */\nexport function tanstackDocumentAdapter(descriptor: DocumentElementDescriptor): {\n bodyAttrs: Record<string, string>;\n htmlAttrs: Record<string, string>;\n} {\n return {\n bodyAttrs: toReactProps(mergeElementAttrs([descriptor.body ?? {}])),\n htmlAttrs: toReactProps(mergeElementAttrs([descriptor.html ?? {}])),\n };\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { product } from './chunk-Q6M55SHW.js';
2
- import { ProductCard } from './chunk-HNSBWBPJ.js';
1
+ import { product } from './chunk-GCXKFC34.js';
2
+ import { ProductCard } from './chunk-4DKOABYV.js';
3
3
  import { registry } from './chunk-G7ALL4BC.js';
4
4
  import { useTranslation } from './chunk-TYNZ5B2B.js';
5
- import { Image, LazyRenderWhenVisible } from './chunk-42437XWT.js';
5
+ import { Image, LazyRenderWhenVisible } from './chunk-W2LYNXAS.js';
6
6
  import { Link } from './chunk-AXW67SY7.js';
7
7
  import { TwilightContext } from './chunk-DF6FBKDN.js';
8
8
  import { memo, useState, useCallback, createElement, useEffect, lazy, Component, useRef, useMemo, Suspense } from 'react';
@@ -691,5 +691,5 @@ var HomeComponentRenderer = memo(function HomeComponentRenderer2({
691
691
  });
692
692
 
693
693
  export { BundleComponent, ComponentErrorBoundary, DefaultHomeComponents, FeaturedProductsStyle1, FeaturedProductsStyle2, FeaturedProductsStyle3, FixedBanner, FixedProducts, HomeComponentRenderer, LazyTestimonials, ParallaxBackground, PhotosSlider, ProductsSlider, SquarePhotos, StoreFeatures, Youtube, registerHomeComponentConfig, registerHomeComponents };
694
- //# sourceMappingURL=chunk-JIUCZ46V.js.map
695
- //# sourceMappingURL=chunk-JIUCZ46V.js.map
694
+ //# sourceMappingURL=chunk-3TTJ75XL.js.map
695
+ //# sourceMappingURL=chunk-3TTJ75XL.js.map