From bce557cc2dc767628bed6aac87301a1be7c5431b Mon Sep 17 00:00:00 2001 From: rxliuli Date: Tue, 4 Nov 2025 05:03:50 +0800 Subject: init commit --- src/App.svelte | 161 +++++++ src/bootstrap.ts | 97 ++++ src/browser.ts | 100 ++++ 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 ++++++ src/config/build.ts | 1 + src/config/components/artwork.ts | 163 +++++++ src/config/components/shelf.ts | 208 ++++++++ src/config/errorkit.ts | 17 + src/config/hlsjs.ts | 25 + src/config/media-api/browser.ts | 1 + src/config/media-api/search-jwt.ts | 27 ++ src/config/metrics.ts | 17 + src/config/rtcjs.ts | 103 ++++ src/constants/footer-items.ts | 24 + src/constants/media-metrics.ts | 18 + src/constants/storefront.ts | 60 +++ src/context/accessibility-layout.ts | 93 ++++ src/context/today-card-layout.ts | 98 ++++ src/jet/action-handlers/browser.ts | 16 + src/jet/action-handlers/compound-action.ts | 33 ++ src/jet/action-handlers/external-url-action.ts | 19 + src/jet/action-handlers/flow-action.ts | 369 ++++++++++++++ src/jet/bootstrap.ts | 125 +++++ src/jet/dependencies/bag.ts | 290 +++++++++++ src/jet/dependencies/client.ts | 96 ++++ src/jet/dependencies/console.ts | 26 + src/jet/dependencies/feature-flags.ts | 20 + src/jet/dependencies/locale.ts | 99 ++++ src/jet/dependencies/localization.ts | 523 ++++++++++++++++++++ src/jet/dependencies/make-dependencies.ts | 45 ++ src/jet/dependencies/media-token-service.ts | 11 + src/jet/dependencies/metrics-identifiers.ts | 13 + src/jet/dependencies/net.ts | 117 +++++ src/jet/dependencies/object-graph.ts | 59 +++ src/jet/dependencies/properties.ts | 5 + src/jet/dependencies/seo.ts | 254 ++++++++++ src/jet/dependencies/storage.ts | 44 ++ src/jet/dependencies/user.ts | 30 ++ .../charts-page-redirect-intent-controller.ts | 68 +++ src/jet/intents/error-page-intent-controller.ts | 52 ++ .../lint-metrics-event-controller.ts | 18 + .../lint-metrics-event-intent.ts | 23 + src/jet/intents/route-url/route-url-controller.ts | 28 ++ src/jet/intents/route-url/route-url-intent.ts | 48 ++ .../carrier-page-intent-controller.ts | 41 ++ .../contingent-price-page-intent-controller.ts | 49 ++ .../invoice-page-intent-controller.ts | 41 ++ .../win-back-page-intent-controller.ts | 49 ++ src/jet/jet.ts | 320 ++++++++++++ .../metrics/providers/StorefrontFieldsProvider.ts | 19 + src/jet/metrics/providers/index.ts | 15 + src/jet/metrics/settings.ts | 20 + src/jet/models/error-page.ts | 15 + src/jet/models/external-action.ts | 7 + src/jet/models/flow-action.ts | 28 ++ src/jet/models/page.ts | 177 +++++++ src/jet/models/static-message-page.ts | 33 ++ src/jet/svelte.ts | 45 ++ src/jet/utils/app-event-formatted-date.ts | 194 ++++++++ src/jet/utils/error-metadata.ts | 16 + src/jet/utils/handle-modal-presentation.ts | 29 ++ src/jet/utils/with-platform.ts | 5 + src/sf-symbols/AgeRating-AU-15.svg | 1 + src/sf-symbols/AgeRating-AU-18.svg | 1 + src/sf-symbols/accessibility.svg | 1 + src/sf-symbols/app.3.stack.3d.fill.svg | 1 + src/sf-symbols/app.3.stack.3d.svg | 1 + src/sf-symbols/appearance.darkmode.svg | 1 + src/sf-symbols/applewatch.svg | 1 + .../appstore-ribbon-bar-fallback-icon.svg | 1 + src/sf-symbols/appstore.svg | 1 + src/sf-symbols/arkit.svg | 1 + src/sf-symbols/bag.fill.svg | 1 + src/sf-symbols/br.10.official.svg | 1 + src/sf-symbols/br.10.svg | 1 + src/sf-symbols/br.12.official.svg | 1 + src/sf-symbols/br.12.svg | 1 + src/sf-symbols/br.14.official.svg | 1 + src/sf-symbols/br.14.svg | 1 + src/sf-symbols/br.16.official.svg | 1 + src/sf-symbols/br.16.svg | 1 + src/sf-symbols/br.18.official.svg | 1 + src/sf-symbols/br.18.svg | 1 + src/sf-symbols/br.l.official.svg | 1 + src/sf-symbols/br.l.svg | 1 + src/sf-symbols/captions.bubble.fill.svg | 1 + src/sf-symbols/chart.bar.fill.svg | 1 + src/sf-symbols/checkmark.circle.svg | 1 + src/sf-symbols/checkmark.svg | 1 + src/sf-symbols/chevron.down.svg | 1 + src/sf-symbols/chevron.forward.svg | 1 + src/sf-symbols/chevron.right.svg | 1 + src/sf-symbols/circle.dotted.and.circle.svg | 1 + src/sf-symbols/circle.lefthalf.filled.inverse.svg | 1 + src/sf-symbols/clock.fill.svg | 1 + src/sf-symbols/creditcard.fill.svg | 1 + src/sf-symbols/ellipsis.circle.fill.svg | 1 + src/sf-symbols/eye.fill.svg | 1 + src/sf-symbols/figure.svg | 1 + src/sf-symbols/gamecontroller.fill.svg | 1 + src/sf-symbols/gearshape.fill.svg | 1 + src/sf-symbols/hammer.fill.svg | 1 + src/sf-symbols/hammer.svg | 1 + src/sf-symbols/heart.circle.fill.svg | 1 + src/sf-symbols/house.svg | 1 + src/sf-symbols/info.circle.fill.svg | 1 + src/sf-symbols/ipad.gen2.landscape.svg | 1 + src/sf-symbols/ipad.gen2.svg | 1 + src/sf-symbols/iphone.gen2.svg | 1 + src/sf-symbols/joystickcontroller.fill.svg | 1 + src/sf-symbols/joystickcontroller.svg | 1 + src/sf-symbols/kr.12.svg | 1 + src/sf-symbols/kr.15.svg | 1 + src/sf-symbols/kr.all.svg | 1 + src/sf-symbols/laurel.leading.svg | 1 + src/sf-symbols/laurel.left.svg | 1 + src/sf-symbols/laurel.trailing.svg | 1 + src/sf-symbols/line.3.horizontal.svg | 1 + src/sf-symbols/location.fill.svg | 1 + src/sf-symbols/macbook.gen2.svg | 1 + src/sf-symbols/magnifyingglass.circle.fill.svg | 1 + src/sf-symbols/magnifyingglass.svg | 1 + src/sf-symbols/message.svg | 1 + src/sf-symbols/paintbrush.fill.svg | 1 + src/sf-symbols/paintbrush.svg | 1 + src/sf-symbols/paperplane.fill.svg | 1 + src/sf-symbols/paperplane.svg | 1 + src/sf-symbols/person.circle.slash.svg | 1 + src/sf-symbols/person.circle.svg | 1 + src/sf-symbols/person.crop.rectangle.line.fill.svg | 1 + src/sf-symbols/person.crop.square.svg | 1 + src/sf-symbols/person.fill.viewfinder.svg | 1 + src/sf-symbols/photo.fill.on.rectangle.fill.svg | 1 + src/sf-symbols/plus.heavy.svg | 1 + src/sf-symbols/quote.bubble.fill.svg | 1 + src/sf-symbols/rocket.fill.svg | 1 + src/sf-symbols/rocket.svg | 1 + src/sf-symbols/square.and.arrow.up.svg | 1 + src/sf-symbols/square.grid.2x2.fill.svg | 1 + src/sf-symbols/square.grid.2x2.svg | 1 + src/sf-symbols/star.fill.svg | 1 + src/sf-symbols/star.svg | 1 + src/sf-symbols/text.rectangle.page.fill.svg | 1 + src/sf-symbols/text.rectangle.page.svg | 1 + src/sf-symbols/textformat.size.svg | 1 + src/sf-symbols/tv.svg | 1 + src/sf-symbols/visionpro.svg | 1 + src/sf-symbols/voice.control.svg | 1 + src/sf-symbols/voiceover.svg | 1 + src/sf-symbols/xmark.svg | 1 + .../xmark.triangle.circle.square.fill.svg | 1 + src/stores/carousel-media-style.ts | 5 + src/stores/i18n.ts | 73 +++ src/stores/modalPage.ts | 35 ++ src/utils/app-platforms.ts | 25 + src/utils/array.ts | 33 ++ src/utils/color.ts | 168 +++++++ src/utils/error.ts | 28 ++ src/utils/features/consts.ts | 13 + src/utils/features/runtime.ts | 44 ++ src/utils/file-size.ts | 23 + src/utils/launch-client.ts | 13 + src/utils/locale.ts | 142 ++++++ src/utils/media-queries.ts | 12 + src/utils/metrics.ts | 4 + src/utils/number-formatting.ts | 39 ++ src/utils/portal.ts | 34 ++ src/utils/seo/app-event-detail-page.ts | 43 ++ src/utils/seo/arcade-see-all-page.ts | 40 ++ src/utils/seo/article-page.ts | 276 +++++++++++ src/utils/seo/charts-hub-page.ts | 46 ++ src/utils/seo/charts-page.ts | 58 +++ src/utils/seo/common.ts | 75 +++ src/utils/seo/developer-page.ts | 174 +++++++ src/utils/seo/editorial-shelf-collection-page.ts | 51 ++ src/utils/seo/image-url.ts | 71 +++ src/utils/seo/product-page.ts | 353 ++++++++++++++ src/utils/seo/reviews-page.ts | 56 +++ src/utils/seo/search-landing-page.ts | 18 + src/utils/seo/search-results-page.ts | 56 +++ src/utils/seo/see-all-page.ts | 47 ++ src/utils/shelves.ts | 56 +++ src/utils/storefront-data.ts | 15 + src/utils/string-formatting.ts | 126 +++++ src/utils/transition.ts | 45 ++ src/utils/types.ts | 17 + src/utils/url.ts | 13 + src/utils/video-poster.ts | 27 ++ 377 files changed, 24769 insertions(+) create mode 100644 src/App.svelte create mode 100644 src/bootstrap.ts create mode 100644 src/browser.ts 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 create mode 100644 src/config/build.ts create mode 100644 src/config/components/artwork.ts create mode 100644 src/config/components/shelf.ts create mode 100644 src/config/errorkit.ts create mode 100644 src/config/hlsjs.ts create mode 100644 src/config/media-api/browser.ts create mode 100644 src/config/media-api/search-jwt.ts create mode 100644 src/config/metrics.ts create mode 100644 src/config/rtcjs.ts create mode 100644 src/constants/footer-items.ts create mode 100644 src/constants/media-metrics.ts create mode 100644 src/constants/storefront.ts create mode 100644 src/context/accessibility-layout.ts create mode 100644 src/context/today-card-layout.ts create mode 100644 src/jet/action-handlers/browser.ts create mode 100644 src/jet/action-handlers/compound-action.ts create mode 100644 src/jet/action-handlers/external-url-action.ts create mode 100644 src/jet/action-handlers/flow-action.ts create mode 100644 src/jet/bootstrap.ts create mode 100644 src/jet/dependencies/bag.ts create mode 100644 src/jet/dependencies/client.ts create mode 100644 src/jet/dependencies/console.ts create mode 100644 src/jet/dependencies/feature-flags.ts create mode 100644 src/jet/dependencies/locale.ts create mode 100644 src/jet/dependencies/localization.ts create mode 100644 src/jet/dependencies/make-dependencies.ts create mode 100644 src/jet/dependencies/media-token-service.ts create mode 100644 src/jet/dependencies/metrics-identifiers.ts create mode 100644 src/jet/dependencies/net.ts create mode 100644 src/jet/dependencies/object-graph.ts create mode 100644 src/jet/dependencies/properties.ts create mode 100644 src/jet/dependencies/seo.ts create mode 100644 src/jet/dependencies/storage.ts create mode 100644 src/jet/dependencies/user.ts create mode 100644 src/jet/intents/charts-page-redirect-intent-controller.ts create mode 100644 src/jet/intents/error-page-intent-controller.ts create mode 100644 src/jet/intents/lint-metrics-event/lint-metrics-event-controller.ts create mode 100644 src/jet/intents/lint-metrics-event/lint-metrics-event-intent.ts create mode 100644 src/jet/intents/route-url/route-url-controller.ts create mode 100644 src/jet/intents/route-url/route-url-intent.ts create mode 100644 src/jet/intents/static-message-pages/carrier-page-intent-controller.ts create mode 100644 src/jet/intents/static-message-pages/contingent-price-page-intent-controller.ts create mode 100644 src/jet/intents/static-message-pages/invoice-page-intent-controller.ts create mode 100644 src/jet/intents/static-message-pages/win-back-page-intent-controller.ts create mode 100644 src/jet/jet.ts create mode 100644 src/jet/metrics/providers/StorefrontFieldsProvider.ts create mode 100644 src/jet/metrics/providers/index.ts create mode 100644 src/jet/metrics/settings.ts create mode 100644 src/jet/models/error-page.ts create mode 100644 src/jet/models/external-action.ts create mode 100644 src/jet/models/flow-action.ts create mode 100644 src/jet/models/page.ts create mode 100644 src/jet/models/static-message-page.ts create mode 100644 src/jet/svelte.ts create mode 100644 src/jet/utils/app-event-formatted-date.ts create mode 100644 src/jet/utils/error-metadata.ts create mode 100644 src/jet/utils/handle-modal-presentation.ts create mode 100644 src/jet/utils/with-platform.ts create mode 100644 src/sf-symbols/AgeRating-AU-15.svg create mode 100644 src/sf-symbols/AgeRating-AU-18.svg create mode 100644 src/sf-symbols/accessibility.svg create mode 100644 src/sf-symbols/app.3.stack.3d.fill.svg create mode 100644 src/sf-symbols/app.3.stack.3d.svg create mode 100644 src/sf-symbols/appearance.darkmode.svg create mode 100644 src/sf-symbols/applewatch.svg create mode 100644 src/sf-symbols/appstore-ribbon-bar-fallback-icon.svg create mode 100644 src/sf-symbols/appstore.svg create mode 100644 src/sf-symbols/arkit.svg create mode 100644 src/sf-symbols/bag.fill.svg create mode 100644 src/sf-symbols/br.10.official.svg create mode 100644 src/sf-symbols/br.10.svg create mode 100644 src/sf-symbols/br.12.official.svg create mode 100644 src/sf-symbols/br.12.svg create mode 100644 src/sf-symbols/br.14.official.svg create mode 100644 src/sf-symbols/br.14.svg create mode 100644 src/sf-symbols/br.16.official.svg create mode 100644 src/sf-symbols/br.16.svg create mode 100644 src/sf-symbols/br.18.official.svg create mode 100644 src/sf-symbols/br.18.svg create mode 100644 src/sf-symbols/br.l.official.svg create mode 100644 src/sf-symbols/br.l.svg create mode 100644 src/sf-symbols/captions.bubble.fill.svg create mode 100644 src/sf-symbols/chart.bar.fill.svg create mode 100644 src/sf-symbols/checkmark.circle.svg create mode 100644 src/sf-symbols/checkmark.svg create mode 100644 src/sf-symbols/chevron.down.svg create mode 100644 src/sf-symbols/chevron.forward.svg create mode 100644 src/sf-symbols/chevron.right.svg create mode 100644 src/sf-symbols/circle.dotted.and.circle.svg create mode 100644 src/sf-symbols/circle.lefthalf.filled.inverse.svg create mode 100644 src/sf-symbols/clock.fill.svg create mode 100644 src/sf-symbols/creditcard.fill.svg create mode 100644 src/sf-symbols/ellipsis.circle.fill.svg create mode 100644 src/sf-symbols/eye.fill.svg create mode 100644 src/sf-symbols/figure.svg create mode 100644 src/sf-symbols/gamecontroller.fill.svg create mode 100644 src/sf-symbols/gearshape.fill.svg create mode 100644 src/sf-symbols/hammer.fill.svg create mode 100644 src/sf-symbols/hammer.svg create mode 100644 src/sf-symbols/heart.circle.fill.svg create mode 100644 src/sf-symbols/house.svg create mode 100644 src/sf-symbols/info.circle.fill.svg create mode 100644 src/sf-symbols/ipad.gen2.landscape.svg create mode 100644 src/sf-symbols/ipad.gen2.svg create mode 100644 src/sf-symbols/iphone.gen2.svg create mode 100644 src/sf-symbols/joystickcontroller.fill.svg create mode 100644 src/sf-symbols/joystickcontroller.svg create mode 100644 src/sf-symbols/kr.12.svg create mode 100644 src/sf-symbols/kr.15.svg create mode 100644 src/sf-symbols/kr.all.svg create mode 100644 src/sf-symbols/laurel.leading.svg create mode 100644 src/sf-symbols/laurel.left.svg create mode 100644 src/sf-symbols/laurel.trailing.svg create mode 100644 src/sf-symbols/line.3.horizontal.svg create mode 100644 src/sf-symbols/location.fill.svg create mode 100644 src/sf-symbols/macbook.gen2.svg create mode 100644 src/sf-symbols/magnifyingglass.circle.fill.svg create mode 100644 src/sf-symbols/magnifyingglass.svg create mode 100644 src/sf-symbols/message.svg create mode 100644 src/sf-symbols/paintbrush.fill.svg create mode 100644 src/sf-symbols/paintbrush.svg create mode 100644 src/sf-symbols/paperplane.fill.svg create mode 100644 src/sf-symbols/paperplane.svg create mode 100644 src/sf-symbols/person.circle.slash.svg create mode 100644 src/sf-symbols/person.circle.svg create mode 100644 src/sf-symbols/person.crop.rectangle.line.fill.svg create mode 100644 src/sf-symbols/person.crop.square.svg create mode 100644 src/sf-symbols/person.fill.viewfinder.svg create mode 100644 src/sf-symbols/photo.fill.on.rectangle.fill.svg create mode 100644 src/sf-symbols/plus.heavy.svg create mode 100644 src/sf-symbols/quote.bubble.fill.svg create mode 100644 src/sf-symbols/rocket.fill.svg create mode 100644 src/sf-symbols/rocket.svg create mode 100644 src/sf-symbols/square.and.arrow.up.svg create mode 100644 src/sf-symbols/square.grid.2x2.fill.svg create mode 100644 src/sf-symbols/square.grid.2x2.svg create mode 100644 src/sf-symbols/star.fill.svg create mode 100644 src/sf-symbols/star.svg create mode 100644 src/sf-symbols/text.rectangle.page.fill.svg create mode 100644 src/sf-symbols/text.rectangle.page.svg create mode 100644 src/sf-symbols/textformat.size.svg create mode 100644 src/sf-symbols/tv.svg create mode 100644 src/sf-symbols/visionpro.svg create mode 100644 src/sf-symbols/voice.control.svg create mode 100644 src/sf-symbols/voiceover.svg create mode 100644 src/sf-symbols/xmark.svg create mode 100644 src/sf-symbols/xmark.triangle.circle.square.fill.svg create mode 100644 src/stores/carousel-media-style.ts create mode 100644 src/stores/i18n.ts create mode 100644 src/stores/modalPage.ts create mode 100644 src/utils/app-platforms.ts create mode 100644 src/utils/array.ts create mode 100644 src/utils/color.ts create mode 100644 src/utils/error.ts create mode 100644 src/utils/features/consts.ts create mode 100644 src/utils/features/runtime.ts create mode 100644 src/utils/file-size.ts create mode 100644 src/utils/launch-client.ts create mode 100644 src/utils/locale.ts create mode 100644 src/utils/media-queries.ts create mode 100644 src/utils/metrics.ts create mode 100644 src/utils/number-formatting.ts create mode 100644 src/utils/portal.ts create mode 100644 src/utils/seo/app-event-detail-page.ts create mode 100644 src/utils/seo/arcade-see-all-page.ts create mode 100644 src/utils/seo/article-page.ts create mode 100644 src/utils/seo/charts-hub-page.ts create mode 100644 src/utils/seo/charts-page.ts create mode 100644 src/utils/seo/common.ts create mode 100644 src/utils/seo/developer-page.ts create mode 100644 src/utils/seo/editorial-shelf-collection-page.ts create mode 100644 src/utils/seo/image-url.ts create mode 100644 src/utils/seo/product-page.ts create mode 100644 src/utils/seo/reviews-page.ts create mode 100644 src/utils/seo/search-landing-page.ts create mode 100644 src/utils/seo/search-results-page.ts create mode 100644 src/utils/seo/see-all-page.ts create mode 100644 src/utils/shelves.ts create mode 100644 src/utils/storefront-data.ts create mode 100644 src/utils/string-formatting.ts create mode 100644 src/utils/transition.ts create mode 100644 src/utils/types.ts create mode 100644 src/utils/url.ts create mode 100644 src/utils/video-poster.ts (limited to 'src') diff --git a/src/App.svelte b/src/App.svelte new file mode 100644 index 0000000..846f1df --- /dev/null +++ b/src/App.svelte @@ -0,0 +1,161 @@ + + + + + + + + +{#if import.meta.env.DEV} + {#await import('~/components/ArtworkBreakpointLogger.svelte') then { default: ArtworkBreakpointLogger }} + + {/await} +{/if} + +
+ + +
+
+ +
+ +
+
+
+ + diff --git a/src/bootstrap.ts b/src/bootstrap.ts new file mode 100644 index 0000000..14ebbe8 --- /dev/null +++ b/src/bootstrap.ts @@ -0,0 +1,97 @@ +// Sets up app specific configurations +import type { Opt } from '@jet/environment'; +import type { Intent } from '@jet/environment/dispatching'; +import type { ActionModel } from '@jet/environment/types/models'; +import { initializeUniqueIdContext } from '@amp/web-app-components/src/utils/uniqueId'; +import { setLocale as setSharedLocale } from '@amp/web-app-components/src/utils/locale'; + +import type { + NormalizedStorefront, + NormalizedLanguage, +} from '@jet-app/app-store/api/locale'; + +import { + DEFAULT_STOREFRONT_CODE, + DEFAULT_LANGUAGE_BCP47, +} from '~/constants/storefront'; +import { Jet } from '~/jet'; +import { setup as setupI18n } from '~/stores/i18n'; +import type { PrefetchedIntents } from '@amp/web-apps-common/src/jet/prefetched-intents'; +import type { LoggerFactory } from '@amp/web-apps-logger'; +import type { Locale as Language } from '@amp/web-apps-localization'; +import type I18N from '@amp/web-apps-localization'; +import '~/config/components/artwork'; +import '~/config/components/shelf'; +import type { FeaturesCallbacks } from './jet/dependencies/net'; + +export type Context = Map; + +export async function bootstrap({ + loggerFactory, + initialUrl, + fetch, + prefetchedIntents, + featuresCallbacks, +}: { + loggerFactory: LoggerFactory; + initialUrl: string; + fetch: typeof window.fetch; + prefetchedIntents: PrefetchedIntents; + featuresCallbacks?: FeaturesCallbacks; +}): Promise<{ + context: Context; + jet: Jet; + initialAction: Opt; + intent: Opt>; + storefront: NormalizedStorefront; + language: NormalizedLanguage; + i18n: I18N; +}> { + const log = loggerFactory.loggerFor('bootstrap'); + + const context = new Map(); + + const jet = Jet.load({ + loggerFactory, + context, + fetch, + prefetchedIntents, + featuresCallbacks, + }); + + initializeUniqueIdContext(context, loggerFactory); + + const routing = await jet.routeUrl(initialUrl); + + if (routing) { + log.info('initial URL routed to:', routing); + } else { + log.warn('initial URL was unroutable:', initialUrl); + } + + const { + intent = null, + action: initialAction = null, + storefront = DEFAULT_STOREFRONT_CODE, + language = DEFAULT_LANGUAGE_BCP47, + } = routing || {}; + + // TODO: rdar://78109398 (i18n Improvements) + const i18nStore = await setupI18n( + context, + loggerFactory, + language.toLowerCase() as Language, + ); + jet.setLocale(i18nStore, storefront, language); + setSharedLocale(context, { storefront, language }); + + return { + context, + jet, + initialAction, + intent, + storefront, + language, + i18n: i18nStore, + }; +} diff --git a/src/browser.ts b/src/browser.ts new file mode 100644 index 0000000..18c20f7 --- /dev/null +++ b/src/browser.ts @@ -0,0 +1,100 @@ +// This must be imported first to ensure base styles are imported first +import '~/styles/app-store.scss'; + +import App from '~/App.svelte'; +import { bootstrap } from '~/bootstrap'; +import { registerActionHandlers } from '~/jet/action-handlers'; +import { PrefetchedIntents } from '@amp/web-apps-common/src/jet/prefetched-intents'; +import { + CompositeLoggerFactory, + ConsoleLoggerFactory, + DeferredLoggerFactory, + setContext, +} from '@amp/web-apps-logger'; + +import { setHTMLAttributes } from '@amp/web-apps-localization'; +import { ERROR_KIT_CONFIG } from '~/config/errorkit'; +import { + ErrorKitLoggerFactory, + setupErrorKit, +} from '@amp/web-apps-logger/src/errorkit'; +import { setupRuntimeFeatures } from '~/utils/features/runtime'; + +export async function startApplication() { + const onyxFeatures = await setupRuntimeFeatures( + new DeferredLoggerFactory(() => logger), + ); + const consoleLogger = new ConsoleLoggerFactory(); + const errorKit = setupErrorKit(ERROR_KIT_CONFIG, consoleLogger); + const logger = new CompositeLoggerFactory([ + consoleLogger, + new ErrorKitLoggerFactory(errorKit), + ...(onyxFeatures ? [onyxFeatures.recordingLogger] : []), + ]); + + let url = window.location.href; + + // TODO: this is busted for some reason? rdar://111465791 ([Onyx] Foundation - PerfKit) + // const perfkit = setupBrowserPerfkit(PERF_KIT_CONFIG, logger); + + // Initialize Jet, and get starting state. + const { context, jet, initialAction, storefront, language, i18n } = + await bootstrap({ + loggerFactory: logger, + initialUrl: url, + fetch: window.fetch.bind(window), + prefetchedIntents: PrefetchedIntents.fromDom(logger, { + evenIfSignedIn: true, + featureKitItfe: onyxFeatures?.featureKit?.itfe, + }), + featuresCallbacks: { + getITFEValues(): string | undefined { + return onyxFeatures?.featureKit?.itfe; + }, + }, + }); + + // TODO: fix perfkit - rdar://111465791 ([Onyx] Foundation - PerfKit) + // setPageSpeedContext(context, perfkit, logger); + setContext(context, logger); + + // Add lang + dir tag to HTML node + setHTMLAttributes(language); + + // Using a container element to avoid svelte hydration + // "clean up" from removing tags that have + // been add to the tag in our HTML file. + const container = document.querySelector('.body-container'); + + const app = new App({ + target: container, + context, + hydrate: true, + }); + + // Initialize action-handlers. + registerActionHandlers({ + jet, + logger, + updateApp: (props) => app.$set(props), + }); + + if (initialAction) { + // TODO: rdar://73165545 (Error Handling Across App): handle throw + await jet.perform(initialAction); + } else { + app.$set({ + page: Promise.reject(new Error('404')), + isFirstPage: true, + }); + } +} + +// If we export default here, this will run during tests when we do +// `import { startApplication } from '~/browser';`. To avoid this, we guard using the +// presence of an ENV var only set by Vitest. + +// This is covered by acceptance tests +if (!import.meta.env?.VITEST) { + startApplication(); +} 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} + +