@mohasinac/appkit 4.57.0 → 4.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +4 -4
- package/dist/_internal/server/features/beys/data.d.ts +44 -0
- package/dist/_internal/server/features/beys/data.js +107 -0
- package/dist/_internal/server/features/beys/og.d.ts +42 -0
- package/dist/_internal/server/features/beys/og.js +89 -0
- package/dist/_internal/server/features/parts/data.js +3 -2
- package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
- package/dist/_internal/server/jobs/handlers/messages.js +1 -1
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +86 -0
- package/dist/_internal/shared/types/base-document.d.ts +1 -1
- package/dist/client.d.ts +2 -0
- package/dist/client.js +1 -0
- package/dist/constants/api-endpoints.d.ts +12 -0
- package/dist/constants/api-endpoints.js +10 -0
- package/dist/constants/field-names.d.ts +46 -0
- package/dist/constants/field-names.js +46 -0
- package/dist/constants/seed-meta.d.ts +113 -0
- package/dist/constants/seed-meta.js +91 -0
- package/dist/features/admin/components/AdminBeysView.d.ts +27 -0
- package/dist/features/admin/components/AdminBeysView.js +178 -0
- package/dist/features/admin/components/AdminPartsView.d.ts +27 -0
- package/dist/features/admin/components/AdminPartsView.js +160 -0
- package/dist/features/admin/components/OwnerQuickActions.d.ts +19 -2
- package/dist/features/admin/components/OwnerQuickActions.js +31 -3
- package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +31 -0
- package/dist/features/admin/components/RecordOwnerQuickActions.js +128 -0
- package/dist/features/admin/components/ReferenceRecordEditor.d.ts +45 -0
- package/dist/features/admin/components/ReferenceRecordEditor.js +153 -0
- package/dist/features/admin/schemas/firestore.d.ts +1 -1
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +15 -2
- package/dist/features/auth/permissions/constants.d.ts +1 -1
- package/dist/features/auth/permissions/constants.js +12 -1
- package/dist/features/beys/components/BeyDetailPageView.d.ts +50 -0
- package/dist/features/beys/components/BeyDetailPageView.js +98 -0
- package/dist/features/beys/schemas/firestore.d.ts +417 -0
- package/dist/features/beys/schemas/firestore.js +65 -0
- package/dist/features/blog/components/BlogFeaturedCard.js +15 -2
- package/dist/features/blog/components/BlogPostView.js +2 -2
- package/dist/features/categories/components/BrandDetailPageView.js +4 -2
- package/dist/features/categories/components/BundleDetailView.js +2 -2
- package/dist/features/categories/components/CategoryDetailPageView.js +36 -3
- package/dist/features/categories/components/CategoryGrid.js +24 -2
- package/dist/features/categories/components/FranchiseDetailPageView.js +2 -3
- package/dist/features/events/components/EventCard.js +15 -2
- package/dist/features/grouped/components/GroupedListingDetailView.js +2 -3
- package/dist/features/homepage/components/CustomCardsSection.js +67 -50
- package/dist/features/homepage/components/ShopByCategorySection.js +23 -10
- package/dist/features/homepage/schemas/index.d.ts +10 -10
- package/dist/features/parts/components/PartDetailPageView.js +5 -3
- package/dist/features/parts/components/PartsSearchBox.js +79 -4
- package/dist/features/parts/schemas/admin-edit.d.ts +81 -0
- package/dist/features/parts/schemas/admin-edit.js +89 -0
- package/dist/features/parts/schemas/firestore.d.ts +2 -1
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +15 -2
- package/dist/features/products/components/MarketplaceBundleCard.js +15 -2
- package/dist/features/products/components/MarketplacePrizeDrawCard.js +15 -2
- package/dist/features/products/components/ProductGrid.js +18 -2
- package/dist/features/products/schemas/firestore.d.ts +18 -0
- package/dist/features/seller/components/CategoryInlineSelect.d.ts +10 -1
- package/dist/features/seller/components/CategoryInlineSelect.js +53 -5
- package/dist/features/seller/components/SellerProductShell.d.ts +39 -0
- package/dist/features/seller/components/SellerProductShell.js +31 -3
- package/dist/index.d.ts +6 -129
- package/dist/index.js +61 -292
- package/dist/next/routing/route-map.d.ts +13 -1
- package/dist/next/routing/route-map.js +37 -0
- package/dist/schemas/registry.d.ts +6 -6
- package/dist/server.d.ts +2 -69
- package/dist/server.js +8 -69
- package/dist/styles.css +468 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/PosterCard.d.ts +99 -0
- package/dist/ui/components/PosterCard.js +109 -0
- package/dist/ui/components/PosterCard.style.css +466 -0
- package/dist/ui/components/index.style.css +1 -0
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +2 -0
- package/package.json +4 -2
- package/scripts/seed-cli.mjs +177 -2
- package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
- package/dist/features/tester/seed-data/_happy-path.js +0 -710
- package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
- package/dist/features/tester/seed-data/_money-flows.js +0 -610
- package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
- package/dist/features/tester/seed-data/authored/_types.js +0 -35
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
- package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
- package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
- package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
- package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
- package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
- package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
- package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
- package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
- package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
- package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
- package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
- package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
- package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
- package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
- package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
- package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
- package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
- package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
- package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
- package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
- package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
- package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
- package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
- package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
- package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
- package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
- package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
- package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
- package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
- package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
- package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
- package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/index.js +0 -301
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
- package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
- package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
- package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
- package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
- package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
- package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
- package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
- package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
- package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
- package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
- package/dist/features/tester/seed-data/index.d.ts +0 -2
- package/dist/features/tester/seed-data/index.js +0 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
- package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
- package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
- package/dist/features/tester/seed-data/tester-window.js +0 -66
- package/dist/seed/_helpers/brand-rows.d.ts +0 -35
- package/dist/seed/_helpers/brand-rows.js +0 -600
- package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
- package/dist/seed/_helpers/category-content-generated.js +0 -1853
- package/dist/seed/_helpers/category-content.d.ts +0 -68
- package/dist/seed/_helpers/category-content.js +0 -731
- package/dist/seed/_helpers/category-forest.d.ts +0 -4
- package/dist/seed/_helpers/category-forest.js +0 -824
- package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
- package/dist/seed/_helpers/category-images-generated.js +0 -618
- package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
- package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
- package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
- package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
- package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
- package/dist/seed/_helpers/category-models.d.ts +0 -12
- package/dist/seed/_helpers/category-models.js +0 -45
- package/dist/seed/_helpers/category-names.d.ts +0 -54
- package/dist/seed/_helpers/category-names.js +0 -118
- package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
- package/dist/seed/_helpers/category-parts.d.ts +0 -9
- package/dist/seed/_helpers/category-parts.js +0 -15022
- package/dist/seed/_helpers/category-tree.d.ts +0 -27
- package/dist/seed/_helpers/category-tree.js +0 -119
- package/dist/seed/_helpers/character-features.d.ts +0 -10
- package/dist/seed/_helpers/character-features.js +0 -120
- package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
- package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
- package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
- package/dist/seed/_helpers/franchise-rows.js +0 -189
- package/dist/seed/_helpers/media.d.ts +0 -67
- package/dist/seed/_helpers/media.js +0 -172
- package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
- package/dist/seed/_helpers/part-colours-generated.js +0 -273
- package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
- package/dist/seed/_helpers/product-search-txt.js +0 -23
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
- package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
- package/dist/seed/addresses-seed-data.d.ts +0 -2
- package/dist/seed/addresses-seed-data.js +0 -78
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
- package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
- package/dist/seed/bids-seed-data.d.ts +0 -2
- package/dist/seed/bids-seed-data.js +0 -206
- package/dist/seed/blog-posts-seed-data.d.ts +0 -6
- package/dist/seed/blog-posts-seed-data.js +0 -442
- package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
- package/dist/seed/carousel-slides-seed-data.js +0 -411
- package/dist/seed/carousels-seed-data.d.ts +0 -2
- package/dist/seed/carousels-seed-data.js +0 -36
- package/dist/seed/cart-seed-data.d.ts +0 -2
- package/dist/seed/cart-seed-data.js +0 -241
- package/dist/seed/catalogue-seed-data.d.ts +0 -2
- package/dist/seed/catalogue-seed-data.js +0 -112
- package/dist/seed/categories-seed-data.d.ts +0 -3
- package/dist/seed/categories-seed-data.js +0 -816
- package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
- package/dist/seed/claimed-coupons-seed-data.js +0 -85
- package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
- package/dist/seed/coupon-usage-seed-data.js +0 -55
- package/dist/seed/coupons-seed-data.d.ts +0 -2
- package/dist/seed/coupons-seed-data.js +0 -226
- package/dist/seed/defaults/categories.d.ts +0 -2
- package/dist/seed/defaults/categories.js +0 -12
- package/dist/seed/defaults/faqs.d.ts +0 -2
- package/dist/seed/defaults/faqs.js +0 -40
- package/dist/seed/events-seed-data.d.ts +0 -7
- package/dist/seed/events-seed-data.js +0 -482
- package/dist/seed/factories/address.factory.d.ts +0 -21
- package/dist/seed/factories/address.factory.js +0 -44
- package/dist/seed/factories/bid.factory.d.ts +0 -15
- package/dist/seed/factories/bid.factory.js +0 -33
- package/dist/seed/factories/blog-post.factory.d.ts +0 -15
- package/dist/seed/factories/blog-post.factory.js +0 -22
- package/dist/seed/factories/carousel.factory.d.ts +0 -11
- package/dist/seed/factories/carousel.factory.js +0 -17
- package/dist/seed/factories/cart.factory.d.ts +0 -25
- package/dist/seed/factories/cart.factory.js +0 -35
- package/dist/seed/factories/category.factory.d.ts +0 -11
- package/dist/seed/factories/category.factory.js +0 -16
- package/dist/seed/factories/coupon.factory.d.ts +0 -21
- package/dist/seed/factories/coupon.factory.js +0 -43
- package/dist/seed/factories/faq.factory.d.ts +0 -10
- package/dist/seed/factories/faq.factory.js +0 -15
- package/dist/seed/factories/notification.factory.d.ts +0 -18
- package/dist/seed/factories/notification.factory.js +0 -39
- package/dist/seed/factories/order.factory.d.ts +0 -20
- package/dist/seed/factories/order.factory.js +0 -20
- package/dist/seed/factories/payout.factory.d.ts +0 -21
- package/dist/seed/factories/payout.factory.js +0 -38
- package/dist/seed/factories/product.factory.d.ts +0 -27
- package/dist/seed/factories/product.factory.js +0 -80
- package/dist/seed/factories/review.factory.d.ts +0 -14
- package/dist/seed/factories/review.factory.js +0 -52
- package/dist/seed/factories/session.factory.d.ts +0 -15
- package/dist/seed/factories/session.factory.js +0 -31
- package/dist/seed/factories/store.factory.d.ts +0 -23
- package/dist/seed/factories/store.factory.js +0 -47
- package/dist/seed/factories/user.factory.d.ts +0 -19
- package/dist/seed/factories/user.factory.js +0 -56
- package/dist/seed/faq-seed-data.d.ts +0 -18
- package/dist/seed/faq-seed-data.js +0 -1956
- package/dist/seed/firestore-indexes.d.ts +0 -12
- package/dist/seed/firestore-indexes.js +0 -31
- package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
- package/dist/seed/grouped-listings-seed-data.js +0 -283
- package/dist/seed/history-seed-data.d.ts +0 -12
- package/dist/seed/history-seed-data.js +0 -70
- package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
- package/dist/seed/homepage-sections-seed-data.js +0 -1018
- package/dist/seed/index.d.ts +0 -98
- package/dist/seed/index.js +0 -112
- package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
- package/dist/seed/lottery-entries-seed-data.js +0 -108
- package/dist/seed/manifest.d.ts +0 -16
- package/dist/seed/manifest.js +0 -235
- package/dist/seed/media-assets-seed-data.d.ts +0 -22
- package/dist/seed/media-assets-seed-data.js +0 -5593
- package/dist/seed/model-composition-seed-data.d.ts +0 -15
- package/dist/seed/model-composition-seed-data.js +0 -9032
- package/dist/seed/notifications-seed-data.d.ts +0 -2
- package/dist/seed/notifications-seed-data.js +0 -606
- package/dist/seed/offers-seed-data.d.ts +0 -2
- package/dist/seed/offers-seed-data.js +0 -398
- package/dist/seed/orders-seed-data.d.ts +0 -2
- package/dist/seed/orders-seed-data.js +0 -845
- package/dist/seed/part-glossary/chunk0.d.ts +0 -9
- package/dist/seed/part-glossary/chunk0.js +0 -35448
- package/dist/seed/part-glossary/chunk1.d.ts +0 -9
- package/dist/seed/part-glossary/chunk1.js +0 -40494
- package/dist/seed/part-glossary/chunk2.d.ts +0 -9
- package/dist/seed/part-glossary/chunk2.js +0 -51242
- package/dist/seed/part-glossary/chunk3.d.ts +0 -9
- package/dist/seed/part-glossary/chunk3.js +0 -53337
- package/dist/seed/part-glossary/chunk4.d.ts +0 -9
- package/dist/seed/part-glossary/chunk4.js +0 -51454
- package/dist/seed/part-glossary-seed-data.d.ts +0 -15
- package/dist/seed/part-glossary-seed-data.js +0 -25
- package/dist/seed/payouts-seed-data.d.ts +0 -2
- package/dist/seed/payouts-seed-data.js +0 -302
- package/dist/seed/product-features-seed-data.d.ts +0 -3
- package/dist/seed/product-features-seed-data.js +0 -366
- package/dist/seed/products-art-seed-data.d.ts +0 -2
- package/dist/seed/products-art-seed-data.js +0 -289
- package/dist/seed/products-auctions-seed-data.d.ts +0 -2
- package/dist/seed/products-auctions-seed-data.js +0 -475
- package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
- package/dist/seed/products-beyblade-x-seed-data.js +0 -476
- package/dist/seed/products-catalogue-seed-data.d.ts +0 -22
- package/dist/seed/products-catalogue-seed-data.js +0 -86384
- package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
- package/dist/seed/products-classifieds-seed-data.js +0 -435
- package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
- package/dist/seed/products-digital-codes-seed-data.js +0 -395
- package/dist/seed/products-live-items-seed-data.d.ts +0 -7
- package/dist/seed/products-live-items-seed-data.js +0 -269
- package/dist/seed/products-preorders-seed-data.d.ts +0 -2
- package/dist/seed/products-preorders-seed-data.js +0 -360
- package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
- package/dist/seed/products-prize-draws-seed-data.js +0 -427
- package/dist/seed/products-spares-seed-data.d.ts +0 -2
- package/dist/seed/products-spares-seed-data.js +0 -368
- package/dist/seed/products-standard-seed-data.d.ts +0 -2
- package/dist/seed/products-standard-seed-data.js +0 -632
- package/dist/seed/products-stickers-seed-data.d.ts +0 -2
- package/dist/seed/products-stickers-seed-data.js +0 -319
- package/dist/seed/reviews-seed-data.d.ts +0 -1
- package/dist/seed/reviews-seed-data.js +0 -185
- package/dist/seed/runner.d.ts +0 -2
- package/dist/seed/runner.js +0 -125
- package/dist/seed/scammers-seed-data.d.ts +0 -2
- package/dist/seed/scammers-seed-data.js +0 -235
- package/dist/seed/seed-market-config.d.ts +0 -48
- package/dist/seed/seed-market-config.js +0 -199
- package/dist/seed/seed-purpose.d.ts +0 -299
- package/dist/seed/seed-purpose.js +0 -431
- package/dist/seed/sessions-seed-data.d.ts +0 -3
- package/dist/seed/sessions-seed-data.js +0 -116
- package/dist/seed/shipments-seed-data.d.ts +0 -5
- package/dist/seed/shipments-seed-data.js +0 -185
- package/dist/seed/site-settings-seed-data.d.ts +0 -2
- package/dist/seed/site-settings-seed-data.js +0 -1069
- package/dist/seed/store-addresses-seed-data.d.ts +0 -18
- package/dist/seed/store-addresses-seed-data.js +0 -71
- package/dist/seed/store-extensions-seed-data.d.ts +0 -11
- package/dist/seed/store-extensions-seed-data.js +0 -292
- package/dist/seed/stores-seed-data.d.ts +0 -6
- package/dist/seed/stores-seed-data.js +0 -242
- package/dist/seed/support-tickets-seed-data.d.ts +0 -16
- package/dist/seed/support-tickets-seed-data.js +0 -239
- package/dist/seed/tax-codes-seed-data.d.ts +0 -34
- package/dist/seed/tax-codes-seed-data.js +0 -100
- package/dist/seed/test-data-ttl.d.ts +0 -29
- package/dist/seed/test-data-ttl.js +0 -31
- package/dist/seed/test-utils.d.ts +0 -49
- package/dist/seed/test-utils.js +0 -110
- package/dist/seed/types.d.ts +0 -89
- package/dist/seed/types.js +0 -15
- package/dist/seed/users-seed-data.d.ts +0 -2
- package/dist/seed/users-seed-data.js +0 -597
- package/dist/seed/wishlists-seed-data.d.ts +0 -12
- package/dist/seed/wishlists-seed-data.js +0 -54
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* PosterCard — an image-led tile: artwork fills the card, a scrim carries the
|
|
4
|
+
* type, links sit as chips on the dark end.
|
|
5
|
+
*
|
|
6
|
+
* 🛑 The artwork is a `media` SLOT, not a `src` prop, and that is deliberate.
|
|
7
|
+
* This file lives in `ui/components/`, and reaching down into
|
|
8
|
+
* `features/media/MediaImage` from here would invert the layering and put a
|
|
9
|
+
* feature module on the import chain of every consumer of the UI barrel — the
|
|
10
|
+
* shape Root Cause #6/#18 is about. Taking a node instead lets the homepage
|
|
11
|
+
* pass `<MediaImage>` and the category tile pass `next/image`, each with the
|
|
12
|
+
* `sizes` hint that is right for its own grid.
|
|
13
|
+
*
|
|
14
|
+
* The caller wraps it in its own `<Link>`/`<a>` when the WHOLE card is one
|
|
15
|
+
* destination (the category tile), or leaves it inert and lets the chips be
|
|
16
|
+
* the links (the systems matrix). It is never both: a card that is a link and
|
|
17
|
+
* also contains links nests interactive content, which no browser resolves the
|
|
18
|
+
* way the markup implies.
|
|
19
|
+
*/
|
|
20
|
+
export declare const POSTER_CLASS: {
|
|
21
|
+
readonly root: "appkit-poster";
|
|
22
|
+
readonly tall: "appkit-poster--tall";
|
|
23
|
+
readonly compact: "appkit-poster--compact";
|
|
24
|
+
readonly media: "appkit-poster__media";
|
|
25
|
+
readonly scrim: "appkit-poster__scrim";
|
|
26
|
+
readonly body: "appkit-poster__body";
|
|
27
|
+
readonly eyebrow: "appkit-poster__eyebrow";
|
|
28
|
+
readonly title: "appkit-poster__title";
|
|
29
|
+
readonly text: "appkit-poster__text";
|
|
30
|
+
readonly meta: "appkit-poster__meta";
|
|
31
|
+
readonly chips: "appkit-poster__chips";
|
|
32
|
+
readonly chip: "appkit-poster__chip";
|
|
33
|
+
readonly chipKey: "appkit-poster__chip--key";
|
|
34
|
+
readonly grid: "appkit-poster-grid";
|
|
35
|
+
readonly grid1: "appkit-poster-grid--1";
|
|
36
|
+
readonly grid2: "appkit-poster-grid--2";
|
|
37
|
+
readonly grid3: "appkit-poster-grid--3";
|
|
38
|
+
readonly grid4: "appkit-poster-grid--4";
|
|
39
|
+
};
|
|
40
|
+
export type PosterCardHeight = "compact" | "default" | "tall";
|
|
41
|
+
export interface PosterCardProps {
|
|
42
|
+
/** The artwork. Rendered into an absolutely-positioned fill box. */
|
|
43
|
+
media?: React.ReactNode;
|
|
44
|
+
/** Small uppercase label above the title — a date range, a count, an era. */
|
|
45
|
+
eyebrow?: React.ReactNode;
|
|
46
|
+
title?: React.ReactNode;
|
|
47
|
+
/** One short paragraph. Clamped to three lines by the stylesheet. */
|
|
48
|
+
text?: React.ReactNode;
|
|
49
|
+
/** A line below the body — an item count, a price band. */
|
|
50
|
+
meta?: React.ReactNode;
|
|
51
|
+
/** The chip row. Pass `<PosterChip>`s. */
|
|
52
|
+
chips?: React.ReactNode;
|
|
53
|
+
height?: PosterCardHeight;
|
|
54
|
+
className?: string;
|
|
55
|
+
}
|
|
56
|
+
export declare function PosterCard({ media, eyebrow, title, text, meta, chips, height, className, }: PosterCardProps): React.JSX.Element;
|
|
57
|
+
export interface PosterChipProps {
|
|
58
|
+
href?: string;
|
|
59
|
+
/** Solid-fill emphasis, for the one or two widest destinations on a card. */
|
|
60
|
+
emphasis?: "glass" | "solid";
|
|
61
|
+
target?: "_blank" | "_self";
|
|
62
|
+
children: React.ReactNode;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* One chip. Renders an `<a>` when it has an `href` and a `<span>` otherwise,
|
|
66
|
+
* so a non-navigating chip is not announced as a link.
|
|
67
|
+
*
|
|
68
|
+
* 🛑 A plain `<a>`, not `next/link`, because `PosterCard` lives in the UI layer
|
|
69
|
+
* and must not pull a framework router into every consumer of the barrel — the
|
|
70
|
+
* same reason `media` is a slot. Consumers that want client-side navigation
|
|
71
|
+
* compose their own link around the chip classes via `POSTER_CLASS`.
|
|
72
|
+
*/
|
|
73
|
+
export declare function PosterChip({ href, emphasis, target, children, }: PosterChipProps): React.JSX.Element;
|
|
74
|
+
export declare const PLAIN_CLASS: {
|
|
75
|
+
readonly root: "appkit-plain-card";
|
|
76
|
+
readonly eyebrow: "appkit-plain-card__eyebrow";
|
|
77
|
+
readonly title: "appkit-plain-card__title";
|
|
78
|
+
readonly text: "appkit-plain-card__text";
|
|
79
|
+
readonly chips: "appkit-plain-card__chips";
|
|
80
|
+
readonly chip: "appkit-chip";
|
|
81
|
+
readonly chipKey: "appkit-chip--key";
|
|
82
|
+
};
|
|
83
|
+
export interface PlainCardProps {
|
|
84
|
+
eyebrow?: React.ReactNode;
|
|
85
|
+
title?: React.ReactNode;
|
|
86
|
+
text?: React.ReactNode;
|
|
87
|
+
chips?: React.ReactNode;
|
|
88
|
+
/** Anything that has to sit below the chip row — an embedded form. */
|
|
89
|
+
footer?: React.ReactNode;
|
|
90
|
+
className?: string;
|
|
91
|
+
}
|
|
92
|
+
export declare function PlainCard({ eyebrow, title, text, chips, footer, className, }: PlainCardProps): React.JSX.Element;
|
|
93
|
+
export interface PosterGridProps {
|
|
94
|
+
columns?: 1 | 2 | 3 | 4;
|
|
95
|
+
children: React.ReactNode;
|
|
96
|
+
className?: string;
|
|
97
|
+
}
|
|
98
|
+
/** 1 → 2 → N. See the note on `.appkit-poster-grid` for why not `Grid cols="cards"`. */
|
|
99
|
+
export declare function PosterGrid({ columns, children, className }: PosterGridProps): React.JSX.Element;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Heading, Text } from "./Typography.js";
|
|
3
|
+
/**
|
|
4
|
+
* PosterCard — an image-led tile: artwork fills the card, a scrim carries the
|
|
5
|
+
* type, links sit as chips on the dark end.
|
|
6
|
+
*
|
|
7
|
+
* 🛑 The artwork is a `media` SLOT, not a `src` prop, and that is deliberate.
|
|
8
|
+
* This file lives in `ui/components/`, and reaching down into
|
|
9
|
+
* `features/media/MediaImage` from here would invert the layering and put a
|
|
10
|
+
* feature module on the import chain of every consumer of the UI barrel — the
|
|
11
|
+
* shape Root Cause #6/#18 is about. Taking a node instead lets the homepage
|
|
12
|
+
* pass `<MediaImage>` and the category tile pass `next/image`, each with the
|
|
13
|
+
* `sizes` hint that is right for its own grid.
|
|
14
|
+
*
|
|
15
|
+
* The caller wraps it in its own `<Link>`/`<a>` when the WHOLE card is one
|
|
16
|
+
* destination (the category tile), or leaves it inert and lets the chips be
|
|
17
|
+
* the links (the systems matrix). It is never both: a card that is a link and
|
|
18
|
+
* also contains links nests interactive content, which no browser resolves the
|
|
19
|
+
* way the markup implies.
|
|
20
|
+
*/
|
|
21
|
+
/* ── Class names ──────────────────────────────────────────────────────────
|
|
22
|
+
*
|
|
23
|
+
* Exported because two consumers compose their own inner markup (the matrix
|
|
24
|
+
* renders a chip per taxonomy link, the tile renders a count), and a literal
|
|
25
|
+
* typed at the call site is a class `audit-dead-css-classes` would have to
|
|
26
|
+
* find by luck.
|
|
27
|
+
*/
|
|
28
|
+
export const POSTER_CLASS = {
|
|
29
|
+
root: "appkit-poster",
|
|
30
|
+
tall: "appkit-poster--tall",
|
|
31
|
+
compact: "appkit-poster--compact",
|
|
32
|
+
media: "appkit-poster__media",
|
|
33
|
+
scrim: "appkit-poster__scrim",
|
|
34
|
+
body: "appkit-poster__body",
|
|
35
|
+
eyebrow: "appkit-poster__eyebrow",
|
|
36
|
+
title: "appkit-poster__title",
|
|
37
|
+
text: "appkit-poster__text",
|
|
38
|
+
meta: "appkit-poster__meta",
|
|
39
|
+
chips: "appkit-poster__chips",
|
|
40
|
+
chip: "appkit-poster__chip",
|
|
41
|
+
chipKey: "appkit-poster__chip--key",
|
|
42
|
+
grid: "appkit-poster-grid",
|
|
43
|
+
grid1: "appkit-poster-grid--1",
|
|
44
|
+
grid2: "appkit-poster-grid--2",
|
|
45
|
+
grid3: "appkit-poster-grid--3",
|
|
46
|
+
grid4: "appkit-poster-grid--4",
|
|
47
|
+
};
|
|
48
|
+
const HEIGHT_CLASS = {
|
|
49
|
+
compact: POSTER_CLASS.compact,
|
|
50
|
+
default: "",
|
|
51
|
+
tall: POSTER_CLASS.tall,
|
|
52
|
+
};
|
|
53
|
+
export function PosterCard({ media, eyebrow, title, text, meta, chips, height = "default", className = "", }) {
|
|
54
|
+
const classes = [POSTER_CLASS.root, HEIGHT_CLASS[height], className]
|
|
55
|
+
.filter(Boolean)
|
|
56
|
+
.join(" ");
|
|
57
|
+
return (_jsxs("div", { className: classes, children: [media ? _jsx("div", { className: POSTER_CLASS.media, children: media }) : null, _jsx("div", { className: POSTER_CLASS.scrim, "aria-hidden": "true" }), _jsxs("div", { className: POSTER_CLASS.body, children: [eyebrow ? _jsx("span", { className: POSTER_CLASS.eyebrow, children: eyebrow }) : null, title ? (_jsx(Heading, { level: 3, size: height === "compact" ? "lg" : "2xl", weight: "bold", color: "inherit", className: POSTER_CLASS.title, children: title })) : null, text ? (_jsx(Text, { size: "sm", color: "inherit", truncate: 3, className: POSTER_CLASS.text, children: text })) : null, meta ? _jsx("span", { className: POSTER_CLASS.meta, children: meta }) : null, chips ? _jsx("div", { className: POSTER_CLASS.chips, children: chips }) : null] })] }));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* One chip. Renders an `<a>` when it has an `href` and a `<span>` otherwise,
|
|
61
|
+
* so a non-navigating chip is not announced as a link.
|
|
62
|
+
*
|
|
63
|
+
* 🛑 A plain `<a>`, not `next/link`, because `PosterCard` lives in the UI layer
|
|
64
|
+
* and must not pull a framework router into every consumer of the barrel — the
|
|
65
|
+
* same reason `media` is a slot. Consumers that want client-side navigation
|
|
66
|
+
* compose their own link around the chip classes via `POSTER_CLASS`.
|
|
67
|
+
*/
|
|
68
|
+
export function PosterChip({ href, emphasis = "glass", target, children, }) {
|
|
69
|
+
const classes = [POSTER_CLASS.chip, emphasis === "solid" ? POSTER_CLASS.chipKey : ""]
|
|
70
|
+
.filter(Boolean)
|
|
71
|
+
.join(" ");
|
|
72
|
+
if (!href)
|
|
73
|
+
return _jsx("span", { className: classes, children: children });
|
|
74
|
+
return (_jsx("a", { href: href, className: classes, target: target ?? "_self", rel: target === "_blank" ? "noopener noreferrer" : undefined, children: children }));
|
|
75
|
+
}
|
|
76
|
+
/* ── The no-artwork sibling ───────────────────────────────────────────────
|
|
77
|
+
*
|
|
78
|
+
* Lives in this file, not at the call site, for one mechanical reason: raw
|
|
79
|
+
* `<div>`/`<span>`/`<h3>`/`<p>` are blocked outside the primitive source
|
|
80
|
+
* directories by `audit-html-wrappers`, and `features/homepage/` is not one.
|
|
81
|
+
* The two cards are also one decision — a `custom-cards` section can mix cards
|
|
82
|
+
* that have an image with cards that do not, and they have to read as one row.
|
|
83
|
+
*/
|
|
84
|
+
export const PLAIN_CLASS = {
|
|
85
|
+
root: "appkit-plain-card",
|
|
86
|
+
eyebrow: "appkit-plain-card__eyebrow",
|
|
87
|
+
title: "appkit-plain-card__title",
|
|
88
|
+
text: "appkit-plain-card__text",
|
|
89
|
+
chips: "appkit-plain-card__chips",
|
|
90
|
+
chip: "appkit-chip",
|
|
91
|
+
chipKey: "appkit-chip--key",
|
|
92
|
+
};
|
|
93
|
+
export function PlainCard({ eyebrow, title, text, chips, footer, className = "", }) {
|
|
94
|
+
const classes = [PLAIN_CLASS.root, className].filter(Boolean).join(" ");
|
|
95
|
+
return (_jsxs("div", { className: classes, children: [eyebrow ? _jsx("span", { className: PLAIN_CLASS.eyebrow, children: eyebrow }) : null, title ? (_jsx(Heading, { level: 3, size: "xl", weight: "bold", color: "inherit", className: PLAIN_CLASS.title, children: title })) : null, text ? (_jsx(Text, { size: "sm", color: "inherit", className: PLAIN_CLASS.text, children: text })) : null, chips ? _jsx("div", { className: PLAIN_CLASS.chips, children: chips }) : null, footer] }));
|
|
96
|
+
}
|
|
97
|
+
const GRID_CLASS = {
|
|
98
|
+
1: POSTER_CLASS.grid1,
|
|
99
|
+
2: POSTER_CLASS.grid2,
|
|
100
|
+
3: POSTER_CLASS.grid3,
|
|
101
|
+
4: POSTER_CLASS.grid4,
|
|
102
|
+
};
|
|
103
|
+
/** 1 → 2 → N. See the note on `.appkit-poster-grid` for why not `Grid cols="cards"`. */
|
|
104
|
+
export function PosterGrid({ columns = 4, children, className = "" }) {
|
|
105
|
+
const classes = [POSTER_CLASS.grid, GRID_CLASS[columns], className]
|
|
106
|
+
.filter(Boolean)
|
|
107
|
+
.join(" ");
|
|
108
|
+
return _jsx("div", { className: classes, children: children });
|
|
109
|
+
}
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PosterCard — an image-led tile. Artwork fills the whole card, a vertical
|
|
3
|
+
* scrim carries the type, and the links sit as chips on the dark end.
|
|
4
|
+
*
|
|
5
|
+
* 🛑 This family is THEME-INVARIANT on purpose, and that is not the usual
|
|
6
|
+
* mistake. Root Cause #67 is about pairing a theme-INVERTING token
|
|
7
|
+
* (`bg-{status}-surface`) with a fixed `text-white`; here the background is a
|
|
8
|
+
* photograph plus an opaque dark scrim in BOTH themes, so white ink is correct
|
|
9
|
+
* in both and a theme-relative token would be the bug. Same reasoning as
|
|
10
|
+
* `surface="media-dark"`.
|
|
11
|
+
*
|
|
12
|
+
* 🛑 Colours are `rgb(… / α)`, never hex — `audit-hex-tokens` walks
|
|
13
|
+
* `appkit/src` and a standalone hex literal is a category-D violation.
|
|
14
|
+
*
|
|
15
|
+
* 🛑 The scrim lives here rather than on a call site's className because
|
|
16
|
+
* `audit-html-wrappers/RAW_GRADIENT_UTILITY` blocks `bg-gradient-to-*` outside
|
|
17
|
+
* primitive sources, and because both consumers (the homepage systems matrix
|
|
18
|
+
* and the Shop-by-Category tiles) need the identical ramp — two hand-written
|
|
19
|
+
* copies is how they drift.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/* The near-black the whole family composes against. Declared once so the card
|
|
23
|
+
base, the scrim stops and the solid chip's ink cannot disagree. */
|
|
24
|
+
.appkit-poster {
|
|
25
|
+
--appkit-poster-ink: 9 9 11;
|
|
26
|
+
|
|
27
|
+
position: relative;
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-direction: column;
|
|
30
|
+
justify-content: flex-end;
|
|
31
|
+
min-height: 20rem;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
isolation: isolate;
|
|
34
|
+
border-radius: var(--appkit-radius-2xl);
|
|
35
|
+
background-color: rgb(var(--appkit-poster-ink));
|
|
36
|
+
/* The card is itself a link on the category tile. */
|
|
37
|
+
text-decoration: none;
|
|
38
|
+
/* A hairline INSIDE the radius. A `border` would be clipped by
|
|
39
|
+
`overflow: hidden` on the image corners; an inset ring is not. */
|
|
40
|
+
box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.08);
|
|
41
|
+
transition:
|
|
42
|
+
transform 0.35s cubic-bezier(0.2, 0.7, 0.3, 1),
|
|
43
|
+
box-shadow 0.35s cubic-bezier(0.2, 0.7, 0.3, 1);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.appkit-poster--tall {
|
|
47
|
+
min-height: 26rem;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.appkit-poster--compact {
|
|
51
|
+
min-height: 14rem;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.appkit-poster--compact .appkit-poster__body {
|
|
55
|
+
gap: var(--appkit-space-1);
|
|
56
|
+
padding: var(--appkit-space-4);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Hover lift. Guarded so a touch device — where `:hover` sticks after a tap —
|
|
60
|
+
never leaves a card translated. */
|
|
61
|
+
@media (hover: hover) {
|
|
62
|
+
.appkit-poster:hover {
|
|
63
|
+
transform: translateY(-3px);
|
|
64
|
+
box-shadow:
|
|
65
|
+
inset 0 0 0 1px rgb(255 255 255 / 0.16),
|
|
66
|
+
0 18px 40px -18px rgb(0 0 0 / 0.55);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.appkit-poster:hover .appkit-poster__media {
|
|
70
|
+
transform: scale(1.06);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* The whole card is a link on the category tile, so the ring must be visible
|
|
75
|
+
against the artwork rather than against a surface token. */
|
|
76
|
+
.appkit-poster:focus-visible,
|
|
77
|
+
.appkit-poster:has(:focus-visible) {
|
|
78
|
+
outline: 2px solid rgb(255 255 255 / 0.9);
|
|
79
|
+
outline-offset: 2px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@media (prefers-reduced-motion: reduce) {
|
|
83
|
+
.appkit-poster,
|
|
84
|
+
.appkit-poster__media {
|
|
85
|
+
transition: none;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.appkit-poster:hover {
|
|
89
|
+
transform: none;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.appkit-poster:hover .appkit-poster__media {
|
|
93
|
+
transform: none;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* ── Artwork ──────────────────────────────────────────────────────────── */
|
|
98
|
+
|
|
99
|
+
/*
|
|
100
|
+
* The positioned parent `MediaImage` needs — it renders `fill`, so without an
|
|
101
|
+
* absolutely-positioned ancestor Next warns and the image collapses.
|
|
102
|
+
*
|
|
103
|
+
* `object-position: center 22%` rather than `center`: every one of the four
|
|
104
|
+
* generation posters is portrait key art with the cast in the upper half and a
|
|
105
|
+
* burnt-in wordmark at the bottom, so a centred crop in a landscape-ish box
|
|
106
|
+
* frames torsos and puts the wordmark straight under the card's own title.
|
|
107
|
+
*/
|
|
108
|
+
.appkit-poster__media {
|
|
109
|
+
position: absolute;
|
|
110
|
+
inset: 0;
|
|
111
|
+
z-index: 0;
|
|
112
|
+
transform-origin: center 30%;
|
|
113
|
+
transition: transform 0.6s cubic-bezier(0.2, 0.7, 0.3, 1);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.appkit-poster__media img {
|
|
117
|
+
object-position: center 22%;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* ── Scrim ────────────────────────────────────────────────────────────── */
|
|
121
|
+
|
|
122
|
+
/*
|
|
123
|
+
* Two ramps, and both are load-bearing:
|
|
124
|
+
*
|
|
125
|
+
* - the vertical one takes the bottom ~55% to near-opaque so body copy and a
|
|
126
|
+
* dozen chips are readable over busy, saturated artwork, while leaving the
|
|
127
|
+
* top third nearly clear so the art is still the thing you see;
|
|
128
|
+
* - the horizontal one is a shallow left wash, so the first word of every
|
|
129
|
+
* line has contrast even where the art happens to be pale.
|
|
130
|
+
*
|
|
131
|
+
* The stops are deliberately uneven. A linear fade reads as a grey veil over
|
|
132
|
+
* the whole image; an eased one looks like light falling off.
|
|
133
|
+
*/
|
|
134
|
+
.appkit-poster__scrim {
|
|
135
|
+
position: absolute;
|
|
136
|
+
inset: 0;
|
|
137
|
+
z-index: 1;
|
|
138
|
+
pointer-events: none;
|
|
139
|
+
background:
|
|
140
|
+
linear-gradient(
|
|
141
|
+
to top,
|
|
142
|
+
rgb(var(--appkit-poster-ink) / 0.97) 0%,
|
|
143
|
+
rgb(var(--appkit-poster-ink) / 0.93) 22%,
|
|
144
|
+
rgb(var(--appkit-poster-ink) / 0.72) 42%,
|
|
145
|
+
rgb(var(--appkit-poster-ink) / 0.34) 64%,
|
|
146
|
+
rgb(var(--appkit-poster-ink) / 0.08) 84%,
|
|
147
|
+
rgb(var(--appkit-poster-ink) / 0) 100%
|
|
148
|
+
),
|
|
149
|
+
linear-gradient(
|
|
150
|
+
to right,
|
|
151
|
+
rgb(var(--appkit-poster-ink) / 0.55) 0%,
|
|
152
|
+
rgb(var(--appkit-poster-ink) / 0.12) 48%,
|
|
153
|
+
rgb(var(--appkit-poster-ink) / 0) 100%
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* ── Content ──────────────────────────────────────────────────────────── */
|
|
158
|
+
|
|
159
|
+
.appkit-poster__body {
|
|
160
|
+
position: relative;
|
|
161
|
+
z-index: 2;
|
|
162
|
+
display: flex;
|
|
163
|
+
flex-direction: column;
|
|
164
|
+
gap: var(--appkit-space-3);
|
|
165
|
+
padding: var(--appkit-space-5);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.appkit-poster__eyebrow {
|
|
169
|
+
display: inline-flex;
|
|
170
|
+
align-items: center;
|
|
171
|
+
gap: var(--appkit-space-2);
|
|
172
|
+
color: rgb(255 255 255 / 0.62);
|
|
173
|
+
font-size: var(--appkit-text-xs);
|
|
174
|
+
font-weight: 600;
|
|
175
|
+
letter-spacing: 0.12em;
|
|
176
|
+
text-transform: uppercase;
|
|
177
|
+
font-variant-numeric: tabular-nums;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* A short rule before the eyebrow — the one piece of ornament in the card, and
|
|
181
|
+
it earns its place by separating the date range from the artwork behind it. */
|
|
182
|
+
.appkit-poster__eyebrow::before {
|
|
183
|
+
content: "";
|
|
184
|
+
width: 1.25rem;
|
|
185
|
+
height: 1px;
|
|
186
|
+
flex: none;
|
|
187
|
+
background: rgb(255 255 255 / 0.45);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/*
|
|
191
|
+
* 🛑 NO `font-size` and NO `font-weight` here, and that is a decision.
|
|
192
|
+
*
|
|
193
|
+
* The title and body render through `<Heading>`/`<Text>`, which emit
|
|
194
|
+
* `.appkit-text--2xl` / `.appkit-font--bold` — plain CSS classes at the same
|
|
195
|
+
* (0,1,0) specificity as these. A tie is broken by ORDER IN THE BUNDLE, which
|
|
196
|
+
* is `index.style.css`'s import list: an invisible dependency that flips the
|
|
197
|
+
* moment someone reorders an unrelated line. So size and weight are passed as
|
|
198
|
+
* PROPS (including the compact tile's smaller title) and this rule owns only
|
|
199
|
+
* what a prop cannot express.
|
|
200
|
+
*
|
|
201
|
+
* Line clamping is `truncate={3}` on the `<Text>` for the same reason —
|
|
202
|
+
* one owner, not two.
|
|
203
|
+
*/
|
|
204
|
+
.appkit-poster__title {
|
|
205
|
+
margin: 0;
|
|
206
|
+
color: rgb(255 255 255);
|
|
207
|
+
line-height: 1.15;
|
|
208
|
+
letter-spacing: -0.015em;
|
|
209
|
+
text-wrap: balance;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.appkit-poster__text {
|
|
213
|
+
margin: 0;
|
|
214
|
+
color: rgb(255 255 255 / 0.68);
|
|
215
|
+
line-height: 1.55;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.appkit-poster__meta {
|
|
219
|
+
color: rgb(255 255 255 / 0.55);
|
|
220
|
+
font-size: var(--appkit-text-xs);
|
|
221
|
+
font-weight: 500;
|
|
222
|
+
font-variant-numeric: tabular-nums;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/* ── Chips ────────────────────────────────────────────────────────────── */
|
|
226
|
+
|
|
227
|
+
/*
|
|
228
|
+
* A hairline rule above the chip row. The body copy and the links are two
|
|
229
|
+
* different kinds of thing — prose versus navigation — and on a card with
|
|
230
|
+
* seven or eight chips that boundary is what stops the block reading as a
|
|
231
|
+
* paragraph that ran out of punctuation.
|
|
232
|
+
*/
|
|
233
|
+
.appkit-poster__chips {
|
|
234
|
+
display: flex;
|
|
235
|
+
flex-wrap: wrap;
|
|
236
|
+
gap: var(--appkit-space-2);
|
|
237
|
+
margin-top: var(--appkit-space-1);
|
|
238
|
+
padding-top: var(--appkit-space-3);
|
|
239
|
+
border-top: 1px solid rgb(255 255 255 / 0.12);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.appkit-poster__chip {
|
|
243
|
+
display: inline-flex;
|
|
244
|
+
align-items: center;
|
|
245
|
+
flex: none;
|
|
246
|
+
padding: 0.3125rem 0.6875rem;
|
|
247
|
+
border: 1px solid rgb(255 255 255 / 0.16);
|
|
248
|
+
border-radius: var(--appkit-radius-full);
|
|
249
|
+
background: rgb(255 255 255 / 0.09);
|
|
250
|
+
/* Progressive: unsupported browsers get the flat 9% wash, which is already
|
|
251
|
+
legible against the scrim. Nothing depends on the blur. */
|
|
252
|
+
backdrop-filter: blur(8px);
|
|
253
|
+
color: rgb(255 255 255 / 0.88);
|
|
254
|
+
font-size: var(--appkit-text-xs);
|
|
255
|
+
font-weight: 500;
|
|
256
|
+
line-height: 1.25;
|
|
257
|
+
white-space: nowrap;
|
|
258
|
+
text-decoration: none;
|
|
259
|
+
transition:
|
|
260
|
+
background-color 0.2s ease,
|
|
261
|
+
border-color 0.2s ease,
|
|
262
|
+
color 0.2s ease;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.appkit-poster__chip:hover {
|
|
266
|
+
background: rgb(255 255 255 / 0.2);
|
|
267
|
+
border-color: rgb(255 255 255 / 0.38);
|
|
268
|
+
color: rgb(255 255 255);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/*
|
|
272
|
+
* The destination chips — "Parts", "Launchers", "Stadiums". These are the
|
|
273
|
+
* widest pages behind the card, so they invert to a solid fill and sort to the
|
|
274
|
+
* end of the row. One emphasis level, never two: a card where three chips all
|
|
275
|
+
* shout has no hierarchy at all.
|
|
276
|
+
*/
|
|
277
|
+
.appkit-poster__chip--key {
|
|
278
|
+
background: rgb(255 255 255 / 0.95);
|
|
279
|
+
border-color: transparent;
|
|
280
|
+
color: rgb(var(--appkit-poster-ink));
|
|
281
|
+
font-weight: 600;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.appkit-poster__chip--key:hover {
|
|
285
|
+
background: rgb(255 255 255);
|
|
286
|
+
border-color: transparent;
|
|
287
|
+
color: rgb(var(--appkit-poster-ink));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/* ── On-surface chips ─────────────────────────────────────────────────────
|
|
291
|
+
*
|
|
292
|
+
* The light-theme counterpart of `.appkit-poster__chip`, for the same control
|
|
293
|
+
* on a card that has NO artwork — a `custom-cards` section an admin authored
|
|
294
|
+
* without images still renders a row of taxonomy links, and those must not
|
|
295
|
+
* fall back to the four generic button variants that made the row read as a
|
|
296
|
+
* pile of mismatched buttons.
|
|
297
|
+
*
|
|
298
|
+
* Theme-RELATIVE, unlike everything above: there is no scrim here, so the ink
|
|
299
|
+
* has to invert with the theme. `bg-{…}-surface`-style tokens throughout, no
|
|
300
|
+
* fixed white — Root Cause #67.
|
|
301
|
+
*/
|
|
302
|
+
|
|
303
|
+
.appkit-chip {
|
|
304
|
+
display: inline-flex;
|
|
305
|
+
align-items: center;
|
|
306
|
+
flex: none;
|
|
307
|
+
padding: 0.3125rem 0.6875rem;
|
|
308
|
+
border: 1px solid var(--appkit-color-border);
|
|
309
|
+
border-radius: var(--appkit-radius-full);
|
|
310
|
+
background: var(--appkit-color-surface-elevated);
|
|
311
|
+
color: var(--appkit-color-text-muted);
|
|
312
|
+
font-size: var(--appkit-text-xs);
|
|
313
|
+
font-weight: 500;
|
|
314
|
+
line-height: 1.25;
|
|
315
|
+
white-space: nowrap;
|
|
316
|
+
text-decoration: none;
|
|
317
|
+
transition:
|
|
318
|
+
background-color 0.2s ease,
|
|
319
|
+
border-color 0.2s ease,
|
|
320
|
+
color 0.2s ease;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.appkit-chip:hover {
|
|
324
|
+
border-color: var(--appkit-color-primary);
|
|
325
|
+
background: var(--appkit-color-primary-surface);
|
|
326
|
+
color: var(--appkit-color-primary);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.appkit-chip--key {
|
|
330
|
+
border-color: transparent;
|
|
331
|
+
background: var(--appkit-color-primary);
|
|
332
|
+
color: var(--appkit-color-text-on-primary);
|
|
333
|
+
font-weight: 600;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.appkit-chip--key:hover {
|
|
337
|
+
border-color: transparent;
|
|
338
|
+
background: var(--appkit-color-primary-600);
|
|
339
|
+
color: var(--appkit-color-text-on-primary);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/* ── Plain card ───────────────────────────────────────────────────────────
|
|
343
|
+
*
|
|
344
|
+
* The no-artwork sibling of `.appkit-poster`. Same radius, same hairline, same
|
|
345
|
+
* hover — so a mixed section (some cards with images, some without) still
|
|
346
|
+
* reads as one row rather than two designs.
|
|
347
|
+
*/
|
|
348
|
+
|
|
349
|
+
.appkit-plain-card {
|
|
350
|
+
position: relative;
|
|
351
|
+
display: flex;
|
|
352
|
+
flex-direction: column;
|
|
353
|
+
gap: var(--appkit-space-3);
|
|
354
|
+
padding: var(--appkit-space-5);
|
|
355
|
+
min-height: 14rem;
|
|
356
|
+
border-radius: var(--appkit-radius-2xl);
|
|
357
|
+
background: var(--appkit-color-surface);
|
|
358
|
+
box-shadow: inset 0 0 0 1px var(--appkit-color-border);
|
|
359
|
+
transition:
|
|
360
|
+
transform 0.35s cubic-bezier(0.2, 0.7, 0.3, 1),
|
|
361
|
+
box-shadow 0.35s cubic-bezier(0.2, 0.7, 0.3, 1);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
@media (hover: hover) {
|
|
365
|
+
.appkit-plain-card:hover {
|
|
366
|
+
transform: translateY(-3px);
|
|
367
|
+
box-shadow:
|
|
368
|
+
inset 0 0 0 1px var(--appkit-color-primary),
|
|
369
|
+
0 18px 40px -18px rgb(0 0 0 / 0.18);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
@media (prefers-reduced-motion: reduce) {
|
|
374
|
+
.appkit-plain-card {
|
|
375
|
+
transition: none;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.appkit-plain-card:hover {
|
|
379
|
+
transform: none;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.appkit-plain-card__eyebrow {
|
|
384
|
+
display: inline-flex;
|
|
385
|
+
align-items: center;
|
|
386
|
+
gap: var(--appkit-space-2);
|
|
387
|
+
color: var(--appkit-color-text-faint);
|
|
388
|
+
font-size: var(--appkit-text-xs);
|
|
389
|
+
font-weight: 600;
|
|
390
|
+
letter-spacing: 0.12em;
|
|
391
|
+
text-transform: uppercase;
|
|
392
|
+
font-variant-numeric: tabular-nums;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.appkit-plain-card__eyebrow::before {
|
|
396
|
+
content: "";
|
|
397
|
+
width: 1.25rem;
|
|
398
|
+
height: 1px;
|
|
399
|
+
flex: none;
|
|
400
|
+
background: var(--appkit-color-border);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/* Size and weight come from the `<Heading>`/`<Text>` props — see the note on
|
|
404
|
+
`.appkit-poster__title`. */
|
|
405
|
+
.appkit-plain-card__title {
|
|
406
|
+
margin: 0;
|
|
407
|
+
color: var(--appkit-color-text);
|
|
408
|
+
line-height: 1.2;
|
|
409
|
+
letter-spacing: -0.015em;
|
|
410
|
+
text-wrap: balance;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
.appkit-plain-card__text {
|
|
414
|
+
margin: 0;
|
|
415
|
+
color: var(--appkit-color-text-muted);
|
|
416
|
+
line-height: 1.55;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.appkit-plain-card__chips {
|
|
420
|
+
display: flex;
|
|
421
|
+
flex-wrap: wrap;
|
|
422
|
+
gap: var(--appkit-space-2);
|
|
423
|
+
margin-top: auto;
|
|
424
|
+
padding-top: var(--appkit-space-3);
|
|
425
|
+
border-top: 1px solid var(--appkit-color-border-subtle);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/* ── Grid ─────────────────────────────────────────────────────────────── */
|
|
429
|
+
|
|
430
|
+
/*
|
|
431
|
+
* Posters are tall, so they do NOT use `<Grid cols="cards">` — that ladder's
|
|
432
|
+
* `auto-fill` tier is tuned for ~240px product tiles and would open a fifth
|
|
433
|
+
* track on a wide screen, breaking a set of exactly four generations into
|
|
434
|
+
* "four and a gap". A fixed 1 → 2 → 4 ladder is the honest shape for a fixed
|
|
435
|
+
* set.
|
|
436
|
+
*/
|
|
437
|
+
.appkit-poster-grid {
|
|
438
|
+
display: grid;
|
|
439
|
+
gap: var(--appkit-space-4);
|
|
440
|
+
grid-template-columns: minmax(0, 1fr);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/* Explicit rather than inherited from the base. A modifier that generates no
|
|
444
|
+
rule of its own is what `audit-dead-css-classes` exists to catch, and
|
|
445
|
+
"it happens to equal the default today" is not a reason to omit it. */
|
|
446
|
+
.appkit-poster-grid--1 {
|
|
447
|
+
grid-template-columns: minmax(0, 1fr);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
@media (min-width: 40rem) {
|
|
451
|
+
.appkit-poster-grid--2,
|
|
452
|
+
.appkit-poster-grid--3,
|
|
453
|
+
.appkit-poster-grid--4 {
|
|
454
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
@media (min-width: 64rem) {
|
|
459
|
+
.appkit-poster-grid--4 {
|
|
460
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
.appkit-poster-grid--3 {
|
|
464
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
465
|
+
}
|
|
466
|
+
}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -109,6 +109,8 @@ export { ImageMosaic, MOSAIC_MIN } from "./components/ImageMosaic";
|
|
|
109
109
|
export type { ImageMosaicProps, ImageMosaicSize } from "./components/ImageMosaic";
|
|
110
110
|
export { SplitTile } from "./components/SplitTile";
|
|
111
111
|
export type { SplitTileProps, SplitTilePane } from "./components/SplitTile";
|
|
112
|
+
export { PosterCard, PosterChip, PosterGrid, PlainCard, POSTER_CLASS, PLAIN_CLASS, } from "./components/PosterCard";
|
|
113
|
+
export type { PosterCardProps, PosterCardHeight, PosterChipProps, PosterGridProps, PlainCardProps, } from "./components/PosterCard";
|
|
112
114
|
export type { ImageLightboxProps, LightboxImage, } from "./components/ImageLightbox";
|
|
113
115
|
export { ImageLightbox } from "./components/ImageLightbox";
|
|
114
116
|
export type { TagInputProps } from "./components/TagInput";
|