From bce557cc2dc767628bed6aac87301a1be7c5431b Mon Sep 17 00:00:00 2001
From: rxliuli
Date: Tue, 4 Nov 2025 05:03:50 +0800
Subject: init commit
---
src/components/AmbientBackgroundArtwork.svelte | 202 ++++++++
src/components/AppEventDate.svelte | 72 +++
src/components/AppIcon.svelte | 131 +++++
src/components/AppIconRiver.svelte | 92 ++++
src/components/Artwork.svelte | 118 +++++
src/components/CollapsableContent.svelte | 36 ++
src/components/EditorsChoiceBadge.svelte | 56 +++
src/components/Error.svelte | 10 +
src/components/GradientOverlay.svelte | 23 +
src/components/Grid.svelte | 37 ++
src/components/HoverWrapper.svelte | 54 +++
src/components/LaunchNativeButton.svelte | 69 +++
src/components/LinkWrapper.svelte | 60 +++
src/components/Menu.svelte | 218 +++++++++
src/components/MotionArtwork.svelte | 152 ++++++
src/components/Page.svelte | 68 +++
src/components/PageModal.svelte | 82 ++++
src/components/PageResolver.svelte | 25 +
src/components/ProductPageArcadeBanner.svelte | 188 ++++++++
src/components/ProductPageArcadeFooter.svelte | 159 ++++++
src/components/SFSymbol.svelte | 51 ++
src/components/ShareArrowButton.svelte | 90 ++++
src/components/Shelf/Title.svelte | 112 +++++
src/components/Shelf/Wrapper.svelte | 81 ++++
src/components/ShelfItemLayout.svelte | 103 ++++
src/components/StarRating.svelte | 80 +++
src/components/SystemImage.svelte | 52 ++
src/components/VideoPlayer.svelte | 412 ++++++++++++++++
src/components/decorators/HlsJSDecorator.svelte | 67 +++
src/components/hero/AppLockupDetail.svelte | 109 +++++
src/components/hero/Carousel.svelte | 132 +++++
.../hero/CarouselBackgroundPortal.svelte | 17 +
src/components/hero/Hero.svelte | 536 +++++++++++++++++++++
src/components/icons/AppStoreLogo.svg | 1 +
src/components/icons/AppleArcadeLogo.svg | 1 +
src/components/jet/Video.svelte | 66 +++
src/components/jet/action/ExternalUrlAction.svelte | 52 ++
src/components/jet/action/FlowAction.svelte | 41 ++
.../jet/action/ShelfBasedPageScrollAction.svelte | 51 ++
src/components/jet/badge/ContentRatingBadge.svelte | 61 +++
.../jet/item/AccessibilityFeaturesItem.svelte | 159 ++++++
.../jet/item/AccessibilityParagraphItem.svelte | 22 +
.../jet/item/Annotation/AnnotationItem.svelte | 17 +
.../Annotation/LegacyAnnotationRenderer.svelte | 146 ++++++
.../Annotation/ModernAnnotationItemRenderer.svelte | 114 +++++
src/components/jet/item/AppEventItem.svelte | 176 +++++++
src/components/jet/item/ArcadeFooterItem.svelte | 83 ++++
src/components/jet/item/BannerItem.svelte | 37 ++
src/components/jet/item/BrickItem.svelte | 300 ++++++++++++
src/components/jet/item/ContentModal.svelte | 39 ++
src/components/jet/item/EditorialCardItem.svelte | 41 ++
src/components/jet/item/FooterLockupItem.svelte | 93 ++++
src/components/jet/item/HeroCarouselItem.svelte | 60 +++
src/components/jet/item/InAppPurchaseLockup.svelte | 74 +++
src/components/jet/item/LargeBrickItem.svelte | 106 ++++
.../jet/item/LargeHeroBreakoutItem.svelte | 268 +++++++++++
.../jet/item/LargeImageLockupItem.svelte | 130 +++++
src/components/jet/item/LargeLockupItem.svelte | 121 +++++
src/components/jet/item/LargeStoryCardItem.svelte | 38 ++
src/components/jet/item/LinkableTextItem.svelte | 88 ++++
.../jet/item/MediumImageLockupItem.svelte | 118 +++++
src/components/jet/item/MediumLockupItem.svelte | 96 ++++
.../MediumStoryCard/EditorialStoryCardItem.svelte | 304 ++++++++++++
src/components/jet/item/MediumStoryCardItem.svelte | 27 ++
.../jet/item/MixedMediaLockupItem.svelte | 39 ++
src/components/jet/item/ParagraphShelfItem.svelte | 21 +
src/components/jet/item/PosterLockupItem.svelte | 121 +++++
src/components/jet/item/PrivacyHeaderItem.svelte | 41 ++
src/components/jet/item/PrivacyTypeItem.svelte | 193 ++++++++
src/components/jet/item/ProductBadgeItem.svelte | 188 ++++++++
.../jet/item/ProductCapabilityItem.svelte | 84 ++++
.../item/ProductMedia/ProductMediaMacItem.svelte | 31 ++
.../item/ProductMedia/ProductMediaPadItem.svelte | 89 ++++
.../item/ProductMedia/ProductMediaPhoneItem.svelte | 142 ++++++
.../item/ProductMedia/ProductMediaTVItem.svelte | 34 ++
.../ProductMedia/ProductMediaVisionItem.svelte | 38 ++
.../item/ProductMedia/ProductMediaWatchItem.svelte | 50 ++
src/components/jet/item/ProductPageLinkItem.svelte | 68 +++
src/components/jet/item/ProductRatingsItem.svelte | 37 ++
.../ProductReview/EditorsChoiceReviewItem.svelte | 99 ++++
.../jet/item/ProductReview/UserReviewItem.svelte | 25 +
src/components/jet/item/ReviewItem.svelte | 237 +++++++++
src/components/jet/item/SearchLinkItem.svelte | 47 ++
.../item/SearchResult/AppSearchResultItem.svelte | 392 +++++++++++++++
src/components/jet/item/SmallBreakoutItem.svelte | 187 +++++++
src/components/jet/item/SmallLockupItem.svelte | 110 +++++
.../jet/item/SmallLockupWithOrdinalItem.svelte | 176 +++++++
.../SmallStoryCardMediaBrandedSingleApp.svelte | 69 +++
.../jet/item/SmallStoryCardWithArtworkItem.svelte | 87 ++++
.../jet/item/SmallStoryCardWithMediaAppIcon.svelte | 156 ++++++
.../jet/item/SmallStoryCardWithMediaItem.svelte | 104 ++++
.../jet/item/SmallStoryCardWithMediaRiver.svelte | 118 +++++
src/components/jet/item/TitledParagraphItem.svelte | 175 +++++++
src/components/jet/item/TrailersLockupItem.svelte | 51 ++
.../jet/marker-shelf/ProductTopLockup.svelte | 463 ++++++++++++++++++
.../shelf/AccessibilityDeveloperLinkShelf.svelte | 36 ++
.../jet/shelf/AccessibilityFeaturesShelf.svelte | 35 ++
.../jet/shelf/AccessibilityHeaderShelf.svelte | 182 +++++++
src/components/jet/shelf/ActionShelf.svelte | 80 +++
src/components/jet/shelf/AnnotationShelf.svelte | 49 ++
.../jet/shelf/AppEventDetailShelf.svelte | 290 +++++++++++
src/components/jet/shelf/AppPromotionShelf.svelte | 47 ++
src/components/jet/shelf/AppShowcaseShelf.svelte | 29 ++
.../jet/shelf/AppTrailerLockupShelf.svelte | 48 ++
src/components/jet/shelf/ArcadeFooterShelf.svelte | 32 ++
src/components/jet/shelf/BannerShelf.svelte | 35 ++
src/components/jet/shelf/BrickShelf.svelte | 31 ++
src/components/jet/shelf/CategoryBrickShelf.svelte | 28 ++
src/components/jet/shelf/EditorialCardShelf.svelte | 32 ++
src/components/jet/shelf/EditorialLinkShelf.svelte | 122 +++++
src/components/jet/shelf/FallbackShelf.svelte | 39 ++
src/components/jet/shelf/FramedArtworkShelf.svelte | 98 ++++
src/components/jet/shelf/FramedVideoShelf.svelte | 78 +++
src/components/jet/shelf/HeroCarouselShelf.svelte | 38 ++
.../jet/shelf/HorizontalRuleShelf.svelte | 54 +++
src/components/jet/shelf/HorizontalShelf.svelte | 53 ++
.../jet/shelf/InAppPurchaseLockupShelf.svelte | 31 ++
src/components/jet/shelf/LargeBrickShelf.svelte | 26 +
.../jet/shelf/LargeHeroBreakoutShelf.svelte | 31 ++
.../jet/shelf/LargeImageLockupShelf.svelte | 30 ++
src/components/jet/shelf/LargeLockupShelf.svelte | 28 ++
.../jet/shelf/LargeStoryCardShelf.svelte | 32 ++
src/components/jet/shelf/LinkableTextShelf.svelte | 43 ++
src/components/jet/shelf/MarkerShelf.svelte | 36 ++
.../jet/shelf/MediumImageLockupShelf.svelte | 28 ++
src/components/jet/shelf/MediumLockupShelf.svelte | 31 ++
.../jet/shelf/MediumStoryCardShelf.svelte | 31 ++
src/components/jet/shelf/PageHeaderShelf.svelte | 34 ++
src/components/jet/shelf/ParagraphShelf.svelte | 52 ++
src/components/jet/shelf/PosterLockupShelf.svelte | 31 ++
src/components/jet/shelf/PrivacyFooterShelf.svelte | 40 ++
src/components/jet/shelf/PrivacyHeaderShelf.svelte | 145 ++++++
src/components/jet/shelf/PrivacyTypeShelf.svelte | 29 ++
src/components/jet/shelf/ProductBadgeShelf.svelte | 59 +++
.../jet/shelf/ProductCapabilityShelf.svelte | 31 ++
.../jet/shelf/ProductDescriptionShelf.svelte | 95 ++++
src/components/jet/shelf/ProductMediaShelf.svelte | 269 +++++++++++
.../jet/shelf/ProductPageLinkShelf.svelte | 59 +++
.../jet/shelf/ProductRatingsShelf.svelte | 29 ++
src/components/jet/shelf/ProductReviewShelf.svelte | 38 ++
src/components/jet/shelf/QuoteShelf.svelte | 80 +++
.../jet/shelf/ReviewsContainerShelf.svelte | 84 ++++
src/components/jet/shelf/ReviewsShelf.svelte | 28 ++
src/components/jet/shelf/RibbonBarShelf.svelte | 135 ++++++
src/components/jet/shelf/SearchLinkShelf.svelte | 26 +
src/components/jet/shelf/SearchResultShelf.svelte | 49 ++
src/components/jet/shelf/Shelf.svelte | 320 ++++++++++++
src/components/jet/shelf/SmallBreakoutShelf.svelte | 32 ++
src/components/jet/shelf/SmallBrickShelf.svelte | 26 +
src/components/jet/shelf/SmallLockupShelf.svelte | 54 +++
.../jet/shelf/SmallStoryCardShelf.svelte | 66 +++
.../jet/shelf/TitledParagraphShelf.svelte | 118 +++++
src/components/jet/shelf/TodayCardShelf.svelte | 187 +++++++
src/components/jet/shelf/UberShelf.svelte | 40 ++
src/components/jet/today-card/TodayCard.svelte | 401 +++++++++++++++
.../jet/today-card/TodayCardMedia.svelte | 49 ++
.../jet/today-card/TodayCardOverlay.svelte | 48 ++
.../jet/today-card/background-color-utils.ts | 54 +++
.../today-card/media/TodayCardMediaAppEvent.svelte | 78 +++
.../today-card/media/TodayCardMediaAppIcon.svelte | 62 +++
.../media/TodayCardMediaBrandedSingleApp.svelte | 41 ++
.../jet/today-card/media/TodayCardMediaList.svelte | 86 ++++
.../today-card/media/TodayCardMediaRiver.svelte | 78 +++
.../today-card/media/TodayCardMediaVideo.svelte | 72 +++
.../media/TodayCardMediaWithArtwork.svelte | 100 ++++
.../overlay/TodayCardLockupListOverlay.svelte | 42 ++
.../jet/web-navigation/CategoryTabItem.svelte | 67 +++
.../web-navigation/PlatformSelectorDropdown.svelte | 88 ++++
.../jet/web-navigation/PlatformSelectorItem.svelte | 97 ++++
src/components/navigation/Navigation.svelte | 423 ++++++++++++++++
src/components/navigation/SearchInput.svelte | 82 ++++
src/components/navigation/Skeleton.svelte | 85 ++++
src/components/navigation/navigation-items.ts | 79 +++
src/components/pages/AppEventDetailPage.svelte | 44 ++
src/components/pages/ArticlePage.svelte | 141 ++++++
src/components/pages/ChartsHubPage.svelte | 11 +
src/components/pages/DefaultPage.svelte | 173 +++++++
src/components/pages/ErrorPage.svelte | 23 +
src/components/pages/ProductPage.svelte | 77 +++
src/components/pages/SearchLandingPage.svelte | 33 ++
src/components/pages/SearchResultsPage.svelte | 113 +++++
src/components/pages/SeeAllPage.svelte | 56 +++
src/components/pages/StaticMessagePage.svelte | 113 +++++
src/components/pages/TodayPage.svelte | 22 +
src/components/pages/TopChartsPage.svelte | 218 +++++++++
src/components/pages/VisionProPage.svelte | 12 +
src/components/structure/Fonts.svelte | 19 +
src/components/structure/Footer.svelte | 47 ++
src/components/structure/MetaTags.svelte | 68 +++
src/components/structure/VisionProFooter.svelte | 142 ++++++
190 files changed, 17579 insertions(+)
create mode 100644 src/components/AmbientBackgroundArtwork.svelte
create mode 100644 src/components/AppEventDate.svelte
create mode 100644 src/components/AppIcon.svelte
create mode 100644 src/components/AppIconRiver.svelte
create mode 100644 src/components/Artwork.svelte
create mode 100644 src/components/CollapsableContent.svelte
create mode 100644 src/components/EditorsChoiceBadge.svelte
create mode 100644 src/components/Error.svelte
create mode 100644 src/components/GradientOverlay.svelte
create mode 100644 src/components/Grid.svelte
create mode 100644 src/components/HoverWrapper.svelte
create mode 100644 src/components/LaunchNativeButton.svelte
create mode 100644 src/components/LinkWrapper.svelte
create mode 100644 src/components/Menu.svelte
create mode 100644 src/components/MotionArtwork.svelte
create mode 100644 src/components/Page.svelte
create mode 100644 src/components/PageModal.svelte
create mode 100644 src/components/PageResolver.svelte
create mode 100644 src/components/ProductPageArcadeBanner.svelte
create mode 100644 src/components/ProductPageArcadeFooter.svelte
create mode 100644 src/components/SFSymbol.svelte
create mode 100644 src/components/ShareArrowButton.svelte
create mode 100644 src/components/Shelf/Title.svelte
create mode 100644 src/components/Shelf/Wrapper.svelte
create mode 100644 src/components/ShelfItemLayout.svelte
create mode 100644 src/components/StarRating.svelte
create mode 100644 src/components/SystemImage.svelte
create mode 100644 src/components/VideoPlayer.svelte
create mode 100644 src/components/decorators/HlsJSDecorator.svelte
create mode 100644 src/components/hero/AppLockupDetail.svelte
create mode 100644 src/components/hero/Carousel.svelte
create mode 100644 src/components/hero/CarouselBackgroundPortal.svelte
create mode 100644 src/components/hero/Hero.svelte
create mode 100644 src/components/icons/AppStoreLogo.svg
create mode 100644 src/components/icons/AppleArcadeLogo.svg
create mode 100644 src/components/jet/Video.svelte
create mode 100644 src/components/jet/action/ExternalUrlAction.svelte
create mode 100644 src/components/jet/action/FlowAction.svelte
create mode 100644 src/components/jet/action/ShelfBasedPageScrollAction.svelte
create mode 100644 src/components/jet/badge/ContentRatingBadge.svelte
create mode 100644 src/components/jet/item/AccessibilityFeaturesItem.svelte
create mode 100644 src/components/jet/item/AccessibilityParagraphItem.svelte
create mode 100644 src/components/jet/item/Annotation/AnnotationItem.svelte
create mode 100644 src/components/jet/item/Annotation/LegacyAnnotationRenderer.svelte
create mode 100644 src/components/jet/item/Annotation/ModernAnnotationItemRenderer.svelte
create mode 100644 src/components/jet/item/AppEventItem.svelte
create mode 100644 src/components/jet/item/ArcadeFooterItem.svelte
create mode 100644 src/components/jet/item/BannerItem.svelte
create mode 100644 src/components/jet/item/BrickItem.svelte
create mode 100644 src/components/jet/item/ContentModal.svelte
create mode 100644 src/components/jet/item/EditorialCardItem.svelte
create mode 100644 src/components/jet/item/FooterLockupItem.svelte
create mode 100644 src/components/jet/item/HeroCarouselItem.svelte
create mode 100644 src/components/jet/item/InAppPurchaseLockup.svelte
create mode 100644 src/components/jet/item/LargeBrickItem.svelte
create mode 100644 src/components/jet/item/LargeHeroBreakoutItem.svelte
create mode 100644 src/components/jet/item/LargeImageLockupItem.svelte
create mode 100644 src/components/jet/item/LargeLockupItem.svelte
create mode 100644 src/components/jet/item/LargeStoryCardItem.svelte
create mode 100644 src/components/jet/item/LinkableTextItem.svelte
create mode 100644 src/components/jet/item/MediumImageLockupItem.svelte
create mode 100644 src/components/jet/item/MediumLockupItem.svelte
create mode 100644 src/components/jet/item/MediumStoryCard/EditorialStoryCardItem.svelte
create mode 100644 src/components/jet/item/MediumStoryCardItem.svelte
create mode 100644 src/components/jet/item/MixedMediaLockupItem.svelte
create mode 100644 src/components/jet/item/ParagraphShelfItem.svelte
create mode 100644 src/components/jet/item/PosterLockupItem.svelte
create mode 100644 src/components/jet/item/PrivacyHeaderItem.svelte
create mode 100644 src/components/jet/item/PrivacyTypeItem.svelte
create mode 100644 src/components/jet/item/ProductBadgeItem.svelte
create mode 100644 src/components/jet/item/ProductCapabilityItem.svelte
create mode 100644 src/components/jet/item/ProductMedia/ProductMediaMacItem.svelte
create mode 100644 src/components/jet/item/ProductMedia/ProductMediaPadItem.svelte
create mode 100644 src/components/jet/item/ProductMedia/ProductMediaPhoneItem.svelte
create mode 100644 src/components/jet/item/ProductMedia/ProductMediaTVItem.svelte
create mode 100644 src/components/jet/item/ProductMedia/ProductMediaVisionItem.svelte
create mode 100644 src/components/jet/item/ProductMedia/ProductMediaWatchItem.svelte
create mode 100644 src/components/jet/item/ProductPageLinkItem.svelte
create mode 100644 src/components/jet/item/ProductRatingsItem.svelte
create mode 100644 src/components/jet/item/ProductReview/EditorsChoiceReviewItem.svelte
create mode 100644 src/components/jet/item/ProductReview/UserReviewItem.svelte
create mode 100644 src/components/jet/item/ReviewItem.svelte
create mode 100644 src/components/jet/item/SearchLinkItem.svelte
create mode 100644 src/components/jet/item/SearchResult/AppSearchResultItem.svelte
create mode 100644 src/components/jet/item/SmallBreakoutItem.svelte
create mode 100644 src/components/jet/item/SmallLockupItem.svelte
create mode 100644 src/components/jet/item/SmallLockupWithOrdinalItem.svelte
create mode 100644 src/components/jet/item/SmallStoryCardMediaBrandedSingleApp.svelte
create mode 100644 src/components/jet/item/SmallStoryCardWithArtworkItem.svelte
create mode 100644 src/components/jet/item/SmallStoryCardWithMediaAppIcon.svelte
create mode 100644 src/components/jet/item/SmallStoryCardWithMediaItem.svelte
create mode 100644 src/components/jet/item/SmallStoryCardWithMediaRiver.svelte
create mode 100644 src/components/jet/item/TitledParagraphItem.svelte
create mode 100644 src/components/jet/item/TrailersLockupItem.svelte
create mode 100644 src/components/jet/marker-shelf/ProductTopLockup.svelte
create mode 100644 src/components/jet/shelf/AccessibilityDeveloperLinkShelf.svelte
create mode 100644 src/components/jet/shelf/AccessibilityFeaturesShelf.svelte
create mode 100644 src/components/jet/shelf/AccessibilityHeaderShelf.svelte
create mode 100644 src/components/jet/shelf/ActionShelf.svelte
create mode 100644 src/components/jet/shelf/AnnotationShelf.svelte
create mode 100644 src/components/jet/shelf/AppEventDetailShelf.svelte
create mode 100644 src/components/jet/shelf/AppPromotionShelf.svelte
create mode 100644 src/components/jet/shelf/AppShowcaseShelf.svelte
create mode 100644 src/components/jet/shelf/AppTrailerLockupShelf.svelte
create mode 100644 src/components/jet/shelf/ArcadeFooterShelf.svelte
create mode 100644 src/components/jet/shelf/BannerShelf.svelte
create mode 100644 src/components/jet/shelf/BrickShelf.svelte
create mode 100644 src/components/jet/shelf/CategoryBrickShelf.svelte
create mode 100644 src/components/jet/shelf/EditorialCardShelf.svelte
create mode 100644 src/components/jet/shelf/EditorialLinkShelf.svelte
create mode 100644 src/components/jet/shelf/FallbackShelf.svelte
create mode 100644 src/components/jet/shelf/FramedArtworkShelf.svelte
create mode 100644 src/components/jet/shelf/FramedVideoShelf.svelte
create mode 100644 src/components/jet/shelf/HeroCarouselShelf.svelte
create mode 100644 src/components/jet/shelf/HorizontalRuleShelf.svelte
create mode 100644 src/components/jet/shelf/HorizontalShelf.svelte
create mode 100644 src/components/jet/shelf/InAppPurchaseLockupShelf.svelte
create mode 100644 src/components/jet/shelf/LargeBrickShelf.svelte
create mode 100644 src/components/jet/shelf/LargeHeroBreakoutShelf.svelte
create mode 100644 src/components/jet/shelf/LargeImageLockupShelf.svelte
create mode 100644 src/components/jet/shelf/LargeLockupShelf.svelte
create mode 100644 src/components/jet/shelf/LargeStoryCardShelf.svelte
create mode 100644 src/components/jet/shelf/LinkableTextShelf.svelte
create mode 100644 src/components/jet/shelf/MarkerShelf.svelte
create mode 100644 src/components/jet/shelf/MediumImageLockupShelf.svelte
create mode 100644 src/components/jet/shelf/MediumLockupShelf.svelte
create mode 100644 src/components/jet/shelf/MediumStoryCardShelf.svelte
create mode 100644 src/components/jet/shelf/PageHeaderShelf.svelte
create mode 100644 src/components/jet/shelf/ParagraphShelf.svelte
create mode 100644 src/components/jet/shelf/PosterLockupShelf.svelte
create mode 100644 src/components/jet/shelf/PrivacyFooterShelf.svelte
create mode 100644 src/components/jet/shelf/PrivacyHeaderShelf.svelte
create mode 100644 src/components/jet/shelf/PrivacyTypeShelf.svelte
create mode 100644 src/components/jet/shelf/ProductBadgeShelf.svelte
create mode 100644 src/components/jet/shelf/ProductCapabilityShelf.svelte
create mode 100644 src/components/jet/shelf/ProductDescriptionShelf.svelte
create mode 100644 src/components/jet/shelf/ProductMediaShelf.svelte
create mode 100644 src/components/jet/shelf/ProductPageLinkShelf.svelte
create mode 100644 src/components/jet/shelf/ProductRatingsShelf.svelte
create mode 100644 src/components/jet/shelf/ProductReviewShelf.svelte
create mode 100644 src/components/jet/shelf/QuoteShelf.svelte
create mode 100644 src/components/jet/shelf/ReviewsContainerShelf.svelte
create mode 100644 src/components/jet/shelf/ReviewsShelf.svelte
create mode 100644 src/components/jet/shelf/RibbonBarShelf.svelte
create mode 100644 src/components/jet/shelf/SearchLinkShelf.svelte
create mode 100644 src/components/jet/shelf/SearchResultShelf.svelte
create mode 100644 src/components/jet/shelf/Shelf.svelte
create mode 100644 src/components/jet/shelf/SmallBreakoutShelf.svelte
create mode 100644 src/components/jet/shelf/SmallBrickShelf.svelte
create mode 100644 src/components/jet/shelf/SmallLockupShelf.svelte
create mode 100644 src/components/jet/shelf/SmallStoryCardShelf.svelte
create mode 100644 src/components/jet/shelf/TitledParagraphShelf.svelte
create mode 100644 src/components/jet/shelf/TodayCardShelf.svelte
create mode 100644 src/components/jet/shelf/UberShelf.svelte
create mode 100644 src/components/jet/today-card/TodayCard.svelte
create mode 100644 src/components/jet/today-card/TodayCardMedia.svelte
create mode 100644 src/components/jet/today-card/TodayCardOverlay.svelte
create mode 100644 src/components/jet/today-card/background-color-utils.ts
create mode 100644 src/components/jet/today-card/media/TodayCardMediaAppEvent.svelte
create mode 100644 src/components/jet/today-card/media/TodayCardMediaAppIcon.svelte
create mode 100644 src/components/jet/today-card/media/TodayCardMediaBrandedSingleApp.svelte
create mode 100644 src/components/jet/today-card/media/TodayCardMediaList.svelte
create mode 100644 src/components/jet/today-card/media/TodayCardMediaRiver.svelte
create mode 100644 src/components/jet/today-card/media/TodayCardMediaVideo.svelte
create mode 100644 src/components/jet/today-card/media/TodayCardMediaWithArtwork.svelte
create mode 100644 src/components/jet/today-card/overlay/TodayCardLockupListOverlay.svelte
create mode 100644 src/components/jet/web-navigation/CategoryTabItem.svelte
create mode 100644 src/components/jet/web-navigation/PlatformSelectorDropdown.svelte
create mode 100644 src/components/jet/web-navigation/PlatformSelectorItem.svelte
create mode 100644 src/components/navigation/Navigation.svelte
create mode 100644 src/components/navigation/SearchInput.svelte
create mode 100644 src/components/navigation/Skeleton.svelte
create mode 100644 src/components/navigation/navigation-items.ts
create mode 100644 src/components/pages/AppEventDetailPage.svelte
create mode 100644 src/components/pages/ArticlePage.svelte
create mode 100644 src/components/pages/ChartsHubPage.svelte
create mode 100644 src/components/pages/DefaultPage.svelte
create mode 100644 src/components/pages/ErrorPage.svelte
create mode 100644 src/components/pages/ProductPage.svelte
create mode 100644 src/components/pages/SearchLandingPage.svelte
create mode 100644 src/components/pages/SearchResultsPage.svelte
create mode 100644 src/components/pages/SeeAllPage.svelte
create mode 100644 src/components/pages/StaticMessagePage.svelte
create mode 100644 src/components/pages/TodayPage.svelte
create mode 100644 src/components/pages/TopChartsPage.svelte
create mode 100644 src/components/pages/VisionProPage.svelte
create mode 100644 src/components/structure/Fonts.svelte
create mode 100644 src/components/structure/Footer.svelte
create mode 100644 src/components/structure/MetaTags.svelte
create mode 100644 src/components/structure/VisionProFooter.svelte
(limited to 'src/components')
diff --git a/src/components/AmbientBackgroundArtwork.svelte b/src/components/AmbientBackgroundArtwork.svelte
new file mode 100644
index 0000000..bc9563c
--- /dev/null
+++ b/src/components/AmbientBackgroundArtwork.svelte
@@ -0,0 +1,202 @@
+
+
+{#if backgroundImage}
+
+
+
+{/if}
+
+
diff --git a/src/components/AppEventDate.svelte b/src/components/AppEventDate.svelte
new file mode 100644
index 0000000..41ee248
--- /dev/null
+++ b/src/components/AppEventDate.svelte
@@ -0,0 +1,72 @@
+
+
+{#if appEventDate}
+
+{:else}
+ …
+{/if}
+
+
diff --git a/src/components/AppIcon.svelte b/src/components/AppIcon.svelte
new file mode 100644
index 0000000..4cb0262
--- /dev/null
+++ b/src/components/AppIcon.svelte
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
diff --git a/src/components/AppIconRiver.svelte b/src/components/AppIconRiver.svelte
new file mode 100644
index 0000000..b673dd0
--- /dev/null
+++ b/src/components/AppIconRiver.svelte
@@ -0,0 +1,92 @@
+
+
+{#if mounted}
+ {#each [topRow, bottomRow] as iconRow}
+
+ {#each iconRow as icon}
+ -
+
+
+ {/each}
+
+ {/each}
+{/if}
+
+
diff --git a/src/components/Artwork.svelte b/src/components/Artwork.svelte
new file mode 100644
index 0000000..04de1d4
--- /dev/null
+++ b/src/components/Artwork.svelte
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
diff --git a/src/components/CollapsableContent.svelte b/src/components/CollapsableContent.svelte
new file mode 100644
index 0000000..e75fbf1
--- /dev/null
+++ b/src/components/CollapsableContent.svelte
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/EditorsChoiceBadge.svelte b/src/components/EditorsChoiceBadge.svelte
new file mode 100644
index 0000000..2c4efe1
--- /dev/null
+++ b/src/components/EditorsChoiceBadge.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ {$i18n.t('ASE.Web.AppStore.Review.EditorsChoice')}
+
+
+
+
+
+
diff --git a/src/components/Error.svelte b/src/components/Error.svelte
new file mode 100644
index 0000000..a0aeba1
--- /dev/null
+++ b/src/components/Error.svelte
@@ -0,0 +1,10 @@
+
+
+
diff --git a/src/components/GradientOverlay.svelte b/src/components/GradientOverlay.svelte
new file mode 100644
index 0000000..5827a2c
--- /dev/null
+++ b/src/components/GradientOverlay.svelte
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/src/components/Grid.svelte b/src/components/Grid.svelte
new file mode 100644
index 0000000..df2ca74
--- /dev/null
+++ b/src/components/Grid.svelte
@@ -0,0 +1,37 @@
+
+
+
+ {#each items as item}
+ -
+
+
+ {/each}
+
+
+
diff --git a/src/components/HoverWrapper.svelte b/src/components/HoverWrapper.svelte
new file mode 100644
index 0000000..2d2742f
--- /dev/null
+++ b/src/components/HoverWrapper.svelte
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
diff --git a/src/components/LaunchNativeButton.svelte b/src/components/LaunchNativeButton.svelte
new file mode 100644
index 0000000..eb7942b
--- /dev/null
+++ b/src/components/LaunchNativeButton.svelte
@@ -0,0 +1,69 @@
+
+
+
+
+
diff --git a/src/components/LinkWrapper.svelte b/src/components/LinkWrapper.svelte
new file mode 100644
index 0000000..0e5025d
--- /dev/null
+++ b/src/components/LinkWrapper.svelte
@@ -0,0 +1,60 @@
+
+
+
+{#if isSome(action) && isFlowAction(action) && isSome(action.pageUrl)}
+
+
+
+{:else if isSome(action) && isExternalUrlAction(action)}
+
+
+
+{:else if isSome(action) && isShelfBasedPageScrollAction(action)}
+
+
+
+{:else}
+
+{/if}
diff --git a/src/components/Menu.svelte b/src/components/Menu.svelte
new file mode 100644
index 0000000..8221c79
--- /dev/null
+++ b/src/components/Menu.svelte
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/MotionArtwork.svelte b/src/components/MotionArtwork.svelte
new file mode 100644
index 0000000..646df26
--- /dev/null
+++ b/src/components/MotionArtwork.svelte
@@ -0,0 +1,152 @@
+
+
+{#if errorState !== undefined}
+
+{:else}
+
+
+{/if}
+
+
diff --git a/src/components/Page.svelte b/src/components/Page.svelte
new file mode 100644
index 0000000..5b44c06
--- /dev/null
+++ b/src/components/Page.svelte
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+{#if isAppEventDetailPage(page)}
+
+{:else if isArticlePage(page)}
+
+{:else if isChartsHubPage(page)}
+
+{:else if isSearchLandingPage(page)}
+
+{:else if isSearchResultsPage(page)}
+
+{:else if isShelfBasedProductPage(page)}
+
+{:else if isTopChartsPage(page)}
+
+{:else if isGenericPage(page) && hasVisionProUrl(page)}
+
+{:else if isTodayPage(page)}
+
+{:else if isStaticMessagePage(page)}
+
+{:else if isSeeAllPage(page)}
+
+{:else if isErrorPage(page)}
+
+{:else}
+
+{/if}
diff --git a/src/components/PageModal.svelte b/src/components/PageModal.svelte
new file mode 100644
index 0000000..9e5ee50
--- /dev/null
+++ b/src/components/PageModal.svelte
@@ -0,0 +1,82 @@
+
+
+
+
+ {#if page}
+
+
+ {#each shelves as shelf}
+
+
+
+ {/each}
+
+
+ {/if}
+
+
+
+
diff --git a/src/components/PageResolver.svelte b/src/components/PageResolver.svelte
new file mode 100644
index 0000000..9f482aa
--- /dev/null
+++ b/src/components/PageResolver.svelte
@@ -0,0 +1,25 @@
+
+
+{#await page}
+
+
+
+
+{:then page}
+
+{:catch error}
+
+{/await}
diff --git a/src/components/ProductPageArcadeBanner.svelte b/src/components/ProductPageArcadeBanner.svelte
new file mode 100644
index 0000000..154c115
--- /dev/null
+++ b/src/components/ProductPageArcadeBanner.svelte
@@ -0,0 +1,188 @@
+
+
+
+
+
diff --git a/src/components/ProductPageArcadeFooter.svelte b/src/components/ProductPageArcadeFooter.svelte
new file mode 100644
index 0000000..0cd9b65
--- /dev/null
+++ b/src/components/ProductPageArcadeFooter.svelte
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
diff --git a/src/components/SFSymbol.svelte b/src/components/SFSymbol.svelte
new file mode 100644
index 0000000..998ab06
--- /dev/null
+++ b/src/components/SFSymbol.svelte
@@ -0,0 +1,51 @@
+
+
+
+
+
+
diff --git a/src/components/ShareArrowButton.svelte b/src/components/ShareArrowButton.svelte
new file mode 100644
index 0000000..7b822fc
--- /dev/null
+++ b/src/components/ShareArrowButton.svelte
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
diff --git a/src/components/Shelf/Title.svelte b/src/components/Shelf/Title.svelte
new file mode 100644
index 0000000..e68f4b1
--- /dev/null
+++ b/src/components/Shelf/Title.svelte
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
{title}
+
+ {#if isSome(seeAllAction) && isFlowAction(seeAllAction)}
+
+
+
+ {/if}
+
+
+
+
+{#if subtitle}
+ {subtitle}
+{/if}
+
+
diff --git a/src/components/Shelf/Wrapper.svelte b/src/components/Shelf/Wrapper.svelte
new file mode 100644
index 0000000..850b0d0
--- /dev/null
+++ b/src/components/Shelf/Wrapper.svelte
@@ -0,0 +1,81 @@
+
+
+
+ {#if $$slots['title']}
+
+ {:else if shelf?.header?.title}
+
+ {:else if shelf?.title}
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/ShelfItemLayout.svelte b/src/components/ShelfItemLayout.svelte
new file mode 100644
index 0000000..ef1d07c
--- /dev/null
+++ b/src/components/ShelfItemLayout.svelte
@@ -0,0 +1,103 @@
+
+
+
+{#if isHorizontal}
+
+
+
+{:else}
+
+
+
+{/if}
diff --git a/src/components/StarRating.svelte b/src/components/StarRating.svelte
new file mode 100644
index 0000000..84da44b
--- /dev/null
+++ b/src/components/StarRating.svelte
@@ -0,0 +1,80 @@
+
+
+
+
+
+ {#each starFillPercentages as fillPercent}
+ -
+ {#if fillPercent === 100}
+
+ {:else if fillPercent === 0}
+
+ {:else}
+
+
+
+
+
+ {/if}
+
+ {/each}
+
+
+
diff --git a/src/components/SystemImage.svelte b/src/components/SystemImage.svelte
new file mode 100644
index 0000000..40723dd
--- /dev/null
+++ b/src/components/SystemImage.svelte
@@ -0,0 +1,52 @@
+
+
+
+
+
+
diff --git a/src/components/VideoPlayer.svelte b/src/components/VideoPlayer.svelte
new file mode 100644
index 0000000..8012b9f
--- /dev/null
+++ b/src/components/VideoPlayer.svelte
@@ -0,0 +1,412 @@
+
+
+
+
+
+
+
+ {#if shouldSuperimposePosterImage && !hasPlaybackBeenInitiated}
+

+ {/if}
+
+ {#if useControls}
+
+ {#if shouldShowReplayControl}
+
+ {/if}
+
+ {#if shouldShowPlaybackControls}
+
+
+
+
+
+
+
+ {/if}
+
+ {/if}
+
+
+
diff --git a/src/components/decorators/HlsJSDecorator.svelte b/src/components/decorators/HlsJSDecorator.svelte
new file mode 100644
index 0000000..591cb0d
--- /dev/null
+++ b/src/components/decorators/HlsJSDecorator.svelte
@@ -0,0 +1,67 @@
+
+
+
+
+{#if loading}
+ {#await loading}
+
+ {:then}
+
+ {:catch}
+
+ {/await}
+{/if}
diff --git a/src/components/hero/AppLockupDetail.svelte b/src/components/hero/AppLockupDetail.svelte
new file mode 100644
index 0000000..e4abe47
--- /dev/null
+++ b/src/components/hero/AppLockupDetail.svelte
@@ -0,0 +1,109 @@
+
+
+
+
+ {#if lockup.icon}
+
+ {/if}
+
+
+ {#if lockup.heading}
+
+ {lockup.heading}
+
+ {/if}
+
+ {#if lockup.title}
+
+ {lockup.title}
+
+ {/if}
+
+ {#if lockup.subtitle}
+
+ {lockup.subtitle}
+
+ {/if}
+
+
+
+
+ {$i18n.t('ASE.Web.AppStore.View')}
+
+
+
+
+
diff --git a/src/components/hero/Carousel.svelte b/src/components/hero/Carousel.svelte
new file mode 100644
index 0000000..218813b
--- /dev/null
+++ b/src/components/hero/Carousel.svelte
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+ {#if isXSmallViewport}
+
+
+
+ {:else}
+
+ {#if !import.meta.env.SSR}
+ {@const backgroundArtwork =
+ deriveBackgroundArtworkFromItem(item)}
+
+ {#if backgroundArtwork}
+
+ {/if}
+ {/if}
+
+
+
+ {/if}
+
+
diff --git a/src/components/hero/CarouselBackgroundPortal.svelte b/src/components/hero/CarouselBackgroundPortal.svelte
new file mode 100644
index 0000000..4580ce0
--- /dev/null
+++ b/src/components/hero/CarouselBackgroundPortal.svelte
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/src/components/hero/Hero.svelte b/src/components/hero/Hero.svelte
new file mode 100644
index 0000000..f643ffa
--- /dev/null
+++ b/src/components/hero/Hero.svelte
@@ -0,0 +1,536 @@
+
+
+
+
+
+ {#if video || artwork}
+
+ {#if video && !$prefersReducedMotion}
+
+ {:else if artwork}
+
+ {/if}
+
+ {:else if collectionIcons}
+
+ {#each collectionIcons?.slice(0, 5) as collectionIcon}
+ -
+
+
+ {/each}
+
+
+
+ {/if}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/icons/AppStoreLogo.svg b/src/components/icons/AppStoreLogo.svg
new file mode 100644
index 0000000..185032f
--- /dev/null
+++ b/src/components/icons/AppStoreLogo.svg
@@ -0,0 +1 @@
+export default "__VITE_ASSET__PaJpmjhr__"
\ No newline at end of file
diff --git a/src/components/icons/AppleArcadeLogo.svg b/src/components/icons/AppleArcadeLogo.svg
new file mode 100644
index 0000000..52902b2
--- /dev/null
+++ b/src/components/icons/AppleArcadeLogo.svg
@@ -0,0 +1 @@
+export default "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20384%2080'%20preserveAspectRatio='xMinYMin%20meet'%20%3e%3cpath%20fill='currentColor'%20d='M43.873%2012.699C46.606%209.28%2048.461%204.69%2047.972%200c-4.001.199-8.883%202.64-11.71%206.06-2.538%202.93-4.784%207.712-4.198%2012.206%204.49.39%208.978-2.245%2011.81-5.567M47.92%2019.144c-6.521-.389-12.067%203.701-15.182%203.701-3.116%200-7.885-3.506-13.044-3.411-6.714.098-12.945%203.895-16.352%209.933-7.008%2012.079-1.85%2029.996%204.966%2039.833%203.31%204.867%207.298%2010.226%2012.553%2010.034%204.966-.195%206.912-3.216%2012.948-3.216%206.032%200%207.785%203.216%2013.041%203.118%205.451-.097%208.859-4.869%2012.168-9.74%203.797-5.549%205.351-10.906%205.449-11.2-.098-.097-10.511-4.092-10.608-16.07-.098-10.03%208.176-14.801%208.565-15.097-4.672-6.91-11.972-7.69-14.503-7.885'%20/%3e%3cpath%20fill='currentColor'%20d='M115.598%2058.881H87.752L81.07%2078.627H69.273L95.651%205.569h12.252l26.377%2073.058h-12l-6.682-19.746zm-24.96-9.113h22.074L101.827%2017.72h-.304L90.638%2049.768zM140.503%2025.365h10.43v9.062h.253c1.773-6.226%206.531-9.923%2012.81-9.923%201.569%200%202.936.253%203.746.406v10.175c-.86-.354-2.784-.607-4.911-.607-7.038%200-11.391%204.71-11.391%2012.252v31.897h-10.937V25.365zM207.744%2043.693c-1.114-5.671-5.367-10.177-12.505-10.177-8.455%200-14.025%207.037-14.025%2018.48%200%2011.695%205.62%2018.48%2014.126%2018.48%206.734%200%2011.138-3.696%2012.404-9.873h10.53c-1.164%2011.34-10.227%2019.036-23.035%2019.036-15.24%200-25.162-10.43-25.162-27.643%200-16.91%209.923-27.593%2025.06-27.593%2013.72%200%2022.074%208.81%2023.036%2019.29h-10.43zM223.9%2063.489c0-9.317%207.14-15.037%2019.797-15.746l14.58-.86v-4.101c0-5.924-4-9.468-10.682-9.468-6.329%200-10.278%203.037-11.24%207.797h-10.328c.607-9.62%208.81-16.708%2021.973-16.708%2012.91%200%2021.163%206.835%2021.163%2017.517v36.707h-10.48v-8.76h-.254c-3.088%205.925-9.821%209.67-16.808%209.67-10.43%200-17.72-6.48-17.72-16.048zm34.378-4.81v-4.202l-13.113.81c-6.532.456-10.227%203.341-10.227%207.898%200%204.657%203.848%207.695%209.72%207.695%207.645%200%2013.62-5.265%2013.62-12.2zM276.853%2051.996c0-16.809%208.91-27.492%2022.276-27.492%207.645%200%2013.721%203.848%2016.707%209.721h.204V5.57h10.986v73.058h-10.632v-9.063h-.203c-3.139%206.075-9.214%209.974-16.96%209.974-13.468%200-22.378-10.734-22.378-27.542zm11.189%200c0%2011.239%205.417%2018.277%2014.075%2018.277%208.404%200%2014.023-7.139%2014.023-18.277%200-11.037-5.619-18.277-14.023-18.277-8.658%200-14.075%207.088-14.075%2018.277zM382.956%2062.982c-1.519%209.72-10.734%2016.657-22.935%2016.657-15.644%200-25.111-10.58-25.111-27.39%200-16.707%209.619-27.846%2024.656-27.846%2014.783%200%2023.997%2010.43%2023.997%2026.58v3.747h-37.616v.658c0%209.265%205.568%2015.39%2014.327%2015.39%206.228%200%2010.835-3.138%2012.303-7.796h10.379zm-36.96-15.897h26.631c-.252-8.15-5.417-13.873-13.061-13.873-7.646%200-13.012%205.823-13.57%2013.873z'%20/%3e%3c/svg%3e"
\ No newline at end of file
diff --git a/src/components/jet/Video.svelte b/src/components/jet/Video.svelte
new file mode 100644
index 0000000..8d2e4f3
--- /dev/null
+++ b/src/components/jet/Video.svelte
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/action/ExternalUrlAction.svelte b/src/components/jet/action/ExternalUrlAction.svelte
new file mode 100644
index 0000000..e8a2ad6
--- /dev/null
+++ b/src/components/jet/action/ExternalUrlAction.svelte
@@ -0,0 +1,52 @@
+
+
+
+
+ {#if includeArrowIcon}
+
+ {/if}
+
+
+
diff --git a/src/components/jet/action/FlowAction.svelte b/src/components/jet/action/FlowAction.svelte
new file mode 100644
index 0000000..3e55e82
--- /dev/null
+++ b/src/components/jet/action/FlowAction.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/src/components/jet/action/ShelfBasedPageScrollAction.svelte b/src/components/jet/action/ShelfBasedPageScrollAction.svelte
new file mode 100644
index 0000000..9c1c13e
--- /dev/null
+++ b/src/components/jet/action/ShelfBasedPageScrollAction.svelte
@@ -0,0 +1,51 @@
+
+
+
+
+{#if destination.shelfId}
+
+
+
+{:else}
+
+{/if}
diff --git a/src/components/jet/badge/ContentRatingBadge.svelte b/src/components/jet/badge/ContentRatingBadge.svelte
new file mode 100644
index 0000000..ff3a2c3
--- /dev/null
+++ b/src/components/jet/badge/ContentRatingBadge.svelte
@@ -0,0 +1,61 @@
+
+
+
+
+{#if artwork && isSystemImageArtwork(artwork)}
+
+
+
+{:else}
+
+ {badge.content.contentRating}
+
+{/if}
+
+
diff --git a/src/components/jet/item/AccessibilityFeaturesItem.svelte b/src/components/jet/item/AccessibilityFeaturesItem.svelte
new file mode 100644
index 0000000..bcbeb6c
--- /dev/null
+++ b/src/components/jet/item/AccessibilityFeaturesItem.svelte
@@ -0,0 +1,159 @@
+
+
+
+ {#if !isDetailView}
+ {#if item.artwork && isSystemImageArtwork(item.artwork)}
+
+
+
+ {/if}
+ {item.title}
+ {/if}
+
+
+
+
+
diff --git a/src/components/jet/item/AccessibilityParagraphItem.svelte b/src/components/jet/item/AccessibilityParagraphItem.svelte
new file mode 100644
index 0000000..836b52f
--- /dev/null
+++ b/src/components/jet/item/AccessibilityParagraphItem.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/src/components/jet/item/Annotation/AnnotationItem.svelte b/src/components/jet/item/Annotation/AnnotationItem.svelte
new file mode 100644
index 0000000..38bb269
--- /dev/null
+++ b/src/components/jet/item/Annotation/AnnotationItem.svelte
@@ -0,0 +1,17 @@
+
+
+{#if shouldRenderModernAnnotation}
+
+{:else}
+
+{/if}
diff --git a/src/components/jet/item/Annotation/LegacyAnnotationRenderer.svelte b/src/components/jet/item/Annotation/LegacyAnnotationRenderer.svelte
new file mode 100644
index 0000000..fc6586f
--- /dev/null
+++ b/src/components/jet/item/Annotation/LegacyAnnotationRenderer.svelte
@@ -0,0 +1,146 @@
+
+
+{#if shouldRenderAsDefinitionList(items)}
+
+ {#each items as annotationItem}
+ - {annotationItem.heading}
+ - {annotationItem.text}
+ {/each}
+
+{:else if shouldRenderAsOrderedList(items)}
+
+ {#each items as annotationItem}
+ {#if annotationItem.textPairs}
+ {#each annotationItem.textPairs as [text, subtext]}
+ -
+ {text}
+ {subtext}
+
+ {/each}
+ {:else}
+ - {annotationItem.text}
+ {/if}
+ {/each}
+
+{:else if shouldRenderAsUnorderedList(items)}
+
+ {#each items as annotationItem}
+ -
+
+ {annotationItem.text}
+
+
+ {/each}
+
+{:else if shouldRenderAsDefinitionListWithHeading(items)}
+ {@const [heading, ...remainingItems] = items}
+
+ {heading.text}
+
+
+ {#each remainingItems as annotationItem}
+ - {annotationItem.heading}
+ - {annotationItem.text}
+ {/each}
+
+
+{:else}
+
+
+ {#each items as annotationItem}
+ - {annotationItem.text}
+ {/each}
+
+ {#if isSome(linkAction) && isFlowAction(linkAction)}
+
+ {linkAction.title}
+
+ {/if}
+
+{/if}
+
+
diff --git a/src/components/jet/item/Annotation/ModernAnnotationItemRenderer.svelte b/src/components/jet/item/Annotation/ModernAnnotationItemRenderer.svelte
new file mode 100644
index 0000000..20611d3
--- /dev/null
+++ b/src/components/jet/item/Annotation/ModernAnnotationItemRenderer.svelte
@@ -0,0 +1,114 @@
+
+
+
+ {#each items as annotationItem}
+ -
+ {#if annotationItem.$kind === 'textEncapsulation'}
+
+ {annotationItem.text}
+
+ {:else if annotationItem.$kind === 'linkableText'}
+
+ {@html sanitizeHtml(
+ formatStyledText(
+ annotationItem.linkableText.styledText.rawText,
+ ),
+ )}
+
+ {:else if annotationItem.$kind === 'artwork'}
+ {#if isSystemImageArtwork(annotationItem.artwork)}
+
+
+
+ {/if}
+ {:else if annotationItem.$kind === 'textPair'}
+
+ {annotationItem.leadingText}
+
+ {annotationItem.trailingText}
+
+
+ {:else if annotationItem.$kind === 'button'}
+
+
+ {annotationItem.action.title}
+
+
+ {:else if annotationItem.$kind === 'spacer'}
+
+ {/if}
+
+ {/each}
+
+
+
diff --git a/src/components/jet/item/AppEventItem.svelte b/src/components/jet/item/AppEventItem.svelte
new file mode 100644
index 0000000..c1e5e5a
--- /dev/null
+++ b/src/components/jet/item/AppEventItem.svelte
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
+
+
+ {#if video}
+
+
+
+ {:else if artwork}
+
+ {/if}
+
+
+
+
+
+
+
{item.kind}
+
+
{item.title}
+
+
+ {item.detail}
+
+
+
+
+
+
+ {#if item.lockup && shouldShowLockup}
+
+
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/item/ArcadeFooterItem.svelte b/src/components/jet/item/ArcadeFooterItem.svelte
new file mode 100644
index 0000000..94fe61d
--- /dev/null
+++ b/src/components/jet/item/ArcadeFooterItem.svelte
@@ -0,0 +1,83 @@
+
+
+
+
+ {#if icons.length}
+
+ {/if}
+
+
+
+
+
+
diff --git a/src/components/jet/item/BannerItem.svelte b/src/components/jet/item/BannerItem.svelte
new file mode 100644
index 0000000..819f621
--- /dev/null
+++ b/src/components/jet/item/BannerItem.svelte
@@ -0,0 +1,37 @@
+
+
+
+
+ {item.message}
+ {#if isSome(item.action) && isFlowAction(item.action)}
+
+ {item.action.title}
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/item/BrickItem.svelte b/src/components/jet/item/BrickItem.svelte
new file mode 100644
index 0000000..a9e6319
--- /dev/null
+++ b/src/components/jet/item/BrickItem.svelte
@@ -0,0 +1,300 @@
+
+
+
+
+
+ {#if artwork}
+
+ {:else if backgroundGradientCssVars}
+
+ {/if}
+
+ {#if item.title}
+
+ {/if}
+
+
+
+
+ {#if !artwork && collectionIcons}
+
+ {#each collectionIcons?.slice(0, 8) as collectionIcon}
+ -
+
+
+ {/each}
+
+ {/if}
+
+
+
+ {#if item.shortEditorialDescription}
+
+ {item.shortEditorialDescription}
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/item/ContentModal.svelte b/src/components/jet/item/ContentModal.svelte
new file mode 100644
index 0000000..486937d
--- /dev/null
+++ b/src/components/jet/item/ContentModal.svelte
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/src/components/jet/item/EditorialCardItem.svelte b/src/components/jet/item/EditorialCardItem.svelte
new file mode 100644
index 0000000..2998b05
--- /dev/null
+++ b/src/components/jet/item/EditorialCardItem.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+ {#if item.appEventFormattedDates}
+
+ {:else}
+ {item.caption}
+ {/if}
+
+
+
+ {#if item.lockup}
+
+ {/if}
+
+
diff --git a/src/components/jet/item/FooterLockupItem.svelte b/src/components/jet/item/FooterLockupItem.svelte
new file mode 100644
index 0000000..848885d
--- /dev/null
+++ b/src/components/jet/item/FooterLockupItem.svelte
@@ -0,0 +1,93 @@
+
+
+
+
+
diff --git a/src/components/jet/item/HeroCarouselItem.svelte b/src/components/jet/item/HeroCarouselItem.svelte
new file mode 100644
index 0000000..295aa8a
--- /dev/null
+++ b/src/components/jet/item/HeroCarouselItem.svelte
@@ -0,0 +1,60 @@
+
+
+
+
+
+ {#if overlayLockup && overlayType === 'singleModule'}
+
+ {:else if callToActionText && !isPortraitLayout}
+
+
+ {callToActionText}
+
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/item/InAppPurchaseLockup.svelte b/src/components/jet/item/InAppPurchaseLockup.svelte
new file mode 100644
index 0000000..29b7196
--- /dev/null
+++ b/src/components/jet/item/InAppPurchaseLockup.svelte
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/item/LargeBrickItem.svelte b/src/components/jet/item/LargeBrickItem.svelte
new file mode 100644
index 0000000..5ce9974
--- /dev/null
+++ b/src/components/jet/item/LargeBrickItem.svelte
@@ -0,0 +1,106 @@
+
+
+
+
+ {#if artwork}
+
+ {:else}
+
+ {/if}
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/item/LargeHeroBreakoutItem.svelte b/src/components/jet/item/LargeHeroBreakoutItem.svelte
new file mode 100644
index 0000000..d07eec8
--- /dev/null
+++ b/src/components/jet/item/LargeHeroBreakoutItem.svelte
@@ -0,0 +1,268 @@
+
+
+
+
+
+ {#if video && $mediaQueries !== 'xsmall' && !canUseRTLArtwork}
+
+ {:else if artwork}
+
+ {/if}
+
+
+
+
+
+ {#if item.details?.badge}
+
+ {item.details.badge}
+
+ {/if}
+
+ {#if item.details.title}
+
+ {@html sanitizeHtml(item.details.title)}
+
+ {/if}
+
+ {#if item.details.description}
+
+ {@html sanitizeHtml(item.details.description)}
+
+ {/if}
+
+ {#if isSome(action) && isFlowAction(action)}
+
+ {action.title}
+
+
+
+
+ {/if}
+
+ {#if shouldShowCollectionIcons}
+
+ {#each collectionIcons.slice(0, 6) as collectionIcon}
+ -
+
+
+ {/each}
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/jet/item/LargeImageLockupItem.svelte b/src/components/jet/item/LargeImageLockupItem.svelte
new file mode 100644
index 0000000..1df51c2
--- /dev/null
+++ b/src/components/jet/item/LargeImageLockupItem.svelte
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+ {#if item.lockup}
+
+ {#if item.lockup.icon}
+
+ {/if}
+
+
+
+ {/if}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/item/LargeLockupItem.svelte b/src/components/jet/item/LargeLockupItem.svelte
new file mode 100644
index 0000000..93adc6e
--- /dev/null
+++ b/src/components/jet/item/LargeLockupItem.svelte
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+ {#if destination}
+
+
+ {$i18n.t('ASE.Web.AppStore.View')}
+
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/item/LargeStoryCardItem.svelte b/src/components/jet/item/LargeStoryCardItem.svelte
new file mode 100644
index 0000000..66079c2
--- /dev/null
+++ b/src/components/jet/item/LargeStoryCardItem.svelte
@@ -0,0 +1,38 @@
+
+
+
diff --git a/src/components/jet/item/LinkableTextItem.svelte b/src/components/jet/item/LinkableTextItem.svelte
new file mode 100644
index 0000000..a5a3e74
--- /dev/null
+++ b/src/components/jet/item/LinkableTextItem.svelte
@@ -0,0 +1,88 @@
+
+
+{#each fragments as fragment}
+ {#if fragment.action}
+
+ {fragment.text}
+
+ {:else if fragment.isTrailingPunctuation}
+ {fragment.text}
+ {:else}
+ {@html sanitizeHtml(fragment.text)}
+ {/if}
+{/each}
+
+
diff --git a/src/components/jet/item/MediumImageLockupItem.svelte b/src/components/jet/item/MediumImageLockupItem.svelte
new file mode 100644
index 0000000..8b93453
--- /dev/null
+++ b/src/components/jet/item/MediumImageLockupItem.svelte
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+ {#if item.lockup}
+
+ {#if item.lockup.icon}
+
+ {/if}
+
+
+
+ {/if}
+
+
+
+
+
+
+
diff --git a/src/components/jet/item/MediumLockupItem.svelte b/src/components/jet/item/MediumLockupItem.svelte
new file mode 100644
index 0000000..be70acb
--- /dev/null
+++ b/src/components/jet/item/MediumLockupItem.svelte
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/item/MediumStoryCard/EditorialStoryCardItem.svelte b/src/components/jet/item/MediumStoryCard/EditorialStoryCardItem.svelte
new file mode 100644
index 0000000..7b7807c
--- /dev/null
+++ b/src/components/jet/item/MediumStoryCard/EditorialStoryCardItem.svelte
@@ -0,0 +1,304 @@
+
+
+
+
+ {#if item.artwork}
+
+ {/if}
+
+
+ {#if item.badge}
+
{item.badge.title}
+ {/if}
+
+ {#if item.title}
+
{@html sanitizeHtml(item.title)}
+ {/if}
+
+ {#if item.description}
+
{@html sanitizeHtml(item.description)}
+ {/if}
+
+
+ {#if collectionIcons && !item.editorialDisplayOptions.suppressLockup}
+
+
+ {#each collectionIcons as collectionIcon}
+ -
+
+
+ {/each}
+
+
+ {#if !hasMultipleCollectionIcons}
+
+
+ {#if destination}
+
+
+ {$i18n.t('ASE.Web.AppStore.View')}
+
+
+ {/if}
+ {/if}
+
+ {/if}
+
+
+
+
+
+
diff --git a/src/components/jet/item/MediumStoryCardItem.svelte b/src/components/jet/item/MediumStoryCardItem.svelte
new file mode 100644
index 0000000..80ead7d
--- /dev/null
+++ b/src/components/jet/item/MediumStoryCardItem.svelte
@@ -0,0 +1,27 @@
+
+
+
+
+{#if isEditorialStoryCard(item)}
+
+{:else if isSmallStoryCardWithMediaItem(item)}
+
+{/if}
diff --git a/src/components/jet/item/MixedMediaLockupItem.svelte b/src/components/jet/item/MixedMediaLockupItem.svelte
new file mode 100644
index 0000000..4874419
--- /dev/null
+++ b/src/components/jet/item/MixedMediaLockupItem.svelte
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/src/components/jet/item/ParagraphShelfItem.svelte b/src/components/jet/item/ParagraphShelfItem.svelte
new file mode 100644
index 0000000..9adf09c
--- /dev/null
+++ b/src/components/jet/item/ParagraphShelfItem.svelte
@@ -0,0 +1,21 @@
+
+
+
+ {@html he.decode(item.text)}
+
+
+
diff --git a/src/components/jet/item/PosterLockupItem.svelte b/src/components/jet/item/PosterLockupItem.svelte
new file mode 100644
index 0000000..08b34e2
--- /dev/null
+++ b/src/components/jet/item/PosterLockupItem.svelte
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+ {#if item.epicHeading}
+
+ {/if}
+
+ {#if item.posterVideo}
+
+
+
+ {:else if item.posterArtwork}
+
+ {/if}
+
+
+
+
+
+
+ {item.footerText}
+ {#if item.tertiaryTitle}
+ | {item.tertiaryTitle}
+ {/if}
+
+
+
+
+
+
+
diff --git a/src/components/jet/item/PrivacyHeaderItem.svelte b/src/components/jet/item/PrivacyHeaderItem.svelte
new file mode 100644
index 0000000..f9611a6
--- /dev/null
+++ b/src/components/jet/item/PrivacyHeaderItem.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+ {#if item.supplementaryItems.length}
+
+ {#each item.supplementaryItems as supItem}
+
+
+
+ {/each}
+
+ {/if}
+
+
+
diff --git a/src/components/jet/item/PrivacyTypeItem.svelte b/src/components/jet/item/PrivacyTypeItem.svelte
new file mode 100644
index 0000000..5e63966
--- /dev/null
+++ b/src/components/jet/item/PrivacyTypeItem.svelte
@@ -0,0 +1,193 @@
+
+
+
+ {#if item.artwork && isSystemImageArtwork(item.artwork)}
+
+
+
+ {/if}
+
+ {item.title}
+ {item.detail}
+
+ 1 && !isDetailView}>
+ {#each item.categories as category}
+ -
+ {#if isSystemImageArtwork(category.artwork)}
+
+
+
+ {/if}
+ {category.title}
+
+ {/each}
+
+
+ {#each item.purposes as purpose}
+
+ {purpose.title}
+
+ {#each purpose.categories as category}
+
+ {#if isSystemImageArtwork(category.artwork)}
+
+
+
+ {/if}
+
+ {category.title}
+
+
+ {#each category.dataTypes as type}
+ - {type}
+ {/each}
+
+
+ {/each}
+
+ {/each}
+
+
+
diff --git a/src/components/jet/item/ProductBadgeItem.svelte b/src/components/jet/item/ProductBadgeItem.svelte
new file mode 100644
index 0000000..fa32e6f
--- /dev/null
+++ b/src/components/jet/item/ProductBadgeItem.svelte
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+ {item.heading}
+
+
+
+
+ {#if isContentRatingBadge(item)}
+
+ {:else if isParagraph}
+
{content.paragraphText}
+ {:else if isRating && !content.rating}
+
+ {content.ratingFormatted}
+
+ {:else if isEditorsChoice}
+
+
+
+
+
+ {item.accessibilityTitle}
+
+
+
+
+
+ {:else if artwork && hasImageArtwork}
+
+ {:else if artwork && isSystemImageArtwork(artwork)}
+
+
+
+ {:else if isController}
+
+
+
+ {/if}
+
+ {#if isRating && content.rating}
+
+ {content.ratingFormatted}
+
+
+ {:else}
+
{item.caption}
+ {/if}
+
+
+
+
+
+
diff --git a/src/components/jet/item/ProductCapabilityItem.svelte b/src/components/jet/item/ProductCapabilityItem.svelte
new file mode 100644
index 0000000..21e97cd
--- /dev/null
+++ b/src/components/jet/item/ProductCapabilityItem.svelte
@@ -0,0 +1,84 @@
+
+
+
+
+

+
+
+
+
+
+
diff --git a/src/components/jet/item/ProductMedia/ProductMediaMacItem.svelte b/src/components/jet/item/ProductMedia/ProductMediaMacItem.svelte
new file mode 100644
index 0000000..516ed32
--- /dev/null
+++ b/src/components/jet/item/ProductMedia/ProductMediaMacItem.svelte
@@ -0,0 +1,31 @@
+
+
+{#if item.screenshot}
+
+
+
+{:else if item.video}
+
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/ProductMedia/ProductMediaPadItem.svelte b/src/components/jet/item/ProductMedia/ProductMediaPadItem.svelte
new file mode 100644
index 0000000..6b9886c
--- /dev/null
+++ b/src/components/jet/item/ProductMedia/ProductMediaPadItem.svelte
@@ -0,0 +1,89 @@
+
+
+{#if item.screenshot || item.video}
+
+
+ {#if item.screenshot}
+
+ {:else if item.video}
+
+ {/if}
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/ProductMedia/ProductMediaPhoneItem.svelte b/src/components/jet/item/ProductMedia/ProductMediaPhoneItem.svelte
new file mode 100644
index 0000000..255b663
--- /dev/null
+++ b/src/components/jet/item/ProductMedia/ProductMediaPhoneItem.svelte
@@ -0,0 +1,142 @@
+
+
+{#if item.screenshot || item.video}
+
+
+ {#if item.screenshot}
+
+ {:else if item.video}
+
+ {/if}
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/ProductMedia/ProductMediaTVItem.svelte b/src/components/jet/item/ProductMedia/ProductMediaTVItem.svelte
new file mode 100644
index 0000000..7f7fd7a
--- /dev/null
+++ b/src/components/jet/item/ProductMedia/ProductMediaTVItem.svelte
@@ -0,0 +1,34 @@
+
+
+{#if item.screenshot || item.video}
+
+
+ {#if item.screenshot}
+
+ {:else if item.video}
+
+ {/if}
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/ProductMedia/ProductMediaVisionItem.svelte b/src/components/jet/item/ProductMedia/ProductMediaVisionItem.svelte
new file mode 100644
index 0000000..e893dd6
--- /dev/null
+++ b/src/components/jet/item/ProductMedia/ProductMediaVisionItem.svelte
@@ -0,0 +1,38 @@
+
+
+{#if item.screenshot || item.video}
+
+
+ {#if item.screenshot}
+
+ {:else if item.video}
+
+ {/if}
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/ProductMedia/ProductMediaWatchItem.svelte b/src/components/jet/item/ProductMedia/ProductMediaWatchItem.svelte
new file mode 100644
index 0000000..0a4b50e
--- /dev/null
+++ b/src/components/jet/item/ProductMedia/ProductMediaWatchItem.svelte
@@ -0,0 +1,50 @@
+
+
+{#if item.screenshot}
+
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/ProductPageLinkItem.svelte b/src/components/jet/item/ProductPageLinkItem.svelte
new file mode 100644
index 0000000..be4bb16
--- /dev/null
+++ b/src/components/jet/item/ProductPageLinkItem.svelte
@@ -0,0 +1,68 @@
+
+
+{#if canRenderContainer}
+
+ {#if isFlowAction(clickAction)}
+
+ {item.text}
+
+ {:else if isExternalUrlAction(clickAction)}
+
+ {item.text}
+
+ {/if}
+
+{/if}
+
+
diff --git a/src/components/jet/item/ProductRatingsItem.svelte b/src/components/jet/item/ProductRatingsItem.svelte
new file mode 100644
index 0000000..0345993
--- /dev/null
+++ b/src/components/jet/item/ProductRatingsItem.svelte
@@ -0,0 +1,37 @@
+
+
+
+ {#if item.totalNumberOfRatings === 0}
+ {item.status}
+ {:else}
+
+ {/if}
+
+
+
diff --git a/src/components/jet/item/ProductReview/EditorsChoiceReviewItem.svelte b/src/components/jet/item/ProductReview/EditorsChoiceReviewItem.svelte
new file mode 100644
index 0000000..2bb6a06
--- /dev/null
+++ b/src/components/jet/item/ProductReview/EditorsChoiceReviewItem.svelte
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+ {#if isDetailView}
+ {item.review.notes}
+ {:else}
+
+ {/if}
+
+
+{#if !isDetailView}
+
+
+
+
+
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/ProductReview/UserReviewItem.svelte b/src/components/jet/item/ProductReview/UserReviewItem.svelte
new file mode 100644
index 0000000..472dd1f
--- /dev/null
+++ b/src/components/jet/item/ProductReview/UserReviewItem.svelte
@@ -0,0 +1,25 @@
+
+
+
+
+
diff --git a/src/components/jet/item/ReviewItem.svelte b/src/components/jet/item/ReviewItem.svelte
new file mode 100644
index 0000000..7f406c8
--- /dev/null
+++ b/src/components/jet/item/ReviewItem.svelte
@@ -0,0 +1,237 @@
+
+
+
+
+
+ {#if isDetailView}
+
+ {@html sanitizeHtml(reviewContents, {
+ allowedTags: [''],
+ keepChildrenWhenRemovingParent: true,
+ })}
+
+ {#if response}
+
+
+
+ {@html sanitizeHtml(responseContents, {
+ allowedTags: [''],
+ keepChildrenWhenRemovingParent: true,
+ })}
+
+ {/if}
+
+ {:else}
+
+
+
+ {#if item.response}
+
+
+ {$i18n.t('ASE.Web.AppStore.Review.DeveloperResponse')}
+
+
+
+ {/if}
+
+ {/if}
+
+
+{#if !isDetailView}
+
+
+
+
+
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/SearchLinkItem.svelte b/src/components/jet/item/SearchLinkItem.svelte
new file mode 100644
index 0000000..cd60512
--- /dev/null
+++ b/src/components/jet/item/SearchLinkItem.svelte
@@ -0,0 +1,47 @@
+
+
+{#if isFlowAction(item.clickAction)}
+
+
+
+ {item.title}
+
+
+{/if}
+
+
diff --git a/src/components/jet/item/SearchResult/AppSearchResultItem.svelte b/src/components/jet/item/SearchResult/AppSearchResultItem.svelte
new file mode 100644
index 0000000..c36e5fc
--- /dev/null
+++ b/src/components/jet/item/SearchResult/AppSearchResultItem.svelte
@@ -0,0 +1,392 @@
+
+
+
+
+
+
+
+ {#if item.lockup.icon}
+
+ {/if}
+
+
+
+
+
+ {$i18n.t('ASE.Web.AppStore.View')}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/item/SmallBreakoutItem.svelte b/src/components/jet/item/SmallBreakoutItem.svelte
new file mode 100644
index 0000000..311fbef
--- /dev/null
+++ b/src/components/jet/item/SmallBreakoutItem.svelte
@@ -0,0 +1,187 @@
+
+
+
+
+
+ {#if iconArtwork}
+
+ {/if}
+
+
+ {#if item.details?.badge}
+
+ {item.details.badge}
+
+ {/if}
+
+ {#if item.details.title}
+
+ {item.details.title}
+
+ {/if}
+
+ {#if item.details.description}
+
+ {item.details.description}
+
+ {/if}
+
+ {#if isSome(action) && isFlowAction(action)}
+
+ {action.title}
+
+
+
+
+ {/if}
+
+
+
+
+
+
diff --git a/src/components/jet/item/SmallLockupItem.svelte b/src/components/jet/item/SmallLockupItem.svelte
new file mode 100644
index 0000000..b235652
--- /dev/null
+++ b/src/components/jet/item/SmallLockupItem.svelte
@@ -0,0 +1,110 @@
+
+
+
+
+ {#if item.icon}
+
+ {/if}
+
+
+
+
+ {#if shouldShowLaunchNativeButton && $$slots['launch-native-button']}
+
+ {:else}
+
+ {$i18n.t('ASE.Web.AppStore.View')}
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/jet/item/SmallLockupWithOrdinalItem.svelte b/src/components/jet/item/SmallLockupWithOrdinalItem.svelte
new file mode 100644
index 0000000..9fb796c
--- /dev/null
+++ b/src/components/jet/item/SmallLockupWithOrdinalItem.svelte
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+ {#if item.ordinal}
+
+ {item.ordinal}
+
+ {/if}
+
+ {#if item.icon}
+
+ {/if}
+
+
+
+
+ {$i18n.t('ASE.Web.AppStore.View')}
+
+
+
+
+
+
diff --git a/src/components/jet/item/SmallStoryCardMediaBrandedSingleApp.svelte b/src/components/jet/item/SmallStoryCardMediaBrandedSingleApp.svelte
new file mode 100644
index 0000000..ce7784b
--- /dev/null
+++ b/src/components/jet/item/SmallStoryCardMediaBrandedSingleApp.svelte
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
{item.heading}
+
{item.title}
+
{item.inlineDescription}
+
+
+
+
+
diff --git a/src/components/jet/item/SmallStoryCardWithArtworkItem.svelte b/src/components/jet/item/SmallStoryCardWithArtworkItem.svelte
new file mode 100644
index 0000000..bcd7333
--- /dev/null
+++ b/src/components/jet/item/SmallStoryCardWithArtworkItem.svelte
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {#if item.badge?.title}
+
{item.badge.title}
+ {/if}
+
+ {#if item.title}
+ {@html sanitizeHtml(item.title)}
+ {/if}
+
+
+
+
+
+
diff --git a/src/components/jet/item/SmallStoryCardWithMediaAppIcon.svelte b/src/components/jet/item/SmallStoryCardWithMediaAppIcon.svelte
new file mode 100644
index 0000000..5b20e1c
--- /dev/null
+++ b/src/components/jet/item/SmallStoryCardWithMediaAppIcon.svelte
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+ {#if artwork}
+
+ {:else}
+
+ {/if}
+
+
+
+
+
{item.heading}
+ {item.title}
+
+
+
+
diff --git a/src/components/jet/item/SmallStoryCardWithMediaItem.svelte b/src/components/jet/item/SmallStoryCardWithMediaItem.svelte
new file mode 100644
index 0000000..4901744
--- /dev/null
+++ b/src/components/jet/item/SmallStoryCardWithMediaItem.svelte
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+ {#if artwork}
+
+ {/if}
+
+
+
+
{item.heading}
+
+ {item.title}
+
+
+ {#if item.inlineDescription}
+
+ {item.inlineDescription}
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/jet/item/SmallStoryCardWithMediaRiver.svelte b/src/components/jet/item/SmallStoryCardWithMediaRiver.svelte
new file mode 100644
index 0000000..038f504
--- /dev/null
+++ b/src/components/jet/item/SmallStoryCardWithMediaRiver.svelte
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+ {#if eyebrow}
+
{eyebrow}
+ {/if}
+
+ {#if title}
+ {title}
+ {/if}
+
+
+
+
diff --git a/src/components/jet/item/TitledParagraphItem.svelte b/src/components/jet/item/TitledParagraphItem.svelte
new file mode 100644
index 0000000..ad8e4bc
--- /dev/null
+++ b/src/components/jet/item/TitledParagraphItem.svelte
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+ {#if item.text}
+ {#if !isTruncated || isDetailView}
+ {item.text}
+ {:else}
+
+ (isTruncated = detail.truncated)}
+ >
+ {@html sanitizeHtml(item.text)}
+
+
+ {#if isTruncated}
+
+ {/if}
+ {/if}
+ {/if}
+
+
+
+
{item.primarySubtitle}
+
+
+
+
+
+
diff --git a/src/components/jet/item/TrailersLockupItem.svelte b/src/components/jet/item/TrailersLockupItem.svelte
new file mode 100644
index 0000000..6b2ee42
--- /dev/null
+++ b/src/components/jet/item/TrailersLockupItem.svelte
@@ -0,0 +1,51 @@
+
+
+
+ {#if video}
+
+
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/jet/marker-shelf/ProductTopLockup.svelte b/src/components/jet/marker-shelf/ProductTopLockup.svelte
new file mode 100644
index 0000000..e56e5b0
--- /dev/null
+++ b/src/components/jet/marker-shelf/ProductTopLockup.svelte
@@ -0,0 +1,463 @@
+
+
+
+
+
+
+
+
+
+
+ {#if lockup.icon}
+
+ {/if}
+
+
+ {#if supportsArcade}
+
+
+
+ {:else if lockup.editorialTagline}
+ {lockup.editorialTagline}
+ {/if}
+
+
+ {lockup.title}
+
+
+
+ {lockup.subtitle}
+
+
+ {#if exclusivityText}
+
+ {$i18n.t(exclusivityText)}
+
+ {/if}
+
+ {#if attributes.length > 0}
+
+ {attributes}
+
+ {/if}
+
+ {#if page.canonicalURL && (shouldShowLaunchNativeButton || shouldShowShareButton)}
+
+ {#if shouldShowLaunchNativeButton}
+
+
+
+ {/if}
+
+ {#if shouldShowShareButton}
+
+
+ {/if}
+
+ {/if}
+
+
+
+
+
+{#if banner}
+
+
+
+{/if}
+
+{#if supportsArcade}
+
+
+
+{/if}
+
+
diff --git a/src/components/jet/shelf/AccessibilityDeveloperLinkShelf.svelte b/src/components/jet/shelf/AccessibilityDeveloperLinkShelf.svelte
new file mode 100644
index 0000000..c1e7b2e
--- /dev/null
+++ b/src/components/jet/shelf/AccessibilityDeveloperLinkShelf.svelte
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/AccessibilityFeaturesShelf.svelte b/src/components/jet/shelf/AccessibilityFeaturesShelf.svelte
new file mode 100644
index 0000000..cb2fed8
--- /dev/null
+++ b/src/components/jet/shelf/AccessibilityFeaturesShelf.svelte
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/AccessibilityHeaderShelf.svelte b/src/components/jet/shelf/AccessibilityHeaderShelf.svelte
new file mode 100644
index 0000000..990c507
--- /dev/null
+++ b/src/components/jet/shelf/AccessibilityHeaderShelf.svelte
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+ {#if shelf.title}
+ {#if destination}
+
+ {:else}
+
+ {/if}
+ {/if}
+
+ {#if pageData}
+
+
+
+
+ {#each pageData.shelves as shelf}
+
+ {#if isAccessibilityParagraphShelf(shelf)}
+ {#each shelf.items as item}
+
+ {/each}
+ {/if}
+
+ {#if isAccessibilityFeaturesShelf(shelf)}
+ {#each shelf.items as item}
+
+ {/each}
+ {/if}
+
+ {/each}
+
+
+
+
+ {/if}
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/ActionShelf.svelte b/src/components/jet/shelf/ActionShelf.svelte
new file mode 100644
index 0000000..847438f
--- /dev/null
+++ b/src/components/jet/shelf/ActionShelf.svelte
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+ {@const action = item}
+ {@const artwork = item.artwork}
+ {@const title = item.title}
+
+
+
+ {#if artwork}
+
+ {/if}
+ {title}
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/AnnotationShelf.svelte b/src/components/jet/shelf/AnnotationShelf.svelte
new file mode 100644
index 0000000..e11de72
--- /dev/null
+++ b/src/components/jet/shelf/AnnotationShelf.svelte
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+ - {item.title}
+
+ {#if item.summary}
+
+
+ {item.summary}
+
+
+
+
+ {:else}
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/jet/shelf/AppEventDetailShelf.svelte b/src/components/jet/shelf/AppEventDetailShelf.svelte
new file mode 100644
index 0000000..2ae84eb
--- /dev/null
+++ b/src/components/jet/shelf/AppEventDetailShelf.svelte
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+ {#if video}
+
+
+
+ {:else if artwork}
+
+ {/if}
+
+ {#if isXSmallViewport}
+
+
+
+ {:else}
+
+ {/if}
+
+
+
+
+
+
{appEvent.kind}
+
{appEvent.title}
+
+ {appEvent.detail}
+
+ {#if requirements}
+
{requirements}
+ {/if}
+
+
+ {#if lockup}
+
+
+
+ {#if urlToLaunchNatively}
+
+ {/if}
+
+
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/jet/shelf/AppPromotionShelf.svelte b/src/components/jet/shelf/AppPromotionShelf.svelte
new file mode 100644
index 0000000..48590cb
--- /dev/null
+++ b/src/components/jet/shelf/AppPromotionShelf.svelte
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/AppShowcaseShelf.svelte b/src/components/jet/shelf/AppShowcaseShelf.svelte
new file mode 100644
index 0000000..095acf2
--- /dev/null
+++ b/src/components/jet/shelf/AppShowcaseShelf.svelte
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/AppTrailerLockupShelf.svelte b/src/components/jet/shelf/AppTrailerLockupShelf.svelte
new file mode 100644
index 0000000..f516074
--- /dev/null
+++ b/src/components/jet/shelf/AppTrailerLockupShelf.svelte
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+ {#if isMixedMediaLockup(item)}
+
+ {:else}
+
+ {/if}
+
+
diff --git a/src/components/jet/shelf/ArcadeFooterShelf.svelte b/src/components/jet/shelf/ArcadeFooterShelf.svelte
new file mode 100644
index 0000000..dc46740
--- /dev/null
+++ b/src/components/jet/shelf/ArcadeFooterShelf.svelte
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/BannerShelf.svelte b/src/components/jet/shelf/BannerShelf.svelte
new file mode 100644
index 0000000..84289c9
--- /dev/null
+++ b/src/components/jet/shelf/BannerShelf.svelte
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ {#each shelf.items as item}
+
+ {/each}
+
+
+
+
diff --git a/src/components/jet/shelf/BrickShelf.svelte b/src/components/jet/shelf/BrickShelf.svelte
new file mode 100644
index 0000000..4bd55e5
--- /dev/null
+++ b/src/components/jet/shelf/BrickShelf.svelte
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/CategoryBrickShelf.svelte b/src/components/jet/shelf/CategoryBrickShelf.svelte
new file mode 100644
index 0000000..22ca86b
--- /dev/null
+++ b/src/components/jet/shelf/CategoryBrickShelf.svelte
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/EditorialCardShelf.svelte b/src/components/jet/shelf/EditorialCardShelf.svelte
new file mode 100644
index 0000000..efbd71d
--- /dev/null
+++ b/src/components/jet/shelf/EditorialCardShelf.svelte
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/EditorialLinkShelf.svelte b/src/components/jet/shelf/EditorialLinkShelf.svelte
new file mode 100644
index 0000000..0946462
--- /dev/null
+++ b/src/components/jet/shelf/EditorialLinkShelf.svelte
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+ {descriptionText}
+ {summaryText}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/FallbackShelf.svelte b/src/components/jet/shelf/FallbackShelf.svelte
new file mode 100644
index 0000000..c7e4200
--- /dev/null
+++ b/src/components/jet/shelf/FallbackShelf.svelte
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ {isPlaceholder
+ ? `🔄 Placeholder for ${shelf.placeholderContentType}`
+ : `🚧 ${shelf.contentType}`}
+
+
+
+
+
diff --git a/src/components/jet/shelf/FramedArtworkShelf.svelte b/src/components/jet/shelf/FramedArtworkShelf.svelte
new file mode 100644
index 0000000..16f7c48
--- /dev/null
+++ b/src/components/jet/shelf/FramedArtworkShelf.svelte
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+ {#if caption}
+
+ {@html sanitizeHtml(caption)}
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/shelf/FramedVideoShelf.svelte b/src/components/jet/shelf/FramedVideoShelf.svelte
new file mode 100644
index 0000000..a685d39
--- /dev/null
+++ b/src/components/jet/shelf/FramedVideoShelf.svelte
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+ {#if caption}
+
+ {@html sanitizeHtml(caption)}
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/shelf/HeroCarouselShelf.svelte b/src/components/jet/shelf/HeroCarouselShelf.svelte
new file mode 100644
index 0000000..31a0287
--- /dev/null
+++ b/src/components/jet/shelf/HeroCarouselShelf.svelte
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/HorizontalRuleShelf.svelte b/src/components/jet/shelf/HorizontalRuleShelf.svelte
new file mode 100644
index 0000000..3313ff2
--- /dev/null
+++ b/src/components/jet/shelf/HorizontalRuleShelf.svelte
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/HorizontalShelf.svelte b/src/components/jet/shelf/HorizontalShelf.svelte
new file mode 100644
index 0000000..1addb31
--- /dev/null
+++ b/src/components/jet/shelf/HorizontalShelf.svelte
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/InAppPurchaseLockupShelf.svelte b/src/components/jet/shelf/InAppPurchaseLockupShelf.svelte
new file mode 100644
index 0000000..bf2e75e
--- /dev/null
+++ b/src/components/jet/shelf/InAppPurchaseLockupShelf.svelte
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/LargeBrickShelf.svelte b/src/components/jet/shelf/LargeBrickShelf.svelte
new file mode 100644
index 0000000..eea1044
--- /dev/null
+++ b/src/components/jet/shelf/LargeBrickShelf.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/LargeHeroBreakoutShelf.svelte b/src/components/jet/shelf/LargeHeroBreakoutShelf.svelte
new file mode 100644
index 0000000..a0dfe9c
--- /dev/null
+++ b/src/components/jet/shelf/LargeHeroBreakoutShelf.svelte
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/LargeImageLockupShelf.svelte b/src/components/jet/shelf/LargeImageLockupShelf.svelte
new file mode 100644
index 0000000..fd192fb
--- /dev/null
+++ b/src/components/jet/shelf/LargeImageLockupShelf.svelte
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/LargeLockupShelf.svelte b/src/components/jet/shelf/LargeLockupShelf.svelte
new file mode 100644
index 0000000..dedd1fe
--- /dev/null
+++ b/src/components/jet/shelf/LargeLockupShelf.svelte
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/LargeStoryCardShelf.svelte b/src/components/jet/shelf/LargeStoryCardShelf.svelte
new file mode 100644
index 0000000..c1a1e57
--- /dev/null
+++ b/src/components/jet/shelf/LargeStoryCardShelf.svelte
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/LinkableTextShelf.svelte b/src/components/jet/shelf/LinkableTextShelf.svelte
new file mode 100644
index 0000000..dcfde36
--- /dev/null
+++ b/src/components/jet/shelf/LinkableTextShelf.svelte
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/MarkerShelf.svelte b/src/components/jet/shelf/MarkerShelf.svelte
new file mode 100644
index 0000000..c719235
--- /dev/null
+++ b/src/components/jet/shelf/MarkerShelf.svelte
@@ -0,0 +1,36 @@
+
+
+
+
+{#if shelf.marker === 'productTopLockup'}
+
+{/if}
diff --git a/src/components/jet/shelf/MediumImageLockupShelf.svelte b/src/components/jet/shelf/MediumImageLockupShelf.svelte
new file mode 100644
index 0000000..f7b1316
--- /dev/null
+++ b/src/components/jet/shelf/MediumImageLockupShelf.svelte
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/MediumLockupShelf.svelte b/src/components/jet/shelf/MediumLockupShelf.svelte
new file mode 100644
index 0000000..186acb2
--- /dev/null
+++ b/src/components/jet/shelf/MediumLockupShelf.svelte
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/MediumStoryCardShelf.svelte b/src/components/jet/shelf/MediumStoryCardShelf.svelte
new file mode 100644
index 0000000..35c3ec3
--- /dev/null
+++ b/src/components/jet/shelf/MediumStoryCardShelf.svelte
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/PageHeaderShelf.svelte b/src/components/jet/shelf/PageHeaderShelf.svelte
new file mode 100644
index 0000000..59c99b2
--- /dev/null
+++ b/src/components/jet/shelf/PageHeaderShelf.svelte
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/ParagraphShelf.svelte b/src/components/jet/shelf/ParagraphShelf.svelte
new file mode 100644
index 0000000..777338e
--- /dev/null
+++ b/src/components/jet/shelf/ParagraphShelf.svelte
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+ {#if shelf.title}
+
{shelf.title}
+ {/if}
+
+
+
+ {#each shelf.items as item}
+
+ {/each}
+
+
+
+
diff --git a/src/components/jet/shelf/PosterLockupShelf.svelte b/src/components/jet/shelf/PosterLockupShelf.svelte
new file mode 100644
index 0000000..101c1d6
--- /dev/null
+++ b/src/components/jet/shelf/PosterLockupShelf.svelte
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/PrivacyFooterShelf.svelte b/src/components/jet/shelf/PrivacyFooterShelf.svelte
new file mode 100644
index 0000000..dccade6
--- /dev/null
+++ b/src/components/jet/shelf/PrivacyFooterShelf.svelte
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/PrivacyHeaderShelf.svelte b/src/components/jet/shelf/PrivacyHeaderShelf.svelte
new file mode 100644
index 0000000..5ace666
--- /dev/null
+++ b/src/components/jet/shelf/PrivacyHeaderShelf.svelte
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+ {#if shelf.title}
+
+ {/if}
+
+ {#if pageData}
+
+
+
+
+ {#each pageData.shelves as shelf}
+ {#if isPrivacyHeaderShelf(shelf)}
+ {#each shelf.items as item}
+
+ {/each}
+ {/if}
+
+ {#if isPrivacyTypeShelf(shelf)}
+ {#each shelf.items as item}
+
+ {/each}
+ {/if}
+ {/each}
+
+
+
+
+ {/if}
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/PrivacyTypeShelf.svelte b/src/components/jet/shelf/PrivacyTypeShelf.svelte
new file mode 100644
index 0000000..3817251
--- /dev/null
+++ b/src/components/jet/shelf/PrivacyTypeShelf.svelte
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/ProductBadgeShelf.svelte b/src/components/jet/shelf/ProductBadgeShelf.svelte
new file mode 100644
index 0000000..cded0b7
--- /dev/null
+++ b/src/components/jet/shelf/ProductBadgeShelf.svelte
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/ProductCapabilityShelf.svelte b/src/components/jet/shelf/ProductCapabilityShelf.svelte
new file mode 100644
index 0000000..6a4307a
--- /dev/null
+++ b/src/components/jet/shelf/ProductCapabilityShelf.svelte
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/ProductDescriptionShelf.svelte b/src/components/jet/shelf/ProductDescriptionShelf.svelte
new file mode 100644
index 0000000..7cddcee
--- /dev/null
+++ b/src/components/jet/shelf/ProductDescriptionShelf.svelte
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+ {#if isOpen}
+ {@html sanitizeHtml(description)}
+ {:else}
+
+ {@html sanitizeHtml(description)}
+
+ {/if}
+
+ {#if !isOpen}
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/jet/shelf/ProductMediaShelf.svelte b/src/components/jet/shelf/ProductMediaShelf.svelte
new file mode 100644
index 0000000..f57fee7
--- /dev/null
+++ b/src/components/jet/shelf/ProductMediaShelf.svelte
@@ -0,0 +1,269 @@
+
+
+
+
+
+ {#if appPlatform === 'vision'}
+
+
+
+ {:else if appPlatform === 'phone' || appPlatform === 'messages'}
+
+
+
+ {:else if appPlatform === 'pad'}
+
+
+
+ {:else if appPlatform === 'mac'}
+
+
+
+ {:else if appPlatform === 'tv'}
+
+
+
+ {:else if appPlatform === 'watch'}
+
+
+
+ {:else}
+
+
+
+ {/if}
+
+ {#if appPlatform && shouldShowPlatform}
+
+ {/if}
+
+
+{#if shelf.expandedMedia && allPlatforms && allPlatforms.length > 1}
+
+{/if}
+
+{#if !isExpandedMedia}
+
+{/if}
+
+
diff --git a/src/components/jet/shelf/ProductPageLinkShelf.svelte b/src/components/jet/shelf/ProductPageLinkShelf.svelte
new file mode 100644
index 0000000..7b41e80
--- /dev/null
+++ b/src/components/jet/shelf/ProductPageLinkShelf.svelte
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+ {#each shelf.items as item}
+
+
+
+ {/each}
+
+
+
+
diff --git a/src/components/jet/shelf/ProductRatingsShelf.svelte b/src/components/jet/shelf/ProductRatingsShelf.svelte
new file mode 100644
index 0000000..8f09ab5
--- /dev/null
+++ b/src/components/jet/shelf/ProductRatingsShelf.svelte
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/ProductReviewShelf.svelte b/src/components/jet/shelf/ProductReviewShelf.svelte
new file mode 100644
index 0000000..6bc4ecb
--- /dev/null
+++ b/src/components/jet/shelf/ProductReviewShelf.svelte
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+ {#if isUserReviewItem(item)}
+
+ {:else if isEditorsChoiceReviewItem(item)}
+
+ {/if}
+
+
diff --git a/src/components/jet/shelf/QuoteShelf.svelte b/src/components/jet/shelf/QuoteShelf.svelte
new file mode 100644
index 0000000..3a14f4f
--- /dev/null
+++ b/src/components/jet/shelf/QuoteShelf.svelte
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+ {item.text}
+
+
{item.credit}
+
+
+
+
+
diff --git a/src/components/jet/shelf/ReviewsContainerShelf.svelte b/src/components/jet/shelf/ReviewsContainerShelf.svelte
new file mode 100644
index 0000000..a55fe40
--- /dev/null
+++ b/src/components/jet/shelf/ReviewsContainerShelf.svelte
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/ReviewsShelf.svelte b/src/components/jet/shelf/ReviewsShelf.svelte
new file mode 100644
index 0000000..8304444
--- /dev/null
+++ b/src/components/jet/shelf/ReviewsShelf.svelte
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/RibbonBarShelf.svelte b/src/components/jet/shelf/RibbonBarShelf.svelte
new file mode 100644
index 0000000..44a8ae9
--- /dev/null
+++ b/src/components/jet/shelf/RibbonBarShelf.svelte
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/SearchLinkShelf.svelte b/src/components/jet/shelf/SearchLinkShelf.svelte
new file mode 100644
index 0000000..6b29780
--- /dev/null
+++ b/src/components/jet/shelf/SearchLinkShelf.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/SearchResultShelf.svelte b/src/components/jet/shelf/SearchResultShelf.svelte
new file mode 100644
index 0000000..9c15d3e
--- /dev/null
+++ b/src/components/jet/shelf/SearchResultShelf.svelte
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/Shelf.svelte b/src/components/jet/shelf/Shelf.svelte
new file mode 100644
index 0000000..6cbb0f6
--- /dev/null
+++ b/src/components/jet/shelf/Shelf.svelte
@@ -0,0 +1,320 @@
+
+
+
+
+{#if isAccessibilityHeaderShelf(shelf)}
+
+{:else if isAccessibilityFeaturesShelf(shelf)}
+
+{:else if isAccessibilityDeveloperLinkShelf(shelf)}
+
+{:else if isActionShelf(shelf)}
+
+{:else if isAnnotationShelf(shelf)}
+
+{:else if isAppEventDetailShelf(shelf)}
+
+{:else if isAppPromotionShelf(shelf)}
+
+{:else if isAppShowcaseShelf(shelf)}
+
+{:else if isAppTrailerLockupShelf(shelf)}
+
+{:else if isArcadeFooterShelf(shelf)}
+
+{:else if isBannerShelf(shelf)}
+
+
+{:else if isBrickShelf(shelf)}
+
+{:else if isCategoryBrickShelf(shelf)}
+
+{:else if isEditorialCardShelf(shelf)}
+
+{:else if isEditorialLinkShelf(shelf)}
+
+{:else if isFramedArtworkShelf(shelf)}
+
+{:else if isFramedVideoShelf(shelf)}
+
+{:else if isHeroCarouselShelf(shelf)}
+
+{:else if isHorizontalRuleShelf(shelf)}
+
+{:else if isInAppPurchaseLockupShelf(shelf)}
+
+{:else if isLargeHeroBreakoutShelf(shelf)}
+
+{:else if isLargeBrickShelf(shelf)}
+
+{:else if isLargeImageLockupShelf(shelf)}
+
+{:else if isLargeLockupShelf(shelf)}
+
+{:else if isLargeStoryCardShelf(shelf)}
+
+{:else if isLinkableTextShelf(shelf)}
+
+{:else if isProductDescriptionShelf(shelf)}
+
+{:else if isMediumImageLockupShelf(shelf)}
+
+{:else if isMediumLockupShelf(shelf)}
+
+{:else if isMediumStoryCardShelf(shelf)}
+
+{:else if isPosterLockupShelf(shelf)}
+
+{:else if isProductBadgeShelf(shelf)}
+
+{:else if isPageHeaderShelf(shelf)}
+
+{:else if isParagraphShelf(shelf)}
+
+{:else if isPrivacyHeaderShelf(shelf)}
+
+{:else if isPrivacyFooterShelf(shelf)}
+
+{:else if isPrivacyTypeShelf(shelf)}
+
+{:else if isProductMediaShelf(shelf)}
+
+{:else if isProductRatingsShelf(shelf)}
+
+{:else if isProductReviewShelf(shelf)}
+
+{:else if isRibbonBarShelf(shelf)}
+
+{:else if isSearchLinkShelf(shelf)}
+
+{:else if isSearchResultShelf(shelf)}
+
+{:else if isSmallBreakoutShelf(shelf)}
+
+{:else if isSmallBrickShelf(shelf)}
+
+{:else if isSmallStoryCardShelf(shelf)}
+
+{:else if isSmallLockupShelf(shelf)}
+
+{:else if isProductCapabilityShelf(shelf)}
+
+{:else if isProductPageLinkShelf(shelf)}
+
+{:else if isQuoteShelf(shelf)}
+
+{:else if isReviewsContainerShelf(shelf)}
+
+{:else if isReviewsShelf(shelf)}
+
+{:else if isTodayCardShelf(shelf)}
+
+{:else if isTitledParagraphShelf(shelf)}
+
+{:else if isUberShelf(shelf)}
+
+{:else if isMarkerShelf(shelf)}
+
+{:else if isFallbackShelf(shelf)}
+
+{/if}
diff --git a/src/components/jet/shelf/SmallBreakoutShelf.svelte b/src/components/jet/shelf/SmallBreakoutShelf.svelte
new file mode 100644
index 0000000..095cf7f
--- /dev/null
+++ b/src/components/jet/shelf/SmallBreakoutShelf.svelte
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/SmallBrickShelf.svelte b/src/components/jet/shelf/SmallBrickShelf.svelte
new file mode 100644
index 0000000..34426cf
--- /dev/null
+++ b/src/components/jet/shelf/SmallBrickShelf.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/shelf/SmallLockupShelf.svelte b/src/components/jet/shelf/SmallLockupShelf.svelte
new file mode 100644
index 0000000..e286671
--- /dev/null
+++ b/src/components/jet/shelf/SmallLockupShelf.svelte
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ {#if isSmallLockupWithOrdinalItem(item)}
+
+ {:else}
+
+ {/if}
+
+
diff --git a/src/components/jet/shelf/SmallStoryCardShelf.svelte b/src/components/jet/shelf/SmallStoryCardShelf.svelte
new file mode 100644
index 0000000..c1a85ad
--- /dev/null
+++ b/src/components/jet/shelf/SmallStoryCardShelf.svelte
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+ {#if isSmallStoryCardWithMediaRiver(item)}
+
+ {:else if isSmallStoryCardWithMediaAppIcon(item)}
+
+ {:else if isSmallStoryCardMediaBrandedSingleApp(item)}
+
+ {:else if isSmallStoryCardWithMediaItem(item)}
+
+ {:else if isSmallStoryCardWithArtworkItem(item)}
+
+ {/if}
+
+
diff --git a/src/components/jet/shelf/TitledParagraphShelf.svelte b/src/components/jet/shelf/TitledParagraphShelf.svelte
new file mode 100644
index 0000000..41c1d74
--- /dev/null
+++ b/src/components/jet/shelf/TitledParagraphShelf.svelte
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+ {#if shelf.title}
+
+ {/if}
+
+ {#if pageData}
+
+
+
+
+ {#each pageData.shelves as shelf}
+ {#each shelf.items || [] as item}
+ {#if isTitledParagraphItem(item)}
+ -
+
+
+ {/if}
+ {/each}
+ {/each}
+
+
+
+
+ {/if}
+
+
+ {#each shelf.items as item}
+
+ {/each}
+
+
+
diff --git a/src/components/jet/shelf/TodayCardShelf.svelte b/src/components/jet/shelf/TodayCardShelf.svelte
new file mode 100644
index 0000000..e872112
--- /dev/null
+++ b/src/components/jet/shelf/TodayCardShelf.svelte
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
= 2}
+ class:today-card-row__stretch-first-nowrap={shouldStretchFirstCardNoWrap &&
+ shelf.items.length >= 2}
+ class:today-card-row__stretch-last-wrap={!shouldStretchFirstCardWrap &&
+ shelf.items.length >= 2}
+ class:today-card-row__stretch-last-nowrap={!shouldStretchFirstCardNoWrap &&
+ shelf.items.length >= 2}
+ class:today-card-row__1-card={shelf.items.length == 1}
+ class:today-card-row__2-card={shelf.items.length == 2}
+ class:today-card-row__3-card={shelf.items.length == 3}
+ class:today-card-row__4-card={shelf.items.length >= 4}
+ >
+ {#each shelf.items.slice(0, 4) as card}
+
+
+
+ {/each}
+
+
+
+
+
diff --git a/src/components/jet/shelf/UberShelf.svelte b/src/components/jet/shelf/UberShelf.svelte
new file mode 100644
index 0000000..6cdf004
--- /dev/null
+++ b/src/components/jet/shelf/UberShelf.svelte
@@ -0,0 +1,40 @@
+
+
+
+
+{#if artwork}
+
+
+
+{/if}
+
+
diff --git a/src/components/jet/today-card/TodayCard.svelte b/src/components/jet/today-card/TodayCard.svelte
new file mode 100644
index 0000000..84d760f
--- /dev/null
+++ b/src/components/jet/today-card/TodayCard.svelte
@@ -0,0 +1,401 @@
+
+
+
+
+
+ {#if media && !useListStyle}
+
+ {/if}
+
+
+
+ {#if media && useListStyle}
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/today-card/TodayCardMedia.svelte b/src/components/jet/today-card/TodayCardMedia.svelte
new file mode 100644
index 0000000..99f444f
--- /dev/null
+++ b/src/components/jet/today-card/TodayCardMedia.svelte
@@ -0,0 +1,49 @@
+
+
+{#if isTodayCardMediaAppEvent(media)}
+
+{:else if isTodayCardMediAppIcon(media)}
+
+{:else if isTodayCardMediaBrandedSingleApp(media)}
+
+{:else if isTodayCardMediaList(media)}
+
+{:else if isTodayCardMediaWithArtwork(media)}
+
+{:else if isTodayCardMediaRiver(media)}
+
+{:else if isTodayCardMediaVideo(media)}
+
+{/if}
diff --git a/src/components/jet/today-card/TodayCardOverlay.svelte b/src/components/jet/today-card/TodayCardOverlay.svelte
new file mode 100644
index 0000000..4e3c405
--- /dev/null
+++ b/src/components/jet/today-card/TodayCardOverlay.svelte
@@ -0,0 +1,48 @@
+
+
+
+
+{#if isLockupOverlay(overlay)}
+
+
+
+{:else if isLockupListOverlay(overlay)}
+
+{/if}
+
+
diff --git a/src/components/jet/today-card/background-color-utils.ts b/src/components/jet/today-card/background-color-utils.ts
new file mode 100644
index 0000000..c2c0fe6
--- /dev/null
+++ b/src/components/jet/today-card/background-color-utils.ts
@@ -0,0 +1,54 @@
+import { type Optional, isSome } from '@jet/environment/types/optional';
+import type {
+ Color,
+ TodayCardMedia,
+ TodayCardMediaWithArtwork,
+} from '@jet-app/app-store/api/models';
+
+import { isTodayCardMediaBrandedSingleApp } from './media/TodayCardMediaBrandedSingleApp.svelte';
+import { isTodayCardMediaAppEvent } from './media/TodayCardMediaAppEvent.svelte';
+import { isTodayCardMediaWithArtwork } from './media/TodayCardMediaWithArtwork.svelte';
+
+const DEFAULT_COLOR: Color = {
+ type: 'named',
+ name: 'defaultBackground',
+};
+
+function getBackgroundFromMediaWithArtwork(
+ media: TodayCardMediaWithArtwork,
+): Optional {
+ return (
+ media.videos[0]?.preview.backgroundColor ??
+ media.artworks[0]?.backgroundColor
+ );
+}
+
+/**
+ * Onyx App Store alternative to the `bestBackgroundColor` method that exists on
+ * the {@linkcode TodayCardMedia} type
+ *
+ * This is necessary because the functions on those class instances are not
+ * carried over to the client when serializing the view-model, making them
+ * impossible to call in a consistent way from our codebase
+ */
+export function bestBackgroundColor(media: Optional): Color {
+ if (isSome(media)) {
+ if (isTodayCardMediaAppEvent(media)) {
+ return media.tintColor;
+ }
+
+ if (isTodayCardMediaBrandedSingleApp(media)) {
+ return (
+ getBackgroundFromMediaWithArtwork(media) ??
+ media.icon.backgroundColor ??
+ DEFAULT_COLOR
+ );
+ }
+
+ if (isTodayCardMediaWithArtwork(media)) {
+ return getBackgroundFromMediaWithArtwork(media) ?? DEFAULT_COLOR;
+ }
+ }
+
+ return DEFAULT_COLOR;
+}
diff --git a/src/components/jet/today-card/media/TodayCardMediaAppEvent.svelte b/src/components/jet/today-card/media/TodayCardMediaAppEvent.svelte
new file mode 100644
index 0000000..1faa933
--- /dev/null
+++ b/src/components/jet/today-card/media/TodayCardMediaAppEvent.svelte
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+ {#if media.videos.length > 0}
+
+ {:else if media.artworks.length > 0}
+
+ {/if}
+
+
+
+
diff --git a/src/components/jet/today-card/media/TodayCardMediaAppIcon.svelte b/src/components/jet/today-card/media/TodayCardMediaAppIcon.svelte
new file mode 100644
index 0000000..a6db985
--- /dev/null
+++ b/src/components/jet/today-card/media/TodayCardMediaAppIcon.svelte
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
diff --git a/src/components/jet/today-card/media/TodayCardMediaBrandedSingleApp.svelte b/src/components/jet/today-card/media/TodayCardMediaBrandedSingleApp.svelte
new file mode 100644
index 0000000..dfdaa0f
--- /dev/null
+++ b/src/components/jet/today-card/media/TodayCardMediaBrandedSingleApp.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+{#if media.videos.length > 0}
+
+{:else if media.artworks.length > 0}
+
+{/if}
diff --git a/src/components/jet/today-card/media/TodayCardMediaList.svelte b/src/components/jet/today-card/media/TodayCardMediaList.svelte
new file mode 100644
index 0000000..00f8688
--- /dev/null
+++ b/src/components/jet/today-card/media/TodayCardMediaList.svelte
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+ {#each media.lockups as item}
+ -
+
+
+ {/each}
+
+
+
+
diff --git a/src/components/jet/today-card/media/TodayCardMediaRiver.svelte b/src/components/jet/today-card/media/TodayCardMediaRiver.svelte
new file mode 100644
index 0000000..d3f9666
--- /dev/null
+++ b/src/components/jet/today-card/media/TodayCardMediaRiver.svelte
@@ -0,0 +1,78 @@
+
+
+
+
+
+ {#if icons.length}
+
+ {/if}
+
+
+
diff --git a/src/components/jet/today-card/media/TodayCardMediaVideo.svelte b/src/components/jet/today-card/media/TodayCardMediaVideo.svelte
new file mode 100644
index 0000000..f2524c6
--- /dev/null
+++ b/src/components/jet/today-card/media/TodayCardMediaVideo.svelte
@@ -0,0 +1,72 @@
+
+
+
+
+{#if videoToDisplay}
+
+
+
+{/if}
+
+
diff --git a/src/components/jet/today-card/media/TodayCardMediaWithArtwork.svelte b/src/components/jet/today-card/media/TodayCardMediaWithArtwork.svelte
new file mode 100644
index 0000000..e604708
--- /dev/null
+++ b/src/components/jet/today-card/media/TodayCardMediaWithArtwork.svelte
@@ -0,0 +1,100 @@
+
+
+
+
+{#if artworkProfile}
+
+{:else}
+
+{/if}
+
+
diff --git a/src/components/jet/today-card/overlay/TodayCardLockupListOverlay.svelte b/src/components/jet/today-card/overlay/TodayCardLockupListOverlay.svelte
new file mode 100644
index 0000000..1e7d297
--- /dev/null
+++ b/src/components/jet/today-card/overlay/TodayCardLockupListOverlay.svelte
@@ -0,0 +1,42 @@
+
+
+
+
+
+ {#each overlay.lockups as lockup}
+
+
+
+ {/each}
+
+
+
diff --git a/src/components/jet/web-navigation/CategoryTabItem.svelte b/src/components/jet/web-navigation/CategoryTabItem.svelte
new file mode 100644
index 0000000..61f2570
--- /dev/null
+++ b/src/components/jet/web-navigation/CategoryTabItem.svelte
@@ -0,0 +1,67 @@
+
+
+-
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jet/web-navigation/PlatformSelectorDropdown.svelte b/src/components/jet/web-navigation/PlatformSelectorDropdown.svelte
new file mode 100644
index 0000000..f0fe666
--- /dev/null
+++ b/src/components/jet/web-navigation/PlatformSelectorDropdown.svelte
@@ -0,0 +1,88 @@
+
+
+{#if activeSelector}
+
+{/if}
+
+
diff --git a/src/components/jet/web-navigation/PlatformSelectorItem.svelte b/src/components/jet/web-navigation/PlatformSelectorItem.svelte
new file mode 100644
index 0000000..9b72fda
--- /dev/null
+++ b/src/components/jet/web-navigation/PlatformSelectorItem.svelte
@@ -0,0 +1,97 @@
+
+
+
+
+ {#if isSome(artwork) && isSystemImageArtwork(artwork)}
+
+
+
+ {/if}
+
+
+ {action.title}
+
+
+ {#if action.destination && isSearchResultsPageIntent(action.destination)}
+
+
+
+ {/if}
+
+
+
+
diff --git a/src/components/navigation/Navigation.svelte b/src/components/navigation/Navigation.svelte
new file mode 100644
index 0000000..0114d4c
--- /dev/null
+++ b/src/components/navigation/Navigation.svelte
@@ -0,0 +1,423 @@
+
+
+
+
+
diff --git a/src/components/navigation/SearchInput.svelte b/src/components/navigation/SearchInput.svelte
new file mode 100644
index 0000000..a04fa4b
--- /dev/null
+++ b/src/components/navigation/SearchInput.svelte
@@ -0,0 +1,82 @@
+
+
+
+
+
+ $i18n.t(key)}
+ on:makeSearchQueryFromInput={dispatchSearchAction}
+ />
+
+
+
diff --git a/src/components/navigation/Skeleton.svelte b/src/components/navigation/Skeleton.svelte
new file mode 100644
index 0000000..508e523
--- /dev/null
+++ b/src/components/navigation/Skeleton.svelte
@@ -0,0 +1,85 @@
+
+
+
+
+
diff --git a/src/components/navigation/navigation-items.ts b/src/components/navigation/navigation-items.ts
new file mode 100644
index 0000000..8692765
--- /dev/null
+++ b/src/components/navigation/navigation-items.ts
@@ -0,0 +1,79 @@
+import {
+ isSome,
+ unwrapOptional as unwrap,
+} from '@jet/environment/types/optional';
+
+import type { NavigationItem } from '@amp/web-app-components/src/components/Navigation/types';
+import type { NavigationId } from '@amp/web-app-components/src/types';
+import type {
+ WebNavigation,
+ WebNavigationLink,
+} from '@jet-app/app-store/api/models/web-navigation';
+
+import {
+ isSystemImageArtwork,
+ getIconNameFromTemplate,
+} from '~/components/SystemImage.svelte';
+import { getIconComponentByName } from '../SFSymbol.svelte';
+import type { Artwork } from '@jet-app/app-store/api/models';
+import CategoryTabItem from '~/components/jet/web-navigation/CategoryTabItem.svelte';
+
+/**
+ * A {@linkcode NavigationItem} that includes the original {@linkcode WebNavigationLink}
+ * it was defined from, which is needed for the
+ */
+export interface NavigationItemWithTab extends NavigationItem {
+ tab: WebNavigationLink;
+ artwork?: Artwork;
+ isActive?: boolean;
+}
+
+export function navigationIdFromLink(link: WebNavigationLink): NavigationId {
+ const intent = unwrap(link.action.destination);
+
+ return {
+ type: intent.$kind,
+ // `intent.$kind` will be unique for each `Intent` used here as they are
+ // each a different `LandingPageIntent`
+ resourceId: link.action.pageUrl ?? intent.$kind,
+ };
+}
+
+/**
+ * Transform the "tabs" in the `WebNavigation` into a shape that works with our
+ * shared navigation side-bar components.
+ */
+export function makeNavLinks(
+ tabs: WebNavigationLink[],
+ { shouldShowSearchTab = false },
+): NavigationItemWithTab[] {
+ return tabs
+ .filter((tab) => {
+ const isSearchTab =
+ tab.action?.destination?.['$kind'].includes('search_Intent');
+
+ // Allows for filtering our the search tab, which we use when the sidebar is visible,
+ // since there is a search input in the sidebar
+ return isSearchTab ? shouldShowSearchTab : true;
+ })
+ .map((tab) => {
+ const { action, artwork: tabArtwork } = tab;
+ const { artwork } = action || {};
+ const hasSystemImageArtwork =
+ isSome(artwork) && isSystemImageArtwork(artwork);
+
+ return {
+ id: navigationIdFromLink(tab),
+ label: unwrap(tab.action.title),
+ url: action.pageUrl ?? undefined,
+ icon: hasSystemImageArtwork
+ ? getIconComponentByName(
+ getIconNameFromTemplate(artwork.template),
+ )
+ : undefined,
+ artwork: tabArtwork,
+ component: !hasSystemImageArtwork ? CategoryTabItem : undefined,
+ tab,
+ };
+ });
+}
diff --git a/src/components/pages/AppEventDetailPage.svelte b/src/components/pages/AppEventDetailPage.svelte
new file mode 100644
index 0000000..a2b798e
--- /dev/null
+++ b/src/components/pages/AppEventDetailPage.svelte
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+ {#each page.shelves as shelf}
+
+ {/each}
+
+
+
+
diff --git a/src/components/pages/ArticlePage.svelte b/src/components/pages/ArticlePage.svelte
new file mode 100644
index 0000000..32cacb0
--- /dev/null
+++ b/src/components/pages/ArticlePage.svelte
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+ {#if card}
+
+
+
+ {/if}
+
+
+ {#each page.shelves as shelf}
+ {#if !shelf.isHidden}
+
+ {/if}
+ {/each}
+
+ {#if page.footerLockup}
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/pages/ChartsHubPage.svelte b/src/components/pages/ChartsHubPage.svelte
new file mode 100644
index 0000000..a75cb64
--- /dev/null
+++ b/src/components/pages/ChartsHubPage.svelte
@@ -0,0 +1,11 @@
+
+
+{#each page.charts as chart}
+
+{/each}
diff --git a/src/components/pages/DefaultPage.svelte b/src/components/pages/DefaultPage.svelte
new file mode 100644
index 0000000..7905b07
--- /dev/null
+++ b/src/components/pages/DefaultPage.svelte
@@ -0,0 +1,173 @@
+
+
+
+
+
+ {#each aboveTitleShelves as shelf}
+
+
+
+ {/each}
+
+ {#if title && !prefersHiddenPageTitle && !isTitleDuplicatedInHero}
+
+ {title}
+
+ {/if}
+
+
+
+ {#each belowTitleShelves as shelf}
+ {#if !shelf.isHidden}
+
+
+
+ {/if}
+ {/each}
+
+
+
diff --git a/src/components/pages/ErrorPage.svelte b/src/components/pages/ErrorPage.svelte
new file mode 100644
index 0000000..5756d78
--- /dev/null
+++ b/src/components/pages/ErrorPage.svelte
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/ProductPage.svelte b/src/components/pages/ProductPage.svelte
new file mode 100644
index 0000000..30b0ad8
--- /dev/null
+++ b/src/components/pages/ProductPage.svelte
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+{#if supportsArcade}
+
+{/if}
diff --git a/src/components/pages/SearchLandingPage.svelte b/src/components/pages/SearchLandingPage.svelte
new file mode 100644
index 0000000..3594ece
--- /dev/null
+++ b/src/components/pages/SearchLandingPage.svelte
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/src/components/pages/SearchResultsPage.svelte b/src/components/pages/SearchResultsPage.svelte
new file mode 100644
index 0000000..c17b644
--- /dev/null
+++ b/src/components/pages/SearchResultsPage.svelte
@@ -0,0 +1,113 @@
+
+
+ 0 ? resultsShelf?.title : null,
+ }}
+>
+
+ {#if renderableItems.length === 0}
+
+
+ {$i18n.t('ASE.Web.AppStore.Search.NoResults.FirstLine')}
+
+
+ {$i18n.t('ASE.Web.AppStore.Search.NoResults.SecondLine', {
+ term: page.searchTermContext?.term,
+ })}
+
+
+ {/if}
+
+
+
+
diff --git a/src/components/pages/SeeAllPage.svelte b/src/components/pages/SeeAllPage.svelte
new file mode 100644
index 0000000..d401f32
--- /dev/null
+++ b/src/components/pages/SeeAllPage.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ {page.lockup.title}
+
+
+
+
+
+
diff --git a/src/components/pages/StaticMessagePage.svelte b/src/components/pages/StaticMessagePage.svelte
new file mode 100644
index 0000000..45c1a36
--- /dev/null
+++ b/src/components/pages/StaticMessagePage.svelte
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+ {#if page.titleLocKey}
+
{$i18n.t(page.titleLocKey)}
+ {/if}
+
+
+ {#if page.contentType === 'win-back' || page.contentType === 'contingent-price'}
+
+ {$i18n.t('ASE.Web.AppStore.WinBack.Subhead')}
+
+
+
+
+ {$i18n.t('ASE.Web.AppStore.WinBack.DirectionalTitle')}
+
+
+
+
+ -
+ {$i18n.t('ASE.Web.AppStore.WinBack.Update.iOS')}
+
+ -
+ {$i18n.t('ASE.Web.AppStore.WinBack.Update.macOS')}
+
+
+
+
+ {$i18n.t('ASE.Web.AppStore.WinBack.Body')}
+
+ {:else if page.contentType === 'carrier'}
+
+ {$i18n.t('ASE.Web.AppStore.Carrier.Update.iOS')}
+
+
+ {$i18n.t('ASE.Web.AppStore.Carrier.Body')}
+
+ {:else if page.contentType === 'invoice'}
+
+ {$i18n.t('ASE.Web.AppStore.Invoice.Body')}
+
+ {/if}
+
+
+
+
+
diff --git a/src/components/pages/TodayPage.svelte b/src/components/pages/TodayPage.svelte
new file mode 100644
index 0000000..3d38932
--- /dev/null
+++ b/src/components/pages/TodayPage.svelte
@@ -0,0 +1,22 @@
+
+
+
+
diff --git a/src/components/pages/TopChartsPage.svelte b/src/components/pages/TopChartsPage.svelte
new file mode 100644
index 0000000..4a3e7b7
--- /dev/null
+++ b/src/components/pages/TopChartsPage.svelte
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+ {#if categoriesButtonTitle}
+
+ {/if}
+
+
+
+ {#each segments as segment, index}
+ {@const { segmentSelectAction } = segment}
+ {@const isSelected = initialSegmentIndex === index}
+ {@const filterLabel = $i18n.t(
+ isSelected
+ ? 'ASE.Web.AppStore.SelectedFilterApps.AX.Label'
+ : 'ASE.Web.AppStore.FilterApps.AX.Label',
+ { filterName: segment.shortName },
+ )}
+
+
+
+ {segment.shortName}
+
+
+ {/each}
+
+
+
+
+
+
diff --git a/src/components/pages/VisionProPage.svelte b/src/components/pages/VisionProPage.svelte
new file mode 100644
index 0000000..c87ee09
--- /dev/null
+++ b/src/components/pages/VisionProPage.svelte
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/src/components/structure/Fonts.svelte b/src/components/structure/Fonts.svelte
new file mode 100644
index 0000000..63af7b6
--- /dev/null
+++ b/src/components/structure/Fonts.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/src/components/structure/Footer.svelte b/src/components/structure/Footer.svelte
new file mode 100644
index 0000000..ceabfec
--- /dev/null
+++ b/src/components/structure/Footer.svelte
@@ -0,0 +1,47 @@
+
+
+
+
+
diff --git a/src/components/structure/MetaTags.svelte b/src/components/structure/MetaTags.svelte
new file mode 100644
index 0000000..11b9477
--- /dev/null
+++ b/src/components/structure/MetaTags.svelte
@@ -0,0 +1,68 @@
+
+
+
+
+ {#if import.meta.env.SSR}
+
+ {JSON.stringify(organizationSchema)}
+
+ {/if}
+
+
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 @@
+
+
+
+
+
+ {$i18n.t('ASE.Web.AppStore.VisionPro.Footer.Blurb')}
+
+
+
+
+
+
+
+ {@const [title, href] = item}
+ {$i18n.t(title)}
+
+
+
+
+
+
+ {$i18n.t('ASE.Web.AppStore.VisionPro.Footer.Disclaimer')}
+
+
+
+
+
+
--
cgit v1.2.3