@mohasinac/appkit 4.30.18 → 4.31.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/digital-code/CodeRevealPanel.js +5 -2
- package/dist/_internal/client/features/layout/DashboardLayoutClient.js +3 -3
- package/dist/_internal/client/features/layout/useSidebarSearch.d.ts +21 -5
- package/dist/_internal/client/features/layout/useSidebarSearch.js +27 -6
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +23 -3
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +106 -86
- package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +16 -5
- package/dist/_internal/client/features/lottery/LotteryPullForm.js +65 -40
- package/dist/_internal/client/features/maintenance/views/AnalysisRunnerView.js +5 -2
- package/dist/_internal/client/features/maintenance/views/CloudLogsListView.js +11 -3
- package/dist/_internal/client/hand-mode/HandModeProvider.js +2 -0
- package/dist/_internal/server/features/auctions/actions.js +14 -3
- package/dist/_internal/server/features/auctions/service.js +1 -1
- package/dist/_internal/server/features/auth/permissions.d.ts +2 -0
- package/dist/_internal/server/features/auth/permissions.js +3 -2
- package/dist/_internal/server/features/blog/data.js +2 -2
- package/dist/_internal/server/features/blog/service.js +3 -3
- package/dist/_internal/server/features/brands/data.js +1 -1
- package/dist/_internal/server/features/brands/service.js +3 -3
- package/dist/_internal/server/features/bundles/actions.js +6 -1
- package/dist/_internal/server/features/bundles/data.js +21 -4
- package/dist/_internal/server/features/cart/data.js +3 -1
- package/dist/_internal/server/features/cart/service.js +13 -2
- package/dist/_internal/server/features/categories/data.js +26 -6
- package/dist/_internal/server/features/classified/index.d.ts +0 -1
- package/dist/_internal/server/features/classified/index.js +0 -1
- package/dist/_internal/server/features/digital-code/index.d.ts +0 -1
- package/dist/_internal/server/features/digital-code/index.js +0 -1
- package/dist/_internal/server/features/events/actions.js +17 -4
- package/dist/_internal/server/features/events/data.js +1 -1
- package/dist/_internal/server/features/events/service.js +1 -1
- package/dist/_internal/server/features/grouped/data.js +7 -2
- package/dist/_internal/server/features/item-requests/data.js +1 -1
- package/dist/_internal/server/features/live/index.d.ts +0 -1
- package/dist/_internal/server/features/live/index.js +0 -1
- package/dist/_internal/server/features/lottery/actions.js +2 -2
- package/dist/_internal/server/features/lottery/data.js +1 -1
- package/dist/_internal/server/features/orders/actions.js +7 -7
- package/dist/_internal/server/features/orders/data.d.ts +1 -1
- package/dist/_internal/server/features/orders/data.js +14 -2
- package/dist/_internal/server/features/orders/service.js +1 -1
- package/dist/_internal/server/features/pre-orders/service.js +1 -1
- package/dist/_internal/server/features/prize-draws/actions.js +1 -1
- package/dist/_internal/server/features/products/data.js +21 -6
- package/dist/_internal/server/features/products/list-public.d.ts +9 -0
- package/dist/_internal/server/features/products/list-public.js +95 -7
- package/dist/_internal/server/features/products/service.js +1 -1
- package/dist/_internal/server/features/promotions/actions.js +1 -1
- package/dist/_internal/server/features/promotions/data.js +1 -1
- package/dist/_internal/server/features/promotions/service.js +1 -1
- package/dist/_internal/server/features/reviews/data.d.ts +1 -1
- package/dist/_internal/server/features/reviews/data.js +6 -1
- package/dist/_internal/server/features/reviews/og-data.js +1 -1
- package/dist/_internal/server/features/shared/listing-data-factory.js +7 -2
- package/dist/_internal/server/features/site-settings/adapters.d.ts +2 -2
- package/dist/_internal/server/features/site-settings/adapters.js +8 -5
- package/dist/_internal/server/features/stores/data.js +1 -1
- package/dist/_internal/server/features/sublisting-categories/data.js +1 -1
- package/dist/_internal/server/features/tester/visibility.d.ts +2 -1
- package/dist/_internal/server/features/tester/visibility.js +2 -2
- package/dist/_internal/server/functions/scheduled.d.ts +3 -1
- package/dist/_internal/server/functions/scheduled.js +27 -1
- package/dist/_internal/server/jobs/core/auctionSettlement.js +6 -1
- package/dist/_internal/server/jobs/core/hardBanCascade.js +4 -0
- package/dist/_internal/server/jobs/core/index.d.ts +2 -0
- package/dist/_internal/server/jobs/core/index.js +2 -0
- package/dist/_internal/server/jobs/core/onOrderStatusChange.js +7 -15
- package/dist/_internal/server/jobs/core/pageViewPrune.d.ts +10 -0
- package/dist/_internal/server/jobs/core/pageViewPrune.js +44 -0
- package/dist/_internal/server/jobs/core/pageViewRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/core/pageViewRollup.js +87 -0
- package/dist/_internal/server/jobs/core/revenueRollup.js +7 -1
- package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/index.js +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewPrune.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewPrune.js +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewRollup.js +2 -0
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +69 -22
- package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -4
- package/dist/_internal/shared/checkout/rules/classified.rule.js +7 -2
- package/dist/_internal/shared/features/layout/matchesNavQuery.d.ts +14 -0
- package/dist/_internal/shared/features/layout/matchesNavQuery.js +72 -0
- package/dist/_internal/shared/features/layout/types.d.ts +37 -1
- package/dist/_internal/shared/features/layout/types.js +19 -1
- package/dist/_internal/shared/features/notifications/action-url.d.ts +9 -1
- package/dist/_internal/shared/features/notifications/action-url.js +47 -0
- package/dist/_internal/shared/features/offers/config.d.ts +65 -0
- package/dist/_internal/shared/features/offers/config.js +73 -2
- package/dist/_internal/shared/features/orders/schema.d.ts +19 -1
- package/dist/_internal/shared/features/orders/schema.js +22 -2
- package/dist/_internal/shared/features/site-settings/types.d.ts +12 -3
- package/dist/_internal/shared/listing-types/capabilities.d.ts +8 -2
- package/dist/_internal/shared/listing-types/capabilities.js +6 -1
- package/dist/_internal/shared/listing-types/classified/ctas.js +6 -1
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +10 -5
- package/dist/_internal/shared/listing-types/feature-flags.js +11 -6
- package/dist/client/api/useApiQuery.js +17 -6
- package/dist/client.d.ts +38 -20
- package/dist/client.js +39 -14
- package/dist/configs/next.js +10 -2
- package/dist/constants/api-endpoints.d.ts +18 -54
- package/dist/constants/api-endpoints.js +6 -26
- package/dist/constants/field-names.d.ts +6 -24
- package/dist/constants/field-names.js +10 -27
- package/dist/constants/geo/countries.d.ts +50 -0
- package/dist/constants/geo/countries.js +129 -0
- package/dist/constants/geo/subdivisions.d.ts +13 -0
- package/dist/constants/geo/subdivisions.js +104 -0
- package/dist/constants/index.d.ts +2 -2
- package/dist/constants/index.js +2 -2
- package/dist/constants/table-keys.d.ts +24 -0
- package/dist/constants/table-keys.js +28 -0
- package/dist/contracts/client-realtime.d.ts +6 -0
- package/dist/contracts/extend.d.ts +0 -9
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/realtime-session.d.ts +12 -12
- package/dist/contracts/realtime-session.js +79 -77
- package/dist/core/browser.d.ts +1 -1
- package/dist/core/browser.js +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/site-config.d.ts +0 -3
- package/dist/core/site-config.js +0 -3
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/messages.d.ts +0 -8
- package/dist/errors/messages.js +0 -9
- package/dist/features/about/components/DeveloperView.js +7 -2
- package/dist/features/about/components/PolicyPageView.js +9 -1
- package/dist/features/about/components/PublicProfileView.js +23 -5
- package/dist/features/about/schemas/index.d.ts +8 -8
- package/dist/features/account/components/AddressFilters.js +32 -11
- package/dist/features/account/components/AddressForm.d.ts +26 -25
- package/dist/features/account/components/AddressForm.js +81 -103
- package/dist/features/account/components/AddressesIndexListing.js +8 -4
- package/dist/features/account/components/NotificationBell.js +4 -3
- package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
- package/dist/features/account/components/UserOffersPanel.js +1 -1
- package/dist/features/account/components/UserSidebar.d.ts +3 -4
- package/dist/features/account/components/UserSupportView.js +89 -58
- package/dist/features/account/components/index.d.ts +1 -7
- package/dist/features/account/components/index.js +0 -3
- package/dist/features/account/hooks/useAddresses.d.ts +4 -3
- package/dist/features/account/hooks/useAddresses.js +4 -6
- package/dist/features/account/hooks/useCollapsedSections.d.ts +51 -10
- package/dist/features/account/hooks/useCollapsedSections.js +211 -38
- package/dist/features/account/hooks/useProfile.d.ts +8 -0
- package/dist/features/account/index.d.ts +0 -3
- package/dist/features/account/index.js +0 -3
- package/dist/features/account/schemas/index.d.ts +0 -92
- package/dist/features/account/schemas/index.js +42 -20
- package/dist/features/addresses/components/AddressLocationFields.d.ts +13 -0
- package/dist/features/addresses/components/AddressLocationFields.js +41 -0
- package/dist/features/addresses/hooks/usePostalLookup.d.ts +17 -0
- package/dist/features/addresses/hooks/usePostalLookup.js +133 -0
- package/dist/features/addresses/schemas/address-form.d.ts +423 -0
- package/dist/features/addresses/schemas/address-form.js +212 -0
- package/dist/features/addresses/schemas/index.d.ts +1 -0
- package/dist/features/addresses/schemas/index.js +8 -0
- package/dist/features/admin/actions/admin-read-actions.d.ts +1 -1
- package/dist/features/admin/actions/index.d.ts +0 -1
- package/dist/features/admin/actions/index.js +0 -1
- package/dist/features/admin/actions/notification-actions.js +1 -41
- package/dist/features/admin/components/AdminActionIndexView.d.ts +32 -0
- package/dist/features/admin/components/AdminActionIndexView.js +128 -0
- package/dist/features/admin/components/AdminAdEditorView.js +159 -163
- package/dist/features/admin/components/AdminAddressEditorView.js +97 -55
- package/dist/features/admin/components/AdminBrandEditorView.d.ts +15 -0
- package/dist/features/admin/components/AdminBrandEditorView.js +113 -77
- package/dist/features/admin/components/AdminBundleEditorView.d.ts +19 -9
- package/dist/features/admin/components/AdminBundleEditorView.js +136 -168
- package/dist/features/admin/components/AdminCategoryEditorView.js +120 -43
- package/dist/features/admin/components/AdminCouponEditorView.js +145 -109
- package/dist/features/admin/components/AdminEmployeeEditorView.js +125 -56
- package/dist/features/admin/components/AdminFaqEditorView.js +112 -58
- package/dist/features/admin/components/AdminFeatureEditorView.js +108 -68
- package/dist/features/admin/components/AdminFulfillmentView.js +5 -2
- package/dist/features/admin/components/AdminMediaView.js +3 -3
- package/dist/features/admin/components/AdminNavEditorView.js +69 -44
- package/dist/features/admin/components/AdminOrderEditorView.js +47 -10
- package/dist/features/admin/components/AdminPrizeDrawsView.js +16 -2
- package/dist/features/admin/components/AdminSidebar.d.ts +11 -7
- package/dist/features/admin/components/AdminSiteSettingsView.js +37 -37
- package/dist/features/admin/components/AdminStoreEditorView.js +75 -52
- package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +71 -30
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +95 -65
- package/dist/features/admin/components/BrandQuickCreateForm.d.ts +10 -0
- package/dist/features/admin/components/BrandQuickCreateForm.js +49 -26
- package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +11 -0
- package/dist/features/admin/components/CategoryQuickCreateForm.js +48 -26
- package/dist/features/admin/components/index.d.ts +2 -2
- package/dist/features/admin/components/index.js +1 -1
- package/dist/features/admin/constants/site-settings-tabs.d.ts +120 -0
- package/dist/features/admin/constants/site-settings-tabs.js +152 -0
- package/dist/features/admin/index.d.ts +0 -3
- package/dist/features/admin/index.js +0 -2
- package/dist/features/admin/repository/analytics-rollup.repository.d.ts +35 -0
- package/dist/features/admin/repository/analytics-rollup.repository.js +30 -0
- package/dist/features/admin/schemas/admin-editor-forms.d.ts +56 -57
- package/dist/features/admin/schemas/admin-editor-forms.js +97 -54
- package/dist/features/admin/schemas/admin-ops-forms.d.ts +57 -5
- package/dist/features/admin/schemas/admin-ops-forms.js +104 -20
- package/dist/features/admin/schemas/admin-user-form.js +7 -0
- package/dist/features/admin/schemas/firestore.d.ts +48 -95
- package/dist/features/admin/schemas/firestore.js +15 -151
- package/dist/features/admin/schemas/nav-item-form.js +9 -2
- package/dist/features/admin/server.d.ts +0 -4
- package/dist/features/admin/server.js +0 -2
- package/dist/features/admin/types/index.d.ts +0 -7
- package/dist/features/analytics/repository/page-views.repository.d.ts +14 -0
- package/dist/features/analytics/repository/page-views.repository.js +24 -0
- package/dist/features/analytics/types.d.ts +1 -1
- package/dist/features/analytics/types.js +13 -0
- package/dist/features/auctions/components/AuctionDetailPageView.js +6 -2
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +3 -1
- package/dist/features/auth/actions/index.d.ts +0 -1
- package/dist/features/auth/actions/index.js +0 -1
- package/dist/features/auth/actions/profile-actions.js +4 -3
- package/dist/features/auth/actions/realtime-token-actions.js +1 -12
- package/dist/features/auth/auth-helpers.js +5 -7
- package/dist/features/auth/components/ForgotPasswordView.js +1 -1
- package/dist/features/auth/components/Guards.js +2 -1
- package/dist/features/auth/components/LoginForm.d.ts +0 -2
- package/dist/features/auth/components/LoginForm.js +2 -4
- package/dist/features/auth/components/RegisterForm.js +62 -19
- package/dist/features/auth/components/ResetPasswordView.js +1 -1
- package/dist/features/auth/hooks/useAuth.js +3 -0
- package/dist/features/auth/permissions/constants.d.ts +27 -1
- package/dist/features/auth/role-predicates.d.ts +75 -7
- package/dist/features/auth/role-predicates.js +28 -2
- package/dist/features/auth/schemas/firestore.d.ts +22 -0
- package/dist/features/auth/schemas/index.d.ts +1 -1
- package/dist/features/auth/schemas/index.js +44 -8
- package/dist/features/auth/types/index.d.ts +14 -1
- package/dist/features/blog/api/route.js +10 -2
- package/dist/features/blog/components/BlogIndexListing.js +1 -1
- package/dist/features/blog/hooks/useBlog.js +2 -2
- package/dist/features/blog/repository/blog.repository.js +3 -1
- package/dist/features/blog/schemas/index.d.ts +4 -0
- package/dist/features/blog/schemas/index.js +2 -0
- package/dist/features/blog/types/index.d.ts +1 -1
- package/dist/features/cart/actions/cart-actions.js +13 -4
- package/dist/features/cart/utils/pending-ops.js +1 -1
- package/dist/features/catalogue/components/CatalogueItemEditorView.d.ts +22 -0
- package/dist/features/catalogue/components/CatalogueItemEditorView.js +112 -52
- package/dist/features/catalogue/schemas/validation.d.ts +4 -4
- package/dist/features/catalogue/schemas/validation.js +47 -10
- package/dist/features/categories/components/BrandDetailPageView.js +28 -12
- package/dist/features/categories/components/CategoryDetailPageView.js +37 -20
- package/dist/features/categories/repository/categories.repository.js +3 -1
- package/dist/features/categories/schemas/bundle-form.d.ts +142 -0
- package/dist/features/categories/schemas/bundle-form.js +149 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +10 -1
- package/dist/features/classified/components/ClassifiedContactSellerPanel.js +1 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +5 -4
- package/dist/features/classified/components/ClassifiedDetailPageView.js +47 -18
- package/dist/features/consultation/components/ConsultationForm.js +1 -1
- package/dist/features/consultation/schemas/index.js +34 -10
- package/dist/features/corporate/schemas/index.js +36 -15
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +4 -1
- package/dist/features/events/components/EventBanner.js +5 -2
- package/dist/features/events/components/EventOfferCard.js +3 -1
- package/dist/features/events/components/EventPollWidget.js +1 -1
- package/dist/features/events/components/SpinWheelView.js +3 -2
- package/dist/features/filters/FilterPanel.js +3 -3
- package/dist/features/filters/RangeFilter.d.ts +10 -0
- package/dist/features/filters/RangeFilter.js +41 -4
- package/dist/features/grouped/components/GroupedListingEditorView.js +2 -1
- package/dist/features/history/hooks/useHistory.js +29 -27
- package/dist/features/homepage/components/AdSlot.js +3 -1
- package/dist/features/homepage/components/GoogleReviewsSection.js +8 -2
- package/dist/features/homepage/components/MarketplaceHomepageView.js +58 -15
- package/dist/features/homepage/components/SocialFeedSection.js +4 -1
- package/dist/features/homepage/hooks/useBlogArticles.js +1 -1
- package/dist/features/homepage/lib/live-stats.js +8 -1
- package/dist/features/homepage/repository/carousel.repository.js +2 -1
- package/dist/features/layout/BottomActions.js +84 -11
- package/dist/features/layout/BottomActionsContext.d.ts +1 -6
- package/dist/features/layout/BottomActionsContext.js +1 -1
- package/dist/features/layout/hooks/useBottomActions.js +2 -2
- package/dist/features/layout/hooks/useFormBottomActions.d.ts +12 -1
- package/dist/features/layout/hooks/useFormBottomActions.js +12 -6
- package/dist/features/live/components/LiveItemDetailPageView.js +4 -1
- package/dist/features/lottery/schemas/config-write.d.ts +9 -5
- package/dist/features/lottery/schemas/config-write.js +69 -9
- package/dist/features/media/finalize.js +3 -1
- package/dist/features/media/modals/ImageEditor.js +1 -1
- package/dist/features/media/modals/VideoThumbnailSelector.js +5 -2
- package/dist/features/media/modals/VideoTrimModal.js +5 -2
- package/dist/features/media/upload/MediaUploadField.js +2 -2
- package/dist/features/messages/hooks/useConversation.js +18 -4
- package/dist/features/messages/hooks/useConversations.js +25 -8
- package/dist/features/orders/components/RefundRequestView.js +5 -2
- package/dist/features/orders/schemas/buyer-forms.d.ts +6 -3
- package/dist/features/orders/schemas/buyer-forms.js +31 -3
- package/dist/features/orders/schemas/index.d.ts +2 -2
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -1
- package/dist/features/pre-orders/components/PreOrderActionsClient.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +4 -1
- package/dist/features/products/components/GroupSettingsPanel.js +3 -1
- package/dist/features/products/components/MakeOfferButton.d.ts +13 -2
- package/dist/features/products/components/MakeOfferButton.js +33 -11
- package/dist/features/products/components/PrizeDrawDetailPageView.js +4 -1
- package/dist/features/products/components/ProductDetailActions.js +0 -1
- package/dist/features/products/components/ProductDetailPageView.d.ts +7 -3
- package/dist/features/products/components/ProductDetailPageView.js +16 -7
- package/dist/features/products/components/ShareButton.js +3 -1
- package/dist/features/products/constants/action-defs.d.ts +1 -2
- package/dist/features/products/constants/action-defs.js +40 -43
- package/dist/features/products/repository/loadProductFeatures.js +10 -2
- package/dist/features/products/repository/products.repository.d.ts +5 -1
- package/dist/features/products/repository/products.repository.js +25 -2
- package/dist/features/products/schemas/firestore.d.ts +7 -3
- package/dist/features/products/schemas/product-features.validators.js +3 -0
- package/dist/features/promotions/components/CouponCard.js +11 -8
- package/dist/features/reviews/actions/review-actions.js +8 -1
- package/dist/features/reviews/components/ReviewDetailPageView.js +13 -3
- package/dist/features/reviews/components/ReviewDetailShell.js +3 -1
- package/dist/features/scams/actions/scam-actions.d.ts +9 -1
- package/dist/features/scams/actions/scam-actions.js +52 -12
- package/dist/features/scams/components/SellerTrustBadge.d.ts +1 -1
- package/dist/features/scams/components/SellerTrustBadge.js +13 -0
- package/dist/features/scams/repository/scammer.repository.js +2 -1
- package/dist/features/scams/schemas/firestore.d.ts +15 -1
- package/dist/features/scams/schemas/report-form.d.ts +5 -5
- package/dist/features/scams/schemas/report-form.js +18 -3
- package/dist/features/search/action-index/derive.d.ts +49 -0
- package/dist/features/search/action-index/derive.js +121 -0
- package/dist/features/search/action-index/repository.d.ts +42 -0
- package/dist/features/search/action-index/repository.js +100 -0
- package/dist/features/search/action-index/settings-entries.d.ts +41 -0
- package/dist/features/search/action-index/settings-entries.js +268 -0
- package/dist/features/search/action-index/types.d.ts +81 -0
- package/dist/features/search/action-index/types.js +102 -0
- package/dist/features/search/action-index/validate-entry.d.ts +34 -0
- package/dist/features/search/action-index/validate-entry.js +114 -0
- package/dist/features/search/hooks/useNavSuggestions.d.ts +5 -1
- package/dist/features/search/hooks/useNavSuggestions.js +23 -3
- package/dist/features/search/repository/search.repository.js +3 -1
- package/dist/features/seller/actions/offer-actions.js +43 -19
- package/dist/features/seller/actions/seller-actions.js +29 -5
- package/dist/features/seller/components/CategoryChipPicker.d.ts +9 -0
- package/dist/features/seller/components/CategoryChipPicker.js +12 -0
- package/dist/features/seller/components/FulfillmentView.js +5 -2
- package/dist/features/seller/components/PhysicalLocationModal.js +1 -1
- package/dist/features/seller/components/PrintCenterView.js +3 -1
- package/dist/features/seller/components/SellerAddressesView.js +5 -1
- package/dist/features/seller/components/SellerAnalyticsAlertsView.js +83 -43
- package/dist/features/seller/components/SellerArtView.d.ts +14 -7
- package/dist/features/seller/components/SellerArtView.js +4 -119
- package/dist/features/seller/components/SellerBidsView.js +1 -1
- package/dist/features/seller/components/SellerClassifiedView.d.ts +14 -7
- package/dist/features/seller/components/SellerClassifiedView.js +4 -124
- package/dist/features/seller/components/SellerCouponEditorView.d.ts +22 -1
- package/dist/features/seller/components/SellerCouponEditorView.js +91 -45
- package/dist/features/seller/components/SellerCouponsView.js +1 -1
- package/dist/features/seller/components/SellerDigitalCodesView.d.ts +14 -7
- package/dist/features/seller/components/SellerDigitalCodesView.js +4 -126
- package/dist/features/seller/components/SellerGoogleReviewsView.js +2 -2
- package/dist/features/seller/components/SellerListingTypeView.d.ts +66 -0
- package/dist/features/seller/components/SellerListingTypeView.js +277 -0
- package/dist/features/seller/components/SellerLiveView.d.ts +14 -7
- package/dist/features/seller/components/SellerLiveView.js +4 -126
- package/dist/features/seller/components/SellerOrdersView.js +3 -3
- package/dist/features/seller/components/SellerPayoutMethodsView.js +2 -2
- package/dist/features/seller/components/SellerProductShell.d.ts +5 -0
- package/dist/features/seller/components/SellerProductShell.js +15 -5
- package/dist/features/seller/components/SellerProductsView.js +24 -10
- package/dist/features/seller/components/SellerReviewsView.js +47 -16
- package/dist/features/seller/components/SellerShippingConfigsView.js +5 -4
- package/dist/features/seller/components/SellerSidebar.d.ts +3 -6
- package/dist/features/seller/components/SellerStickersView.d.ts +14 -7
- package/dist/features/seller/components/SellerStickersView.js +4 -119
- package/dist/features/seller/components/SellerStoreCategoriesView.js +3 -2
- package/dist/features/seller/components/SellerSupportView.d.ts +31 -0
- package/dist/features/seller/components/SellerSupportView.js +100 -0
- package/dist/features/seller/components/index.d.ts +4 -8
- package/dist/features/seller/components/index.js +2 -4
- package/dist/features/seller/index.d.ts +0 -1
- package/dist/features/seller/index.js +0 -1
- package/dist/features/seller/schemas/coupon-form.d.ts +214 -0
- package/dist/features/seller/schemas/coupon-form.js +155 -23
- package/dist/features/seller/schemas/offer-forms.d.ts +16 -7
- package/dist/features/seller/schemas/offer-forms.js +28 -12
- package/dist/features/shell/FormShell.js +2 -2
- package/dist/features/shell/QuickFormDrawer.js +2 -2
- package/dist/features/shell/SectionForm.d.ts +19 -1
- package/dist/features/shell/SectionForm.js +104 -17
- package/dist/features/shell/build-sections.d.ts +23 -0
- package/dist/features/shell/build-sections.js +106 -8
- package/dist/features/shell/field-ui-meta.d.ts +44 -0
- package/dist/features/shell/field-ui-meta.js +14 -7
- package/dist/features/shell/form-sections.d.ts +46 -0
- package/dist/features/shell/form-sections.js +114 -0
- package/dist/features/shipments/components/AdminShipmentEditorView.js +87 -64
- package/dist/features/shipments/schemas/validation.d.ts +2 -2
- package/dist/features/shipments/schemas/validation.js +44 -13
- package/dist/features/store-extensions/schemas/custom-role-form.js +6 -2
- package/dist/features/store-extensions/schemas/listing-template-form.d.ts +7 -7
- package/dist/features/store-extensions/schemas/payout-method-form.js +14 -0
- package/dist/features/stores/actions/store-query-actions.js +3 -2
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -1
- package/dist/features/stores/api/[storeSlug]/products/route.js +3 -1
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.js +12 -3
- package/dist/features/support/repository/support.repository.d.ts +21 -0
- package/dist/features/support/repository/support.repository.js +63 -0
- package/dist/features/support/schemas/firestore.d.ts +27 -2
- package/dist/features/support/schemas/firestore.js +2 -0
- package/dist/features/support/schemas/ticket-create-form.js +7 -0
- package/dist/features/tester/schemas/checklist-item-form.d.ts +43 -0
- package/dist/features/tester/schemas/checklist-item-form.js +109 -0
- package/dist/features/tester/seed-data/blog-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/categories-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/events-tester-seed-data.js +5 -5
- package/dist/features/tester/seed-data/orders-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/products-tester-seed-data.js +48 -49
- package/dist/features/tester/seed-data/stores-tester-seed-data.js +3 -3
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +291 -30
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +51 -14
- package/dist/features/wishlist/hooks/useWishlistToggle.js +8 -1
- package/dist/http/api-handler.js +2 -1
- package/dist/index.d.ts +25 -104
- package/dist/index.js +38 -143
- package/dist/jobs.d.ts +1 -1
- package/dist/jobs.js +1 -1
- package/dist/monitoring/browser.d.ts +0 -2
- package/dist/monitoring/browser.js +12 -1
- package/dist/monitoring/index.d.ts +0 -2
- package/dist/monitoring/index.js +0 -1
- package/dist/next/api/routeHandler.js +9 -4
- package/dist/next/index.d.ts +1 -2
- package/dist/next/index.js +0 -1
- package/dist/next/middleware/index.d.ts +0 -2
- package/dist/next/middleware/index.js +0 -1
- package/dist/next/routing/route-map.d.ts +8 -7
- package/dist/next/routing/route-map.js +10 -3
- package/dist/providers/auth-firebase/session.js +3 -1
- package/dist/providers/db-firebase/admin-app-lite.js +8 -8
- package/dist/providers/db-firebase/admin.js +27 -13
- package/dist/providers/db-firebase/browser-stub.d.ts +1 -11
- package/dist/providers/db-firebase/browser-stub.js +6 -11
- package/dist/providers/db-firebase/index.d.ts +0 -1
- package/dist/providers/db-firebase/index.js +0 -1
- package/dist/providers/db-firebase/rtdb-paths.d.ts +15 -6
- package/dist/providers/db-firebase/rtdb-paths.js +15 -6
- package/dist/providers/db-firebase/rtdb-url.d.ts +27 -0
- package/dist/providers/db-firebase/rtdb-url.js +50 -0
- package/dist/providers/db-firebase/sieve.d.ts +22 -0
- package/dist/providers/firebase-client/realtime.d.ts +20 -0
- package/dist/providers/firebase-client/realtime.js +34 -1
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +1 -1
- package/dist/react/hooks/use-action-dispatch.js +8 -2
- package/dist/react/hooks/useFormStatePreservation.js +3 -1
- package/dist/react/hooks/useListingTypeFlags.d.ts +1 -1
- package/dist/react/hooks/useListingTypeFlags.js +1 -1
- package/dist/react/hooks/usePendingFilters.js +5 -3
- package/dist/react/hooks/usePendingTable.js +15 -3
- package/dist/react/hooks/useRealtimeEvent.js +20 -9
- package/dist/repositories/index.d.ts +0 -1
- package/dist/repositories/index.js +0 -1
- package/dist/schemas/registry.d.ts +197 -232
- package/dist/schemas/registry.js +5 -6
- package/dist/schemas/webhooks/razorpay.d.ts +50 -50
- package/dist/security/authorization.d.ts +9 -0
- package/dist/security/authorization.js +16 -2
- package/dist/security/browser.d.ts +1 -3
- package/dist/security/browser.js +5 -2
- package/dist/security/index.d.ts +1 -3
- package/dist/security/index.js +19 -2
- package/dist/security/pii-encrypt.js +16 -0
- package/dist/security/pii-schemas.d.ts +0 -14
- package/dist/security/pii-schemas.js +7 -15
- package/dist/seed/_helpers/category-forest.js +2 -2
- package/dist/seed/_helpers/media.d.ts +19 -0
- package/dist/seed/_helpers/media.js +75 -0
- package/dist/seed/blog-posts-seed-data.js +17 -17
- package/dist/seed/carousel-slides-seed-data.js +7 -7
- package/dist/seed/cart-seed-data.js +13 -13
- package/dist/seed/categories-seed-data.js +10 -10
- package/dist/seed/events-seed-data.js +24 -24
- package/dist/seed/factories/product.factory.js +4 -4
- package/dist/seed/factories/store.factory.js +3 -3
- package/dist/seed/factories/user.factory.js +2 -2
- package/dist/seed/grouped-listings-seed-data.js +11 -11
- package/dist/seed/homepage-sections-seed-data.js +2 -2
- package/dist/seed/index.d.ts +0 -1
- package/dist/seed/index.js +0 -1
- package/dist/seed/manifest.d.ts +1 -1
- package/dist/seed/manifest.js +0 -5
- package/dist/seed/notifications-seed-data.js +20 -1
- package/dist/seed/orders-seed-data.js +2 -2
- package/dist/seed/products-art-seed-data.js +16 -16
- package/dist/seed/products-auctions-seed-data.js +34 -34
- package/dist/seed/products-classifieds-seed-data.js +35 -37
- package/dist/seed/products-digital-codes-seed-data.js +20 -20
- package/dist/seed/products-live-items-seed-data.js +11 -11
- package/dist/seed/products-preorders-seed-data.js +13 -13
- package/dist/seed/products-prize-draws-seed-data.js +43 -43
- package/dist/seed/products-standard-seed-data.js +54 -54
- package/dist/seed/products-stickers-seed-data.js +15 -15
- package/dist/seed/reviews-seed-data.js +4 -4
- package/dist/seed/scammers-seed-data.js +3 -3
- package/dist/seed/site-settings-seed-data.js +11 -24
- package/dist/seed/store-extensions-seed-data.js +10 -10
- package/dist/seed/stores-seed-data.js +11 -11
- package/dist/seed/support-tickets-seed-data.d.ts +14 -0
- package/dist/seed/support-tickets-seed-data.js +20 -1
- package/dist/seed/users-seed-data.js +20 -20
- package/dist/server-entry.d.ts +0 -1
- package/dist/server-entry.js +0 -1
- package/dist/server.d.ts +9 -6
- package/dist/server.js +7 -13
- package/dist/styles.css +248 -68
- package/dist/tailwind-utilities.css +1 -1
- package/dist/tokens/themes/default-dark.js +2 -2
- package/dist/tokens/themes/default-light.js +2 -2
- package/dist/tokens/tokens.css +24 -4
- package/dist/ui/components/ActionRow.d.ts +50 -0
- package/dist/ui/components/ActionRow.js +53 -0
- package/dist/ui/components/ActionRow.style.css +145 -0
- package/dist/ui/components/Drawer.d.ts +10 -0
- package/dist/ui/components/Drawer.js +2 -1
- package/dist/ui/components/FilterDrawer.js +4 -1
- package/dist/ui/components/FilterDrawer.style.css +6 -12
- package/dist/ui/components/FormActionBar.js +14 -1
- package/dist/ui/components/FormActionBar.style.css +12 -11
- package/dist/ui/components/ListingLayout.js +8 -1
- package/dist/ui/components/ListingLayout.style.css +6 -13
- package/dist/ui/components/Modal.d.ts +15 -1
- package/dist/ui/components/Modal.js +17 -3
- package/dist/ui/components/QuickCreateModal.js +2 -2
- package/dist/ui/components/QuickCreateModal.style.css +78 -84
- package/dist/ui/components/RecordDetailModal.js +2 -2
- package/dist/ui/components/SideDrawer.d.ts +8 -0
- package/dist/ui/components/SideDrawer.js +2 -1
- package/dist/ui/components/SideDrawer.style.css +6 -3
- package/dist/ui/components/SideModal.d.ts +11 -1
- package/dist/ui/components/SideModal.js +3 -2
- package/dist/ui/components/SideModal.style.css +14 -0
- package/dist/ui/components/Typography.style.css +33 -24
- package/dist/ui/components/index.style.css +1 -0
- package/dist/ui/components/toolbar-collapse.js +1 -2
- package/dist/ui/forms/FormShell.style.css +260 -311
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +1 -0
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -1
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.js +1 -1
- package/dist/validation/schemas.d.ts +0 -19
- package/dist/validation/schemas.js +8 -19
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +3 -6
|
@@ -52,8 +52,8 @@ export const DEFAULT_DARK_THEME = {
|
|
|
52
52
|
"appkit-color-border": "#334155",
|
|
53
53
|
"appkit-color-border-subtle": "rgba(30, 41, 59, 0.6)",
|
|
54
54
|
"appkit-color-text": "#fafafa",
|
|
55
|
-
"appkit-color-text-muted": "#
|
|
56
|
-
"appkit-color-text-faint": "#
|
|
55
|
+
"appkit-color-text-muted": "#b4b4bd",
|
|
56
|
+
"appkit-color-text-faint": "#8b8b94",
|
|
57
57
|
"appkit-color-success": "#34d399",
|
|
58
58
|
"appkit-color-success-surface": "rgba(6, 78, 59, 0.25)",
|
|
59
59
|
"appkit-color-warning": "#fbbf24",
|
|
@@ -54,8 +54,8 @@ export const DEFAULT_LIGHT_THEME = {
|
|
|
54
54
|
"appkit-color-border": "#e4e4e7",
|
|
55
55
|
"appkit-color-border-subtle": "#f4f4f5",
|
|
56
56
|
"appkit-color-text": "#18181b",
|
|
57
|
-
"appkit-color-text-muted": "#
|
|
58
|
-
"appkit-color-text-faint": "#
|
|
57
|
+
"appkit-color-text-muted": "#5b5b63",
|
|
58
|
+
"appkit-color-text-faint": "#6f6f78",
|
|
59
59
|
"appkit-color-text-on-primary": "#ffffff",
|
|
60
60
|
"appkit-color-success": "#15803d",
|
|
61
61
|
"appkit-color-success-surface": "#f0fdf4",
|
package/dist/tokens/tokens.css
CHANGED
|
@@ -287,8 +287,8 @@
|
|
|
287
287
|
--appkit-color-border-subtle: #f4f4f5; /* zinc-100 */
|
|
288
288
|
|
|
289
289
|
--appkit-color-text: #18181b; /* zinc-900 */
|
|
290
|
-
--appkit-color-text-muted: #
|
|
291
|
-
--appkit-color-text-faint: #
|
|
290
|
+
--appkit-color-text-muted: #5b5b63; /* darkened from zinc-500 #71717a — ~7:1 on --appkit-color-bg */
|
|
291
|
+
--appkit-color-text-faint: #6f6f78; /* darkened from #87878f — now clears WCAG AA 4.5:1 for NORMAL text, not just large (audit-a11y) */
|
|
292
292
|
--appkit-color-text-on-primary: #ffffff;
|
|
293
293
|
--appkit-color-text-on-dark: #ffffff;
|
|
294
294
|
|
|
@@ -429,8 +429,8 @@
|
|
|
429
429
|
--appkit-color-border-subtle: rgba(30, 41, 59, 0.6); /* slate-800/60 */
|
|
430
430
|
|
|
431
431
|
--appkit-color-text: #fafafa; /* zinc-50 */
|
|
432
|
-
--appkit-color-text-muted: #
|
|
433
|
-
--appkit-color-text-faint: #
|
|
432
|
+
--appkit-color-text-muted: #b4b4bd; /* lightened from zinc-400 #a1a1aa — ~9:1 on the dark page */
|
|
433
|
+
--appkit-color-text-faint: #8b8b94; /* lightened from zinc-500 #71717a, which was ~3:1 and read as barely present */
|
|
434
434
|
|
|
435
435
|
--appkit-color-success: #34d399; /* emerald-400 */
|
|
436
436
|
--appkit-color-success-surface: rgba(6, 78, 59, 0.25);
|
|
@@ -748,6 +748,26 @@
|
|
|
748
748
|
--appkit-size-input-md: 2.5rem; /* 40px */
|
|
749
749
|
--appkit-size-input-lg: 2.75rem; /* 44px */
|
|
750
750
|
|
|
751
|
+
/*
|
|
752
|
+
* CTA sizing — consumed by ActionRow (appkit/src/ui/components/ActionRow.style.css).
|
|
753
|
+
*
|
|
754
|
+
* --appkit-size-action-min is the width below which an action WRAPS to the
|
|
755
|
+
* next line instead of being squeezed. 7.5rem is fixed from both ends:
|
|
756
|
+
* upper — the narrowest supported viewport is 280px; the pinned bottom bar
|
|
757
|
+
* spends 12px padding a side plus an 8px gap, leaving 248px for two
|
|
758
|
+
* actions, i.e. 124px each. 120px is the largest 8px-grid value that
|
|
759
|
+
* still lets a two-action bar share one line there.
|
|
760
|
+
* lower — 120px is 2.7x the 44px tap-target minimum and holds ~15 characters
|
|
761
|
+
* at 14px, so every CTA string resolves in at most two lines.
|
|
762
|
+
*
|
|
763
|
+
* SINGLE_ROW_MAX_ACTIONS in features/layout/BottomActions.tsx is COUPLED to
|
|
764
|
+
* this value. Raising either without re-checking that
|
|
765
|
+
* 2 x action-min + gap is under 280px reintroduces device-dependent row
|
|
766
|
+
* flipping, which the bar's row-count invariant forbids.
|
|
767
|
+
*/
|
|
768
|
+
--appkit-size-action-min: 7.5rem; /* 120px */
|
|
769
|
+
--appkit-size-action-height: 2.5rem; /* 40px — CTA tap target, was a literal h-10 */
|
|
770
|
+
|
|
751
771
|
/* Avatar sizes */
|
|
752
772
|
--appkit-size-avatar-xs: 1.5rem; /* 24px */
|
|
753
773
|
--appkit-size-avatar-sm: 2rem; /* 32px */
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { SurfaceProps } from "./surface-tokens";
|
|
3
|
+
/**
|
|
4
|
+
* Who absorbs the leftover width.
|
|
5
|
+
*
|
|
6
|
+
* The BASIS is content-proportional in all three — only the grow factor
|
|
7
|
+
* differs. `fill` is for bars and sheets, `end`/`start` for desktop dialog and
|
|
8
|
+
* editor footers where stretching two buttons across a 32rem dialog would read
|
|
9
|
+
* as a banner rather than a pair of controls.
|
|
10
|
+
*/
|
|
11
|
+
export type ActionRowAlign = "fill" | "end" | "start";
|
|
12
|
+
type ActionRowGap = "xs" | "sm" | "md" | "lg";
|
|
13
|
+
export interface ActionRowProps extends React.HTMLAttributes<HTMLDivElement>, SurfaceProps {
|
|
14
|
+
/** Who absorbs the leftover width. Default `"fill"`. */
|
|
15
|
+
align?: ActionRowAlign;
|
|
16
|
+
/**
|
|
17
|
+
* Left-hand meta slot that is NOT an action: a title, a breadcrumb, an
|
|
18
|
+
* "Add more details →" link, or a lone Discard button.
|
|
19
|
+
*
|
|
20
|
+
* Content-sized and shrinkable to nothing, so it may ellipsise where an
|
|
21
|
+
* action never may. This replaces every `justify-content: space-between`
|
|
22
|
+
* footer and the `<span />` spacer hack that came with them — with a flat
|
|
23
|
+
* row, `space-between` across three children opens the gulf BETWEEN the two
|
|
24
|
+
* buttons instead of between the meta and the pair.
|
|
25
|
+
*/
|
|
26
|
+
anchor?: React.ReactNode;
|
|
27
|
+
/** Gap between actions. Default `"sm"` (0.5rem). */
|
|
28
|
+
gap?: ActionRowGap;
|
|
29
|
+
children?: React.ReactNode;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The one layout law for CTA / footer action rows.
|
|
33
|
+
*
|
|
34
|
+
* Each action is sized from its own label and only the LEFTOVER is shared out;
|
|
35
|
+
* labels wrap rather than truncate; a row that cannot fit wraps to the next
|
|
36
|
+
* line rather than crushing its children. All of that lives in
|
|
37
|
+
* `ActionRow.style.css` as parent-selector rules, deliberately NOT as Tailwind
|
|
38
|
+
* classes on the children — see the stylesheet for why.
|
|
39
|
+
*
|
|
40
|
+
* 🛑 Callers must not put `flex-1`, `flex-shrink-0`, `basis-*`, `w-*`, `h-*`,
|
|
41
|
+
* `truncate` or `leading-none` on a child. Both configs set `important: true`,
|
|
42
|
+
* so any of those beats every rule in the stylesheet and silently reverts that
|
|
43
|
+
* one row to the old squeezed behaviour with no visible error.
|
|
44
|
+
*
|
|
45
|
+
* Not for the bulk-action bar. That is a fixed three-control composite
|
|
46
|
+
* (count pill | picker | Apply) where the picker is MEANT to eat all the slack
|
|
47
|
+
* and the pill must stay pill-sized.
|
|
48
|
+
*/
|
|
49
|
+
export declare const ActionRow: React.ForwardRefExoticComponent<ActionRowProps & React.RefAttributes<HTMLDivElement>>;
|
|
50
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { buildSurfaceClasses } from "./surface-tokens";
|
|
4
|
+
const ACTION_ROW_GAP_MAP = {
|
|
5
|
+
xs: "appkit-gap--xs",
|
|
6
|
+
sm: "appkit-gap--sm",
|
|
7
|
+
md: "appkit-gap--md",
|
|
8
|
+
lg: "appkit-gap--lg",
|
|
9
|
+
};
|
|
10
|
+
const ACTION_ROW_ALIGN_MAP = {
|
|
11
|
+
fill: "",
|
|
12
|
+
end: "appkit-action-row--end",
|
|
13
|
+
start: "appkit-action-row--start",
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The one layout law for CTA / footer action rows.
|
|
17
|
+
*
|
|
18
|
+
* Each action is sized from its own label and only the LEFTOVER is shared out;
|
|
19
|
+
* labels wrap rather than truncate; a row that cannot fit wraps to the next
|
|
20
|
+
* line rather than crushing its children. All of that lives in
|
|
21
|
+
* `ActionRow.style.css` as parent-selector rules, deliberately NOT as Tailwind
|
|
22
|
+
* classes on the children — see the stylesheet for why.
|
|
23
|
+
*
|
|
24
|
+
* 🛑 Callers must not put `flex-1`, `flex-shrink-0`, `basis-*`, `w-*`, `h-*`,
|
|
25
|
+
* `truncate` or `leading-none` on a child. Both configs set `important: true`,
|
|
26
|
+
* so any of those beats every rule in the stylesheet and silently reverts that
|
|
27
|
+
* one row to the old squeezed behaviour with no visible error.
|
|
28
|
+
*
|
|
29
|
+
* Not for the bulk-action bar. That is a fixed three-control composite
|
|
30
|
+
* (count pill | picker | Apply) where the picker is MEANT to eat all the slack
|
|
31
|
+
* and the pill must stay pill-sized.
|
|
32
|
+
*/
|
|
33
|
+
export const ActionRow = React.forwardRef(({ className = "", align = "fill", anchor, gap = "sm", surface, padding, paddingX, paddingY, rounded, roundedTop, roundedBottom, border, shadow, overflow, children, ...props }, ref) => (_jsxs("div", { ref: ref, className: [
|
|
34
|
+
"appkit-action-row",
|
|
35
|
+
ACTION_ROW_ALIGN_MAP[align],
|
|
36
|
+
ACTION_ROW_GAP_MAP[gap],
|
|
37
|
+
buildSurfaceClasses({
|
|
38
|
+
surface,
|
|
39
|
+
padding,
|
|
40
|
+
paddingX,
|
|
41
|
+
paddingY,
|
|
42
|
+
rounded,
|
|
43
|
+
roundedTop,
|
|
44
|
+
roundedBottom,
|
|
45
|
+
border,
|
|
46
|
+
shadow,
|
|
47
|
+
overflow,
|
|
48
|
+
}),
|
|
49
|
+
className,
|
|
50
|
+
]
|
|
51
|
+
.filter(Boolean)
|
|
52
|
+
.join(" "), ...props, children: [anchor !== undefined && anchor !== null && (_jsx("div", { className: "appkit-action-row__anchor", children: anchor })), _jsx("div", { className: "appkit-action-row__group", children: children })] })));
|
|
53
|
+
ActionRow.displayName = "ActionRow";
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ActionRow — the single layout law for every CTA / footer action row.
|
|
3
|
+
*
|
|
4
|
+
* SIZING: `flex: 1 1 auto`. `flex-basis: auto` resolves against the button's
|
|
5
|
+
* own max-content width, and only the LEFTOVER is shared out. That is the
|
|
6
|
+
* whole fix. Tailwind's `flex-1` is `flex: 1 1 0%`, and that ZERO basis throws
|
|
7
|
+
* the content width away — which is why "Back" and "Continue to payment" came
|
|
8
|
+
* out the same width regardless of their labels, and why the escape hatch from
|
|
9
|
+
* that (`grow: false`) had to be a hug that rendered a 44px stub reading "Ba".
|
|
10
|
+
*
|
|
11
|
+
* OVERFLOW: the row wraps. Flex line-breaking runs on the hypothetical main
|
|
12
|
+
* size — the base size clamped by `min-width` — BEFORE any shrinking happens,
|
|
13
|
+
* so an action that does not fit moves to the next line instead of being
|
|
14
|
+
* crushed. `--appkit-size-action-min` is the switch that decides when.
|
|
15
|
+
*
|
|
16
|
+
* TRUNCATION: none, anywhere. A label that cannot fit its line wraps and the
|
|
17
|
+
* button grows taller. Every height here is therefore `min-height`, never
|
|
18
|
+
* `height`, and no descendant may carry `truncate` / `leading-none`.
|
|
19
|
+
*
|
|
20
|
+
* WHY A STYLESHEET AND NOT TAILWIND CLASSES ON THE CHILDREN: all sizing lands
|
|
21
|
+
* via `.appkit-action-row__group > *`, a rule on the PARENT's selector. Putting
|
|
22
|
+
* a bare `flex` / `block` / `hidden` utility on a `<Button>` breaks its own
|
|
23
|
+
* flex contract, because the consumer's globals.css declares those three
|
|
24
|
+
* un-layered and `!important` — Recurrent Root Cause #68, which collapsed
|
|
25
|
+
* twelve image-tile buttons to 0x0.
|
|
26
|
+
*
|
|
27
|
+
* NOT FOR: BulkActionBar, and the bulk row inside BottomActions. Those are a
|
|
28
|
+
* fixed three-control composite — count pill | picker | Apply — where the
|
|
29
|
+
* picker is MEANT to eat all the slack and the pill must stay pill-sized.
|
|
30
|
+
* Content-proportional sizing there would let a long selected-action label
|
|
31
|
+
* push Apply off the line.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
.appkit-action-row {
|
|
35
|
+
display: flex;
|
|
36
|
+
flex-wrap: wrap;
|
|
37
|
+
align-items: center;
|
|
38
|
+
width: 100%;
|
|
39
|
+
/* gap comes from the .appkit-gap--* class the component applies */
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* The inner group is load-bearing, not decoration. With a flat row, a footer
|
|
44
|
+
* that wants "meta left, buttons right" reaches for `space-between` — and with
|
|
45
|
+
* three children that opens the gulf BETWEEN the two buttons. Nesting keeps the
|
|
46
|
+
* outer row at exactly two items so the split is clean, and lets the group
|
|
47
|
+
* carry the alignment of the actions among themselves.
|
|
48
|
+
*/
|
|
49
|
+
.appkit-action-row__group {
|
|
50
|
+
display: flex;
|
|
51
|
+
flex-wrap: wrap;
|
|
52
|
+
/* Equal heights when one action wraps to two lines and its neighbour does
|
|
53
|
+
not — ragged button heights in one row read as broken. */
|
|
54
|
+
align-items: stretch;
|
|
55
|
+
gap: inherit;
|
|
56
|
+
flex: 1 1 auto;
|
|
57
|
+
min-width: 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* --- the actions ---------------------------------------------------------- */
|
|
61
|
+
|
|
62
|
+
.appkit-action-row__group > * {
|
|
63
|
+
flex: 1 1 auto;
|
|
64
|
+
/*
|
|
65
|
+
* The wrap threshold. `min()` with 100% so a panel narrower than the floor
|
|
66
|
+
* degrades to one action per line instead of overflowing its own container.
|
|
67
|
+
*/
|
|
68
|
+
min-width: min(var(--appkit-size-action-min), 100%);
|
|
69
|
+
min-height: var(--appkit-size-action-height);
|
|
70
|
+
/* Beats any fixed height inherited from a button size variant, so a wrapped
|
|
71
|
+
second line can actually grow the box. */
|
|
72
|
+
height: auto;
|
|
73
|
+
white-space: normal;
|
|
74
|
+
text-align: center;
|
|
75
|
+
/*
|
|
76
|
+
* `.appkit-button` declares `line-height: 1`, which collides two wrapped
|
|
77
|
+
* lines into one smear. This selector is (0,2,0) and beats its (0,1,0).
|
|
78
|
+
*/
|
|
79
|
+
line-height: 1.25;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/*
|
|
83
|
+
* A non-button action — a bare TextLink or a Text — has no intrinsic button
|
|
84
|
+
* height. Don't stretch it into a 40px block; centre it against the buttons.
|
|
85
|
+
*/
|
|
86
|
+
.appkit-action-row__group > *:not(.appkit-button) {
|
|
87
|
+
align-self: center;
|
|
88
|
+
min-height: 0;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/*
|
|
92
|
+
* Icon-only actions stay square tap targets. The caller opts in, because a
|
|
93
|
+
* stylesheet cannot know a child has no label.
|
|
94
|
+
*/
|
|
95
|
+
.appkit-action-row__group > .appkit-action-row__icon-only {
|
|
96
|
+
flex: 0 0 var(--appkit-size-input-lg);
|
|
97
|
+
min-width: var(--appkit-size-input-lg);
|
|
98
|
+
padding-inline: 0;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* --- alignment ------------------------------------------------------------ */
|
|
102
|
+
|
|
103
|
+
/* `fill` is the base rule above: the actions absorb the leftover. */
|
|
104
|
+
|
|
105
|
+
.appkit-action-row--end > .appkit-action-row__group {
|
|
106
|
+
justify-content: flex-end;
|
|
107
|
+
}
|
|
108
|
+
.appkit-action-row--start > .appkit-action-row__group {
|
|
109
|
+
justify-content: flex-start;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Same content-proportional basis; the free space simply isn't handed out. */
|
|
113
|
+
.appkit-action-row--end > .appkit-action-row__group > *,
|
|
114
|
+
.appkit-action-row--start > .appkit-action-row__group > * {
|
|
115
|
+
flex-grow: 0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* --- the anchor ----------------------------------------------------------- */
|
|
119
|
+
|
|
120
|
+
.appkit-action-row > .appkit-action-row__anchor {
|
|
121
|
+
flex: 0 1 auto;
|
|
122
|
+
/* Deliberately NOT the action floor — meta text may ellipsise, an action
|
|
123
|
+
may not. */
|
|
124
|
+
min-width: 0;
|
|
125
|
+
align-self: center;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* --- narrow collapse ------------------------------------------------------ */
|
|
129
|
+
/*
|
|
130
|
+
* Below 30rem there is no leftover worth leaving empty: a right-packed footer
|
|
131
|
+
* at 360px is a ragged clump against the edge. Every alignment becomes `fill`,
|
|
132
|
+
* which is what the pinned bottom bar already does at every width, and the
|
|
133
|
+
* anchor takes its own line above the actions.
|
|
134
|
+
*/
|
|
135
|
+
@media (max-width: 30rem) {
|
|
136
|
+
.appkit-action-row > .appkit-action-row__anchor {
|
|
137
|
+
flex-basis: 100%;
|
|
138
|
+
}
|
|
139
|
+
.appkit-action-row > .appkit-action-row__group {
|
|
140
|
+
justify-content: flex-start;
|
|
141
|
+
}
|
|
142
|
+
.appkit-action-row > .appkit-action-row__group > * {
|
|
143
|
+
flex-grow: 1;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -10,6 +10,16 @@ export interface DrawerProps {
|
|
|
10
10
|
onClose: () => void;
|
|
11
11
|
title?: string;
|
|
12
12
|
children: React.ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Action buttons for the drawer's footer. Pass them bare — the slot supplies
|
|
15
|
+
* the row itself via `<ActionRow>`, so each button is sized from its own
|
|
16
|
+
* label and the group wraps rather than overflowing.
|
|
17
|
+
*
|
|
18
|
+
* 🛑 Do not wrap them in your own flex container or put `flex-1` on them:
|
|
19
|
+
* `important: true` makes a caller's utility beat ActionRow's CSS. The slot
|
|
20
|
+
* used to be a padding-only block, which silently gave inline-flow layout and
|
|
21
|
+
* made every caller invent its own row.
|
|
22
|
+
*/
|
|
13
23
|
footer?: React.ReactNode;
|
|
14
24
|
side?: "left" | "right" | "bottom";
|
|
15
25
|
/** Width for left/right drawers. Default: 'md' */
|
|
@@ -5,6 +5,7 @@ import { createPortal } from "react-dom";
|
|
|
5
5
|
import { X } from "lucide-react";
|
|
6
6
|
import { Heading } from "./Typography";
|
|
7
7
|
import { Button } from "./Button";
|
|
8
|
+
import { ActionRow } from "./ActionRow";
|
|
8
9
|
import { useHandMode } from "../../_internal/client/hand-mode";
|
|
9
10
|
const SIDE_TRANSLATE = {
|
|
10
11
|
left: {
|
|
@@ -70,5 +71,5 @@ export function Drawer({ isOpen, onClose, title, children, footer, side, size =
|
|
|
70
71
|
: `${SIDE_SIZE[size]} appkit-drawer__panel--full-height`,
|
|
71
72
|
isOpen ? open : closed,
|
|
72
73
|
className,
|
|
73
|
-
].join(" "), "data-section": "drawer-div-481", children: [isBottom && (_jsx("div", { className: "appkit-drawer__drag-wrap", "data-section": "drawer-div-482", children: _jsx("div", { className: "appkit-drawer__drag", "aria-hidden": "true" }) })), (title || showCloseButton) && (_jsxs("div", { className: hand === "left" ? "appkit-drawer__header flex-row-reverse" : "appkit-drawer__header", "data-section": "drawer-div-483", children: [title && (_jsx(Heading, { level: 2, className: "appkit-drawer__title", children: title })), showCloseButton && (_jsx(Button, { variant: "ghost", size: "sm", type: "button", onClick: onClose, className: "appkit-drawer__close", "aria-label": "Close", children: _jsx(X, { className: "appkit-drawer__close-icon" }) }))] })), _jsx("div", { className: "appkit-drawer__body", "data-section": "drawer-div-484", children: children }), footer && _jsx("div", { className: "appkit-drawer__footer", "data-section": "drawer-div-485", children: footer })] })] }), document.body);
|
|
74
|
+
].join(" "), "data-section": "drawer-div-481", children: [isBottom && (_jsx("div", { className: "appkit-drawer__drag-wrap", "data-section": "drawer-div-482", children: _jsx("div", { className: "appkit-drawer__drag", "aria-hidden": "true" }) })), (title || showCloseButton) && (_jsxs("div", { className: hand === "left" ? "appkit-drawer__header flex-row-reverse" : "appkit-drawer__header", "data-section": "drawer-div-483", children: [title && (_jsx(Heading, { level: 2, className: "appkit-drawer__title", children: title })), showCloseButton && (_jsx(Button, { variant: "ghost", size: "sm", type: "button", onClick: onClose, className: "appkit-drawer__close", "aria-label": "Close", children: _jsx(X, { className: "appkit-drawer__close-icon" }) }))] })), _jsx("div", { className: "appkit-drawer__body", "data-section": "drawer-div-484", children: children }), footer && (_jsx("div", { className: "appkit-drawer__footer", "data-section": "drawer-div-485", children: _jsx(ActionRow, { children: footer }) }))] })] }), document.body);
|
|
74
75
|
}
|
|
@@ -34,7 +34,10 @@ export function FilterDrawer({ children, title = "Filters", open, onOpen, onClos
|
|
|
34
34
|
handleOpen();
|
|
35
35
|
}, className: ["appkit-filter-drawer__trigger", triggerClassName]
|
|
36
36
|
.filter(Boolean)
|
|
37
|
-
.join(" "), "aria-label": triggerLabel, children: [_jsx(Span, { children: triggerLabel }), activeCount > 0 ? (_jsx(Span, { className: "appkit-filter-drawer__badge", children: activeCount })) : null] })) : null, _jsx(Drawer, { isOpen: isOpen, onClose: handleClose, title: title, side: side, size: size, className: "appkit-drawer__panel--filter", footer:
|
|
37
|
+
.join(" "), "aria-label": triggerLabel, children: [_jsx(Span, { children: triggerLabel }), activeCount > 0 ? (_jsx(Span, { className: "appkit-filter-drawer__badge", children: activeCount })) : null] })) : null, _jsx(Drawer, { isOpen: isOpen, onClose: handleClose, title: title, side: side, size: size, className: "appkit-drawer__panel--filter", footer:
|
|
38
|
+
/* Bare buttons — the Drawer's footer slot supplies the ActionRow.
|
|
39
|
+
The old `__footer` wrapper existed only to hand-roll a flex row. */
|
|
40
|
+
_jsxs(_Fragment, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: onReset, children: "Reset all" }), _jsx(Button, { type: "button", variant: "primary", onClick: handleApply, children: pendingCount != null && pendingCount > 0
|
|
38
41
|
? `Apply (${pendingCount})`
|
|
39
42
|
: "Apply" })] }), children: _jsxs("div", { className: [
|
|
40
43
|
"appkit-filter-drawer__body",
|
|
@@ -35,18 +35,12 @@
|
|
|
35
35
|
color: var(--appkit-color-text-on-primary);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
padding: 0.75rem 1rem;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
:is(.dark) .appkit-filter-drawer__footer {
|
|
48
|
-
border-top-color: var(--appkit-color-border);
|
|
49
|
-
}
|
|
38
|
+
/*
|
|
39
|
+
* `.appkit-filter-drawer__footer` was deleted. Its border and padding are
|
|
40
|
+
* already supplied by `.appkit-drawer__footer` (the slot it rendered inside),
|
|
41
|
+
* and its flex rules are now ActionRow's job — the wrapper existed only to
|
|
42
|
+
* hand-roll a row the slot should always have provided.
|
|
43
|
+
*/
|
|
50
44
|
|
|
51
45
|
.appkit-filter-drawer__body {
|
|
52
46
|
& > * + * {
|
|
@@ -2,8 +2,21 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { ChevronRight } from "lucide-react";
|
|
5
|
+
import { ActionRow } from "./ActionRow";
|
|
5
6
|
import { Button } from "./Button";
|
|
6
7
|
import { TextLink } from "./TextLink";
|
|
7
8
|
export function FormActionBar({ title, breadcrumbs, onSaveDraft, onPublish, publishLabel = "Publish", onPreview, onDiscard, isDirty, isSubmitting, className, }) {
|
|
8
|
-
return (
|
|
9
|
+
return (
|
|
10
|
+
/*
|
|
11
|
+
* Up to four actions live here (Discard / Preview / Save draft / Publish),
|
|
12
|
+
* and every one of them used to be `flex-shrink: 0` inside a non-wrapping
|
|
13
|
+
* row — so on a narrow viewport the group simply overflowed the bar. As an
|
|
14
|
+
* ActionRow they wrap instead.
|
|
15
|
+
*
|
|
16
|
+
* `align="end"` keeps the desktop look: an editor bar spans the full page
|
|
17
|
+
* width, and stretching four buttons across it would read as a toolbar of
|
|
18
|
+
* banners. The title/breadcrumb block is the `anchor`, which is what lets
|
|
19
|
+
* it shrink and ellipsise while the actions never do.
|
|
20
|
+
*/
|
|
21
|
+
_jsxs(ActionRow, { align: "end", gap: "sm", className: `appkit-form-action-bar${className ? ` ${className}` : ""}`, anchor: _jsxs("div", { className: "appkit-form-action-bar__meta", children: [breadcrumbs && breadcrumbs.length > 0 && (_jsx("div", { className: "appkit-form-action-bar__breadcrumbs", children: breadcrumbs.map((crumb, i) => (_jsxs(React.Fragment, { children: [i > 0 && _jsx(ChevronRight, { className: "h-3 w-3 flex-shrink-0" }), crumb.href ? (_jsx(TextLink, { href: crumb.href, variant: "inherit", truncate: true, children: crumb.label })) : (_jsx("span", { className: "truncate", children: crumb.label }))] }, i))) })), title && (_jsxs("div", { className: "appkit-form-action-bar__title", children: [isDirty && (_jsx("span", { className: "appkit-form-action-bar__dirty-dot mr-1.5", "aria-label": "Unsaved changes" })), title] }))] }), children: [isDirty && onDiscard && (_jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onDiscard, disabled: isSubmitting, children: "Discard" })), onPreview && (_jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onPreview, disabled: isSubmitting, children: "Preview" })), onSaveDraft && (_jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onSaveDraft, isLoading: isSubmitting, disabled: isSubmitting, children: "Save draft" })), _jsx(Button, { type: "button", size: "sm", onClick: onPublish, isLoading: isSubmitting, disabled: isSubmitting, children: publishLabel })] }));
|
|
9
22
|
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
/* FormActionBar — sticky editor action bar, bottom on mobile / top on desktop */
|
|
2
2
|
|
|
3
|
+
/*
|
|
4
|
+
* Chrome only — sticky positioning, background, padding. The row layout itself
|
|
5
|
+
* (`display: flex`, `justify-content`, `gap`) moved to ActionRow: this bar can
|
|
6
|
+
* hold four actions, and as a non-wrapping `flex-shrink: 0` group they used to
|
|
7
|
+
* overflow the bar on a narrow viewport. Do not re-add flex rules here; they
|
|
8
|
+
* would fight the ActionRow this class now decorates.
|
|
9
|
+
*/
|
|
3
10
|
.appkit-form-action-bar {
|
|
4
11
|
position: sticky;
|
|
5
12
|
bottom: var(--bottom-nav-height, 0px);
|
|
6
13
|
z-index: var(--appkit-z-raised);
|
|
7
|
-
display: flex;
|
|
8
|
-
align-items: center;
|
|
9
|
-
justify-content: space-between;
|
|
10
|
-
gap: 0.75rem;
|
|
11
14
|
border-top: 1px solid var(--appkit-color-border);
|
|
12
15
|
background: var(--appkit-color-surface);
|
|
13
16
|
backdrop-filter: blur(8px);
|
|
@@ -73,10 +76,8 @@
|
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
/* ── Right: action buttons ───────────────────────────────────────────────── */
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
flex-shrink: 0;
|
|
82
|
-
}
|
|
79
|
+
/*
|
|
80
|
+
* `.appkit-form-action-bar__actions` was deleted. Its `flex-shrink: 0` on a
|
|
81
|
+
* non-wrapping row is precisely what let four buttons overflow the bar; the
|
|
82
|
+
* group is now ActionRow's `__group`, which wraps.
|
|
83
|
+
*/
|
|
@@ -115,7 +115,14 @@ export function ListingLayout({ headerSlot, statusTabsSlot, filterContent, filte
|
|
|
115
115
|
bottomChromeSlot &&
|
|
116
116
|
createPortal(_jsx(Nav, { "aria-label": "Pagination", className: "appkit-listing-layout__mobile-pagination", children: toolbarPaginationSlot }), bottomChromeSlot), hasFilter && (_jsx(Drawer, { isOpen: mobileFilterOpen, onClose: () => setMobileFilterOpen(false), side: "bottom", title: filterActiveCount > 0
|
|
117
117
|
? `${panelTitle} (${filterActiveCount})`
|
|
118
|
-
: panelTitle, footer:
|
|
118
|
+
: panelTitle, footer:
|
|
119
|
+
/* Bare buttons: the Drawer's footer slot supplies the ActionRow.
|
|
120
|
+
🛑 `flex-1` used to be on both of these, and under
|
|
121
|
+
`important: true` it beats ActionRow's content-proportional
|
|
122
|
+
basis — so this was the one row where the fix would have been
|
|
123
|
+
silently defeated. Only `rounded-xl` (a shape, not a width)
|
|
124
|
+
stays. */
|
|
125
|
+
_jsxs(_Fragment, { children: [_jsx(Button, { type: "button", variant: "secondary", className: "rounded-xl", onClick: () => onFilterClear?.(), children: l.clearAll }), _jsx(Button, { type: "button", variant: "primary", className: "rounded-xl", onClick: handleMobileApply, children: filterPendingCount != null && filterPendingCount > 0
|
|
119
126
|
? `${l.applyFilters} (${filterPendingCount})`
|
|
120
127
|
: l.applyFilters })] }), children: filterContent })), overlays] }));
|
|
121
128
|
}
|
|
@@ -463,19 +463,12 @@
|
|
|
463
463
|
gap: 1rem;
|
|
464
464
|
}
|
|
465
465
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
background: var(--appkit-color-surface);
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
.dark .appkit-listing-layout__mobile-overlay-footer {
|
|
476
|
-
border-top-color: var(--appkit-color-slate-800);
|
|
477
|
-
background: var(--appkit-color-bg);
|
|
478
|
-
}
|
|
466
|
+
/*
|
|
467
|
+
* `.appkit-listing-layout__mobile-overlay-footer` was deleted: the mobile
|
|
468
|
+
* filter panel is a `<Drawer>`, whose footer slot now supplies both the chrome
|
|
469
|
+
* (`.appkit-drawer__footer`) and the action layout (`<ActionRow>`). The class
|
|
470
|
+
* existed only to hand-roll a flex row the slot should always have provided.
|
|
471
|
+
*/
|
|
479
472
|
|
|
480
473
|
/* -- Close button in mobile overlay ----------------- */
|
|
481
474
|
|
|
@@ -11,7 +11,21 @@ export interface ModalProps {
|
|
|
11
11
|
className?: string;
|
|
12
12
|
}
|
|
13
13
|
export declare function Modal({ isOpen, open, onClose, title, children, size, showCloseButton, actions, className, }: ModalProps): React.ReactPortal | null;
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* A dialog's action row.
|
|
16
|
+
*
|
|
17
|
+
* `align="end"` on purpose: a dialog is at most 32rem wide, and stretching
|
|
18
|
+
* Cancel/Confirm across it reads as a banner rather than a pair of controls.
|
|
19
|
+
* The buttons are still sized from their own labels — they simply don't take
|
|
20
|
+
* the leftover — and ActionRow's own narrow breakpoint collapses this to
|
|
21
|
+
* full-width below 30rem, where a right-packed clump would read badly.
|
|
22
|
+
*
|
|
23
|
+
* `anchor` is available for a footer that needs meta on the left (a link, a
|
|
24
|
+
* count). Use it instead of reintroducing `justify-between`, which with three
|
|
25
|
+
* children opens the gulf BETWEEN the two buttons rather than beside them.
|
|
26
|
+
*/
|
|
27
|
+
export declare function ModalFooter({ children, anchor, className, }: {
|
|
15
28
|
children: React.ReactNode;
|
|
29
|
+
anchor?: React.ReactNode;
|
|
16
30
|
className?: string;
|
|
17
31
|
}): React.JSX.Element;
|
|
@@ -5,6 +5,7 @@ import { createPortal } from "react-dom";
|
|
|
5
5
|
import { motion, AnimatePresence, useReducedMotion } from "motion/react";
|
|
6
6
|
import { Heading } from "./Typography";
|
|
7
7
|
import { Button } from "./Button";
|
|
8
|
+
import { ActionRow } from "./ActionRow";
|
|
8
9
|
import { SPRING_GENTLE } from "../../tokens/motion";
|
|
9
10
|
import { useHandMode } from "../../_internal/client/hand-mode";
|
|
10
11
|
import { OverlayContext } from "./overlay-context";
|
|
@@ -74,9 +75,22 @@ export function Modal({ isOpen, open, onClose, title, children, size = "md", sho
|
|
|
74
75
|
.filter(Boolean)
|
|
75
76
|
.join(" "), initial: reduced ? false : { opacity: 0, scale: 0.95, y: 8 }, animate: { opacity: 1, scale: 1, y: 0 }, exit: { opacity: 0, scale: 0.95, y: 8 }, transition: SPRING_GENTLE, "data-section": "modal-div-562", children: [(title || showCloseButton) && (_jsxs("div", { className: hand === "left" ? "appkit-modal__header flex-row-reverse" : "appkit-modal__header", "data-section": "modal-div-563", children: [title ? (_jsx(Heading, { level: 2, id: titleId, className: "appkit-modal__title", children: title })) : (_jsx("span", {})), showCloseButton ? (_jsx(Button, { variant: "ghost", size: "sm", type: "button", onClick: onClose, className: "appkit-modal__close", "aria-label": "Close", children: _jsx("span", { className: "appkit-modal__close-icon", "aria-hidden": "true", children: "\u00D7" }) })) : null] })), _jsx("div", { className: "appkit-modal__body", "data-section": "modal-div-564", children: children }), actions ? _jsx(ModalFooter, { children: actions }) : null] })] })) }) }), document.body);
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
/**
|
|
79
|
+
* A dialog's action row.
|
|
80
|
+
*
|
|
81
|
+
* `align="end"` on purpose: a dialog is at most 32rem wide, and stretching
|
|
82
|
+
* Cancel/Confirm across it reads as a banner rather than a pair of controls.
|
|
83
|
+
* The buttons are still sized from their own labels — they simply don't take
|
|
84
|
+
* the leftover — and ActionRow's own narrow breakpoint collapses this to
|
|
85
|
+
* full-width below 30rem, where a right-packed clump would read badly.
|
|
86
|
+
*
|
|
87
|
+
* `anchor` is available for a footer that needs meta on the left (a link, a
|
|
88
|
+
* count). Use it instead of reintroducing `justify-between`, which with three
|
|
89
|
+
* children opens the gulf BETWEEN the two buttons rather than beside them.
|
|
90
|
+
*/
|
|
91
|
+
export function ModalFooter({ children, anchor, className = "", }) {
|
|
92
|
+
return (_jsx(ActionRow, { align: "end", gap: "md", anchor: anchor, className: [
|
|
93
|
+
"border-t px-6 py-4 border-[var(--appkit-color-border-subtle)]",
|
|
80
94
|
className,
|
|
81
95
|
]
|
|
82
96
|
.filter(Boolean)
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { createPortal } from "react-dom";
|
|
5
|
+
import { ActionRow } from "./ActionRow";
|
|
5
6
|
import { Button } from "./Button";
|
|
6
7
|
import { Div } from "./Div";
|
|
7
8
|
import { Heading } from "./Typography";
|
|
8
|
-
import { Row } from "./Layout";
|
|
9
9
|
import { TextLink } from "./TextLink";
|
|
10
10
|
export function QuickCreateModal({ isOpen, title, onSave, onSaved, onCancel, children, fullPageHref, saveLabel = "Save", cancelLabel = "Cancel", isSaving = false, saveDisabled = false, }) {
|
|
11
11
|
const [busy, setBusy] = React.useState(false);
|
|
@@ -45,5 +45,5 @@ export function QuickCreateModal({ isOpen, title, onSave, onSaved, onCancel, chi
|
|
|
45
45
|
if (!isOpen || typeof document === "undefined")
|
|
46
46
|
return null;
|
|
47
47
|
const saving = busy || isSaving;
|
|
48
|
-
return createPortal(_jsxs(Div, { className: "appkit-quick-create-modal", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, children: [_jsx(Div, { className: "appkit-quick-create-modal__backdrop", "aria-hidden": "true", onClick: () => !saving && onCancel() }), _jsxs(Div, { ref: panelRef, tabIndex: -1, className: "appkit-quick-create-modal__panel", children: [_jsxs(Div, { className: "appkit-quick-create-modal__header", children: [_jsx(Heading, { level: 2, id: titleId, className: "appkit-quick-create-modal__title", children: title }), _jsx(Button, { variant: "ghost", size: "sm", type: "button", onClick: onCancel, "aria-label": "Close", disabled: saving, children: "\u00D7" })] }), _jsx(Div, { className: "appkit-quick-create-modal__body", children: children }), _jsxs(
|
|
48
|
+
return createPortal(_jsxs(Div, { className: "appkit-quick-create-modal", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, children: [_jsx(Div, { className: "appkit-quick-create-modal__backdrop", "aria-hidden": "true", onClick: () => !saving && onCancel() }), _jsxs(Div, { ref: panelRef, tabIndex: -1, className: "appkit-quick-create-modal__panel", children: [_jsxs(Div, { className: "appkit-quick-create-modal__header", children: [_jsx(Heading, { level: 2, id: titleId, className: "appkit-quick-create-modal__title", children: title }), _jsx(Button, { variant: "ghost", size: "sm", type: "button", onClick: onCancel, "aria-label": "Close", disabled: saving, children: "\u00D7" })] }), _jsx(Div, { className: "appkit-quick-create-modal__body", children: children }), _jsxs(ActionRow, { align: "end", gap: "md", className: "appkit-quick-create-modal__footer", anchor: fullPageHref ? (_jsx(TextLink, { variant: "none", href: fullPageHref, target: "_blank", rel: "noreferrer", className: "appkit-quick-create-modal__full-link", children: "Add more details \u2192" })) : undefined, children: [_jsx(Button, { variant: "ghost", type: "button", onClick: onCancel, disabled: saving, children: cancelLabel }), _jsx(Button, { variant: "primary", type: "button", onClick: handleSave, disabled: saving || saveDisabled, isLoading: saving, children: saveLabel })] })] })] }), document.body);
|
|
49
49
|
}
|