@mohasinac/appkit 2.7.58 → 2.8.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/_internal/client/features/filters/filter-load-options.d.ts +4 -5
- package/dist/_internal/server/features/auctions/og.js +8 -32
- package/dist/_internal/server/features/blog/og.js +10 -49
- package/dist/_internal/server/features/checkout/actions.js +6 -0
- package/dist/_internal/server/features/classified/og.js +9 -51
- package/dist/_internal/server/features/digital-code/actions.d.ts +11 -0
- package/dist/_internal/server/features/digital-code/actions.js +30 -0
- package/dist/_internal/server/features/digital-code/index.d.ts +1 -0
- package/dist/_internal/server/features/digital-code/index.js +1 -0
- package/dist/_internal/server/features/digital-code/og.js +9 -51
- package/dist/_internal/server/features/events/og.js +10 -49
- package/dist/_internal/server/features/item-requests/data.d.ts +17 -0
- package/dist/_internal/server/features/item-requests/data.js +20 -0
- package/dist/_internal/server/features/item-requests/index.d.ts +2 -0
- package/dist/_internal/server/features/item-requests/index.js +2 -0
- package/dist/_internal/server/features/item-requests/og.d.ts +40 -0
- package/dist/_internal/server/features/item-requests/og.js +136 -0
- package/dist/_internal/server/features/live/actions.d.ts +5 -0
- package/dist/_internal/server/features/live/actions.js +24 -0
- package/dist/_internal/server/features/live/index.d.ts +1 -0
- package/dist/_internal/server/features/live/index.js +1 -0
- package/dist/_internal/server/features/live/og.js +9 -51
- package/dist/_internal/server/features/media/contextGuards.js +19 -8
- package/dist/_internal/server/features/pre-orders/og.js +8 -32
- package/dist/_internal/server/features/prize-draws/data.d.ts +17 -0
- package/dist/_internal/server/features/prize-draws/data.js +20 -0
- package/dist/_internal/server/features/prize-draws/index.d.ts +2 -0
- package/dist/_internal/server/features/prize-draws/index.js +2 -0
- package/dist/_internal/server/features/prize-draws/og.d.ts +30 -0
- package/dist/_internal/server/features/prize-draws/og.js +50 -0
- package/dist/_internal/server/features/products/og.js +8 -33
- package/dist/_internal/server/features/scams/og.js +1 -1
- package/dist/_internal/server/features/seo/og-layout.d.ts +42 -0
- package/dist/_internal/server/features/seo/og-layout.js +69 -0
- package/dist/_internal/server/features/stores/og.js +8 -41
- package/dist/_internal/server/features/sublisting-categories/og.js +11 -42
- package/dist/_internal/shared/actions/bulk-helpers.d.ts +3 -0
- package/dist/_internal/shared/actions/bulk-helpers.js +19 -0
- package/dist/_internal/shared/config/schema.d.ts +4 -4
- package/dist/client.d.ts +13 -6
- package/dist/client.js +9 -3
- package/dist/configs/next.js +11 -0
- package/dist/constants/index.d.ts +4 -0
- package/dist/constants/index.js +2 -0
- package/dist/constants/notification-types.d.ts +20 -0
- package/dist/constants/notification-types.js +37 -0
- package/dist/constants/pagination-presets.d.ts +39 -0
- package/dist/constants/pagination-presets.js +38 -0
- package/dist/errors/messages.d.ts +0 -4
- package/dist/errors/messages.js +0 -4
- package/dist/features/account/components/AddressesIndexListing.js +3 -4
- package/dist/features/account/components/UserOffersPanel.js +1 -1
- package/dist/features/account/components/UserSidebar.js +14 -10
- package/dist/features/account/components/UserSupportView.d.ts +1 -2
- package/dist/features/account/components/UserSupportView.js +9 -1
- package/dist/features/admin/actions/admin-actions.js +16 -1
- package/dist/features/admin/components/AdminAllEventEntriesView.d.ts +2 -3
- package/dist/features/admin/components/AdminAllEventEntriesView.js +50 -89
- package/dist/features/admin/components/AdminBidsView.d.ts +2 -3
- package/dist/features/admin/components/AdminBidsView.js +64 -104
- package/dist/features/admin/components/AdminBlogView.d.ts +3 -7
- package/dist/features/admin/components/AdminBlogView.js +53 -88
- package/dist/features/admin/components/AdminBrandEditorView.js +14 -17
- package/dist/features/admin/components/AdminBrandsView.d.ts +2 -3
- package/dist/features/admin/components/AdminBrandsView.js +85 -89
- package/dist/features/admin/components/AdminBundlesView.js +68 -130
- package/dist/features/admin/components/AdminCarouselView.d.ts +2 -2
- package/dist/features/admin/components/AdminCarouselView.js +22 -70
- package/dist/features/admin/components/AdminCartsView.d.ts +2 -3
- package/dist/features/admin/components/AdminCartsView.js +39 -89
- package/dist/features/admin/components/AdminCategoriesView.d.ts +3 -3
- package/dist/features/admin/components/AdminCategoriesView.js +97 -96
- package/dist/features/admin/components/AdminCategoryEditorView.js +2 -6
- package/dist/features/admin/components/AdminClassifiedView.d.ts +3 -0
- package/dist/features/admin/components/AdminClassifiedView.js +44 -0
- package/dist/features/admin/components/AdminContactView.d.ts +2 -2
- package/dist/features/admin/components/AdminContactView.js +105 -130
- package/dist/features/admin/components/AdminCouponEditorView.js +14 -17
- package/dist/features/admin/components/AdminCouponsView.d.ts +3 -6
- package/dist/features/admin/components/AdminCouponsView.js +69 -97
- package/dist/features/admin/components/AdminDigitalCodesView.d.ts +3 -0
- package/dist/features/admin/components/AdminDigitalCodesView.js +51 -0
- package/dist/features/admin/components/AdminFaqEditorView.js +14 -17
- package/dist/features/admin/components/AdminFaqsView.d.ts +4 -4
- package/dist/features/admin/components/AdminFaqsView.js +79 -86
- package/dist/features/admin/components/AdminFeatureEditorView.js +7 -9
- package/dist/features/admin/components/AdminFeaturesView.d.ts +2 -3
- package/dist/features/admin/components/AdminFeaturesView.js +57 -70
- package/dist/features/admin/components/AdminGroupedListingsView.d.ts +3 -0
- package/dist/features/admin/components/AdminGroupedListingsView.js +43 -0
- package/dist/features/admin/components/AdminHistoryView.d.ts +2 -3
- package/dist/features/admin/components/AdminHistoryView.js +35 -52
- package/dist/features/admin/components/AdminListingScaffold.d.ts +2 -2
- package/dist/features/admin/components/AdminListingScaffold.js +3 -3
- package/dist/features/admin/components/AdminLiveView.d.ts +3 -0
- package/dist/features/admin/components/AdminLiveView.js +50 -0
- package/dist/features/admin/components/AdminNewsletterView.d.ts +2 -2
- package/dist/features/admin/components/AdminNewsletterView.js +68 -108
- package/dist/features/admin/components/AdminNotificationsView.d.ts +2 -3
- package/dist/features/admin/components/AdminNotificationsView.js +67 -99
- package/dist/features/admin/components/AdminOrderEditorView.js +10 -10
- package/dist/features/admin/components/AdminOrdersView.d.ts +2 -3
- package/dist/features/admin/components/AdminOrdersView.js +93 -113
- package/dist/features/admin/components/AdminPayoutsView.d.ts +2 -3
- package/dist/features/admin/components/AdminPayoutsView.js +51 -97
- package/dist/features/admin/components/AdminPrizeDrawsView.d.ts +2 -3
- package/dist/features/admin/components/AdminPrizeDrawsView.js +41 -83
- package/dist/features/admin/components/AdminProductEditorView.js +3 -7
- package/dist/features/admin/components/AdminProductsView.d.ts +4 -4
- package/dist/features/admin/components/AdminProductsView.js +166 -167
- package/dist/features/admin/components/AdminReturnRequestsView.d.ts +1 -1
- package/dist/features/admin/components/AdminReturnRequestsView.js +64 -66
- package/dist/features/admin/components/AdminReviewsView.d.ts +3 -7
- package/dist/features/admin/components/AdminReviewsView.js +94 -116
- package/dist/features/admin/components/AdminScammersView.d.ts +2 -3
- package/dist/features/admin/components/AdminScammersView.js +53 -103
- package/dist/features/admin/components/AdminSectionsView.js +1 -1
- package/dist/features/admin/components/AdminSessionsView.d.ts +2 -3
- package/dist/features/admin/components/AdminSessionsView.js +62 -95
- package/dist/features/admin/components/AdminStoreAddressesView.d.ts +1 -1
- package/dist/features/admin/components/AdminStoreAddressesView.js +39 -53
- package/dist/features/admin/components/AdminStoreEditorView.js +21 -8
- package/dist/features/admin/components/AdminStoresView.d.ts +2 -3
- package/dist/features/admin/components/AdminStoresView.js +67 -105
- package/dist/features/admin/components/AdminSublistingCategoriesView.d.ts +1 -1
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +29 -49
- package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +17 -20
- package/dist/features/admin/components/AdminSupportTicketDetailView.d.ts +10 -1
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +191 -5
- package/dist/features/admin/components/AdminSupportTicketsView.d.ts +2 -3
- package/dist/features/admin/components/AdminSupportTicketsView.js +65 -102
- package/dist/features/admin/components/AdminTeamView.d.ts +2 -2
- package/dist/features/admin/components/AdminTeamView.js +42 -85
- package/dist/features/admin/components/AdminUserEditorView.d.ts +11 -1
- package/dist/features/admin/components/AdminUserEditorView.js +80 -6
- package/dist/features/admin/components/AdminUsersView.d.ts +2 -3
- package/dist/features/admin/components/AdminUsersView.js +108 -106
- package/dist/features/admin/components/AdminViewCards.d.ts +1 -1
- package/dist/features/admin/components/AdminWishlistsView.d.ts +2 -3
- package/dist/features/admin/components/AdminWishlistsView.js +36 -62
- package/dist/features/admin/components/DataListingView.d.ts +122 -0
- package/dist/features/admin/components/DataListingView.js +66 -0
- package/dist/features/admin/components/index.d.ts +10 -4
- package/dist/features/admin/components/index.js +6 -2
- package/dist/features/admin/constants/filter-tabs.d.ts +23 -17
- package/dist/features/admin/constants/filter-tabs.js +21 -17
- package/dist/features/admin/hooks/useAdminListing.d.ts +59 -0
- package/dist/features/admin/hooks/useAdminListing.js +71 -0
- package/dist/features/admin/schemas/firestore.js +6 -7
- package/dist/features/auctions/server.d.ts +0 -1
- package/dist/features/auctions/server.js +0 -1
- package/dist/features/auth/actions/realtime-token-actions.js +1 -1
- package/dist/features/auth/repository/user.repository.js +1 -1
- package/dist/features/auth/schemas/firestore.d.ts +1 -0
- package/dist/features/blog/components/BlogIndexListing.js +3 -6
- package/dist/features/cart/repository/cart.repository.d.ts +4 -1
- package/dist/features/cart/repository/cart.repository.js +12 -0
- package/dist/features/categories/components/CategoriesIndexListing.js +3 -6
- package/dist/features/checkout/hooks/useCheckoutApi.d.ts +0 -2
- package/dist/features/checkout/index.d.ts +1 -1
- package/dist/features/events/components/AdminEventsView.d.ts +3 -3
- package/dist/features/events/components/AdminEventsView.js +50 -86
- package/dist/features/events/components/EventOfferCard.d.ts +19 -0
- package/dist/features/events/components/EventOfferCard.js +29 -0
- package/dist/features/events/components/EventRaffleEntryForm.d.ts +25 -0
- package/dist/features/events/components/EventRaffleEntryForm.js +37 -0
- package/dist/features/events/components/EventRafflesSection.d.ts +1 -4
- package/dist/features/events/components/EventRafflesSection.js +17 -6
- package/dist/features/events/components/EventSaleBanner.d.ts +21 -0
- package/dist/features/events/components/EventSaleBanner.js +18 -0
- package/dist/features/events/components/EventsIndexListing.js +3 -4
- package/dist/features/events/components/index.d.ts +6 -0
- package/dist/features/events/components/index.js +4 -0
- package/dist/features/events/repository/event-entry.repository.d.ts +5 -0
- package/dist/features/events/repository/event-entry.repository.js +7 -0
- package/dist/features/filters/AsyncFacetSection.d.ts +1 -1
- package/dist/features/homepage/components/AnnouncementBar.d.ts +4 -1
- package/dist/features/homepage/components/AnnouncementBar.js +51 -4
- package/dist/features/homepage/components/FAQSection.d.ts +0 -5
- package/dist/features/homepage/components/MarketplaceHomepageView.d.ts +3 -1
- package/dist/features/homepage/components/MarketplaceHomepageView.js +2 -2
- package/dist/features/homepage/components/index.d.ts +1 -1
- package/dist/features/homepage/components/index.js +1 -1
- package/dist/features/homepage/lib/live-stats.js +1 -1
- package/dist/features/homepage/lib/section-renderer.d.ts +2 -2
- package/dist/features/homepage/lib/section-renderer.js +2 -2
- package/dist/features/homepage/schemas/firestore.d.ts +0 -2
- package/dist/features/layout/index.d.ts +0 -2
- package/dist/features/layout/index.js +0 -1
- package/dist/features/orders/repository/orders.repository.d.ts +0 -1
- package/dist/features/orders/repository/orders.repository.js +0 -1
- package/dist/features/orders/server.d.ts +1 -1
- package/dist/features/orders/server.js +1 -1
- package/dist/features/pre-orders/server.d.ts +0 -1
- package/dist/features/pre-orders/server.js +0 -1
- package/dist/features/products/components/GroupSettingsPanel.js +65 -49
- package/dist/features/products/components/PrizeDrawItemsEditor.js +2 -2
- package/dist/features/products/components/PrizeDrawsSection.d.ts +1 -4
- package/dist/features/products/components/PrizeDrawsSection.js +17 -6
- package/dist/features/products/components/PrizeRevealModal.js +1 -1
- package/dist/features/products/components/ProductCardMetadataSection.d.ts +11 -0
- package/dist/features/products/components/ProductCardMetadataSection.js +25 -0
- package/dist/features/products/components/ProductDetailPageView.js +3 -1
- package/dist/features/products/components/ProductFeaturesSelector.js +1 -1
- package/dist/features/products/components/ProductGradingTab.d.ts +13 -0
- package/dist/features/products/components/ProductGradingTab.js +25 -0
- package/dist/features/products/components/ProductGrid.js +14 -2
- package/dist/features/products/components/ProductTabsShell.d.ts +5 -1
- package/dist/features/products/components/ProductTabsShell.js +6 -1
- package/dist/features/products/components/index.d.ts +4 -0
- package/dist/features/products/components/index.js +3 -0
- package/dist/features/products/constants/action-defs.d.ts +5 -0
- package/dist/features/products/constants/action-defs.js +52 -32
- package/dist/features/products/constants/sieve.d.ts +24 -4
- package/dist/features/products/constants/sieve.js +20 -11
- package/dist/features/products/repository/products.repository.d.ts +0 -2
- package/dist/features/products/repository/products.repository.js +0 -2
- package/dist/features/products/schemas/firestore.d.ts +17 -0
- package/dist/features/products/schemas/product-features.validators.d.ts +2 -2
- package/dist/features/products/schemas/product-templates.d.ts +2 -4
- package/dist/features/products/server.d.ts +1 -1
- package/dist/features/products/server.js +1 -1
- package/dist/features/products/types/index.d.ts +4 -0
- package/dist/features/promotions/components/CouponCard.js +5 -5
- package/dist/features/promotions/components/CouponsIndexListing.js +3 -2
- package/dist/features/promotions/server.d.ts +0 -1
- package/dist/features/promotions/server.js +0 -1
- package/dist/features/reviews/components/ReviewsIndexListing.js +3 -4
- package/dist/features/reviews/repository/reviews.repository.d.ts +0 -1
- package/dist/features/reviews/repository/reviews.repository.js +0 -1
- package/dist/features/reviews/server.d.ts +1 -1
- package/dist/features/reviews/server.js +1 -1
- package/dist/features/search/api/route.js +44 -1
- package/dist/features/search/components/Search.js +2 -0
- package/dist/features/search/hooks/useNavSuggestions.d.ts +5 -1
- package/dist/features/search/hooks/useNavSuggestions.js +31 -4
- package/dist/features/seller/components/BrandInlineSelect.js +2 -2
- package/dist/features/seller/components/CategoryInlineSelect.js +2 -2
- package/dist/features/seller/components/SellerAddressesView.js +10 -20
- package/dist/features/seller/components/SellerAuctionsView.d.ts +3 -3
- package/dist/features/seller/components/SellerAuctionsView.js +67 -106
- package/dist/features/seller/components/SellerBidsView.js +6 -6
- package/dist/features/seller/components/SellerBundlesView.js +72 -105
- package/dist/features/seller/components/SellerClassifiedView.js +74 -105
- package/dist/features/seller/components/SellerCouponEditorView.js +1 -1
- package/dist/features/seller/components/SellerCouponsView.d.ts +2 -2
- package/dist/features/seller/components/SellerCouponsView.js +51 -96
- package/dist/features/seller/components/SellerDigitalCodesView.js +70 -103
- package/dist/features/seller/components/SellerGroupedListingsView.js +34 -54
- package/dist/features/seller/components/SellerLiveView.js +70 -99
- package/dist/features/seller/components/SellerOffersPanel.js +1 -1
- package/dist/features/seller/components/SellerOffersView.d.ts +2 -2
- package/dist/features/seller/components/SellerOffersView.js +37 -70
- package/dist/features/seller/components/SellerOrdersView.d.ts +2 -2
- package/dist/features/seller/components/SellerOrdersView.js +10 -24
- package/dist/features/seller/components/SellerPayoutMethodsView.js +12 -24
- package/dist/features/seller/components/SellerPayoutsView.d.ts +2 -2
- package/dist/features/seller/components/SellerPayoutsView.js +34 -69
- package/dist/features/seller/components/SellerPreOrdersView.d.ts +2 -2
- package/dist/features/seller/components/SellerPreOrdersView.js +55 -97
- package/dist/features/seller/components/SellerPrizeDrawsView.d.ts +2 -2
- package/dist/features/seller/components/SellerPrizeDrawsView.js +55 -97
- package/dist/features/seller/components/SellerProductShell.d.ts +1 -1
- package/dist/features/seller/components/SellerProductsFilterDrawer.d.ts +1 -1
- package/dist/features/seller/components/SellerProductsFilterDrawer.js +3 -6
- package/dist/features/seller/components/SellerProductsView.d.ts +2 -2
- package/dist/features/seller/components/SellerProductsView.js +24 -32
- package/dist/features/seller/components/SellerShippingConfigsView.js +12 -24
- package/dist/features/seller/components/SellerSidebar.d.ts +0 -4
- package/dist/features/seller/components/SellerSidebar.js +0 -2
- package/dist/features/seller/components/SellerStoreCategoriesView.js +15 -34
- package/dist/features/seller/components/SellerTemplatesView.js +27 -43
- package/dist/features/seller/components/SellersListView.d.ts +1 -2
- package/dist/features/seller/components/analytics/SellerAnalyticsStats.d.ts +5 -0
- package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +2 -8
- package/dist/features/seller/components/index.d.ts +0 -3
- package/dist/features/seller/components/index.js +0 -2
- package/dist/features/seller/server.d.ts +0 -1
- package/dist/features/seller/server.js +0 -1
- package/dist/features/shell/FormShell.d.ts +1 -1
- package/dist/features/shell/FormShell.js +4 -1
- package/dist/features/shell/field-groups/ImageFieldGroup.d.ts +18 -0
- package/dist/features/shell/field-groups/ImageFieldGroup.js +15 -0
- package/dist/features/shell/field-groups/SeoFieldGroup.d.ts +22 -0
- package/dist/features/shell/field-groups/SeoFieldGroup.js +16 -0
- package/dist/features/shell/field-groups/StatusFieldGroup.d.ts +35 -0
- package/dist/features/shell/field-groups/StatusFieldGroup.js +16 -0
- package/dist/features/shell/field-groups/TitleDescriptionGroup.d.ts +40 -0
- package/dist/features/shell/field-groups/TitleDescriptionGroup.js +16 -0
- package/dist/features/shell/field-groups/index.d.ts +13 -0
- package/dist/features/shell/field-groups/index.js +9 -0
- package/dist/features/shell/index.d.ts +2 -0
- package/dist/features/shell/index.js +1 -0
- package/dist/features/stores/components/StoreCapabilitiesGuideView.d.ts +1 -2
- package/dist/features/stores/components/StoreFinanceGuideView.d.ts +1 -2
- package/dist/features/stores/components/StoreHeader.js +2 -1
- package/dist/features/stores/components/StoreListingsGuideView.d.ts +1 -2
- package/dist/features/stores/components/StoreOrdersGuideView.d.ts +1 -2
- package/dist/features/stores/components/StoreReviewsListing.js +3 -4
- package/dist/features/stores/components/StoreScopedSearch.d.ts +16 -0
- package/dist/features/stores/components/StoreScopedSearch.js +27 -0
- package/dist/features/stores/components/StoreSettingsGuideView.d.ts +1 -2
- package/dist/features/stores/components/StoresIndexListing.js +3 -4
- package/dist/features/stores/server.d.ts +0 -1
- package/dist/features/stores/server.js +0 -1
- package/dist/features/support/schemas/firestore.d.ts +22 -1
- package/dist/features/support/schemas/firestore.js +10 -0
- package/dist/features/wishlist/server.d.ts +0 -1
- package/dist/features/wishlist/server.js +0 -1
- package/dist/index.d.ts +11 -33
- package/dist/index.js +17 -62
- package/dist/next/routing/route-map.d.ts +8 -0
- package/dist/next/routing/route-map.js +4 -0
- package/dist/react/contexts/SessionContext.d.ts +2 -0
- package/dist/react/contexts/SessionContext.js +2 -0
- package/dist/react/hooks/useEntityDelete.d.ts +15 -0
- package/dist/react/hooks/useEntityDelete.js +39 -0
- package/dist/react/hooks/useListingTypeFlags.d.ts +32 -0
- package/dist/react/hooks/useListingTypeFlags.js +19 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.js +2 -0
- package/dist/repositories/index.d.ts +3 -3
- package/dist/repositories/index.js +3 -3
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/pii-redact.d.ts +8 -0
- package/dist/security/pii-redact.js +10 -1
- package/dist/seed/grouped-listings-seed-data.d.ts +4 -0
- package/dist/seed/products-preorders-seed-data.d.ts +4 -0
- package/dist/seed/products-prize-draws-seed-data.js +3 -0
- package/dist/seed/site-settings-seed-data.js +5 -5
- package/dist/seed/sub-listings-seed-data.d.ts +4 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +4 -0
- package/dist/styles.css +54 -395
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/BaseListingCard.d.ts +10 -0
- package/dist/ui/components/BaseListingCard.js +17 -1
- package/dist/ui/components/DetailPageGallery.d.ts +32 -0
- package/dist/ui/components/DetailPageGallery.js +47 -0
- package/dist/ui/components/DetailPageHero.d.ts +30 -0
- package/dist/ui/components/DetailPageHero.js +22 -0
- package/dist/ui/components/DetailPageTabs.d.ts +34 -0
- package/dist/ui/components/DetailPageTabs.js +38 -0
- package/dist/ui/components/HorizontalScroller.style.css +15 -2
- package/dist/ui/components/ListingFilterDrawer.d.ts +10 -0
- package/dist/ui/components/ListingFilterDrawer.js +8 -0
- package/dist/ui/components/ListingLayout.d.ts +11 -2
- package/dist/ui/components/ListingLayout.js +12 -6
- package/dist/ui/components/PaginatedSelect.d.ts +66 -0
- package/dist/ui/components/PaginatedSelect.js +201 -0
- package/dist/ui/components/PaginatedSelect.style.css +254 -0
- package/dist/ui/components/Semantic.d.ts +0 -4
- package/dist/ui/components/Semantic.js +0 -2
- package/dist/ui/components/SettingsSection.d.ts +47 -0
- package/dist/ui/components/SettingsSection.js +38 -0
- package/dist/ui/components/index.style.css +1 -4
- package/dist/ui/index.d.ts +14 -14
- package/dist/ui/index.js +7 -7
- package/dist/utils/id-generators.d.ts +1 -18
- package/dist/utils/id-generators.js +51 -18
- package/dist/validation/schemas.d.ts +25 -0
- package/dist/validation/schemas.js +28 -0
- package/package.json +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface StatusFieldGroupOption<T extends string = string> {
|
|
3
|
+
value: T;
|
|
4
|
+
label: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface StatusFieldGroupProps<T extends string = string> {
|
|
8
|
+
/** Current status value. */
|
|
9
|
+
status: T;
|
|
10
|
+
/** Available status options. */
|
|
11
|
+
options: readonly StatusFieldGroupOption<T>[];
|
|
12
|
+
/** Setter. */
|
|
13
|
+
onStatusChange: (next: T) => void;
|
|
14
|
+
/** Optional sub-toggles below the status select (e.g. `isFeatured`, `isPromoted`). */
|
|
15
|
+
toggles?: ReadonlyArray<{
|
|
16
|
+
key: string;
|
|
17
|
+
label: ReactNode;
|
|
18
|
+
description?: ReactNode;
|
|
19
|
+
checked: boolean;
|
|
20
|
+
onChange: (next: boolean) => void;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
/** Optional section label override. */
|
|
24
|
+
sectionTitle?: ReactNode;
|
|
25
|
+
sectionDescription?: ReactNode;
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `StatusFieldGroup` — status select plus optional sub-toggles (featured /
|
|
30
|
+
* promoted / pinned, etc.) used across Product, Blog, Event, Coupon, FAQ
|
|
31
|
+
* editors.
|
|
32
|
+
*
|
|
33
|
+
* W1-15 — extracted 2026-05-23.
|
|
34
|
+
*/
|
|
35
|
+
export declare function StatusFieldGroup<T extends string = string>({ status, options, onStatusChange, toggles, sectionTitle, sectionDescription, disabled, }: StatusFieldGroupProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Select } from "../../../ui/components/Select";
|
|
4
|
+
import { ToggleRow, SettingsSection } from "../../../ui/components/SettingsSection";
|
|
5
|
+
/**
|
|
6
|
+
* `StatusFieldGroup` — status select plus optional sub-toggles (featured /
|
|
7
|
+
* promoted / pinned, etc.) used across Product, Blog, Event, Coupon, FAQ
|
|
8
|
+
* editors.
|
|
9
|
+
*
|
|
10
|
+
* W1-15 — extracted 2026-05-23.
|
|
11
|
+
*/
|
|
12
|
+
export function StatusFieldGroup({ status, options, onStatusChange, toggles, sectionTitle = "Status", sectionDescription, disabled = false, }) {
|
|
13
|
+
return (_jsxs(SettingsSection, { title: sectionTitle, description: sectionDescription, children: [_jsx(Select, { label: "Visibility status", value: status, onValueChange: (v) => onStatusChange(v), options: options.map((o) => ({ value: o.value, label: o.label })), disabled: disabled }), toggles?.length
|
|
14
|
+
? toggles.map((t) => (_jsx(ToggleRow, { label: t.label, description: t.description, checked: t.checked, onChange: t.onChange, disabled: t.disabled ?? disabled }, t.key)))
|
|
15
|
+
: null] }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface TitleDescriptionGroupProps {
|
|
3
|
+
/** Form field value: title. */
|
|
4
|
+
title: string;
|
|
5
|
+
/** Form field value: description (plain text). */
|
|
6
|
+
description: string;
|
|
7
|
+
/** Setters. */
|
|
8
|
+
onTitleChange: (next: string) => void;
|
|
9
|
+
onDescriptionChange: (next: string) => void;
|
|
10
|
+
/** Optional section label override. */
|
|
11
|
+
sectionTitle?: ReactNode;
|
|
12
|
+
/** Optional section description. */
|
|
13
|
+
sectionDescription?: ReactNode;
|
|
14
|
+
/** Optional placeholder overrides. */
|
|
15
|
+
titlePlaceholder?: string;
|
|
16
|
+
descriptionPlaceholder?: string;
|
|
17
|
+
/** Disable both inputs. */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
/** When true, render a rich-text editor instead of plain `<Textarea>` (consumer-provided). */
|
|
20
|
+
renderDescription?: (args: {
|
|
21
|
+
value: string;
|
|
22
|
+
onChange: (next: string) => void;
|
|
23
|
+
disabled: boolean;
|
|
24
|
+
}) => ReactNode;
|
|
25
|
+
/** Field-level validation messages. */
|
|
26
|
+
titleError?: string;
|
|
27
|
+
descriptionError?: string;
|
|
28
|
+
/** Max length helpers. */
|
|
29
|
+
titleMaxLength?: number;
|
|
30
|
+
descriptionMaxLength?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* `TitleDescriptionGroup` — shared title + description fields used across
|
|
34
|
+
* Product, Blog, Category, Event, FAQ, Feature, Brand editors. Optionally
|
|
35
|
+
* accepts a `renderDescription` slot to plug in the rich-text editor without
|
|
36
|
+
* coupling this primitive to it.
|
|
37
|
+
*
|
|
38
|
+
* W1-15 — extracted 2026-05-23.
|
|
39
|
+
*/
|
|
40
|
+
export declare function TitleDescriptionGroup({ title, description, onTitleChange, onDescriptionChange, sectionTitle, sectionDescription, titlePlaceholder, descriptionPlaceholder, disabled, renderDescription, titleError, descriptionError, titleMaxLength, descriptionMaxLength, }: TitleDescriptionGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Input } from "../../../ui/components/Input";
|
|
4
|
+
import { Textarea } from "../../../ui/components/Textarea";
|
|
5
|
+
import { SettingsSection } from "../../../ui/components/SettingsSection";
|
|
6
|
+
/**
|
|
7
|
+
* `TitleDescriptionGroup` — shared title + description fields used across
|
|
8
|
+
* Product, Blog, Category, Event, FAQ, Feature, Brand editors. Optionally
|
|
9
|
+
* accepts a `renderDescription` slot to plug in the rich-text editor without
|
|
10
|
+
* coupling this primitive to it.
|
|
11
|
+
*
|
|
12
|
+
* W1-15 — extracted 2026-05-23.
|
|
13
|
+
*/
|
|
14
|
+
export function TitleDescriptionGroup({ title, description, onTitleChange, onDescriptionChange, sectionTitle = "Title & description", sectionDescription, titlePlaceholder, descriptionPlaceholder, disabled = false, renderDescription, titleError, descriptionError, titleMaxLength, descriptionMaxLength, }) {
|
|
15
|
+
return (_jsxs(SettingsSection, { title: sectionTitle, description: sectionDescription, children: [_jsx(Input, { label: "Title", value: title, onChange: (e) => onTitleChange(e.target.value), placeholder: titlePlaceholder, disabled: disabled, maxLength: titleMaxLength, error: titleError, required: true }), renderDescription ? (renderDescription({ value: description, onChange: onDescriptionChange, disabled })) : (_jsx(Textarea, { label: "Description", value: description, onChange: (e) => onDescriptionChange(e.target.value), placeholder: descriptionPlaceholder, disabled: disabled, maxLength: descriptionMaxLength, error: descriptionError, rows: 5 }))] }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field-group primitives (W1-15) — composable form sections used across the
|
|
3
|
+
* admin/seller editor surface. Each group is a thin wrapper around primitive
|
|
4
|
+
* inputs that encapsulates a recurring 3-or-more-field pattern.
|
|
5
|
+
*/
|
|
6
|
+
export type { TitleDescriptionGroupProps } from "./TitleDescriptionGroup";
|
|
7
|
+
export { TitleDescriptionGroup } from "./TitleDescriptionGroup";
|
|
8
|
+
export type { ImageFieldGroupProps } from "./ImageFieldGroup";
|
|
9
|
+
export { ImageFieldGroup } from "./ImageFieldGroup";
|
|
10
|
+
export type { SeoFieldGroupProps } from "./SeoFieldGroup";
|
|
11
|
+
export { SeoFieldGroup } from "./SeoFieldGroup";
|
|
12
|
+
export type { StatusFieldGroupProps, StatusFieldGroupOption } from "./StatusFieldGroup";
|
|
13
|
+
export { StatusFieldGroup } from "./StatusFieldGroup";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field-group primitives (W1-15) — composable form sections used across the
|
|
3
|
+
* admin/seller editor surface. Each group is a thin wrapper around primitive
|
|
4
|
+
* inputs that encapsulates a recurring 3-or-more-field pattern.
|
|
5
|
+
*/
|
|
6
|
+
export { TitleDescriptionGroup } from "./TitleDescriptionGroup";
|
|
7
|
+
export { ImageFieldGroup } from "./ImageFieldGroup";
|
|
8
|
+
export { SeoFieldGroup } from "./SeoFieldGroup";
|
|
9
|
+
export { StatusFieldGroup } from "./StatusFieldGroup";
|
|
@@ -4,3 +4,5 @@ export type { QuickFieldType, QuickFieldDef, QuickFormDrawerProps } from "./Quic
|
|
|
4
4
|
export { QuickFormDrawer } from "./QuickFormDrawer";
|
|
5
5
|
export type { StepDef, StepFormProps, StepFormActionsProps } from "./StepForm";
|
|
6
6
|
export { StepForm, StepFormActions, StepIndicator } from "./StepForm";
|
|
7
|
+
export type { TitleDescriptionGroupProps, ImageFieldGroupProps, SeoFieldGroupProps, StatusFieldGroupProps, StatusFieldGroupOption, } from "./field-groups";
|
|
8
|
+
export { TitleDescriptionGroup, ImageFieldGroup, SeoFieldGroup, StatusFieldGroup, } from "./field-groups";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { FormShell, useFormShell } from "./FormShell";
|
|
2
2
|
export { QuickFormDrawer } from "./QuickFormDrawer";
|
|
3
3
|
export { StepForm, StepFormActions, StepIndicator } from "./StepForm";
|
|
4
|
+
export { TitleDescriptionGroup, ImageFieldGroup, SeoFieldGroup, StatusFieldGroup, } from "./field-groups";
|
|
@@ -2,8 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Button, Div, Heading, RichText, Row, Section, Span, Text, } from "../../../ui";
|
|
3
3
|
import { normalizeRichTextHtml } from "../../../utils/string.formatter";
|
|
4
4
|
import { ShareButton } from "../../products/components/ShareButton";
|
|
5
|
+
import { StoreScopedSearch } from "./StoreScopedSearch";
|
|
5
6
|
export function StoreHeader({ store, labels = {}, onFollow, className = "", }) {
|
|
6
7
|
return (_jsxs(Section, { surface: "default", className: `border-b border-gray-200 dark:border-slate-700 ${className}`, children: [store.storeBannerURL && (_jsx(Div, { className: "h-40 md:h-56 overflow-hidden bg-gray-100 dark:bg-slate-800", children: _jsx(Div, { role: "img", "aria-label": `${store.storeName} banner`, className: "h-full w-full bg-center bg-cover", style: { backgroundImage: `url(${store.storeBannerURL})` } }) })), _jsxs(Div, { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4", children: [_jsxs(Div, { className: "flex items-end gap-4", children: [store.storeLogoURL ? (_jsx(Div, { role: "img", "aria-label": store.storeName, className: "-mt-8 h-16 w-16 rounded-xl border-2 border-white dark:border-slate-800 bg-center bg-cover shadow-sm", style: { backgroundImage: `url(${store.storeLogoURL})` } })) : (_jsx(Div, { className: "-mt-8 h-16 w-16 rounded-xl border-2 border-white dark:border-slate-800 bg-orange-100 dark:bg-orange-900/30 flex items-center justify-center text-orange-600 dark:text-orange-400 font-bold text-2xl shadow-sm", children: store.storeName[0]?.toUpperCase() })), _jsxs(Div, { className: "flex-1 min-w-0", children: [_jsxs(Div, { className: "flex flex-wrap items-center gap-2 mb-0.5", children: [_jsx(Heading, { level: 1, className: "text-xl font-bold text-gray-900 dark:text-zinc-100", children: store.storeName }), store.averageRating != null && store.averageRating > 0 && (_jsxs(Span, { className: "inline-flex items-center gap-1 text-sm font-medium text-amber-500", children: ["\u2605 ", store.averageRating.toFixed(1)] }))] }), _jsxs(Row, { className: "gap-3 text-xs text-gray-500 dark:text-zinc-400 mb-0.5", children: [store.category && _jsx(Span, { className: "capitalize", children: store.category }), store.totalProducts != null && store.totalProducts > 0 && (_jsxs(Span, { children: [store.totalProducts, " ", labels.products ?? "products"] })), store.totalReviews != null && store.totalReviews > 0 && (_jsxs(Span, { children: [store.totalReviews, " ", labels.reviews ?? "reviews"] })), store.itemsSold != null && store.itemsSold > 0 && (_jsxs(Span, { children: [store.itemsSold, " ", labels.sold ?? "sold"] }))] }), store.storeDescription && (_jsx(RichText, { html: normalizeRichTextHtml(store.storeDescription), copyableCode: true, className: "mt-0.5" }))] }), _jsxs(Row, { gap: "sm", align: "center", className: "shrink-0", children: [_jsx(ShareButton, { title: store.storeName }), onFollow && (_jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: () => onFollow(store.storeSlug), className: "rounded-lg border border-orange-500 px-4 py-2 text-sm font-medium text-orange-500 hover:bg-orange-50 transition-colors", children: labels.follow ?? "Follow" }))] })] }), store.isVacationMode && (_jsx(Text, { className: "mt-3 rounded-lg bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 px-3 py-2 text-sm text-yellow-700 dark:text-yellow-300", children: store.vacationMessage ??
|
|
7
8
|
labels.vacationMode ??
|
|
8
|
-
"Store is on vacation mode" }))] })] }));
|
|
9
|
+
"Store is on vacation mode" })), _jsx(Div, { className: "mt-3", children: _jsx(StoreScopedSearch, { storeId: store.storeSlug, storeName: store.storeName }) })] })] }));
|
|
9
10
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useCallback, useMemo } from "react";
|
|
4
|
-
import { X } from "lucide-react";
|
|
5
4
|
import { useUrlTable } from "../../../react/hooks/useUrlTable";
|
|
6
|
-
import { ListingToolbar, Pagination, Row, Span, Text } from "../../../ui";
|
|
5
|
+
import { ListingFilterDrawer, ListingToolbar, Pagination, Row, Span, Text } from "../../../ui";
|
|
7
6
|
import { ReviewCard } from "../../reviews/components/ReviewsList";
|
|
8
7
|
import { ReviewFilters, REVIEW_PUBLIC_SORT_OPTIONS } from "../../reviews/components/ReviewFilters";
|
|
9
8
|
import { useStoreReviews } from "../hooks/useStores";
|
|
@@ -102,5 +101,5 @@ export function StoreReviewsListing({ storeSlug }) {
|
|
|
102
101
|
value: opt.value,
|
|
103
102
|
label: SORT_OPTION_LABELS[opt.key] ?? opt.key,
|
|
104
103
|
}));
|
|
105
|
-
return (_jsxs("div", { className: "min-h-screen", children: [totalReviews > 0 && (_jsxs(Row, { align: "center", gap: "sm", className: "px-4 py-3 border-b border-zinc-200 dark:border-slate-700", children: [_jsx(Span, { className: "text-2xl font-bold text-zinc-900 dark:text-zinc-100", children: averageRating.toFixed(1) }), _jsxs(Span, { className: "text-zinc-500 dark:text-zinc-400 text-sm", children: ["/ 5 \u00B7 ", totalReviews, " reviews"] })] })), _jsx(ListingToolbar, { filterCount: activeFilterCount, onFiltersClick: openFilters, searchValue: searchInput, searchPlaceholder: "Search reviews...", onSearchChange: setSearchInput, onSearchCommit: commitSearch, sortValue: sort, sortOptions: sortOptions, onSortChange: (v) => { table.set(TABLE_KEYS.SORT, v); }, view: view, onViewChange: handleViewToggle, onResetAll: resetAll, hasActiveState: hasActiveState }), totalPages > 1 && (_jsx("div", { className: "sticky top-[calc(var(--header-height,0px)+44px)] z-10 flex justify-center bg-white/95 dark:bg-slate-900/95 backdrop-blur-sm border-b border-zinc-200 dark:border-slate-700 px-3 py-1.5", children: _jsx(Pagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: (p) => table.setPage(p) }) })), _jsx("div", { className: "py-6 px-4", children: isLoading ? (_jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", children: Array.from({ length: 6 }).map((_, i) => (_jsx("div", { className: "rounded-xl border border-zinc-100 dark:border-slate-700 overflow-hidden animate-pulse", children: _jsxs("div", { className: "p-4 space-y-3", children: [_jsx("div", { className: "h-4 bg-zinc-200 dark:bg-slate-700 rounded w-3/4" }), _jsx("div", { className: "h-3 bg-zinc-200 dark:bg-slate-700 rounded w-full" }), _jsx("div", { className: "h-3 bg-zinc-200 dark:bg-slate-700 rounded w-2/3" })] }) }, i))) })) : reviews.length === 0 ? (_jsx(Text, { className: "py-12 text-center text-sm text-zinc-500 dark:text-zinc-400", children: "No reviews found." })) : view === "list" ? (_jsx("div", { className: "flex flex-col divide-y divide-zinc-100 dark:divide-zinc-800 rounded-xl border border-zinc-100 dark:border-zinc-800", children: reviews.map((review) => (_jsx(ReviewCard, { review: review, context: "store" }, review.id))) })) : (_jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", children: reviews.map((review) => (_jsx(ReviewCard, { review: review, context: "store" }, review.id))) })) }),
|
|
104
|
+
return (_jsxs("div", { className: "min-h-screen", children: [totalReviews > 0 && (_jsxs(Row, { align: "center", gap: "sm", className: "px-4 py-3 border-b border-zinc-200 dark:border-slate-700", children: [_jsx(Span, { className: "text-2xl font-bold text-zinc-900 dark:text-zinc-100", children: averageRating.toFixed(1) }), _jsxs(Span, { className: "text-zinc-500 dark:text-zinc-400 text-sm", children: ["/ 5 \u00B7 ", totalReviews, " reviews"] })] })), _jsx(ListingToolbar, { filterCount: activeFilterCount, onFiltersClick: openFilters, searchValue: searchInput, searchPlaceholder: "Search reviews...", onSearchChange: setSearchInput, onSearchCommit: commitSearch, sortValue: sort, sortOptions: sortOptions, onSortChange: (v) => { table.set(TABLE_KEYS.SORT, v); }, view: view, onViewChange: handleViewToggle, onResetAll: resetAll, hasActiveState: hasActiveState }), totalPages > 1 && (_jsx("div", { className: "sticky top-[calc(var(--header-height,0px)+44px)] z-10 flex justify-center bg-white/95 dark:bg-slate-900/95 backdrop-blur-sm border-b border-zinc-200 dark:border-slate-700 px-3 py-1.5", children: _jsx(Pagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: (p) => table.setPage(p) }) })), _jsx("div", { className: "py-6 px-4", children: isLoading ? (_jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", children: Array.from({ length: 6 }).map((_, i) => (_jsx("div", { className: "rounded-xl border border-zinc-100 dark:border-slate-700 overflow-hidden animate-pulse", children: _jsxs("div", { className: "p-4 space-y-3", children: [_jsx("div", { className: "h-4 bg-zinc-200 dark:bg-slate-700 rounded w-3/4" }), _jsx("div", { className: "h-3 bg-zinc-200 dark:bg-slate-700 rounded w-full" }), _jsx("div", { className: "h-3 bg-zinc-200 dark:bg-slate-700 rounded w-2/3" })] }) }, i))) })) : reviews.length === 0 ? (_jsx(Text, { className: "py-12 text-center text-sm text-zinc-500 dark:text-zinc-400", children: "No reviews found." })) : view === "list" ? (_jsx("div", { className: "flex flex-col divide-y divide-zinc-100 dark:divide-zinc-800 rounded-xl border border-zinc-100 dark:border-zinc-800", children: reviews.map((review) => (_jsx(ReviewCard, { review: review, context: "store" }, review.id))) })) : (_jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", children: reviews.map((review) => (_jsx(ReviewCard, { review: review, context: "store" }, review.id))) })) }), _jsx(ListingFilterDrawer, { open: filterOpen, onClose: () => setFilterOpen(false), onApply: applyFilters, onClear: clearFilters, activeCount: activeFilterCount, children: _jsx(ReviewFilters, { table: pendingTable, variant: "public" }) })] }));
|
|
106
105
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface StoreScopedSearchProps {
|
|
2
|
+
storeId: string;
|
|
3
|
+
storeName: string;
|
|
4
|
+
/** Override placeholder; falls back to "Search {storeName}…". */
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* W1-19 — inline search input scoped to a single store. Submits to
|
|
10
|
+
* `/products?storeId={storeId}&q={query}` so the public product listing
|
|
11
|
+
* filters down to this seller's catalog. Lives alongside `StoreHeader` and
|
|
12
|
+
* is the store-page complement to the global `<Search>` slot rendered in
|
|
13
|
+
* `LayoutShellClient`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function StoreScopedSearch({ storeId, storeName, placeholder, className, }: StoreScopedSearchProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { useRouter } from "next/navigation";
|
|
5
|
+
import { Button, Input, Row } from "../../../ui";
|
|
6
|
+
import { ROUTES } from "../../../next/routing/route-map";
|
|
7
|
+
/**
|
|
8
|
+
* W1-19 — inline search input scoped to a single store. Submits to
|
|
9
|
+
* `/products?storeId={storeId}&q={query}` so the public product listing
|
|
10
|
+
* filters down to this seller's catalog. Lives alongside `StoreHeader` and
|
|
11
|
+
* is the store-page complement to the global `<Search>` slot rendered in
|
|
12
|
+
* `LayoutShellClient`.
|
|
13
|
+
*/
|
|
14
|
+
export function StoreScopedSearch({ storeId, storeName, placeholder, className = "", }) {
|
|
15
|
+
const router = useRouter();
|
|
16
|
+
const [value, setValue] = useState("");
|
|
17
|
+
const submit = (e) => {
|
|
18
|
+
e.preventDefault();
|
|
19
|
+
const q = value.trim();
|
|
20
|
+
const base = String(ROUTES.PUBLIC.PRODUCTS);
|
|
21
|
+
const params = new URLSearchParams({ storeId });
|
|
22
|
+
if (q)
|
|
23
|
+
params.set("q", q);
|
|
24
|
+
router.push(`${base}?${params.toString()}`);
|
|
25
|
+
};
|
|
26
|
+
return (_jsx("form", { onSubmit: submit, className: `w-full ${className}`, children: _jsxs(Row, { gap: "sm", align: "center", className: "w-full", children: [_jsx(Input, { type: "search", value: value, onChange: (e) => setValue(e.target.value), placeholder: placeholder ?? `Search ${storeName}…`, "aria-label": `Search ${storeName}`, className: "flex-1" }), _jsx(Button, { type: "submit", variant: "primary", size: "sm", children: "Search" })] }) }));
|
|
27
|
+
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useCallback, useMemo } from "react";
|
|
4
|
-
import { SlidersHorizontal, X } from "lucide-react";
|
|
5
4
|
import { useUrlTable } from "../../../react/hooks/useUrlTable";
|
|
6
5
|
import { useStores } from "../hooks/useStores";
|
|
7
|
-
import { BulkActionBar, ListingToolbar, Pagination, Text } from "../../../ui";
|
|
6
|
+
import { BulkActionBar, ListingFilterDrawer, ListingToolbar, Pagination, Text } from "../../../ui";
|
|
8
7
|
import { ROUTES } from "../../../next";
|
|
9
8
|
import { InteractiveStoreCard } from "./InteractiveStoreCard";
|
|
10
9
|
import { StoreFilters } from "./StoreFilters";
|
|
@@ -150,5 +149,5 @@ export function StoresIndexListing({ initialData }) {
|
|
|
150
149
|
},
|
|
151
150
|
] } } : {});
|
|
152
151
|
return (_jsx(InteractiveStoreCard, { store: store, href: String(ROUTES.PUBLIC.STORE_DETAIL(storeKey)), selectable: selection.isSelecting, isSelected: selection.isSelected(store.id ?? store.storeSlug), onSelect: (id, sel) => { void sel; selection.toggle(id); } }, storeKey));
|
|
153
|
-
}) })) }),
|
|
152
|
+
}) })) }), _jsx(ListingFilterDrawer, { open: filterOpen, onClose: () => setFilterOpen(false), onApply: applyFilters, onClear: clearFilters, activeCount: pendingFilterCount, children: _jsx(StoreFilters, { table: pendingTable }) })] }));
|
|
154
153
|
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Server-only entry point — repositories and API route handlers.
|
|
5
5
|
*/
|
|
6
6
|
export * from "./actions";
|
|
7
|
-
export { StoresRepository } from "./repository/stores.repository";
|
|
8
7
|
export { StoreRepository, storeRepository, } from "./repository/store.repository";
|
|
9
8
|
export { GET as storesGET, GET } from "./api/route";
|
|
10
9
|
export { GET as storeSlugGET } from "./api/[storeSlug]/route";
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Server-only entry point — repositories and API route handlers.
|
|
5
5
|
*/
|
|
6
6
|
export * from "./actions";
|
|
7
|
-
export { StoresRepository } from "./repository/stores.repository";
|
|
8
7
|
export { StoreRepository, storeRepository, } from "./repository/store.repository";
|
|
9
8
|
// SB-UNI-A 2026-05-13 — storeAddressRepository deleted. Use addressesRepository
|
|
10
9
|
// (top-level addresses collection with ownerType:"store").
|
|
@@ -23,6 +23,9 @@ export declare const TicketCategoryValues: {
|
|
|
23
23
|
readonly REFUND_REQUEST: "refund_request";
|
|
24
24
|
readonly AUCTION_DISPUTE: "auction_dispute";
|
|
25
25
|
readonly GENERAL: "general";
|
|
26
|
+
readonly STORE_CHANGE_REQUEST: "store_change_request";
|
|
27
|
+
readonly ORDER_MODIFICATION_REQUEST: "order_modification_request";
|
|
28
|
+
readonly UNBAN_REQUEST: "unban_request";
|
|
26
29
|
};
|
|
27
30
|
export type TicketCategory = (typeof TicketCategoryValues)[keyof typeof TicketCategoryValues];
|
|
28
31
|
export declare const TicketStatusValues: {
|
|
@@ -54,6 +57,19 @@ export interface TicketMessage {
|
|
|
54
57
|
attachments?: string[];
|
|
55
58
|
createdAt: Date;
|
|
56
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Subject entities a ticket concerns. Assigned by admin/support agents so a
|
|
62
|
+
* single ticket can reference the buyer, store, order, product, or bid in
|
|
63
|
+
* dispute. Used to render clickable chips in the ticket detail view that link
|
|
64
|
+
* to the relevant admin detail page.
|
|
65
|
+
*/
|
|
66
|
+
export interface TicketRelatedParties {
|
|
67
|
+
userId?: string;
|
|
68
|
+
storeId?: string;
|
|
69
|
+
orderId?: string;
|
|
70
|
+
productId?: string;
|
|
71
|
+
bidId?: string;
|
|
72
|
+
}
|
|
57
73
|
export interface SupportTicketDocument {
|
|
58
74
|
id: string;
|
|
59
75
|
userId: string;
|
|
@@ -67,6 +83,11 @@ export interface SupportTicketDocument {
|
|
|
67
83
|
description: string;
|
|
68
84
|
/** Linked order ID — required when category === "order_issue". */
|
|
69
85
|
orderId?: string;
|
|
86
|
+
/**
|
|
87
|
+
* ST-6 — subjects of the ticket. Admin/support assignable. `orderId` is
|
|
88
|
+
* mirrored here for consistency when set via the linked-parties panel.
|
|
89
|
+
*/
|
|
90
|
+
relatedParties?: TicketRelatedParties;
|
|
70
91
|
status: TicketStatus;
|
|
71
92
|
priority: TicketPriority;
|
|
72
93
|
/** UID of the assigned employee. */
|
|
@@ -86,7 +107,7 @@ export interface SupportTicketDocument {
|
|
|
86
107
|
updatedAt: Date;
|
|
87
108
|
}
|
|
88
109
|
export type SupportTicketCreateInput = Pick<SupportTicketDocument, "userId" | "userEmail" | "userDisplayName" | "category" | "subject" | "description" | "orderId">;
|
|
89
|
-
export type SupportTicketUpdateInput = Partial<Pick<SupportTicketDocument, "status" | "priority" | "assignedTo" | "assignedToName" | "internalNotes" | "resolvedAt" | "closedAt">>;
|
|
110
|
+
export type SupportTicketUpdateInput = Partial<Pick<SupportTicketDocument, "status" | "priority" | "assignedTo" | "assignedToName" | "internalNotes" | "resolvedAt" | "closedAt" | "relatedParties">>;
|
|
90
111
|
export declare const SUPPORT_TICKET_COLLECTION: "supportTickets";
|
|
91
112
|
export declare const SUPPORT_TICKET_ID_PREFIX: "ticket-";
|
|
92
113
|
export declare const SUPPORT_TICKET_INDEXED_FIELDS: readonly ["userId", "status", "category", "priority", "assignedTo", "orderId", "createdAt", "updatedAt"];
|
|
@@ -26,6 +26,16 @@ export const TicketCategoryValues = {
|
|
|
26
26
|
REFUND_REQUEST: "refund_request",
|
|
27
27
|
AUCTION_DISPUTE: "auction_dispute",
|
|
28
28
|
GENERAL: "general",
|
|
29
|
+
// ST-4 — sellers request admin-only field changes on their store
|
|
30
|
+
// (status / capabilities / isVerified) through this category.
|
|
31
|
+
STORE_CHANGE_REQUEST: "store_change_request",
|
|
32
|
+
// ST-3 — buyers/sellers request mutation of order line items
|
|
33
|
+
// (wrong item shipped, partial fulfilment, bundle correction).
|
|
34
|
+
ORDER_MODIFICATION_REQUEST: "order_modification_request",
|
|
35
|
+
// ST-5 — users appeal a soft-ban or hard-ban via this category.
|
|
36
|
+
// Server bypasses the create_support_tickets soft-ban guard and the
|
|
37
|
+
// active-ticket limit so the user always has an appeal channel.
|
|
38
|
+
UNBAN_REQUEST: "unban_request",
|
|
29
39
|
};
|
|
30
40
|
export const TicketStatusValues = {
|
|
31
41
|
OPEN: "open",
|
|
@@ -4,5 +4,4 @@
|
|
|
4
4
|
* Server-only entry point for wishlist repositories.
|
|
5
5
|
*/
|
|
6
6
|
export * from "./actions";
|
|
7
|
-
export { WishlistRepository } from "./repository/wishlist.repository";
|
|
8
7
|
export { UserWishlistRepository, wishlistRepository, WishlistFullError, type UserWishlistItem, type WishlistDocument, type WishlistItemSnapshot, } from "./repository/user-wishlist.repository";
|
|
@@ -4,5 +4,4 @@
|
|
|
4
4
|
* Server-only entry point for wishlist repositories.
|
|
5
5
|
*/
|
|
6
6
|
export * from "./actions";
|
|
7
|
-
export { WishlistRepository } from "./repository/wishlist.repository";
|
|
8
7
|
export { UserWishlistRepository, wishlistRepository, WishlistFullError, } from "./repository/user-wishlist.repository";
|