diff options
| author | rxliuli <rxliuli@gmail.com> | 2025-11-04 05:03:50 +0800 |
|---|---|---|
| committer | rxliuli <rxliuli@gmail.com> | 2025-11-04 05:03:50 +0800 |
| commit | bce557cc2dc767628bed6aac87301a1be7c5431b (patch) | |
| tree | b51a051228d01fe3306cd7626d4a96768aadb944 /src/components/structure/VisionProFooter.svelte | |
init commit
Diffstat (limited to 'src/components/structure/VisionProFooter.svelte')
| -rw-r--r-- | src/components/structure/VisionProFooter.svelte | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/src/components/structure/VisionProFooter.svelte b/src/components/structure/VisionProFooter.svelte new file mode 100644 index 0000000..59dcd5b --- /dev/null +++ b/src/components/structure/VisionProFooter.svelte @@ -0,0 +1,142 @@ +<script lang="ts"> + import ShelfTitle from '~/components/Shelf/Title.svelte'; + import ShelfWrapper from '~/components/Shelf/Wrapper.svelte'; + import Grid from '~/components/Grid.svelte'; + import { getI18n } from '~/stores/i18n'; + import { getLocale } from '~/utils/locale'; + + const locale = getLocale(); + const i18n = getI18n(); + + let links: Record<string, string>; + + function getAboutAppStoreUrl(storefront: string, language: string) { + let storefrontSlug = `${storefront}/`; + + if (storefront === 'us') { + storefrontSlug = ''; + } else if (storefront === 'gb') { + // The UK "About App Store" link is https://www.apple.com/uk/app-store/, not https://www.apple.com/gb/app-store/. + storefrontSlug = 'uk/'; + } else if (storefront === 'ae' && language === 'ar') { + storefrontSlug = 'ae-ar/'; + } + + return `https://www.apple.com/${storefrontSlug}app-store/`; + } + + $: storefront = locale.storefront; + $: links = { + 'ASE.Web.AppStore.VisionPro.Footer.Links.AboutAppStore': + getAboutAppStoreUrl(storefront, locale.language), + 'ASE.Web.AppStore.VisionPro.Footer.Links.AboutPurchases': `https://apps.apple.com/${storefront}/story/id1436214772`, + 'ASE.Web.AppStore.VisionPro.Footer.Links.RequestRefund': `https://www.apple.com/${storefront}/shop/goto/help/sales_refunds`, + 'ASE.Web.AppStore.VisionPro.Footer.Links.PaymentMethods': `https://support.apple.com/118429`, + }; + + $: if (storefront === 'fr') { + links[ + 'AppStore.QuickLinks.AboutFrenchAppStore.Title' + ] = `https://apps.apple.com/${storefront}/story/1700848501`; + } +</script> + +<ShelfWrapper centered={false} withBottomPadding={false}> + <section data-test-id="vision-footer"> + <p class="blurb"> + {$i18n.t('ASE.Web.AppStore.VisionPro.Footer.Blurb')} + </p> + + <article class="quick-links-container"> + <ShelfTitle + title={$i18n.t('ASE.Web.AppStore.VisionPro.Footer.LinksTitle')} + /> + + <navigation> + <Grid + items={Object.entries(links)} + gridType="FooterLink" + let:item + > + {@const [title, href] = item} + <a {href}>{$i18n.t(title)}</a> + </Grid> + </navigation> + </article> + + <article class="disclaimer-container"> + <p> + {$i18n.t('ASE.Web.AppStore.VisionPro.Footer.Disclaimer')} + </p> + </article> + </section> +</ShelfWrapper> + +<style lang="scss"> + @use 'ac-sasskit/modules/viewportcontent/core' as *; + @use 'amp/stylekit/core/viewports' as *; + + section { + font: var(--body-tall); + } + + .blurb { + flex-grow: 1; + width: 100%; + max-width: calc(viewport-content-for(xlarge) * 0.66); + margin: 40px auto 50px; + padding: 0 var(--shelfGridPaddingInline, 40px); + text-align: center; + } + + .quick-links-container { + max-width: viewport-content-for(xlarge); + margin: 50px auto; + padding: 0 var(--bodyGutter); + } + + a { + display: block; + padding: var(--grid-column-gap-medium) 0 var(--grid-column-gap-medium); + word-break: break-all; + font: var(--title-2); + color: var(--keyColor); + border-bottom: 1px solid var(--systemQuinary); + + @media (--range-xsmall-down) { + padding: var(--grid-column-gap-xsmall) 0 + var(--grid-column-gap-xsmall); + } + } + + @media (--range-medium-up) { + .quick-links-container li:nth-child(n + 4) a { + border-bottom: none; + } + } + + @media (--small) { + .quick-links-container li:nth-child(n + 5) a { + border-bottom: none; + } + } + + @media (--range-xsmall-down) { + .quick-links-container li:last-child a { + border-bottom: none; + } + } + + .disclaimer-container { + flex-grow: 1; + width: 100%; + color: var(--systemTertiary); + background-color: var(--footerBg); + } + + .disclaimer-container p { + max-width: viewport-content-for(xlarge); + margin: 0 auto; + padding: 32px var(--bodyGutter, 40px); + } +</style> |
