@salla.sa/twilight-theme-engine 1.0.114 → 1.0.116

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 (134) hide show
  1. package/dist/{AddToCartForm-HYDC3XI2.js → AddToCartForm-6NCWP2NI.js} +3 -3
  2. package/dist/{AddToCartForm-HYDC3XI2.js.map → AddToCartForm-6NCWP2NI.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-J6ZADSYT.js → BlogAuthorPage-NLVQF5Q5.js} +8 -8
  4. package/dist/{BlogAuthorPage-J6ZADSYT.js.map → BlogAuthorPage-NLVQF5Q5.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-JCEURH44.js → BlogCategoryPage-4QUIKTSA.js} +8 -8
  6. package/dist/{BlogCategoryPage-JCEURH44.js.map → BlogCategoryPage-4QUIKTSA.js.map} +1 -1
  7. package/dist/{BlogPage-N6L62TI6.js → BlogPage-XB2D5HHJ.js} +7 -7
  8. package/dist/{BlogPage-N6L62TI6.js.map → BlogPage-XB2D5HHJ.js.map} +1 -1
  9. package/dist/{BlogSinglePage-F3W3T5XC.js → BlogSinglePage-KA66R2CQ.js} +7 -7
  10. package/dist/{BlogSinglePage-F3W3T5XC.js.map → BlogSinglePage-KA66R2CQ.js.map} +1 -1
  11. package/dist/{BlogTagPage-T4QZCQ63.js → BlogTagPage-MBRDNQVV.js} +8 -8
  12. package/dist/{BlogTagPage-T4QZCQ63.js.map → BlogTagPage-MBRDNQVV.js.map} +1 -1
  13. package/dist/{BrandsPage-PPSMQ2GB.js → BrandsPage-NFKQQEAI.js} +7 -7
  14. package/dist/{BrandsPage-PPSMQ2GB.js.map → BrandsPage-NFKQQEAI.js.map} +1 -1
  15. package/dist/{Breadcrumb-UIRXYLYY.js → Breadcrumb-VZTWGT26.js} +7 -7
  16. package/dist/{Breadcrumb-UIRXYLYY.js.map → Breadcrumb-VZTWGT26.js.map} +1 -1
  17. package/dist/{CartItem-776TQTAV.js → CartItem-EFDQLYP7.js} +7 -7
  18. package/dist/{CartItem-776TQTAV.js.map → CartItem-EFDQLYP7.js.map} +1 -1
  19. package/dist/{CartSummary-OZYH6FEC.js → CartSummary-PJDCLQTS.js} +7 -7
  20. package/dist/{CartSummary-OZYH6FEC.js.map → CartSummary-PJDCLQTS.js.map} +1 -1
  21. package/dist/{Copyright-SQ3E6ISK.js → Copyright-HAU4I2CU.js} +3 -3
  22. package/dist/{Copyright-SQ3E6ISK.js.map → Copyright-HAU4I2CU.js.map} +1 -1
  23. package/dist/{CustomerLayout-BPWOSQE7.js → CustomerLayout-IHB3VD3E.js} +7 -7
  24. package/dist/{CustomerLayout-BPWOSQE7.js.map → CustomerLayout-IHB3VD3E.js.map} +1 -1
  25. package/dist/{Footer-LRHWG3E3.js → Footer-GKYZN2IF.js} +4 -4
  26. package/dist/{Footer-LRHWG3E3.js.map → Footer-GKYZN2IF.js.map} +1 -1
  27. package/dist/{Header-GKIBRAWF.js → Header-OUMPXV42.js} +4 -4
  28. package/dist/{Header-GKIBRAWF.js.map → Header-OUMPXV42.js.map} +1 -1
  29. package/dist/{LoyaltyPage-4L2UBTE7.js → LoyaltyPage-RLDDXCXX.js} +7 -7
  30. package/dist/{LoyaltyPage-4L2UBTE7.js.map → LoyaltyPage-RLDDXCXX.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-A37LQAVZ.js → LoyaltyPointsPage-O5KWIEY2.js} +3 -3
  32. package/dist/{LoyaltyPointsPage-A37LQAVZ.js.map → LoyaltyPointsPage-O5KWIEY2.js.map} +1 -1
  33. package/dist/{MainMenu-KND373OO.js → MainMenu-LJIJY4AX.js} +3 -3
  34. package/dist/{MainMenu-KND373OO.js.map → MainMenu-LJIJY4AX.js.map} +1 -1
  35. package/dist/{MasterLayout-JUWHJDIV.js → MasterLayout-FNC6M7D7.js} +7 -7
  36. package/dist/{MasterLayout-JUWHJDIV.js.map → MasterLayout-FNC6M7D7.js.map} +1 -1
  37. package/dist/{MobileMenu-GX26BF44.js → MobileMenu-BRKNE7QW.js} +7 -7
  38. package/dist/{MobileMenu-GX26BF44.js.map → MobileMenu-BRKNE7QW.js.map} +1 -1
  39. package/dist/{NotificationsPage-BW22PAFO.js → NotificationsPage-PUFFEJJL.js} +7 -7
  40. package/dist/{NotificationsPage-BW22PAFO.js.map → NotificationsPage-PUFFEJJL.js.map} +1 -1
  41. package/dist/{OrderSinglePage-26CPSHN7.js → OrderSinglePage-DPRCLI7U.js} +7 -7
  42. package/dist/{OrderSinglePage-26CPSHN7.js.map → OrderSinglePage-DPRCLI7U.js.map} +1 -1
  43. package/dist/{OrdersPage-UAPIZ5X2.js → OrdersPage-YCF2F4CC.js} +7 -7
  44. package/dist/{OrdersPage-UAPIZ5X2.js.map → OrdersPage-YCF2F4CC.js.map} +1 -1
  45. package/dist/{PageSingle-P6YUDITC.js → PageSingle-UIFZXJIV.js} +3 -3
  46. package/dist/{PageSingle-P6YUDITC.js.map → PageSingle-UIFZXJIV.js.map} +1 -1
  47. package/dist/{ProductDetails-KW6PHNDT.js → ProductDetails-73Q6BYGA.js} +3 -3
  48. package/dist/{ProductDetails-KW6PHNDT.js.map → ProductDetails-73Q6BYGA.js.map} +1 -1
  49. package/dist/{ProfilePage-TLQ33GC2.js → ProfilePage-ZD5E4OGM.js} +7 -7
  50. package/dist/{ProfilePage-TLQ33GC2.js.map → ProfilePage-ZD5E4OGM.js.map} +1 -1
  51. package/dist/{ReviewsPage-KXMST6YC.js → ReviewsPage-5WOXAZDE.js} +3 -3
  52. package/dist/{ReviewsPage-KXMST6YC.js.map → ReviewsPage-5WOXAZDE.js.map} +1 -1
  53. package/dist/{SeoCartWidget-VIB6XNDG.js → SeoCartWidget-GYAGYAX2.js} +7 -7
  54. package/dist/{SeoCartWidget-VIB6XNDG.js.map → SeoCartWidget-GYAGYAX2.js.map} +1 -1
  55. package/dist/{SettingsPage-QA6BHO4U.js → SettingsPage-7CU5SRJO.js} +7 -7
  56. package/dist/{SettingsPage-QA6BHO4U.js.map → SettingsPage-7CU5SRJO.js.map} +1 -1
  57. package/dist/{StoreClosedNotification-O3SS6VZ2.js → StoreClosedNotification-O5YSPII4.js} +8 -8
  58. package/dist/{StoreClosedNotification-O3SS6VZ2.js.map → StoreClosedNotification-O5YSPII4.js.map} +1 -1
  59. package/dist/{TestimonialsPage-UIDU6KFX.js → TestimonialsPage-BFEG7S6W.js} +3 -3
  60. package/dist/{TestimonialsPage-UIDU6KFX.js.map → TestimonialsPage-BFEG7S6W.js.map} +1 -1
  61. package/dist/{ThankYouPage-BSPDSKWQ.js → ThankYouPage-5QENDZTM.js} +8 -8
  62. package/dist/{ThankYouPage-BSPDSKWQ.js.map → ThankYouPage-5QENDZTM.js.map} +1 -1
  63. package/dist/{WalletPage-65LFQD7C.js → WalletPage-EYTVKQMV.js} +7 -7
  64. package/dist/{WalletPage-65LFQD7C.js.map → WalletPage-EYTVKQMV.js.map} +1 -1
  65. package/dist/{WishlistPage-Q5DSDUK2.js → WishlistPage-LT7TOAM3.js} +7 -7
  66. package/dist/{WishlistPage-Q5DSDUK2.js.map → WishlistPage-LT7TOAM3.js.map} +1 -1
  67. package/dist/{chunk-ESTUNROV.js → chunk-4ODMWV34.js} +4 -4
  68. package/dist/{chunk-ESTUNROV.js.map → chunk-4ODMWV34.js.map} +1 -1
  69. package/dist/{chunk-GY3BB3AO.js → chunk-4ZTHNUB7.js} +7 -7
  70. package/dist/{chunk-GY3BB3AO.js.map → chunk-4ZTHNUB7.js.map} +1 -1
  71. package/dist/{chunk-VO5S7EWQ.js → chunk-7ANH3RD5.js} +3 -3
  72. package/dist/{chunk-VO5S7EWQ.js.map → chunk-7ANH3RD5.js.map} +1 -1
  73. package/dist/{chunk-WKQJHPPO.js → chunk-BLIH42Y6.js} +4 -4
  74. package/dist/{chunk-WKQJHPPO.js.map → chunk-BLIH42Y6.js.map} +1 -1
  75. package/dist/{chunk-SNLFNDZ4.js → chunk-DGCHTKPZ.js} +6 -6
  76. package/dist/{chunk-SNLFNDZ4.js.map → chunk-DGCHTKPZ.js.map} +1 -1
  77. package/dist/chunk-GPWNE2C6.js +14 -0
  78. package/dist/{chunk-2MSIZCRA.js.map → chunk-GPWNE2C6.js.map} +1 -1
  79. package/dist/{chunk-BIMUFPBI.js → chunk-HFGOFYQX.js} +3 -3
  80. package/dist/{chunk-BIMUFPBI.js.map → chunk-HFGOFYQX.js.map} +1 -1
  81. package/dist/{chunk-Q52RM7LP.js → chunk-JZ2SYFVR.js} +3 -3
  82. package/dist/{chunk-Q52RM7LP.js.map → chunk-JZ2SYFVR.js.map} +1 -1
  83. package/dist/{chunk-OKAHNTDP.js → chunk-L34CKKVC.js} +3 -3
  84. package/dist/{chunk-OKAHNTDP.js.map → chunk-L34CKKVC.js.map} +1 -1
  85. package/dist/{chunk-ZFYPME3R.js → chunk-LQ4X4YQM.js} +17 -10
  86. package/dist/chunk-LQ4X4YQM.js.map +1 -0
  87. package/dist/{chunk-EGJCC6DM.js → chunk-RR2RWSCF.js} +4 -4
  88. package/dist/{chunk-EGJCC6DM.js.map → chunk-RR2RWSCF.js.map} +1 -1
  89. package/dist/{chunk-PCEKL6S3.js → chunk-TDOVEDHH.js} +46 -4
  90. package/dist/chunk-TDOVEDHH.js.map +1 -0
  91. package/dist/{chunk-2CDOVXWU.js → chunk-X7A6BCYN.js} +5 -5
  92. package/dist/{chunk-2CDOVXWU.js.map → chunk-X7A6BCYN.js.map} +1 -1
  93. package/dist/{chunk-XN6FI44W.js → chunk-Z3EAHRXR.js} +4 -31
  94. package/dist/chunk-Z3EAHRXR.js.map +1 -0
  95. package/dist/components/cart/index.js +1 -1
  96. package/dist/components/common/index.js +1 -1
  97. package/dist/components/drawer/index.js +5 -5
  98. package/dist/components/home/index.js +7 -7
  99. package/dist/components/layout/index.js +1 -1
  100. package/dist/components/product/index.js +6 -6
  101. package/dist/components/store/index.js +6 -6
  102. package/dist/{document-class-2NMAYRKX.js → document-class-YRZ37ED3.js} +4 -4
  103. package/dist/{document-class-2NMAYRKX.js.map → document-class-YRZ37ED3.js.map} +1 -1
  104. package/dist/hooks/index.js +5 -5
  105. package/dist/hooks/useGtm.js +5 -5
  106. package/dist/hooks/useMoney.js +5 -5
  107. package/dist/hooks/useStore.js +5 -5
  108. package/dist/index.js +5 -5
  109. package/dist/{not-found-AALAUQTM.js → not-found-UD7MDFAE.js} +7 -7
  110. package/dist/{not-found-AALAUQTM.js.map → not-found-UD7MDFAE.js.map} +1 -1
  111. package/dist/providers/index.js +5 -5
  112. package/dist/providers/twilight-init.d.ts.map +1 -1
  113. package/dist/routes/account/orders.js +1 -1
  114. package/dist/routes/account.js +6 -6
  115. package/dist/routes/blog.js +5 -5
  116. package/dist/routes/brands.js +1 -1
  117. package/dist/routes/cart.js +9 -9
  118. package/dist/routes/home.js +8 -8
  119. package/dist/routes/loyalty.js +2 -2
  120. package/dist/routes/page.js +1 -1
  121. package/dist/routes/product-listing.js +7 -7
  122. package/dist/routes/product.js +7 -7
  123. package/dist/routes/testimonials.js +2 -2
  124. package/dist/routes/thank-you.js +1 -1
  125. package/dist/skeleton.js +8 -8
  126. package/dist/tanstack.js +2 -2
  127. package/dist/utils/maintenance.d.ts +11 -0
  128. package/dist/utils/maintenance.d.ts.map +1 -1
  129. package/package.json +1 -1
  130. package/dist/chunk-2MSIZCRA.js +0 -14
  131. package/dist/chunk-PCEKL6S3.js.map +0 -1
  132. package/dist/chunk-XN6FI44W.js.map +0 -1
  133. package/dist/chunk-ZFYPME3R.js.map +0 -1
  134. package/dist/confetti-Y43LHJMI.svg +0 -35
@@ -1,8 +1,8 @@
1
1
  import { product } from './chunk-YWDMDW2K.js';
2
- import './chunk-ZFYPME3R.js';
3
- import './chunk-2CDOVXWU.js';
4
- import './chunk-BIMUFPBI.js';
5
- import './chunk-PCEKL6S3.js';
2
+ import './chunk-LQ4X4YQM.js';
3
+ import './chunk-X7A6BCYN.js';
4
+ import './chunk-HFGOFYQX.js';
5
+ import './chunk-TDOVEDHH.js';
6
6
  import './chunk-JYV25VNZ.js';
7
7
  import './chunk-74W2O47D.js';
8
8
  import './chunk-OXMUPNMH.js';
@@ -35,7 +35,7 @@ import { HookSlot } from './chunk-5XDPAKF5.js';
35
35
  import './chunk-GCPEMNSU.js';
36
36
  import './chunk-M46EKE7R.js';
37
37
  import { useTranslation } from './chunk-TYNZ5B2B.js';
38
- import { LazyErrorPage } from './chunk-OKAHNTDP.js';
38
+ import { LazyErrorPage } from './chunk-L34CKKVC.js';
39
39
  import './chunk-AXW67SY7.js';
40
40
  import './chunk-BYMOPN2S.js';
41
41
  import './chunk-SKLEJJ6M.js';
@@ -152,5 +152,5 @@ function NotFoundPage(props = {}) {
152
152
  }
153
153
 
154
154
  export { NotFoundPage };
155
- //# sourceMappingURL=not-found-AALAUQTM.js.map
156
- //# sourceMappingURL=not-found-AALAUQTM.js.map
155
+ //# sourceMappingURL=not-found-UD7MDFAE.js.map
156
+ //# sourceMappingURL=not-found-UD7MDFAE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/product-short-link.ts","../src/routes/not-found.tsx"],"names":[],"mappings":"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","file":"not-found-AALAUQTM.js","sourcesContent":["import { useEffect, useState } from 'react';\nimport { product } from '../api/product';\nimport { isLocale } from '../providers/locale-constants';\nimport { useLocation, useNavigate } from '../providers/NavigationProvider';\n\n/** Short codes are 5-10 letters/digits (e.g. `lvXvzln`). */\nconst SHORT_CODE = /^[A-Za-z0-9]{5,10}$/;\n\n/**\n * The product short code in a path shaped `/{locale}/{code}` or `/{code}` (the\n * store base is already stripped from the router's location), plus the locale\n * segment to keep when redirecting. `null` for any other path.\n */\nexport function parseShortLinkPath(pathname: string): { code: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n if (segments.length === 2 && isLocale(segments[0]) && SHORT_CODE.test(segments[1])) {\n return { code: segments[1], locale: segments[0] };\n }\n if (segments.length === 1 && !isLocale(segments[0]) && SHORT_CODE.test(segments[0])) {\n return { code: segments[0] };\n }\n return null;\n}\n\n/** A product URL in the stores' \"new URLs\" format: `{sku}-{name}`, or `p{id}-{name}` without a SKU. */\nconst PRODUCT_KEY = /^([0-9A-Za-z]+)-./;\n\n/** The `{sku}` or `p{id}` key of `/{locale}/{sku}-{name}` or `/{sku}-{name}`, with that locale. */\nexport function parseProductKeyPath(pathname: string): { key: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n const hasLocale = segments.length === 2 && isLocale(segments[0]);\n if (!hasLocale && (segments.length !== 1 || isLocale(segments[0]))) return null;\n const key = segments[segments.length - 1].match(PRODUCT_KEY)?.[1];\n if (!key) return null;\n return hasLocale ? { key, locale: segments[0] } : { key };\n}\n\nfunction productKeyOf(url: string | undefined): string | undefined {\n try {\n const last = new URL(url ?? '').pathname.split('/').filter(Boolean).pop() ?? '';\n return last.match(PRODUCT_KEY)?.[1];\n } catch {\n return undefined;\n }\n}\n\n/** Like Laravel: `p{id}` is the id; anything else is a SKU, which only search can find. */\nasync function findByProductKey(key: string): Promise<number | null> {\n const id = key.match(/^p(\\d+)$/)?.[1];\n if (id) return Number(id);\n const { items } = await product.list({ source: 'search', keyword: key, perPage: 50 });\n const found = items.find((item) => productKeyOf(item.url) === key);\n return found ? Number(found.id) : null;\n}\n\n/** The SEO slug from a product URL (`…/{slug}/p{id}`), `-` when it has none. */\nexport function slugFromProductUrl(url: string | undefined): string {\n try {\n const segments = new URL(url ?? '').pathname.split('/').filter(Boolean);\n const last = segments[segments.length - 1] ?? '';\n return /^p\\d+$/.test(last) && segments.length > 1 ? segments[segments.length - 2] : '-';\n } catch {\n return '-';\n }\n}\n\n/**\n * Resolves a product URL that matched no route, a short link (`/ar/lvXvzln`) or\n * a \"new URLs\" one (`/ar/1213asa-chocolate`), and replaces the URL with the\n * product's page. Returns `true` while a lookup is in flight (so the 404 isn't\n * flashed); settles to `false` when the path is neither or doesn't resolve.\n */\nexport function useProductShortLink(): boolean {\n const { pathname } = useLocation();\n const navigate = useNavigate();\n const shortLink = parseShortLinkPath(pathname);\n const productKey = parseProductKeyPath(pathname);\n const lookup = shortLink?.code ?? productKey?.key;\n const locale = shortLink?.locale ?? productKey?.locale;\n const isShortLink = !!shortLink;\n const [failed, setFailed] = useState<string | null>(null);\n\n useEffect(() => {\n if (!lookup) return;\n let cancelled = false;\n const productPath = isShortLink\n ? product\n .find(lookup)\n .then((found) => (found?.id ? `${slugFromProductUrl(found.url)}/p${found.id}` : null))\n : findByProductKey(lookup).then((id) => (id ? `-/p${id}` : null));\n productPath\n .then((path) => {\n if (cancelled) return;\n if (!path) return setFailed(lookup);\n navigate(`${locale ? `/${locale}` : ''}/${path}`, { replace: true });\n })\n .catch(() => !cancelled && setFailed(lookup));\n return () => {\n cancelled = true;\n };\n }, [lookup, isShortLink, locale, navigate]);\n\n return !!lookup && failed !== lookup;\n}\n","import type { ComponentType, ReactNode } from 'react';\nimport { HookSlot } from '../hooks';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { ErrorPage } from '../components/common';\nimport { useProductShortLink } from './product-short-link';\n\nexport interface NotFoundPageProps {\n title?: string;\n message?: string;\n showHomeLink?: boolean;\n homeLinkText?: string;\n LinkComponent?: ComponentType<{\n to: string;\n className?: string;\n style?: React.CSSProperties;\n children: ReactNode;\n }>;\n}\n\nexport function NotFoundPage(props: NotFoundPageProps = {}) {\n const { t } = useTranslation();\n // A product short link (`/ar/lvXvzln`) or \"new URLs\" link (`/ar/1213asa-name`) matches no route; resolve it instead of 404ing.\n const resolvingShortLink = useProductShortLink();\n\n const {\n title = t('common.errors.404') || 'Page Not Found',\n message = t('common.errors.error_occurred') ||\n 'The page you are looking for does not exist or has been moved.',\n showHomeLink = true,\n homeLinkText = t('common.elements.back_home') || 'Back to Home',\n LinkComponent,\n } = props;\n\n if (resolvingShortLink) return null;\n\n return (\n <ErrorPage\n code={404}\n title={title}\n message={message}\n showAction={showHomeLink}\n actionText={homeLinkText}\n LinkComponent={LinkComponent}\n >\n <HookSlot name=\"notfound:start\" />\n <HookSlot name=\"notfound:content\" />\n <HookSlot name=\"notfound:end\" />\n </ErrorPage>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/routes/product-short-link.ts","../src/routes/not-found.tsx"],"names":[],"mappings":"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","file":"not-found-UD7MDFAE.js","sourcesContent":["import { useEffect, useState } from 'react';\nimport { product } from '../api/product';\nimport { isLocale } from '../providers/locale-constants';\nimport { useLocation, useNavigate } from '../providers/NavigationProvider';\n\n/** Short codes are 5-10 letters/digits (e.g. `lvXvzln`). */\nconst SHORT_CODE = /^[A-Za-z0-9]{5,10}$/;\n\n/**\n * The product short code in a path shaped `/{locale}/{code}` or `/{code}` (the\n * store base is already stripped from the router's location), plus the locale\n * segment to keep when redirecting. `null` for any other path.\n */\nexport function parseShortLinkPath(pathname: string): { code: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n if (segments.length === 2 && isLocale(segments[0]) && SHORT_CODE.test(segments[1])) {\n return { code: segments[1], locale: segments[0] };\n }\n if (segments.length === 1 && !isLocale(segments[0]) && SHORT_CODE.test(segments[0])) {\n return { code: segments[0] };\n }\n return null;\n}\n\n/** A product URL in the stores' \"new URLs\" format: `{sku}-{name}`, or `p{id}-{name}` without a SKU. */\nconst PRODUCT_KEY = /^([0-9A-Za-z]+)-./;\n\n/** The `{sku}` or `p{id}` key of `/{locale}/{sku}-{name}` or `/{sku}-{name}`, with that locale. */\nexport function parseProductKeyPath(pathname: string): { key: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n const hasLocale = segments.length === 2 && isLocale(segments[0]);\n if (!hasLocale && (segments.length !== 1 || isLocale(segments[0]))) return null;\n const key = segments[segments.length - 1].match(PRODUCT_KEY)?.[1];\n if (!key) return null;\n return hasLocale ? { key, locale: segments[0] } : { key };\n}\n\nfunction productKeyOf(url: string | undefined): string | undefined {\n try {\n const last = new URL(url ?? '').pathname.split('/').filter(Boolean).pop() ?? '';\n return last.match(PRODUCT_KEY)?.[1];\n } catch {\n return undefined;\n }\n}\n\n/** Like Laravel: `p{id}` is the id; anything else is a SKU, which only search can find. */\nasync function findByProductKey(key: string): Promise<number | null> {\n const id = key.match(/^p(\\d+)$/)?.[1];\n if (id) return Number(id);\n const { items } = await product.list({ source: 'search', keyword: key, perPage: 50 });\n const found = items.find((item) => productKeyOf(item.url) === key);\n return found ? Number(found.id) : null;\n}\n\n/** The SEO slug from a product URL (`…/{slug}/p{id}`), `-` when it has none. */\nexport function slugFromProductUrl(url: string | undefined): string {\n try {\n const segments = new URL(url ?? '').pathname.split('/').filter(Boolean);\n const last = segments[segments.length - 1] ?? '';\n return /^p\\d+$/.test(last) && segments.length > 1 ? segments[segments.length - 2] : '-';\n } catch {\n return '-';\n }\n}\n\n/**\n * Resolves a product URL that matched no route, a short link (`/ar/lvXvzln`) or\n * a \"new URLs\" one (`/ar/1213asa-chocolate`), and replaces the URL with the\n * product's page. Returns `true` while a lookup is in flight (so the 404 isn't\n * flashed); settles to `false` when the path is neither or doesn't resolve.\n */\nexport function useProductShortLink(): boolean {\n const { pathname } = useLocation();\n const navigate = useNavigate();\n const shortLink = parseShortLinkPath(pathname);\n const productKey = parseProductKeyPath(pathname);\n const lookup = shortLink?.code ?? productKey?.key;\n const locale = shortLink?.locale ?? productKey?.locale;\n const isShortLink = !!shortLink;\n const [failed, setFailed] = useState<string | null>(null);\n\n useEffect(() => {\n if (!lookup) return;\n let cancelled = false;\n const productPath = isShortLink\n ? product\n .find(lookup)\n .then((found) => (found?.id ? `${slugFromProductUrl(found.url)}/p${found.id}` : null))\n : findByProductKey(lookup).then((id) => (id ? `-/p${id}` : null));\n productPath\n .then((path) => {\n if (cancelled) return;\n if (!path) return setFailed(lookup);\n navigate(`${locale ? `/${locale}` : ''}/${path}`, { replace: true });\n })\n .catch(() => !cancelled && setFailed(lookup));\n return () => {\n cancelled = true;\n };\n }, [lookup, isShortLink, locale, navigate]);\n\n return !!lookup && failed !== lookup;\n}\n","import type { ComponentType, ReactNode } from 'react';\nimport { HookSlot } from '../hooks';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { ErrorPage } from '../components/common';\nimport { useProductShortLink } from './product-short-link';\n\nexport interface NotFoundPageProps {\n title?: string;\n message?: string;\n showHomeLink?: boolean;\n homeLinkText?: string;\n LinkComponent?: ComponentType<{\n to: string;\n className?: string;\n style?: React.CSSProperties;\n children: ReactNode;\n }>;\n}\n\nexport function NotFoundPage(props: NotFoundPageProps = {}) {\n const { t } = useTranslation();\n // A product short link (`/ar/lvXvzln`) or \"new URLs\" link (`/ar/1213asa-name`) matches no route; resolve it instead of 404ing.\n const resolvingShortLink = useProductShortLink();\n\n const {\n title = t('common.errors.404') || 'Page Not Found',\n message = t('common.errors.error_occurred') ||\n 'The page you are looking for does not exist or has been moved.',\n showHomeLink = true,\n homeLinkText = t('common.elements.back_home') || 'Back to Home',\n LinkComponent,\n } = props;\n\n if (resolvingShortLink) return null;\n\n return (\n <ErrorPage\n code={404}\n title={title}\n message={message}\n showAction={showHomeLink}\n actionText={homeLinkText}\n LinkComponent={LinkComponent}\n >\n <HookSlot name=\"notfound:start\" />\n <HookSlot name=\"notfound:content\" />\n <HookSlot name=\"notfound:end\" />\n </ErrorPage>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
- export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-ZFYPME3R.js';
2
- import '../chunk-2CDOVXWU.js';
3
- import '../chunk-BIMUFPBI.js';
4
- import '../chunk-PCEKL6S3.js';
1
+ export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-LQ4X4YQM.js';
2
+ import '../chunk-X7A6BCYN.js';
3
+ import '../chunk-HFGOFYQX.js';
4
+ import '../chunk-TDOVEDHH.js';
5
5
  import '../chunk-JYV25VNZ.js';
6
6
  import '../chunk-74W2O47D.js';
7
7
  import '../chunk-OXMUPNMH.js';
@@ -34,7 +34,7 @@ import '../chunk-5XDPAKF5.js';
34
34
  import '../chunk-GCPEMNSU.js';
35
35
  import '../chunk-M46EKE7R.js';
36
36
  import '../chunk-TYNZ5B2B.js';
37
- import '../chunk-OKAHNTDP.js';
37
+ import '../chunk-L34CKKVC.js';
38
38
  import '../chunk-AXW67SY7.js';
39
39
  export { LinkProvider, LinkProviderError, createLinkWithAdapter, useLinkAdapter } from '../chunk-BYMOPN2S.js';
40
40
  import '../chunk-SKLEJJ6M.js';
@@ -1 +1 @@
1
- {"version":3,"file":"twilight-init.d.ts","sourceRoot":"","sources":["../../src/providers/twilight-init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,oBAAoB,CAAC;AAIlE,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,sBAAsB,CAAC;AAgFzF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,SAAS,EAAE,KAAK,CAAC;IACjB,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAMD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EAAE,MAAM,EACb,WAAW,EACX,OAAO,EACP,OAAO,EAAE,QAAQ,EACjB,aAAa,GACd,EAAE,sBAAsB,GAAG,qBAAqB,CAuJhD"}
1
+ {"version":3,"file":"twilight-init.d.ts","sourceRoot":"","sources":["../../src/providers/twilight-init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,oBAAoB,CAAC;AAIlE,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAI7C,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,sBAAsB,CAAC;AAsFzF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,SAAS,EAAE,KAAK,CAAC;IACjB,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAMD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EAAE,MAAM,EACb,WAAW,EACX,OAAO,EACP,OAAO,EAAE,QAAQ,EACjB,aAAa,GACd,EAAE,sBAAsB,GAAG,qBAAqB,CA4JhD"}
@@ -1,4 +1,4 @@
1
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-EGJCC6DM.js';
1
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-RR2RWSCF.js';
2
2
  import '../../chunk-4TM54PZO.js';
3
3
  import '../../chunk-OM2GRPDH.js';
4
4
  import '../../chunk-KXD4WUYA.js';
@@ -1,5 +1,5 @@
1
1
  import { wallet } from '../chunk-JVAFKLXJ.js';
2
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-EGJCC6DM.js';
2
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-RR2RWSCF.js';
3
3
  import '../chunk-4TM54PZO.js';
4
4
  import { notification } from '../chunk-QQTY4PDC.js';
5
5
  import { wishlist } from '../chunk-UHXL4VZS.js';
@@ -31,7 +31,7 @@ async function profileLoader(_ctx) {
31
31
 
32
32
  // src/routes/account/profile/index.tsx
33
33
  var LazyProfilePage = lazy(
34
- () => import('../ProfilePage-TLQ33GC2.js').then((m) => ({ default: m.ProfilePage }))
34
+ () => import('../ProfilePage-ZD5E4OGM.js').then((m) => ({ default: m.ProfilePage }))
35
35
  );
36
36
  var ProfilePage = LazyProfilePage;
37
37
  var Profile = {
@@ -73,7 +73,7 @@ async function wishlistLoader(ctx) {
73
73
 
74
74
  // src/routes/account/wishlist/index.tsx
75
75
  var LazyWishlistPage = lazy(
76
- () => import('../WishlistPage-Q5DSDUK2.js').then((m) => ({ default: m.WishlistPage }))
76
+ () => import('../WishlistPage-LT7TOAM3.js').then((m) => ({ default: m.WishlistPage }))
77
77
  );
78
78
  var WishlistPage = LazyWishlistPage;
79
79
  var Wishlist = {
@@ -115,7 +115,7 @@ async function walletLoader(ctx) {
115
115
  }
116
116
 
117
117
  // src/routes/account/wallet/index.tsx
118
- var LazyWalletPage = lazy(() => import('../WalletPage-65LFQD7C.js').then((m) => ({ default: m.WalletPage })));
118
+ var LazyWalletPage = lazy(() => import('../WalletPage-EYTVKQMV.js').then((m) => ({ default: m.WalletPage })));
119
119
  var WalletPage = LazyWalletPage;
120
120
  var Wallet = {
121
121
  id: RouteId.CUSTOMER_WALLET,
@@ -151,7 +151,7 @@ async function notificationsLoader(_ctx) {
151
151
 
152
152
  // src/routes/account/notifications/index.tsx
153
153
  var LazyNotificationsPage = lazy(
154
- () => import('../NotificationsPage-BW22PAFO.js').then((m) => ({ default: m.NotificationsPage }))
154
+ () => import('../NotificationsPage-PUFFEJJL.js').then((m) => ({ default: m.NotificationsPage }))
155
155
  );
156
156
  var NotificationsPage = LazyNotificationsPage;
157
157
  var Notifications = {
@@ -184,7 +184,7 @@ async function settingsLoader(_ctx) {
184
184
 
185
185
  // src/routes/account/settings/index.tsx
186
186
  var LazySettingsPage = lazy(
187
- () => import('../SettingsPage-QA6BHO4U.js').then((m) => ({ default: m.SettingsPage }))
187
+ () => import('../SettingsPage-7CU5SRJO.js').then((m) => ({ default: m.SettingsPage }))
188
188
  );
189
189
  var SettingsPage = LazySettingsPage;
190
190
  var Settings = {
@@ -145,18 +145,18 @@ async function blogTagLoader({
145
145
  }
146
146
 
147
147
  // src/routes/blog/index.tsx
148
- var LazyBlogPage = lazy(() => import('../BlogPage-N6L62TI6.js').then((m) => ({ default: m.BlogPage })));
148
+ var LazyBlogPage = lazy(() => import('../BlogPage-XB2D5HHJ.js').then((m) => ({ default: m.BlogPage })));
149
149
  var LazyBlogSinglePage = lazy(
150
- () => import('../BlogSinglePage-F3W3T5XC.js').then((m) => ({ default: m.BlogSinglePage }))
150
+ () => import('../BlogSinglePage-KA66R2CQ.js').then((m) => ({ default: m.BlogSinglePage }))
151
151
  );
152
152
  var LazyBlogAuthorPage = lazy(
153
- () => import('../BlogAuthorPage-J6ZADSYT.js').then((m) => ({ default: m.BlogAuthorPage }))
153
+ () => import('../BlogAuthorPage-NLVQF5Q5.js').then((m) => ({ default: m.BlogAuthorPage }))
154
154
  );
155
155
  var LazyBlogCategoryPage = lazy(
156
- () => import('../BlogCategoryPage-JCEURH44.js').then((m) => ({ default: m.BlogCategoryPage }))
156
+ () => import('../BlogCategoryPage-4QUIKTSA.js').then((m) => ({ default: m.BlogCategoryPage }))
157
157
  );
158
158
  var LazyBlogTagPage = lazy(
159
- () => import('../BlogTagPage-T4QZCQ63.js').then((m) => ({ default: m.BlogTagPage }))
159
+ () => import('../BlogTagPage-MBRDNQVV.js').then((m) => ({ default: m.BlogTagPage }))
160
160
  );
161
161
  var BlogPage = LazyBlogPage;
162
162
  var BlogSinglePage = LazyBlogSinglePage;
@@ -24,7 +24,7 @@ async function brandsLoader() {
24
24
  }
25
25
 
26
26
  // src/routes/brands/index.tsx
27
- var LazyBrandsPage = lazy(() => import('../BrandsPage-PPSMQ2GB.js').then((m) => ({ default: m.BrandsPage })));
27
+ var LazyBrandsPage = lazy(() => import('../BrandsPage-NFKQQEAI.js').then((m) => ({ default: m.BrandsPage })));
28
28
  var BrandsPage = LazyBrandsPage;
29
29
  async function brandsLoaderWithExtend(_ctx, extend) {
30
30
  const data = await brandsLoader();
@@ -1,17 +1,17 @@
1
1
  import { cart } from '../chunk-ZGVBXJQO.js';
2
2
  import { loyalty } from '../chunk-WBL7MSKQ.js';
3
3
  import { CartSkeleton } from '../chunk-N7CCSGZF.js';
4
- import '../chunk-Q52RM7LP.js';
5
- import '../chunk-WKQJHPPO.js';
4
+ import '../chunk-JZ2SYFVR.js';
5
+ import '../chunk-BLIH42Y6.js';
6
6
  import '../chunk-V3NOBNNU.js';
7
7
  import '../chunk-YWDMDW2K.js';
8
- import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-2MSIZCRA.js';
9
- import '../chunk-SNLFNDZ4.js';
8
+ import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-GPWNE2C6.js';
9
+ import '../chunk-DGCHTKPZ.js';
10
10
  import '../chunk-Y32RHCOH.js';
11
- import '../chunk-ZFYPME3R.js';
12
- import '../chunk-2CDOVXWU.js';
13
- import '../chunk-BIMUFPBI.js';
14
- import '../chunk-PCEKL6S3.js';
11
+ import '../chunk-LQ4X4YQM.js';
12
+ import '../chunk-X7A6BCYN.js';
13
+ import '../chunk-HFGOFYQX.js';
14
+ import '../chunk-TDOVEDHH.js';
15
15
  import '../chunk-JYV25VNZ.js';
16
16
  import '../chunk-74W2O47D.js';
17
17
  import '../chunk-OXMUPNMH.js';
@@ -44,7 +44,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
44
44
  import '../chunk-GCPEMNSU.js';
45
45
  import '../chunk-M46EKE7R.js';
46
46
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
47
- import { LazyBreadcrumb, LazyNoContent } from '../chunk-OKAHNTDP.js';
47
+ import { LazyBreadcrumb, LazyNoContent } from '../chunk-L34CKKVC.js';
48
48
  import '../chunk-AXW67SY7.js';
49
49
  import '../chunk-BYMOPN2S.js';
50
50
  import '../chunk-SKLEJJ6M.js';
@@ -1,13 +1,13 @@
1
- export { Home, HomeSkeleton, homeLoader } from '../chunk-Q52RM7LP.js';
2
- export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-WKQJHPPO.js';
1
+ export { Home, HomeSkeleton, homeLoader } from '../chunk-JZ2SYFVR.js';
2
+ export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-BLIH42Y6.js';
3
3
  import '../chunk-V3NOBNNU.js';
4
4
  import '../chunk-YWDMDW2K.js';
5
- import '../chunk-SNLFNDZ4.js';
5
+ import '../chunk-DGCHTKPZ.js';
6
6
  import '../chunk-Y32RHCOH.js';
7
- import '../chunk-ZFYPME3R.js';
8
- import '../chunk-2CDOVXWU.js';
9
- import '../chunk-BIMUFPBI.js';
10
- import '../chunk-PCEKL6S3.js';
7
+ import '../chunk-LQ4X4YQM.js';
8
+ import '../chunk-X7A6BCYN.js';
9
+ import '../chunk-HFGOFYQX.js';
10
+ import '../chunk-TDOVEDHH.js';
11
11
  import '../chunk-JYV25VNZ.js';
12
12
  import '../chunk-74W2O47D.js';
13
13
  import '../chunk-OXMUPNMH.js';
@@ -40,7 +40,7 @@ import '../chunk-5XDPAKF5.js';
40
40
  import '../chunk-GCPEMNSU.js';
41
41
  import '../chunk-M46EKE7R.js';
42
42
  import '../chunk-TYNZ5B2B.js';
43
- import '../chunk-OKAHNTDP.js';
43
+ import '../chunk-L34CKKVC.js';
44
44
  import '../chunk-AXW67SY7.js';
45
45
  import '../chunk-BYMOPN2S.js';
46
46
  import '../chunk-SKLEJJ6M.js';
@@ -58,10 +58,10 @@ async function loyaltyPointsLoader(locale) {
58
58
 
59
59
  // src/routes/loyalty/index.tsx
60
60
  var LazyLoyaltyPage = lazy(
61
- () => import('../LoyaltyPage-4L2UBTE7.js').then((m) => ({ default: m.LoyaltyPage }))
61
+ () => import('../LoyaltyPage-RLDDXCXX.js').then((m) => ({ default: m.LoyaltyPage }))
62
62
  );
63
63
  var LazyLoyaltyPointsPage = lazy(
64
- () => import('../LoyaltyPointsPage-A37LQAVZ.js').then((m) => ({ default: m.LoyaltyPointsPage }))
64
+ () => import('../LoyaltyPointsPage-O5KWIEY2.js').then((m) => ({ default: m.LoyaltyPointsPage }))
65
65
  );
66
66
  var LoyaltyPage = LazyLoyaltyPage;
67
67
  var LoyaltyPointsPage = LazyLoyaltyPointsPage;
@@ -29,7 +29,7 @@ async function pageSingleLoader({ params }) {
29
29
  }
30
30
 
31
31
  // src/routes/page/index.tsx
32
- var LazyPageSingle = lazy(() => import('../PageSingle-P6YUDITC.js').then((m) => ({ default: m.PageSingle })));
32
+ var LazyPageSingle = lazy(() => import('../PageSingle-UIFZXJIV.js').then((m) => ({ default: m.PageSingle })));
33
33
  var PageSingleLazy = LazyPageSingle;
34
34
  async function loader(ctx, extend) {
35
35
  const data = await pageSingleLoader({ params: ctx.params });
@@ -1,16 +1,16 @@
1
1
  import { SORT_IDS, availableSortIds, sortOptions } from '../chunk-3LZJXKVO.js';
2
2
  import { category } from '../chunk-75TXHISE.js';
3
3
  import { brand } from '../chunk-GFZEZQ45.js';
4
- import { useReorderButtons, LazyTestimonials } from '../chunk-WKQJHPPO.js';
4
+ import { useReorderButtons, LazyTestimonials } from '../chunk-BLIH42Y6.js';
5
5
  import '../chunk-V3NOBNNU.js';
6
6
  import { product, parseNextPageToken } from '../chunk-YWDMDW2K.js';
7
7
  import { Drawer } from '../chunk-6TKIUG5C.js';
8
- import { ProductCard } from '../chunk-SNLFNDZ4.js';
8
+ import { ProductCard } from '../chunk-DGCHTKPZ.js';
9
9
  import { registry, COMPONENT_KEYS } from '../chunk-Y32RHCOH.js';
10
- import { useStore } from '../chunk-ZFYPME3R.js';
11
- import '../chunk-2CDOVXWU.js';
12
- import '../chunk-BIMUFPBI.js';
13
- import '../chunk-PCEKL6S3.js';
10
+ import { useStore } from '../chunk-LQ4X4YQM.js';
11
+ import '../chunk-X7A6BCYN.js';
12
+ import '../chunk-HFGOFYQX.js';
13
+ import '../chunk-TDOVEDHH.js';
14
14
  import '../chunk-JYV25VNZ.js';
15
15
  import '../chunk-74W2O47D.js';
16
16
  import '../chunk-OXMUPNMH.js';
@@ -43,7 +43,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
43
43
  import '../chunk-GCPEMNSU.js';
44
44
  import { getAuthToken } from '../chunk-M46EKE7R.js';
45
45
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
46
- import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-OKAHNTDP.js';
46
+ import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-L34CKKVC.js';
47
47
  import '../chunk-AXW67SY7.js';
48
48
  import '../chunk-BYMOPN2S.js';
49
49
  import '../chunk-SKLEJJ6M.js';
@@ -1,12 +1,12 @@
1
- import { ProductsSlider, LazyTestimonials } from '../chunk-WKQJHPPO.js';
1
+ import { ProductsSlider, LazyTestimonials } from '../chunk-BLIH42Y6.js';
2
2
  import '../chunk-V3NOBNNU.js';
3
3
  import { product } from '../chunk-YWDMDW2K.js';
4
- import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-SNLFNDZ4.js';
4
+ import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-DGCHTKPZ.js';
5
5
  import '../chunk-Y32RHCOH.js';
6
- import { fastCheckoutScript } from '../chunk-ZFYPME3R.js';
7
- import '../chunk-2CDOVXWU.js';
8
- import '../chunk-BIMUFPBI.js';
9
- import '../chunk-PCEKL6S3.js';
6
+ import { fastCheckoutScript } from '../chunk-LQ4X4YQM.js';
7
+ import '../chunk-X7A6BCYN.js';
8
+ import '../chunk-HFGOFYQX.js';
9
+ import '../chunk-TDOVEDHH.js';
10
10
  import '../chunk-JYV25VNZ.js';
11
11
  import '../chunk-74W2O47D.js';
12
12
  import '../chunk-OXMUPNMH.js';
@@ -39,7 +39,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
39
39
  import '../chunk-GCPEMNSU.js';
40
40
  import { getActiveCurrency } from '../chunk-M46EKE7R.js';
41
41
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
42
- import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-OKAHNTDP.js';
42
+ import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-L34CKKVC.js';
43
43
  import '../chunk-AXW67SY7.js';
44
44
  import '../chunk-BYMOPN2S.js';
45
45
  import '../chunk-SKLEJJ6M.js';
@@ -33,10 +33,10 @@ async function reviewsLoader() {
33
33
 
34
34
  // src/routes/testimonials/index.tsx
35
35
  var LazyTestimonialsPage = lazy(
36
- () => import('../TestimonialsPage-UIDU6KFX.js').then((m) => ({ default: m.TestimonialsPage }))
36
+ () => import('../TestimonialsPage-BFEG7S6W.js').then((m) => ({ default: m.TestimonialsPage }))
37
37
  );
38
38
  var LazyReviewsPage = lazy(
39
- () => import('../ReviewsPage-KXMST6YC.js').then((m) => ({ default: m.ReviewsPage }))
39
+ () => import('../ReviewsPage-5WOXAZDE.js').then((m) => ({ default: m.ReviewsPage }))
40
40
  );
41
41
  var TestimonialsPage = LazyTestimonialsPage;
42
42
  var ReviewsPage = LazyReviewsPage;
@@ -40,7 +40,7 @@ async function thankYouLoader({
40
40
 
41
41
  // src/routes/thank-you/index.tsx
42
42
  var LazyThankYouPage = lazy(
43
- () => import('../ThankYouPage-BSPDSKWQ.js').then((m) => ({ default: m.ThankYouPage }))
43
+ () => import('../ThankYouPage-5QENDZTM.js').then((m) => ({ default: m.ThankYouPage }))
44
44
  );
45
45
  var ThankYouPage = LazyThankYouPage;
46
46
  async function loader(ctx, extend) {
package/dist/skeleton.js CHANGED
@@ -1,14 +1,14 @@
1
1
  export { BlogSkeleton, BreadcrumbSkeleton, CartSkeleton, CustomerLayoutSkeleton, CustomerPageSkeleton, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, SkeletonPulse } from './chunk-N7CCSGZF.js';
2
- export { HomeSkeleton } from './chunk-Q52RM7LP.js';
3
- import './chunk-WKQJHPPO.js';
2
+ export { HomeSkeleton } from './chunk-JZ2SYFVR.js';
3
+ import './chunk-BLIH42Y6.js';
4
4
  import './chunk-V3NOBNNU.js';
5
5
  import './chunk-YWDMDW2K.js';
6
- import './chunk-SNLFNDZ4.js';
6
+ import './chunk-DGCHTKPZ.js';
7
7
  import './chunk-Y32RHCOH.js';
8
- import './chunk-ZFYPME3R.js';
9
- import './chunk-2CDOVXWU.js';
10
- import './chunk-BIMUFPBI.js';
11
- import './chunk-PCEKL6S3.js';
8
+ import './chunk-LQ4X4YQM.js';
9
+ import './chunk-X7A6BCYN.js';
10
+ import './chunk-HFGOFYQX.js';
11
+ import './chunk-TDOVEDHH.js';
12
12
  import './chunk-JYV25VNZ.js';
13
13
  import './chunk-74W2O47D.js';
14
14
  import './chunk-OXMUPNMH.js';
@@ -41,7 +41,7 @@ import './chunk-5XDPAKF5.js';
41
41
  import './chunk-GCPEMNSU.js';
42
42
  import './chunk-M46EKE7R.js';
43
43
  import './chunk-TYNZ5B2B.js';
44
- import './chunk-OKAHNTDP.js';
44
+ import './chunk-L34CKKVC.js';
45
45
  import './chunk-AXW67SY7.js';
46
46
  import './chunk-BYMOPN2S.js';
47
47
  import './chunk-SKLEJJ6M.js';
package/dist/tanstack.js CHANGED
@@ -1,4 +1,4 @@
1
- export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-XN6FI44W.js';
1
+ export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-Z3EAHRXR.js';
2
2
  import { requestHostOf } from './chunk-CDOGKC7B.js';
3
3
  export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-CDOGKC7B.js';
4
4
  import './chunk-Z4Y55HWX.js';
@@ -8,7 +8,7 @@ import './chunk-7EZZR4WA.js';
8
8
  import { readNativeAppHeaders } from './chunk-6D3OWIEC.js';
9
9
  import './chunk-5G6PD6P2.js';
10
10
  import './chunk-YWDMDW2K.js';
11
- import { rootHead } from './chunk-PCEKL6S3.js';
11
+ import { rootHead } from './chunk-TDOVEDHH.js';
12
12
  import './chunk-JYV25VNZ.js';
13
13
  import './chunk-SW4WGOLU.js';
14
14
  import './chunk-5FJFN3IW.js';
@@ -28,4 +28,15 @@ export declare function ownerCookieMatches(cookieHeader: string | null, settings
28
28
  * preview, which the backend also always lets in.
29
29
  */
30
30
  export declare function showsMaintenancePage(settings: StoreContext | null | undefined, viewAsOwner: boolean): boolean;
31
+ /** The dashboard page where the merchant turns maintenance mode off, as the backend links it. */
32
+ export declare const MAINTENANCE_SETTINGS_URL = "https://s.salla.sa/channel/settings?legacy=0#maintenance-mode";
33
+ /**
34
+ * The button on the SDK's merchant maintenance bar. The API fills the `button_*`
35
+ * fields only inside Twig's owner session, which the engine's settings request has
36
+ * none of, so the SDK, handed the settings as they are, draws an empty button. The
37
+ * SDK renders only in the store view, so `maintenance: true` there means the owner
38
+ * (or the preview, where the SDK mounts no bar): the three fields get what Twig's
39
+ * owner branch gives them. The merchant's own title and message stay as they are.
40
+ */
41
+ export declare function withOwnerMaintenanceButton<T extends Pick<StoreContext, 'maintenance' | 'maintenance_details'>>(settings: T, buttonTitle: string): T;
31
42
  //# sourceMappingURL=maintenance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../src/utils/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAUzD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAWjG;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GACxC,OAAO,CAGT;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EACzC,WAAW,EAAE,OAAO,GACnB,OAAO,CAET"}
1
+ {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../src/utils/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAUzD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAWjG;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GACxC,OAAO,CAGT;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EACzC,WAAW,EAAE,OAAO,GACnB,OAAO,CAET;AAOD,iGAAiG;AACjG,eAAO,MAAM,wBAAwB,kEAAgE,CAAC;AAEtG;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,qBAAqB,CAAC,EACnE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,CAYrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salla.sa/twilight-theme-engine",
3
- "version": "1.0.114",
3
+ "version": "1.0.116",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,14 +0,0 @@
1
- import { lazy } from 'react';
2
-
3
- // src/components/cart/lazy.ts
4
- var LazyCartItem = lazy(() => import('./CartItem-776TQTAV.js').then((m) => ({ default: m.CartItem })));
5
- var LazyCartSummary = lazy(
6
- () => import('./CartSummary-OZYH6FEC.js').then((m) => ({ default: m.CartSummary }))
7
- );
8
- var LazySeoCartWidget = lazy(
9
- () => import('./SeoCartWidget-VIB6XNDG.js').then((m) => ({ default: m.SeoCartWidget }))
10
- );
11
-
12
- export { LazyCartItem, LazyCartSummary, LazySeoCartWidget };
13
- //# sourceMappingURL=chunk-2MSIZCRA.js.map
14
- //# sourceMappingURL=chunk-2MSIZCRA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/root/head.ts"],"names":[],"mappings":"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","file":"chunk-PCEKL6S3.js","sourcesContent":["import type { HeadDescriptor, 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 type { AppSnippet } from '../../api/apps';\nimport { SettingsError } from '../../utils/errors';\nimport { renderAppScopeInstallScript } from '../../utils/app-scope';\nimport { renderThemeHookSlotsScript } from '../../utils/theme-hook-slots';\nimport { escapeForInlineScript } from '../../utils/inline-script';\nimport { readEnv, renderRuntimeEnvScript } from '../../utils/runtime-env';\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\n/** Bare-specifier map for the lit build the engine's `<salla-*>` web components resolve against. */\nconst LIT_IMPORTS: Record<string, string> = {\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\nexport const TICKETING_SCRIPT_URL =\n 'https://cdn.assets.salla.network/latest/@salla.sa/ui-store-ticketing-system/ticketing-system.es.js';\n\nconst TWILIGHT_RELEASE_CDN = 'https://cdn.salla.network/js/twilight';\nconst TWILIGHT_DEV_CDN = 'https://cdn.assets.salla.network/dev/@salla.sa/twilight';\n// The oldest Twilight release this engine works with. Raise it whenever the engine\n// starts relying on something newer; the reason lives in that commit. Today's floor:\n// components ship their own CSS, which themes no longer compile (SallaApp/twilight#2107).\nconst MIN_TWILIGHT_VERSION = '2.14.538';\n// Last resort when no override and no platform pin, and the substitute for a pin below the floor.\nconst DEFAULT_TWILIGHT_VERSION = '2.14.584';\nconst releaseUrl = (version: string): string =>\n `${TWILIGHT_RELEASE_CDN}/${version}/twilight.esm.js`;\n// The head is built more than once per request (early hints, then the page); say it once.\nconst warnedPins = new Set<string>();\n\n/** `x.y.z` release pins only; dev shas and other strings are loaded as given. */\nfunction belowMinimum(version: string): boolean {\n return (\n /^\\d+\\.\\d+\\.\\d+$/.test(version) &&\n version.localeCompare(MIN_TWILIGHT_VERSION, undefined, { numeric: true }) < 0\n );\n}\n\n/** The `x.y.z` release segment of a release-CDN `.../twilight.esm.js` URL, if present. */\nfunction releaseVersionInUrl(url: string): string | null {\n const match = url.match(/\\/(\\d+\\.\\d+\\.\\d+)\\/twilight\\.esm\\.js(?:[?#]|$)/);\n return match ? match[1] : null;\n}\n\n/**\n * `VITE_TWILIGHT_URL`/`VITE_TWILIGHT_VERSION` outrank everything below, including\n * `theme.twilight.version`'s own `belowMinimum` guard — a stale override wins\n * silently otherwise (TD-16375: a scaffold-time pin outlived the engine raising\n * MIN_TWILIGHT_VERSION, so every new theme rendered without component CSS and\n * nothing said why). Only a dev-mode nudge, not a swap: an env override is a\n * deliberate choice, so unlike the settings-pin path below this never substitutes\n * the engine default underneath the developer.\n */\nfunction warnIfOverrideBelowMinimum(source: string, version: string): void {\n // Worker logs in production should stay quiet -- this is a developer-directed nudge,\n // not a user-facing or production-monitored signal. import.meta.env.DEV is a static\n // false in production builds, so this branch (and the console.warn below) is\n // tree-shaken out entirely, same as DevSettingsWidget / dev-settings-store.ts.\n if (!import.meta.env.DEV) return;\n if (!belowMinimum(version)) return;\n const key = `${source}:${version}`;\n if (warnedPins.has(key)) return;\n warnedPins.add(key);\n console.warn(\n `[twilight] ${source}=${version} is below the engine minimum ${MIN_TWILIGHT_VERSION} — components may load without their CSS (SallaApp/twilight#2107). Unset it or bump it to ${MIN_TWILIGHT_VERSION}+.`\n );\n}\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 default release, also used when the pin is below the engine minimum.\n */\nexport function resolveTwilightSdkUrl(settings?: StoreContext): string {\n const urlOverride = readEnv('VITE_TWILIGHT_URL');\n if (urlOverride) {\n const version = releaseVersionInUrl(urlOverride);\n if (version) warnIfOverrideBelowMinimum('VITE_TWILIGHT_URL', version);\n return urlOverride;\n }\n\n const versionOverride = readEnv('VITE_TWILIGHT_VERSION');\n if (versionOverride) {\n warnIfOverrideBelowMinimum('VITE_TWILIGHT_VERSION', versionOverride);\n return `${TWILIGHT_DEV_CDN}/${versionOverride}/twilight.esm.js`;\n }\n\n const pinnedVersion = settings?.theme?.twilight?.version;\n if (pinnedVersion && belowMinimum(pinnedVersion)) {\n if (!warnedPins.has(pinnedVersion)) {\n warnedPins.add(pinnedVersion);\n console.warn(\n `[twilight] theme.twilight.version ${pinnedVersion} is below the engine minimum ${MIN_TWILIGHT_VERSION}; loading ${DEFAULT_TWILIGHT_VERSION} instead`\n );\n }\n return releaseUrl(DEFAULT_TWILIGHT_VERSION);\n }\n if (pinnedVersion) return releaseUrl(pinnedVersion);\n\n return releaseUrl(DEFAULT_TWILIGHT_VERSION);\n}\n\n// On a page that preloads its LCP image, the icon font (~270 KB) applies once the first screen's\n// priority images have painted, so it doesn't compete with them; other pages swap on load.\nconst MEDIA_SWAP_SCRIPT = `\n(function(){var d=document,s=function(l){if(l.sheet||\"all\"===l.media)l.media=\"all\";else l.onload=function(){this.media=\"all\"}},f=d.getElementById(\"salla-theme-font\"),i=d.getElementById(\"salla-icons-css\");f&&s(f);if(!i)return;if(!d.querySelector('link[rel=\"preload\"][as=\"image\"]'))return s(i);var g=function(){g=function(){};s(i)},p=function(){requestAnimationFrame(function(){setTimeout(function(){g()})});setTimeout(function(){g()},100)};d.addEventListener(\"DOMContentLoaded\",function(){var m=[].filter.call(d.querySelectorAll('img[fetchpriority=\"high\"]'),function(x){return!x.complete}),n=m.length;if(!n)return p();m.forEach(function(x){var o=function(){--n||p()};x.addEventListener(\"load\",o,{once:!0});x.addEventListener(\"error\",o,{once:!0})});setTimeout(function(){g()},2500)})})();\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\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\n/**\n * Distinct snippet-host origins to `preconnect` (warm DNS/TCP/TLS during parse). From the real\n * URLs (dev/prod-correct), deduped and capped at 4. No `crossOrigin`: snippets are no-cors fetches.\n */\nexport function snippetPreconnectOrigins(snippets: readonly AppSnippet[] | undefined): string[] {\n if (!snippets?.length) return [];\n const origins = new Set<string>();\n for (const app of snippets) {\n if (app.status !== 'enabled') continue;\n for (const s of app.snippets) {\n if (!s.url) continue;\n try {\n origins.add(new URL(s.url).origin);\n } catch {\n /* skip a malformed snippet url rather than breaking the head */\n }\n if (origins.size >= 4) return [...origins];\n }\n }\n return [...origins];\n}\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 parts = deriveHeadParts(settings);\n\n return resolveHead(\n mergeHead(buildBaseHead(settings, locale), {\n meta: buildRootMeta(parts),\n links: buildRootLinks(parts),\n styles: buildRootStyles(parts),\n importMap: [{ imports: LIT_IMPORTS }],\n scripts: buildRootScripts(parts),\n })\n );\n}\n\n/** Everything the root head's tag builders read, derived once from the store settings. */\ninterface RootHeadParts {\n store: StoreContext['store'] | undefined;\n favicon?: string;\n primaryColor?: string;\n fontUrl?: string;\n fontUrlWithDisplay?: string;\n isGoogleFont?: boolean;\n fontFamilyName?: string;\n customJs?: string;\n customCss?: string;\n isCustomCssUrl?: boolean;\n isCustomJsUrl?: boolean;\n twilightSdkUrl: string;\n /** The visitor gets the maintenance page, which loads no SDK and no app snippets. */\n maintenance: boolean;\n snippetPreconnects: Array<{ rel: 'preconnect'; href: string }>;\n appScopeInstallScript: string;\n themeHookSlotsScript: string | null;\n runtimeEnvScript: string | null;\n}\n\n/** Google Fonts only honours `display=swap` as a query param; other hosts get the @font-face\n * override instead (see buildRootStyles). */\nfunction deriveFontParts(theme?: StoreContext['theme']) {\n const font = theme?.font;\n const fontUrl = font?.url || font?.path;\n const isGoogleFont = fontUrl?.includes('fonts.googleapis.com');\n const needsDisplay = Boolean(isGoogleFont && fontUrl && !fontUrl.includes('display='));\n const separator = fontUrl?.includes('?') ? '&' : '?';\n\n return {\n fontUrl,\n isGoogleFont,\n fontFamilyName: font?.family_name,\n fontUrlWithDisplay: needsDisplay ? `${fontUrl}${separator}display=swap` : fontUrl,\n };\n}\n\n/** Theme customization JS/CSS, each either a URL to load or an inline blob to embed. */\nfunction deriveCustomizationParts(theme?: StoreContext['theme']) {\n const customization = theme?.customization;\n const customJs = customization?.js?.trim();\n const customCss = customization?.css?.trim();\n const isUrl = (value?: string): boolean =>\n Boolean(value?.startsWith('http') || value?.startsWith('//'));\n\n return {\n customJs,\n customCss,\n isCustomCssUrl: isUrl(customCss),\n isCustomJsUrl: isUrl(customJs),\n };\n}\n\nfunction deriveHeadParts(settings?: StoreContext): RootHeadParts {\n const store = settings?.store;\n\n return {\n store,\n favicon: store?.icon,\n primaryColor: settings?.theme?.color?.primary,\n ...deriveFontParts(settings?.theme),\n ...deriveCustomizationParts(settings?.theme),\n twilightSdkUrl: resolveTwilightSdkUrl(settings),\n maintenance: getTwilightContext().maintenance,\n // Warm the connection to the snippet host(s) during head parse, so the body's deferred\n // `<script src>` snippet tags fetch off an already-open socket instead of DNS+TCP+TLS.\n snippetPreconnects: snippetPreconnectOrigins(getTwilightContext().appsSnippets).map((href) => ({\n rel: 'preconnect' as const,\n href,\n })),\n // Install `Salla.appScope` inline at parse time, before the SDK is ready — else a snippet's\n // onReady callback calls it too early and throws. Always emitted, even when the settings\n // prefetch failed: the CDN snippet tags ship regardless (they come from the *snippets*\n // endpoint), so the factory has to exist for them. `installAppScope` then seeds the real\n // buckets into this install once the client query resolves.\n appScopeInstallScript: renderAppScopeInstallScript(\n getTwilightContext().appsSettings ?? { apps: {} }\n ),\n // Whitelist the theme's own hook slots at parse time too, for the same reason: apps register\n // their `onReady` callbacks from parser-inserted snippet tags, long before React hydrates.\n themeHookSlotsScript: renderThemeHookSlotsScript(),\n // Env this render resolved (worker `vars` live in server-only `process.env`), handed to the\n // client so it doesn't silently fall back to the production defaults. Re-rendered on the\n // client during hydration, where it resolves to the same values or to nothing.\n runtimeEnvScript: renderRuntimeEnvScript(),\n };\n}\n\nfunction buildRootMeta(p: RootHeadParts): NonNullable<HeadDescriptor['meta']> {\n return [\n { name: 'robots', content: 'index, follow' },\n { name: 'msapplication-TileColor', content: '#ffffff' },\n ...(p.favicon ? [{ name: 'msapplication-TileImage', content: p.favicon }] : []),\n ...(p.primaryColor\n ? [\n { name: 'theme-color', content: p.primaryColor },\n { name: 'msapplication-navbutton-color', content: p.primaryColor },\n { name: 'apple-mobile-web-app-status-bar-style', content: p.primaryColor },\n ]\n : []),\n ];\n}\n\nfunction buildRootLinks(p: RootHeadParts): NonNullable<HeadDescriptor['links']> {\n return [\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 // Warm the installed apps' CDN snippet host(s) — see snippetPreconnectOrigins.\n // Not on the maintenance page: it renders neither the snippets nor the SDK.\n ...(p.maintenance ? [] : p.snippetPreconnects),\n ...(p.isGoogleFont\n ? [\n {\n rel: 'preconnect' as const,\n href: 'https://fonts.gstatic.com',\n crossOrigin: 'anonymous' as const,\n },\n ]\n : []),\n ...(p.maintenance ? [] : [{ rel: 'modulepreload' as const, href: p.twilightSdkUrl }]),\n ...(p.fontUrlWithDisplay\n ? [\n {\n id: 'salla-theme-font',\n rel: 'stylesheet',\n href: p.fontUrlWithDisplay,\n media: 'print',\n },\n ]\n : []),\n ...(p.fontUrlWithDisplay && !p.isGoogleFont && p.fontFamilyName\n ? [\n {\n id: 'salla-font-display-override',\n rel: 'preload',\n as: 'style',\n href: p.fontUrlWithDisplay,\n },\n ]\n : []),\n ...(p.favicon ? [{ rel: 'icon', href: p.favicon }] : []),\n ...(p.favicon\n ? [{ id: 'salla-apple-icon', rel: 'apple-touch-icon-precomposed', href: p.favicon }]\n : []),\n ...(p.isCustomCssUrl && p.customCss\n ? [{ id: 'salla-custom-css', rel: 'stylesheet', href: p.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 ...(p.isCustomJsUrl && p.customJs\n ? [{ id: 'salla-custom-js-preload', rel: 'preload', as: 'script', href: p.customJs }]\n : []),\n ];\n}\n\n// Hoistable (href + precedence): the web components insert their own <style> near the top of\n// <head> before hydration, which a positionally hydrated <style> would be matched against.\nconst hoisted = (id: string, children: string) => ({\n id,\n href: id,\n precedence: 'default',\n children,\n});\n\nfunction buildRootStyles(p: RootHeadParts): NonNullable<HeadDescriptor['styles']> {\n return [\n hoisted('twilight-loading', LOADING_CSS),\n ...(!p.isGoogleFont && p.fontFamilyName\n ? [\n hoisted(\n 'salla-font-display-swap',\n `@font-face{font-family:\"${p.fontFamilyName}\";font-display:swap;src:local(\"${p.fontFamilyName}\")}`\n ),\n ]\n : []),\n ...(!p.isCustomCssUrl && p.customCss ? [hoisted('salla-custom-css', p.customCss)] : []),\n ];\n}\n\nfunction buildRootScripts(p: RootHeadParts): NonNullable<HeadDescriptor['scripts']> {\n return [\n // First: the API base / store identifier this render used, so the hydrated client\n // resolves the same ones (worker `vars` never reach the browser bundle on their own).\n ...(p.runtimeEnvScript ? [{ id: 'salla-runtime-env', children: p.runtimeEnvScript }] : []),\n { id: 'twilight-init', children: SALLA_INIT_SCRIPT },\n // After twilight-init (which defines window.Salla) and before the SDK module, so the\n // appScope factory exists ahead of any snippet's onReady callback firing.\n { id: 'salla-app-scope', children: p.appScopeInstallScript },\n // Arms the hook-slot whitelist push here, so its `twilight::initiated` listener is\n // registered before any app snippet's — listeners fire in registration order.\n ...(p.themeHookSlotsScript\n ? [{ id: 'salla-theme-hook-slots', children: p.themeHookSlotsScript }]\n : []),\n { id: 'salla-async-css', children: MEDIA_SWAP_SCRIPT },\n // The SDK and ticketing modules are rendered at the end of <body> (SallaSdkScripts).\n ...(p.customJs ? [buildCustomJsScript(p.customJs, Boolean(p.isCustomJsUrl))] : []),\n ];\n}\n\n/** A URL customization is loaded after SDK init; an inline one is wrapped so a syntax/runtime\n * error in partner JS warns instead of taking the page down. */\nfunction buildCustomJsScript(customJs: string, isUrl: boolean) {\n return {\n id: 'salla-custom-js',\n children: isUrl\n ? `window.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 : `try { ${customJs} } catch(e) { console.warn(\"[ThemeCustomization] Custom JS error:\", e); }`,\n };\n}\n"]}