@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
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the selling/product-upload-details page.
|
|
3
|
-
* WHAT: 6 case(s), keyed by full checklist id.
|
|
4
|
-
*
|
|
5
|
-
* The seller product form has THREE separate media controls and they are easy to
|
|
6
|
-
* conflate. Grounded in SellerProductShell.tsx `StepMedia` (:342-497):
|
|
7
|
-
*
|
|
8
|
-
* Main image ImageUpload, label "Main Image", enableAdvancedCrop,
|
|
9
|
-
* cropAspectRatio 1, max 10 MB, index 1
|
|
10
|
-
* Gallery MediaUploadList, label "Gallery (up to N images + 1 video)",
|
|
11
|
-
* maxItems PRODUCT_MAX_IMAGES + PRODUCT_MAX_VIDEOS,
|
|
12
|
-
* maxSizeMB 50, indices 2..PRODUCT_IMAGE_INDEX_MAX
|
|
13
|
-
* Video panel MediaUploadField, YouTube / external URL / trim / poster
|
|
14
|
-
*
|
|
15
|
-
* 🛑 The caps are deliberately named here rather than numbered. They are one
|
|
16
|
-
* constant (`_internal/shared/media/limits.ts`) and they MOVE — 5 -> 10 -> 24 so
|
|
17
|
-
* far — and every previous revision of this comment pinned the number of the day.
|
|
18
|
-
*
|
|
19
|
-
* The existing pages already cover the CAPS (selling/media-limits: the last
|
|
20
|
-
* allowed image uploads, the first over the cap is refused client-side, a second
|
|
21
|
-
* video is refused) and the basics (selling/listing-a-product:
|
|
22
|
-
* upload, preview, remove, crop, multiple). This page covers what neither does:
|
|
23
|
-
* refusal copy, type refusal, ordering, index collision, and the video path that
|
|
24
|
-
* was returning a 500 until 2026-09.
|
|
25
|
-
*
|
|
26
|
-
* @tag domain:tester
|
|
27
|
-
* @tag layer:seed
|
|
28
|
-
* @tag pattern:none
|
|
29
|
-
* @tag access:server-only
|
|
30
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
31
|
-
* @tag sideEffects:none
|
|
32
|
-
*/
|
|
33
|
-
import { MEDIA_ENDPOINTS } from "../../../../constants/api-endpoints.js";
|
|
34
|
-
/*
|
|
35
|
-
* The endpoint comes from the registry, not a literal.
|
|
36
|
-
*
|
|
37
|
-
* These cases genuinely need to name it — the tester is told to open the
|
|
38
|
-
* network panel and read that exact request, and "the signing request" would be
|
|
39
|
-
* too vague for R8, which requires literal values. But a pasted copy of the path
|
|
40
|
-
* is a second definition that silently rots the day the route moves, leaving a
|
|
41
|
-
* tester hunting a request that no longer exists and reporting a bug that is
|
|
42
|
-
* really a stale case. Interpolating keeps it precise AND single-sourced.
|
|
43
|
-
*/
|
|
44
|
-
const SIGN = MEDIA_ENDPOINTS.SIGN;
|
|
45
|
-
const SIGN_IN_SELLER = "Sign in as tyson@beybladearena.in / TempPass123!.";
|
|
46
|
-
export const authored = {
|
|
47
|
-
"checklist-selling-product-upload-details-main-image-crop-applies": {
|
|
48
|
-
roles: ["seller"],
|
|
49
|
-
startPage: "/store/products/new",
|
|
50
|
-
steps: [
|
|
51
|
-
SIGN_IN_SELLER,
|
|
52
|
-
"Open /store/products/new and click 'Show all fields (advanced)' to reach the sectioned form.",
|
|
53
|
-
"Open the Media section and choose public/test-media/sample-image.png for 'Main Image'.",
|
|
54
|
-
"Wait for the crop dialog to appear and note the shape of the crop box.",
|
|
55
|
-
"Drag the crop box to cover clearly only the LEFT half of the picture, then confirm.",
|
|
56
|
-
"Read the thumbnail that appears afterwards and compare what it shows against the original.",
|
|
57
|
-
],
|
|
58
|
-
inputs: { image: "public/test-media/sample-image.png" },
|
|
59
|
-
expectedBehaviour: "The crop is applied to the bytes that are uploaded, not merely previewed. A cropper that shows a selection and then stores the original is worse than no cropper — the seller believes they framed the photo and the marketplace shows something else. The box is locked square because the main image is rendered square on every card.",
|
|
60
|
-
expectedUiState: "A crop dialog opens before any upload begins, and its box is square and stays square when dragged. The resulting thumbnail shows the LEFT half that was selected, not the whole picture.",
|
|
61
|
-
expectedData: { cropAspectRatio: 1 },
|
|
62
|
-
endResult: "Leave without saving. Re-open the form: no half-uploaded image is left attached to a draft.",
|
|
63
|
-
},
|
|
64
|
-
"checklist-selling-product-upload-details-oversize-image-refused-client-side": {
|
|
65
|
-
roles: ["seller"],
|
|
66
|
-
startPage: "/store/products/new",
|
|
67
|
-
steps: [
|
|
68
|
-
SIGN_IN_SELLER,
|
|
69
|
-
"Open /store/products/new and switch to the advanced form.",
|
|
70
|
-
"Open the Media section and read the size limit stated next to 'Main Image'.",
|
|
71
|
-
"Choose public/test-media/oversized.png for the Main Image and start a timer. 🛑 THE BATCH DOES NOT GENERATE THIS FILE — there is no fixture manifest for this page. Run `node tester/scripts/make-media-fixtures.mjs --with-oversized` first; it sizes the fixture by reading the caps out of appkit/src/_internal/shared/media/limits.ts rather than from a remembered number. It is >10 MB of incompressible noise and deliberately not committed.",
|
|
72
|
-
"Read the message that appears and note how long it took.",
|
|
73
|
-
`Open the browser network panel and check whether any request to ${SIGN} was made.`,
|
|
74
|
-
],
|
|
75
|
-
inputs: { image: "public/test-media/oversized.png", limitMb: 10 },
|
|
76
|
-
expectedBehaviour: "A file over the limit is refused BEFORE any bytes leave the browser. The point is the seller's time: a 12 MB upload that travels, then finalises, then fails validation has taken a minute to tell them something the form already knew when they picked the file. The limit is also stated up front rather than only in the refusal.",
|
|
77
|
-
expectedUiState: `The refusal is immediate (well under a second) and reads 'File size must be less than 10MB (current: …)', naming the actual size — 10 is MAX_IMAGE_BYTES from limits.ts. 🛑 EXPECT 50MB INSTEAD, AND RECORD IT: the gallery field passes maxSizeMB={50} explicitly, which is the VIDEO cap applied to a field accepting image/* and video/* alike, so a 12 MB image is accepted client-side. MediaUploadField's own auto-derived defaults (image 25, video 200, pdf 10) disagree with limits.ts (10, 50, 20) on all three. Report the number the message actually states. No ${SIGN} request appears in the network panel. The field keeps whatever image it had before.`,
|
|
78
|
-
expectedData: { signRequestsMade: 0 },
|
|
79
|
-
endResult: "Leave without saving; nothing was uploaded.",
|
|
80
|
-
},
|
|
81
|
-
"checklist-selling-product-upload-details-disallowed-type-refused": {
|
|
82
|
-
roles: ["seller"],
|
|
83
|
-
startPage: "/store/products/new",
|
|
84
|
-
steps: [
|
|
85
|
-
SIGN_IN_SELLER,
|
|
86
|
-
"Open /store/products/new and switch to the advanced form.",
|
|
87
|
-
"Open the Media section and choose public/test-media/sample-vector.svg for the Main Image.",
|
|
88
|
-
"Read the message that appears.",
|
|
89
|
-
"Now choose public/test-media/sample-image.png for the same field.",
|
|
90
|
-
"Read whether it is accepted.",
|
|
91
|
-
],
|
|
92
|
-
inputs: { rejected: "public/test-media/sample-vector.svg", accepted: "public/test-media/sample-image.png" },
|
|
93
|
-
expectedBehaviour: "SVG is deliberately outside the allowed image types — it is a document format that can carry script, and it is served from our own origin. The refusal happens on type, not on extension alone, and the control recovers: refusing one file must not leave the field wedged.",
|
|
94
|
-
expectedUiState: "The SVG is refused with a message naming the accepted types. Immediately afterwards the PNG uploads normally in the same field — no reload needed.",
|
|
95
|
-
endResult: "Leave without saving.",
|
|
96
|
-
},
|
|
97
|
-
"checklist-selling-product-upload-details-gallery-order-persists": {
|
|
98
|
-
roles: ["seller"],
|
|
99
|
-
startPage: "/store/products/new",
|
|
100
|
-
steps: [
|
|
101
|
-
SIGN_IN_SELLER,
|
|
102
|
-
"Open /store/products/new and switch to the advanced form.",
|
|
103
|
-
"Open the Media section and add three gallery images one at a time: public/test-media/sample-image.png, then public/test-media/sample-image-2.png, then public/test-media/sample-image-3.png.",
|
|
104
|
-
"Note the order the three thumbnails appear in, left to right.",
|
|
105
|
-
"Drag the THIRD thumbnail to the first position.",
|
|
106
|
-
"Fill Title 'Gallery Order Probe', Description 'Checking that gallery ordering survives a save and reload.', Category 'Beyblade Burst', Price 499, then Publish.",
|
|
107
|
-
"Re-open the product for editing and read the gallery order again.",
|
|
108
|
-
],
|
|
109
|
-
inputs: {
|
|
110
|
-
images: "public/test-media/sample-image.png + sample-image-2.png + sample-image-3.png",
|
|
111
|
-
title: "Gallery Order Probe",
|
|
112
|
-
price: 499,
|
|
113
|
-
},
|
|
114
|
-
expectedBehaviour: "Gallery order is the seller's editorial decision about which angle a buyer sees second, so it is stored, not just displayed. Order that survives in the form but resets on reload means the array is being rebuilt from upload time rather than from the arrangement.",
|
|
115
|
-
expectedUiState: "After the drag the moved image is first. After publish and re-open it is STILL first, in the same order as before the save.",
|
|
116
|
-
expectedData: { firstGalleryImage: "public/test-media/sample-image-3.png" },
|
|
117
|
-
endResult: "The published product's gallery order matches what was arranged. Delete the product afterwards.",
|
|
118
|
-
},
|
|
119
|
-
"checklist-selling-product-upload-details-main-image-does-not-collide-with-gallery": {
|
|
120
|
-
roles: ["seller"],
|
|
121
|
-
startPage: "/store/products/new",
|
|
122
|
-
steps: [
|
|
123
|
-
SIGN_IN_SELLER,
|
|
124
|
-
"Open /store/products/new and switch to the advanced form.",
|
|
125
|
-
"Open the Media section and set the Main Image to public/test-media/sample-image.png, accepting the crop.",
|
|
126
|
-
"Add public/test-media/sample-image-2.png as the first GALLERY image.",
|
|
127
|
-
"Read both previews and confirm they show different pictures.",
|
|
128
|
-
"Publish with Title 'Slot Collision Probe', Description 'Main image and first gallery image must not overwrite each other.', Category 'Beyblade Burst', Price 499.",
|
|
129
|
-
"Open the product's public page at /products/{its slug} and read the main image and the first gallery thumbnail.",
|
|
130
|
-
],
|
|
131
|
-
inputs: { mainImage: "public/test-media/sample-image.png", firstGalleryImage: "public/test-media/sample-image-2.png", price: 499 },
|
|
132
|
-
expectedBehaviour: "The main image occupies index 1 and the gallery starts at index 2. Filenames here are content-derived with no timestamp, so two uploads that computed the same index would write the same storage path and the second would silently overwrite the first — the seller would see one of their two pictures simply vanish.",
|
|
133
|
-
expectedUiState: "The main image and the first gallery thumbnail show DIFFERENT pictures, both in the form and on the published page. Neither is blank.",
|
|
134
|
-
expectedData: { distinctImages: 2 },
|
|
135
|
-
endResult: "Both images survive a reload of the public page. Delete the product afterwards.",
|
|
136
|
-
},
|
|
137
|
-
"checklist-selling-product-upload-details-video-upload-succeeds": {
|
|
138
|
-
roles: ["seller"],
|
|
139
|
-
startPage: "/store/products/new",
|
|
140
|
-
steps: [
|
|
141
|
-
SIGN_IN_SELLER,
|
|
142
|
-
"Open /store/products/new and switch to the advanced form.",
|
|
143
|
-
"Open the Media section and open the video panel's 'Upload' tab.",
|
|
144
|
-
"Choose public/test-media/sample-video.mp4 and wait for it to finish.",
|
|
145
|
-
`Open the browser network panel and read the status of the ${SIGN} request.`,
|
|
146
|
-
"Read whether a poster frame and a duration appear.",
|
|
147
|
-
"Publish with Title 'Video Upload Probe', Description 'Checking the seller video upload path end to end.', Category 'Beyblade Burst', Price 499, then open the public page and play the video.",
|
|
148
|
-
],
|
|
149
|
-
inputs: { video: "public/test-media/sample-video.mp4", price: 499 },
|
|
150
|
-
expectedBehaviour: "The dedicated video panel uploads through the same signed-URL flow as the gallery. This path returned HTTP 500 until 2026-09 because the panel omitted the category from the upload context and the filename generator threw on it — so every seller video upload from this panel failed while the gallery path worked. This case is that defect's regression test.",
|
|
151
|
-
expectedUiState: `${SIGN} returns 200, not 400 or 500. A poster frame and a duration appear. The published page plays the video.`,
|
|
152
|
-
expectedData: { signStatus: 200 },
|
|
153
|
-
endResult: "The video survives a reload of the public page. Delete the product afterwards.",
|
|
154
|
-
},
|
|
155
|
-
};
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the selling/quick-add-minimum-details page.
|
|
3
|
-
* WHAT: 6 case(s), keyed by full checklist id.
|
|
4
|
-
*
|
|
5
|
-
* 🛑 THE QUICK FORM AND "THE FIELDS VISIBLE ON WHATSAPP" ARE THE SAME SET. That is
|
|
6
|
-
* what makes this one page rather than two.
|
|
7
|
-
*
|
|
8
|
-
* `/store/products/new` does NOT open the sectioned form. SellerProductShell.tsx
|
|
9
|
-
* :1379 picks `formMode = "quick"` whenever mode is create and listingType is
|
|
10
|
-
* standard, so the default is QuickProductForm — six fields: title*, category*,
|
|
11
|
-
* price*, mainImage*, description, stockQuantity. The sectioned form is behind
|
|
12
|
-
* "Show all fields (advanced)".
|
|
13
|
-
*
|
|
14
|
-
* And the WhatsApp catalog push (catalog-sync/route.ts:70-86) sends exactly
|
|
15
|
-
* title, price, mainImage, condition and stockQuantity plus a derived slug and
|
|
16
|
-
* link. That is the quick form's field set. A seller who fills only the short
|
|
17
|
-
* form has, by construction, filled everything a WhatsApp buyer will ever see.
|
|
18
|
-
*
|
|
19
|
-
* 🛑 TWO CASES HERE ARE EXPECTED TO FAIL, and their expectations are written as
|
|
20
|
-
* the CORRECT behaviour rather than the current one. A case that documents a bug
|
|
21
|
-
* as intended passes forever and locks the defect in. Both are known:
|
|
22
|
-
*
|
|
23
|
-
* condition-options-are-all-saveable the form offers Like New / Good / Fair
|
|
24
|
-
* (SellerProductShell.tsx:228-235) but
|
|
25
|
-
* productBaseSchema accepts only new /
|
|
26
|
-
* used / refurbished / broken
|
|
27
|
-
* (request-schemas.ts:155)
|
|
28
|
-
* description-requirement-is-honest QuickProductForm labels description
|
|
29
|
-
* "Brief description (optional)" and never
|
|
30
|
-
* validates it, while the server requires
|
|
31
|
-
* >= 20 characters (:122-128)
|
|
32
|
-
*
|
|
33
|
-
* @tag domain:tester
|
|
34
|
-
* @tag layer:seed
|
|
35
|
-
* @tag pattern:none
|
|
36
|
-
* @tag access:server-only
|
|
37
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
38
|
-
* @tag sideEffects:none
|
|
39
|
-
*/
|
|
40
|
-
const SIGN_IN_SELLER = "Sign in as tyson@beybladearena.in / TempPass123!.";
|
|
41
|
-
export const authored = {
|
|
42
|
-
"checklist-selling-quick-add-minimum-details-quick-form-is-the-default": {
|
|
43
|
-
roles: ["seller"],
|
|
44
|
-
startPage: "/store/products/new",
|
|
45
|
-
steps: [
|
|
46
|
-
SIGN_IN_SELLER,
|
|
47
|
-
"Open /store/products/new without clicking anything else.",
|
|
48
|
-
"Read the heading and count the input fields on screen.",
|
|
49
|
-
"List the field labels in order.",
|
|
50
|
-
"Read whether a control offering the full form is present, and read its label.",
|
|
51
|
-
"Open /store/art/new and count its fields for comparison.",
|
|
52
|
-
],
|
|
53
|
-
expectedBehaviour: "Creating an ordinary product opens the SHORT form, because most listings need six fields and the sectioned form asks for thirty. The full form stays one click away rather than being the default. Non-standard types (art, auctions) open the sectioned form directly, since they carry type-specific fields the short form has no room for.",
|
|
54
|
-
expectedUiState: "Six fields: Product Name, Category, Price, Product Image, Description, Stock Quantity — and a control reading 'Show all fields (advanced)'. /store/art/new shows the sectioned form instead.",
|
|
55
|
-
expectedData: { quickFormFields: 6 },
|
|
56
|
-
endResult: "Read-only; leave without saving.",
|
|
57
|
-
},
|
|
58
|
-
"checklist-selling-quick-add-minimum-details-publish-with-the-minimum": {
|
|
59
|
-
roles: ["seller"],
|
|
60
|
-
startPage: "/store/products/new",
|
|
61
|
-
steps: [
|
|
62
|
-
SIGN_IN_SELLER,
|
|
63
|
-
"Open /store/products/new.",
|
|
64
|
-
"Enter Product Name 'Minimum Details Probe'.",
|
|
65
|
-
"Pick Category 'Beyblade Burst'.",
|
|
66
|
-
"Enter Price 499.",
|
|
67
|
-
"Upload public/test-media/sample-image.png as the Product Image.",
|
|
68
|
-
"Enter Description 'A short-form listing created with only the required fields present.'",
|
|
69
|
-
"Click Publish and read what happens.",
|
|
70
|
-
"Open the product's public page at /products/{its slug} and read the title, price and image.",
|
|
71
|
-
],
|
|
72
|
-
inputs: {
|
|
73
|
-
title: "Minimum Details Probe",
|
|
74
|
-
category: "Beyblade Burst",
|
|
75
|
-
price: 499,
|
|
76
|
-
image: "public/test-media/sample-image.png",
|
|
77
|
-
description: "A short-form listing created with only the required fields present.",
|
|
78
|
-
},
|
|
79
|
-
expectedBehaviour: "The short form can produce a real, published, buyable listing on its own. If it cannot, it is a decoy: the seller fills it, is refused, and has to learn the long form anyway — having already done the work twice.",
|
|
80
|
-
expectedUiState: "Publish succeeds with no inline errors and no error toast. The public page renders the title, ₹499 and the uploaded image.",
|
|
81
|
-
expectedData: { published: true },
|
|
82
|
-
endResult: "The listing survives a reload of the public page and appears in /store/products. Delete it afterwards.",
|
|
83
|
-
},
|
|
84
|
-
"checklist-selling-quick-add-minimum-details-advanced-flip-keeps-values": {
|
|
85
|
-
roles: ["seller"],
|
|
86
|
-
startPage: "/store/products/new",
|
|
87
|
-
steps: [
|
|
88
|
-
SIGN_IN_SELLER,
|
|
89
|
-
"Open /store/products/new.",
|
|
90
|
-
"Enter Product Name 'Flip Probe', Price 750, and Description 'Checking that switching to the full form keeps what was already typed.'",
|
|
91
|
-
"Pick Category 'Beyblade Burst'.",
|
|
92
|
-
"Click 'Show all fields (advanced)'.",
|
|
93
|
-
"Read the Title, Price, Description and Category fields in the sectioned form.",
|
|
94
|
-
"Read whether any value is blank that was filled a moment ago.",
|
|
95
|
-
],
|
|
96
|
-
inputs: { title: "Flip Probe", price: 750, category: "Beyblade Burst" },
|
|
97
|
-
expectedBehaviour: "The flip changes the presentation, not the draft. Losing typed values on the way to the full form punishes the seller for outgrowing the short one, and teaches them to start with the long form every time — which defeats the point of having a short one.",
|
|
98
|
-
expectedUiState: "Title reads 'Flip Probe', Price 750, Category 'Beyblade Burst' and the description is intact in the sectioned form's Basic and Pricing sections.",
|
|
99
|
-
expectedData: { valuesPreserved: 4 },
|
|
100
|
-
endResult: "Leave without saving.",
|
|
101
|
-
},
|
|
102
|
-
"checklist-selling-quick-add-minimum-details-condition-options-are-all-saveable": {
|
|
103
|
-
roles: ["seller"],
|
|
104
|
-
startPage: "/store/products/new",
|
|
105
|
-
steps: [
|
|
106
|
-
SIGN_IN_SELLER,
|
|
107
|
-
"Open /store/products/new and click 'Show all fields (advanced)'.",
|
|
108
|
-
"Open the Basic section and read every option in the Condition dropdown, writing them all down.",
|
|
109
|
-
"Fill Product Name 'Condition Probe', Description 'Checking that every condition the form offers can actually be saved.', Category 'Beyblade Burst', Price 499 and a Product Image. The six labels are exactly: Product Name, Category, Price (₹), Stock Quantity, Description, Product Image — there is no field labelled Title or Main Image.",
|
|
110
|
-
"Select Condition 'Like New' and click Publish.",
|
|
111
|
-
"Read the result — inline error, toast, or success.",
|
|
112
|
-
"Repeat with 'Good', then with 'Fair', then with 'New', reading the result each time.",
|
|
113
|
-
],
|
|
114
|
-
inputs: { title: "Condition Probe", price: 499, conditions: "Like New, Good, Fair, New" },
|
|
115
|
-
expectedBehaviour: "Every option the dropdown offers can be saved. A select that lists a value the server rejects is a trap with no way out — the seller picks the option that describes their item honestly and is refused, with nothing on screen saying which options are real.",
|
|
116
|
-
expectedUiState: "Publishing succeeds for EVERY option in the list, including Like New, Good and Fair. Any option that produces a validation failure is the finding — record which ones and quote the message.",
|
|
117
|
-
expectedData: { saveableConditions: "all options listed in the dropdown" },
|
|
118
|
-
endResult: "Each successful publish is visible on the public page with the chosen condition. Delete the listings afterwards.",
|
|
119
|
-
},
|
|
120
|
-
"checklist-selling-quick-add-minimum-details-description-requirement-is-honest": {
|
|
121
|
-
roles: ["seller"],
|
|
122
|
-
startPage: "/store/products/new",
|
|
123
|
-
steps: [
|
|
124
|
-
SIGN_IN_SELLER,
|
|
125
|
-
"Open /store/products/new.",
|
|
126
|
-
"Read the Description field's label and note exactly whether it says required or optional.",
|
|
127
|
-
"Fill Product Name 'Short Description Probe', Category 'Beyblade Burst', Price 499 and a Product Image.",
|
|
128
|
-
"Type exactly 'Nice bey' in Description — eight characters.",
|
|
129
|
-
"Click Publish and read what happens, and WHERE it appears.",
|
|
130
|
-
"If it was refused, read whether the message appeared on the Description field itself or somewhere else.",
|
|
131
|
-
],
|
|
132
|
-
inputs: { title: "Short Description Probe", description: "Nice bey", price: 499 },
|
|
133
|
-
expectedBehaviour: "The form tells the truth about what it requires, and it tells it at the field. Either the description really is optional and a short one publishes, or it is required and the label says so with the minimum length stated. What must not happen is a field marked optional being refused by the server after the seller commits — that is the form making a promise the save does not keep.",
|
|
134
|
-
expectedUiState: "Label and behaviour agree. If a minimum length applies, the label states it and a short entry is caught inline on the Description field BEFORE publishing. A toast appearing after Publish, with the field itself showing no error, is the failure.",
|
|
135
|
-
expectedData: { errorShownInline: true },
|
|
136
|
-
endResult: "Either the listing publishes, or nothing is created and the form still holds what was typed. Delete anything created.",
|
|
137
|
-
},
|
|
138
|
-
};
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the selling/sectionised-forms page.
|
|
3
|
-
* WHAT: 9 case(s), keyed by full checklist id.
|
|
4
|
-
*
|
|
5
|
-
* Written by hand, case by case, against the label each one states. There is no
|
|
6
|
-
* generator: the authoring scripts were deleted once it was clear they were
|
|
7
|
-
* scaffolding around work that is simply writing.
|
|
8
|
-
*
|
|
9
|
-
* 🛑 THE FIRST AND LAST CASES ARE THE SAME ASSERTION AT TWO SCALES: saving a form
|
|
10
|
-
* writes back only what changed. A form that submits its whole object from
|
|
11
|
-
* partly-populated state overwrites every field it did not load, returns a normal
|
|
12
|
-
* success, and is invisible without a reload — which is why both end in one.
|
|
13
|
-
*
|
|
14
|
-
* @tag domain:tester
|
|
15
|
-
* @tag layer:seed
|
|
16
|
-
* @tag pattern:none
|
|
17
|
-
* @tag access:server-only
|
|
18
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
19
|
-
* @tag sideEffects:none
|
|
20
|
-
*/
|
|
21
|
-
export const authored = {
|
|
22
|
-
"checklist-selling-sectionised-forms-form-sections-save-unchanged": {
|
|
23
|
-
roles: ["seller"],
|
|
24
|
-
startPage: "/store/products",
|
|
25
|
-
steps: [
|
|
26
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
27
|
-
"Open the editor for 'Beyblade Burst B-01 Valkyrie' and expand every section.",
|
|
28
|
-
"Write down the value of every field in every section.",
|
|
29
|
-
"Change one field in ONE section — the description — and save.",
|
|
30
|
-
"RELOAD the editor and expand every section again.",
|
|
31
|
-
"Compare every field against what was written down.",
|
|
32
|
-
"Restore the description and save.",
|
|
33
|
-
],
|
|
34
|
-
inputs: { productId: "product-beyblade-burst-valkyrie" },
|
|
35
|
-
expectedBehaviour: "Editing one section leaves every other section's values untouched. A sectionised form that submits its whole object from state populated only by the sections the user opened silently blanks the rest — and the save reports success either way.",
|
|
36
|
-
expectedUiState: "After the reload only the description differs. Every other field in every other section holds its original value, including images, category, brand, stock and the type-specific fields.",
|
|
37
|
-
expectedData: { unintendedFieldChanges: 0 },
|
|
38
|
-
endResult: "The product is restored. Any field that emptied itself is the failure, and it is invisible without expanding every section after the reload.",
|
|
39
|
-
},
|
|
40
|
-
"checklist-selling-sectionised-forms-form-error-summary-jumps": {
|
|
41
|
-
roles: ["seller"],
|
|
42
|
-
startPage: "/store/products/new",
|
|
43
|
-
steps: [
|
|
44
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
45
|
-
"Open /store/products/new and read the page before typing — note whether any errors are listed.",
|
|
46
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create — six flat fields, NO sections at all — so every section, chevron and error-summary step below needs the advanced form, which is the sectionised one this page is about.",
|
|
47
|
-
"Leave required fields empty in two DIFFERENT sections.",
|
|
48
|
-
"Collapse both of those sections.",
|
|
49
|
-
"Attempt to publish.",
|
|
50
|
-
"Read the error summary and click an error belonging to a collapsed section.",
|
|
51
|
-
],
|
|
52
|
-
expectedBehaviour: "The summary appears only after a submit is attempted, and clicking an entry expands the owning section and moves to the field. An error in a collapsed section is otherwise unreachable — the user is told something is wrong and cannot see what.",
|
|
53
|
-
expectedUiState: "No summary before the publish attempt. Afterwards it lists errors from both sections, tagged with their section. Clicking one expands that section and scrolls the field into view.",
|
|
54
|
-
endResult: "Nothing is published. Leave the editor without saving.",
|
|
55
|
-
},
|
|
56
|
-
"checklist-selling-sectionised-forms-required-section-has-no-dead-chevron": {
|
|
57
|
-
roles: ["seller"],
|
|
58
|
-
startPage: "/store/products/new",
|
|
59
|
-
steps: [
|
|
60
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
61
|
-
"Open /store/products/new and look at every section header.",
|
|
62
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create — six flat fields, NO sections at all — so every section, chevron and error-summary step below needs the advanced form, which is the sectionised one this page is about.",
|
|
63
|
-
"Find any section that is always open because it is required.",
|
|
64
|
-
"Look at whether it still shows an expand chevron.",
|
|
65
|
-
"Click that chevron and read what happens.",
|
|
66
|
-
"Compare against a collapsible section's chevron.",
|
|
67
|
-
],
|
|
68
|
-
expectedBehaviour: "A section that cannot collapse does not display a collapse control. A chevron that responds to nothing teaches the user the whole form's chevrons are unreliable, which is a worse cost than the one dead control.",
|
|
69
|
-
expectedUiState: "Always-open sections have no chevron, or their chevron is visibly non-interactive. A chevron that looks identical to a working one and does nothing on click is the failure.",
|
|
70
|
-
endResult: "Read-only; leave the editor without saving.",
|
|
71
|
-
},
|
|
72
|
-
"checklist-selling-sectionised-forms-open-section-does-not-clip-dropdowns": {
|
|
73
|
-
roles: ["seller"],
|
|
74
|
-
startPage: "/store/products/new",
|
|
75
|
-
steps: [
|
|
76
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
77
|
-
"Open /store/products/new and expand a section containing a picker.",
|
|
78
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create — six flat fields, NO sections at all — so every section, chevron and error-summary step below needs the advanced form, which is the sectionised one this page is about.",
|
|
79
|
-
"Open that picker and read whether its full option list is visible.",
|
|
80
|
-
"Scroll while it is open and check it stays anchored to its field.",
|
|
81
|
-
"Open a picker in the LAST section of the form, near the bottom of the page.",
|
|
82
|
-
"Read whether its list is clipped by the section's own boundary.",
|
|
83
|
-
"Resize to 390 pixels wide and open the same picker.",
|
|
84
|
-
],
|
|
85
|
-
inputs: { mobileWidth: 390 },
|
|
86
|
-
expectedBehaviour: "A picker's list escapes its section's bounds. A section with overflow hidden — which is what a collapsing container needs to animate — clips any list that opens inside it, so the options exist and cannot be seen.",
|
|
87
|
-
expectedUiState: "The full option list is visible in every case, including in the last section and at 390 pixels. A list cut off at the section's edge is the failure, and it is worst at the bottom of the form where there is least room.",
|
|
88
|
-
endResult: "Read-only; leave the editor without saving.",
|
|
89
|
-
},
|
|
90
|
-
"checklist-selling-sectionised-forms-error-jump-lands-on-the-field": {
|
|
91
|
-
roles: ["seller"],
|
|
92
|
-
startPage: "/store/products/new",
|
|
93
|
-
steps: [
|
|
94
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
95
|
-
"Open /store/products/new and leave a required field empty in a section far down the form.",
|
|
96
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create — six flat fields, NO sections at all — so every section, chevron and error-summary step below needs the advanced form, which is the sectionised one this page is about.",
|
|
97
|
-
"Collapse that section and attempt to publish.",
|
|
98
|
-
"Click the error for that field in the summary.",
|
|
99
|
-
"Read where the page has scrolled to and whether the field is visible.",
|
|
100
|
-
/*
|
|
101
|
-
* 🛑 EXPECT THIS TO FAIL TODAY, AND RECORD IT AS A FAILURE.
|
|
102
|
-
*
|
|
103
|
-
* Measured 2026-09-29: FormErrorList's entire click handler is
|
|
104
|
-
* `onClick={() => ctx.goToStep(stepIndex!)}`. There is no focus() call,
|
|
105
|
-
* no scrollIntoView, and no element lookup — so it opens the owning
|
|
106
|
-
* section and stops, which is exactly what this case calls the failure.
|
|
107
|
-
*
|
|
108
|
-
* Kept as written rather than softened to match. The rationale holds: a
|
|
109
|
-
* section can carry a dozen fields, and an error summary that drops the
|
|
110
|
-
* user at the heading has told them something is wrong without showing
|
|
111
|
-
* them what. Softening it to "lands on the section" would convert a real
|
|
112
|
-
* UX gap into a passing case.
|
|
113
|
-
*
|
|
114
|
-
* So a tester who lands on the heading records a FAILURE with a
|
|
115
|
-
* screenshot — not "could not test", and not a lenient pass because the
|
|
116
|
-
* section did open.
|
|
117
|
-
*/
|
|
118
|
-
"Check whether the field is focused and marked, not merely on screen.",
|
|
119
|
-
],
|
|
120
|
-
expectedBehaviour: "Clicking an error lands ON the field — section expanded, field scrolled into view, focused and marked. Landing on the section heading leaves the user hunting through a section that may hold a dozen fields.",
|
|
121
|
-
expectedUiState: "The offending field is visible, focused, and carries its own error message. Scrolling to the section heading and stopping there is the failure, as is scrolling past the field so it sits under a sticky bar.",
|
|
122
|
-
endResult: "Nothing is published. Leave the editor without saving.",
|
|
123
|
-
},
|
|
124
|
-
"checklist-selling-sectionised-forms-long-form-typing-is-smooth": {
|
|
125
|
-
roles: ["seller"],
|
|
126
|
-
startPage: "/store/products/new",
|
|
127
|
-
steps: [
|
|
128
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
129
|
-
"Open /store/products/new and expand every section.",
|
|
130
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create — six flat fields, NO sections at all — so every section, chevron and error-summary step below needs the advanced form, which is the sectionised one this page is about.",
|
|
131
|
-
"Type a long paragraph into the description field at normal speed.",
|
|
132
|
-
"Watch for characters lagging behind the keystrokes.",
|
|
133
|
-
"Attempt a publish so validation is running live, then keep typing into another field.",
|
|
134
|
-
"Watch again for lag.",
|
|
135
|
-
],
|
|
136
|
-
expectedBehaviour: "Typing stays responsive with every section open and live validation running. Validation runs on every change once a submit has been attempted — that is what keeps the error summary current — so this is the state where a form is most likely to stutter.",
|
|
137
|
-
expectedUiState: "Characters appear as they are typed, with no visible catch-up. The error summary updates as fields are fixed without the field itself becoming laggy.",
|
|
138
|
-
endResult: "Nothing is published. Leave the editor without saving.",
|
|
139
|
-
},
|
|
140
|
-
"checklist-selling-sectionised-forms-form-mobile-action-bar": {
|
|
141
|
-
roles: ["seller"],
|
|
142
|
-
startPage: "/store/products/new",
|
|
143
|
-
steps: [
|
|
144
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
145
|
-
"Resize the browser window to 390 pixels wide, open /store/products/new, and click 'Show all fields (advanced)' — the quick form has no sections and therefore no section-scoped error sheet, which is what this case reads.",
|
|
146
|
-
"Read the action bar at the bottom and every control in it.",
|
|
147
|
-
"Type into a field so the form becomes dirty and read the bar again.",
|
|
148
|
-
"Attempt a publish with fields missing and read what the bar shows.",
|
|
149
|
-
"Open the error sheet from the bar, close it, then attempt a publish again and check it reopens.",
|
|
150
|
-
"Count the fixed bars at the bottom.",
|
|
151
|
-
],
|
|
152
|
-
inputs: { mobileWidth: 390 },
|
|
153
|
-
expectedBehaviour: "The form's save row and its error sheet occupy the same measured bottom tier as everything else. The sheet's label carries the error COUNT, because the panel only republishes when that label changes — a static label would freeze the sheet's contents while the user fixes fields. Reopening on a second failed submit is driven by a counter rather than a flag, so an ordinary re-render does not reopen what the user just closed.",
|
|
154
|
-
expectedUiState: "Discard, Save draft and Publish are all reachable and none is clipped. The sheet's label states how many issues remain and that number falls as fields are fixed. Closing it and submitting again reopens it. Exactly one bottom tab bar sits below the action bar.",
|
|
155
|
-
endResult: "Nothing is published. Restore the window width afterwards.",
|
|
156
|
-
},
|
|
157
|
-
"checklist-selling-sectionised-forms-form-conditional-fields-drop-values": {
|
|
158
|
-
roles: ["seller"],
|
|
159
|
-
startPage: "/store/products/new",
|
|
160
|
-
steps: [
|
|
161
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
162
|
-
"Open /store/products/new and find a control that reveals conditional fields — a listing type or a shipping choice.",
|
|
163
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create — six flat fields, NO sections at all — so every section, chevron and error-summary step below needs the advanced form, which is the sectionised one this page is about.",
|
|
164
|
-
"Set it so the conditional fields appear and fill them in, noting each value.",
|
|
165
|
-
"Change the controlling field so those conditionals are hidden.",
|
|
166
|
-
"Change it back so they reappear.",
|
|
167
|
-
"Read whether the values are still there.",
|
|
168
|
-
"Publish and then reload the editor, reading those fields again.",
|
|
169
|
-
],
|
|
170
|
-
expectedBehaviour: "A hidden conditional field either keeps its value or is genuinely dropped — but whichever it does, the saved record must match what the form displayed at submit. The dangerous case is a field that looks retained on screen and is dropped on save, or one dropped from view and still written.",
|
|
171
|
-
expectedUiState: "Toggling the controlling field back and forth leaves the conditional values in a state the form shows honestly. After publishing and reloading, the stored values match what was on screen when Publish was pressed.",
|
|
172
|
-
endResult: "Delete the created listing afterwards. A field the form showed and did not save is the failure, and so is one it hid and saved anyway.",
|
|
173
|
-
},
|
|
174
|
-
"checklist-selling-sectionised-forms-site-settings-save-still-writes-everything": {
|
|
175
|
-
roles: ["admin"],
|
|
176
|
-
startPage: "/admin/site",
|
|
177
|
-
steps: [
|
|
178
|
-
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
179
|
-
"Open /admin/site and walk every tab, writing down a distinctive value from each.",
|
|
180
|
-
"Open one tab — Fees — and change a single field.",
|
|
181
|
-
"Save.",
|
|
182
|
-
"RELOAD /admin/site and walk every tab again.",
|
|
183
|
-
"Compare each noted value against what was written down.",
|
|
184
|
-
"Restore the changed field and save.",
|
|
185
|
-
],
|
|
186
|
-
expectedBehaviour: "Saving one tab of the settings singleton preserves every other tab. This is the same defect as the first case at the largest possible scale: the whole document is one record, so a form submitting its full object from a partly-populated state can blank branding, fees, integrations and legal copy in one save that reports success.",
|
|
187
|
-
expectedUiState: "After the reload only the Fees field differs. Every noted value on every other tab is unchanged — branding, announcement copy, integrations, shipping, legal pages. The masked credentials are still shown as masked rather than blank.",
|
|
188
|
-
expectedData: { unintendedFieldChanges: 0 },
|
|
189
|
-
endResult: "The changed field is restored. This is the highest-blast-radius save in the application; check every tab rather than sampling two.",
|
|
190
|
-
},
|
|
191
|
-
};
|