@mohasinac/appkit 4.59.0 → 4.60.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +3 -3
- package/dist/_internal/client/features/layout/DashboardLayoutClient.js +62 -5
- package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +2 -2
- package/dist/_internal/server/features/brands/actions.js +78 -4
- package/dist/_internal/server/features/checkout/actions.d.ts +36 -13
- package/dist/_internal/server/features/checkout/actions.js +668 -183
- package/dist/_internal/server/features/checkout/supplier-identity.js +18 -1
- package/dist/_internal/server/features/gateway-events/index.d.ts +10 -0
- package/dist/_internal/server/features/gateway-events/index.js +10 -0
- package/dist/_internal/server/features/gateway-events/ingest.d.ts +127 -0
- package/dist/_internal/server/features/gateway-events/ingest.js +188 -0
- package/dist/_internal/server/features/gateway-events/redact.d.ts +66 -0
- package/dist/_internal/server/features/gateway-events/redact.js +151 -0
- package/dist/_internal/server/features/grievance/actions.d.ts +63 -0
- package/dist/_internal/server/features/grievance/actions.js +173 -0
- package/dist/_internal/server/features/grievance/index.d.ts +8 -0
- package/dist/_internal/server/features/grievance/index.js +8 -0
- package/dist/_internal/server/features/grouped/data.js +28 -3
- package/dist/_internal/server/features/lottery/actions.js +99 -4
- package/dist/_internal/server/features/order-completion/actions.d.ts +92 -0
- package/dist/_internal/server/features/order-completion/actions.js +336 -0
- package/dist/_internal/server/features/order-completion/index.d.ts +7 -0
- package/dist/_internal/server/features/order-completion/index.js +7 -0
- package/dist/_internal/server/features/orders/actions.d.ts +13 -0
- package/dist/_internal/server/features/orders/actions.js +56 -2
- package/dist/_internal/server/features/orders/adapters.d.ts +20 -2
- package/dist/_internal/server/features/orders/adapters.js +44 -0
- package/dist/_internal/server/features/orders/cancellation-refund.d.ts +116 -0
- package/dist/_internal/server/features/orders/cancellation-refund.js +466 -0
- package/dist/_internal/server/features/orders/index.d.ts +2 -1
- package/dist/_internal/server/features/orders/index.js +1 -1
- package/dist/_internal/server/features/orders/service.d.ts +60 -0
- package/dist/_internal/server/features/orders/service.js +74 -0
- package/dist/_internal/server/features/payment-cases/disputes.d.ts +76 -0
- package/dist/_internal/server/features/payment-cases/disputes.js +241 -0
- package/dist/_internal/server/features/payment-cases/index.d.ts +9 -0
- package/dist/_internal/server/features/payment-cases/index.js +9 -0
- package/dist/_internal/server/features/payouts/actions.d.ts +28 -3
- package/dist/_internal/server/features/payouts/actions.js +84 -10
- package/dist/_internal/server/features/points/adjust.d.ts +61 -0
- package/dist/_internal/server/features/points/adjust.js +121 -0
- package/dist/_internal/server/features/points/award.d.ts +65 -0
- package/dist/_internal/server/features/points/award.js +145 -0
- package/dist/_internal/server/features/price-index/market.d.ts +33 -0
- package/dist/_internal/server/features/price-index/market.js +54 -1
- package/dist/_internal/server/features/products/data.js +40 -22
- package/dist/_internal/server/features/protection-claims/actions.d.ts +72 -0
- package/dist/_internal/server/features/protection-claims/actions.js +228 -0
- package/dist/_internal/server/features/protection-claims/index.d.ts +8 -0
- package/dist/_internal/server/features/protection-claims/index.js +8 -0
- package/dist/_internal/server/features/refunds/actions.d.ts +20 -0
- package/dist/_internal/server/features/refunds/actions.js +259 -17
- package/dist/_internal/server/features/refunds/capacity.d.ts +29 -0
- package/dist/_internal/server/features/refunds/capacity.js +37 -0
- package/dist/_internal/server/features/reviews/actions.js +3 -2
- package/dist/_internal/server/features/search/index-build/sources.js +20 -1
- package/dist/_internal/server/features/shipping/reconcile.d.ts +10 -1
- package/dist/_internal/server/features/shipping/reconcile.js +34 -3
- package/dist/_internal/server/features/shipping/reimbursement.d.ts +117 -0
- package/dist/_internal/server/features/shipping/reimbursement.js +223 -0
- package/dist/_internal/server/features/stores/tabs.d.ts +19 -4
- package/dist/_internal/server/features/stores/tabs.js +24 -4
- package/dist/_internal/server/functions/https.d.ts +31 -1
- package/dist/_internal/server/functions/https.js +52 -1
- package/dist/_internal/server/functions/scheduled.d.ts +72 -1
- package/dist/_internal/server/functions/scheduled.js +124 -1
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +62 -16
- package/dist/_internal/server/jobs/core/boxRollupReconcile.d.ts +46 -0
- package/dist/_internal/server/jobs/core/boxRollupReconcile.js +142 -0
- package/dist/_internal/server/jobs/core/dailyDataCleanup.js +149 -1
- package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +14 -0
- package/dist/_internal/server/jobs/core/dailyStatusDigest.js +79 -1
- 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/marketPriceRollup.d.ts +64 -0
- package/dist/_internal/server/jobs/core/marketPriceRollup.js +153 -0
- package/dist/_internal/server/jobs/core/obligationSweep.d.ts +36 -0
- package/dist/_internal/server/jobs/core/obligationSweep.js +503 -0
- package/dist/_internal/server/jobs/core/paymentReconcile.d.ts +79 -0
- package/dist/_internal/server/jobs/core/paymentReconcile.js +614 -0
- package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +34 -0
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +35 -4
- package/dist/_internal/server/jobs/handlers/boxRollupReconcile.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/boxRollupReconcile.js +15 -0
- package/dist/_internal/server/jobs/handlers/countersReconcileNow.d.ts +65 -0
- package/dist/_internal/server/jobs/handlers/countersReconcileNow.js +89 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +5 -0
- package/dist/_internal/server/jobs/handlers/index.js +5 -0
- package/dist/_internal/server/jobs/handlers/marketPriceRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/marketPriceRollup.js +2 -0
- package/dist/_internal/server/jobs/handlers/obligationSweep.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/obligationSweep.js +15 -0
- package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +30 -1
- package/dist/_internal/server/jobs/handlers/paymentReconcile.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/paymentReconcile.js +6 -0
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +71 -0
- package/dist/_internal/shared/checkout/coupon-discount.d.ts +73 -0
- package/dist/_internal/shared/checkout/coupon-discount.js +103 -0
- package/dist/_internal/shared/checkout/lanes.d.ts +42 -0
- package/dist/_internal/shared/checkout/lanes.js +46 -0
- package/dist/_internal/shared/checkout/order-math.d.ts +149 -1
- package/dist/_internal/shared/checkout/order-math.js +251 -3
- package/dist/_internal/shared/checkout/refundable-base.d.ts +116 -0
- package/dist/_internal/shared/checkout/refundable-base.js +122 -0
- package/dist/_internal/shared/features/auctions/config.d.ts +14 -1
- package/dist/_internal/shared/features/auctions/config.js +30 -1
- package/dist/_internal/shared/features/brands/schema.d.ts +42 -0
- package/dist/_internal/shared/features/brands/schema.js +18 -0
- package/dist/_internal/shared/features/orders/refund-copy.d.ts +22 -0
- package/dist/_internal/shared/features/orders/refund-copy.js +34 -0
- package/dist/_internal/shared/features/print/label-profiles.d.ts +198 -0
- package/dist/_internal/shared/features/print/label-profiles.js +350 -0
- package/dist/_internal/shared/features/products/to-product-item.js +33 -5
- package/dist/_internal/shared/fees/calculator.d.ts +31 -2
- package/dist/_internal/shared/fees/calculator.js +103 -5
- package/dist/_internal/shared/fees/india-states.d.ts +195 -0
- package/dist/_internal/shared/fees/india-states.js +190 -0
- package/dist/_internal/shared/fees/payout-hold.d.ts +80 -0
- package/dist/_internal/shared/fees/payout-hold.js +74 -0
- package/dist/_internal/shared/obligations/deadlines.d.ts +94 -0
- package/dist/_internal/shared/obligations/deadlines.js +155 -0
- package/dist/_internal/shared/shipping/quote.d.ts +96 -0
- package/dist/_internal/shared/shipping/quote.js +67 -0
- package/dist/_internal/shared/time/business-days.d.ts +91 -0
- package/dist/_internal/shared/time/business-days.js +185 -0
- package/dist/cli/index.js +0 -2
- package/dist/client.d.ts +10 -4
- package/dist/client.js +29 -3
- package/dist/configs/tailwind.d.ts +0 -12
- package/dist/configs/tailwind.js +28 -15
- package/dist/constants/api-endpoints.d.ts +51 -9
- package/dist/constants/api-endpoints.js +23 -7
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/payment.d.ts +131 -0
- package/dist/features/about/components/AboutView.js +1 -1
- package/dist/features/about/components/DeveloperView.js +5 -2
- package/dist/features/about/components/FAQPageView.js +2 -1
- package/dist/features/about/components/FeesView.js +2 -1
- package/dist/features/about/components/HelpPageView.js +2 -1
- package/dist/features/about/components/HowAuctionsWorkView.js +2 -1
- package/dist/features/about/components/HowCheckoutWorksView.js +2 -1
- package/dist/features/about/components/HowEmiWorksView.js +2 -1
- package/dist/features/about/components/HowOffersWorkView.js +2 -1
- package/dist/features/about/components/HowOrdersWorkView.js +2 -1
- package/dist/features/about/components/HowPayoutsWorkView.js +2 -1
- package/dist/features/about/components/HowPreOrdersWorkView.js +2 -1
- package/dist/features/about/components/HowReviewsWorkView.js +2 -1
- package/dist/features/about/components/PolicyPageView.js +2 -1
- package/dist/features/about/components/ProseHero.d.ts +73 -0
- package/dist/features/about/components/ProseHero.js +18 -0
- package/dist/features/about/components/SecurityPrivacyView.js +2 -1
- package/dist/features/about/components/ShippingPolicyView.js +2 -1
- package/dist/features/about/components/TrackOrderView.js +2 -1
- package/dist/features/about/components/UnauthorizedView.js +1 -1
- package/dist/features/about/index.d.ts +2 -0
- package/dist/features/about/index.js +5 -0
- package/dist/features/account/actions/address-actions.d.ts +26 -2
- package/dist/features/account/actions/address-actions.js +25 -1
- package/dist/features/account/components/BuyerShoppingGuideView.js +1 -1
- package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
- package/dist/features/account/components/UserOrdersView.js +17 -0
- package/dist/features/account/components/UserSidebar.js +1 -1
- package/dist/features/account/hooks/useNotifications.js +29 -0
- package/dist/features/admin/actions/admin-coupon-actions.js +36 -0
- package/dist/features/admin/components/AdminBeysView.js +2 -2
- package/dist/features/admin/components/AdminBlogEditorView.js +2 -2
- package/dist/features/admin/components/AdminBrandEditorView.js +32 -2
- package/dist/features/admin/components/AdminBundleEditorView.js +1 -1
- package/dist/features/admin/components/AdminCarouselEditorView.js +1 -1
- package/dist/features/admin/components/AdminCategoriesView.js +1 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +73 -17
- package/dist/features/admin/components/AdminContactEditorView.js +1 -1
- package/dist/features/admin/components/AdminCouponEditorView.js +26 -1
- package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
- package/dist/features/admin/components/AdminFaqsView.js +2 -2
- package/dist/features/admin/components/AdminGatewayEventsView.d.ts +54 -0
- package/dist/features/admin/components/AdminGatewayEventsView.js +209 -0
- package/dist/features/admin/components/AdminGuideHubView.js +1 -1
- package/dist/features/admin/components/AdminMoneyCasesView.d.ts +60 -0
- package/dist/features/admin/components/AdminMoneyCasesView.js +287 -0
- package/dist/features/admin/components/AdminPartsView.js +2 -2
- package/dist/features/admin/components/AdminProductsView.js +75 -4
- package/dist/features/admin/components/AdminSidebar.js +2 -2
- package/dist/features/admin/components/AdminSiteSettingsView.js +65 -7
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +2 -0
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
- package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
- package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
- package/dist/features/admin/components/AdminUsersView.js +72 -1
- package/dist/features/admin/components/AdminViewCards.d.ts +3 -1
- package/dist/features/admin/components/AdminViewCards.js +4 -4
- package/dist/features/admin/components/DataListingView.d.ts +28 -0
- package/dist/features/admin/components/DataListingView.js +175 -14
- package/dist/features/admin/components/DataTable.d.ts +12 -1
- package/dist/features/admin/components/DataTable.js +3 -3
- package/dist/features/admin/components/OwnerQuickActions.d.ts +1 -1
- package/dist/features/admin/components/OwnerQuickActions.js +60 -2
- package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +1 -1
- package/dist/features/admin/components/RecordOwnerQuickActions.js +61 -14
- package/dist/features/admin/components/analytics/AdminStatCard.d.ts +35 -1
- package/dist/features/admin/components/analytics/AdminStatCard.js +77 -2
- package/dist/features/admin/components/index.d.ts +4 -0
- package/dist/features/admin/components/index.js +6 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +156 -0
- package/dist/features/admin/constants/filter-tabs.js +106 -0
- package/dist/features/admin/repository/site-settings.repository.d.ts +22 -0
- package/dist/features/admin/repository/site-settings.repository.js +82 -1
- package/dist/features/admin/schemas/admin-editor-forms.d.ts +21 -0
- package/dist/features/admin/schemas/admin-editor-forms.js +44 -0
- package/dist/features/admin/schemas/firestore.js +5 -1
- package/dist/features/admin/schemas/site-settings-form.js +30 -1
- package/dist/features/auctions/actions/bid-actions.js +13 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +2 -2
- package/dist/features/auctions/components/AuctionDetailPageView.js +3 -1
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +5 -3
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +8 -1
- package/dist/features/auctions/components/PlaceBidFormClient.js +2 -2
- package/dist/features/audit-log/schemas/firestore.d.ts +28 -0
- package/dist/features/audit-log/schemas/firestore.js +14 -0
- package/dist/features/auth/permissions/constants.d.ts +17 -1
- package/dist/features/auth/permissions/constants.js +18 -0
- package/dist/features/blog/components/BlogPostView.js +1 -1
- package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
- package/dist/features/categories/api/[id]/description-template/route.js +107 -1
- package/dist/features/categories/components/BrandDetailPageView.js +2 -2
- package/dist/features/categories/components/BreadcrumbTrail.js +7 -1
- package/dist/features/categories/components/BundleDetailView.js +1 -1
- package/dist/features/categories/components/CategoryDetailPageView.js +2 -2
- package/dist/features/categories/components/CategoryForm.js +12 -1
- package/dist/features/categories/components/CategoryTemplatePicker.js +38 -5
- package/dist/features/categories/repository/market-price-index.repository.d.ts +123 -0
- package/dist/features/categories/repository/market-price-index.repository.js +105 -0
- package/dist/features/categories/repository/price-observation.repository.d.ts +166 -0
- package/dist/features/categories/repository/price-observation.repository.js +132 -0
- package/dist/features/events/components/EventSaleBanner.js +1 -1
- package/dist/features/events/components/EventStatusBadge.js +1 -1
- package/dist/features/faq/components/FAQAccordion.js +2 -1
- package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
- package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
- package/dist/features/faq/components/RelatedFAQs.js +1 -1
- package/dist/features/filters/FilterFacetSection.js +1 -1
- package/dist/features/filters/SwitchFilter.js +1 -1
- package/dist/features/gateway-events/repository/gateway-events.repository.d.ts +117 -0
- package/dist/features/gateway-events/repository/gateway-events.repository.js +274 -0
- package/dist/features/gateway-events/schemas/firestore.d.ts +217 -0
- package/dist/features/gateway-events/schemas/firestore.js +125 -0
- package/dist/features/gateway-events/schemas/index.d.ts +81 -0
- package/dist/features/gateway-events/schemas/index.js +79 -0
- package/dist/features/grouped/components/GroupedListingDetailView.js +1 -1
- package/dist/features/homepage/components/AnnouncementBar.js +37 -1
- package/dist/features/homepage/components/AnnouncementBar.style.css +30 -0
- package/dist/features/homepage/components/BrandsSection.js +1 -1
- package/dist/features/homepage/components/CTABannerSection.js +1 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.js +14 -24
- package/dist/features/homepage/components/HeroCarousel.js +2 -2
- package/dist/features/homepage/components/SocialPostCard.js +1 -1
- package/dist/features/inventory/components/AdminMoveLedgerView.d.ts +7 -0
- package/dist/features/inventory/components/AdminMoveLedgerView.js +157 -0
- package/dist/features/inventory/components/AdminStorageBoxesView.d.ts +11 -0
- package/dist/features/inventory/components/AdminStorageBoxesView.js +168 -0
- package/dist/features/inventory/components/ReceiveStationView.d.ts +39 -0
- package/dist/features/inventory/components/ReceiveStationView.js +413 -0
- package/dist/features/inventory/components/operator-message.d.ts +29 -0
- package/dist/features/inventory/components/operator-message.js +41 -0
- package/dist/features/inventory/index.d.ts +13 -0
- package/dist/features/inventory/index.js +28 -0
- package/dist/features/inventory/repository/inventory-movements.repository.d.ts +97 -0
- package/dist/features/inventory/repository/inventory-movements.repository.js +186 -0
- package/dist/features/inventory/repository/inventory-placements.repository.d.ts +179 -0
- package/dist/features/inventory/repository/inventory-placements.repository.js +345 -0
- package/dist/features/inventory/repository/storage-boxes.repository.d.ts +83 -0
- package/dist/features/inventory/repository/storage-boxes.repository.js +127 -0
- package/dist/features/inventory/schemas/firestore.d.ts +197 -0
- package/dist/features/inventory/schemas/firestore.js +159 -0
- package/dist/features/layout/AppLayoutShell.d.ts +12 -1
- package/dist/features/layout/AppLayoutShell.js +25 -12
- package/dist/features/layout/AutoBreadcrumbs.js +162 -3
- package/dist/features/layout/AutoBreadcrumbs.style.css +45 -0
- package/dist/features/layout/BottomNavbar.d.ts +1 -1
- package/dist/features/layout/BottomNavbar.js +2 -2
- package/dist/features/media/MediaAvatar.js +1 -1
- package/dist/features/media/MediaImage.d.ts +24 -4
- package/dist/features/media/MediaImage.js +44 -4
- package/dist/features/media/MediaLightbox.js +1 -1
- package/dist/features/media/modals/ImageCropModal.js +1 -1
- package/dist/features/media/modals/ImageEditor.js +1 -1
- package/dist/features/media/upload/MediaUploadField.js +91 -3
- package/dist/features/obligations/constants/policies.d.ts +92 -0
- package/dist/features/obligations/constants/policies.js +378 -0
- package/dist/features/obligations/repository/obligations.repository.d.ts +68 -0
- package/dist/features/obligations/repository/obligations.repository.js +158 -0
- package/dist/features/obligations/schemas/firestore.d.ts +160 -0
- package/dist/features/obligations/schemas/firestore.js +87 -0
- package/dist/features/orders/actions/order-actions.d.ts +43 -4
- package/dist/features/orders/actions/order-actions.js +60 -3
- package/dist/features/orders/actions/refund-actions.js +70 -10
- package/dist/features/orders/components/OrderCompletionPanel.d.ts +27 -0
- package/dist/features/orders/components/OrderCompletionPanel.js +192 -0
- package/dist/features/orders/components/OrdersList.js +2 -2
- package/dist/features/orders/components/RefundHistoryTable.js +3 -1
- package/dist/features/orders/components/index.d.ts +2 -0
- package/dist/features/orders/components/index.js +6 -0
- package/dist/features/orders/constants/transitions.d.ts +59 -0
- package/dist/features/orders/constants/transitions.js +104 -0
- package/dist/features/orders/repository/orders.repository.d.ts +109 -6
- package/dist/features/orders/repository/orders.repository.js +464 -21
- package/dist/features/orders/schemas/firestore.d.ts +270 -0
- package/dist/features/orders/schemas/firestore.js +24 -0
- package/dist/features/orders/schemas/index.d.ts +61 -0
- package/dist/features/orders/schemas/index.js +22 -0
- package/dist/features/orders/types/index.d.ts +79 -0
- package/dist/features/parts/components/PartsIndexPageView.js +8 -1
- package/dist/features/payment-cases/repository/payment-cases.repository.d.ts +170 -0
- package/dist/features/payment-cases/repository/payment-cases.repository.js +342 -0
- package/dist/features/payment-cases/schemas/firestore.d.ts +229 -0
- package/dist/features/payment-cases/schemas/firestore.js +105 -0
- package/dist/features/payment-cases/schemas/resolve-form.d.ts +97 -0
- package/dist/features/payment-cases/schemas/resolve-form.js +114 -0
- package/dist/features/payments/repository/payout.repository.d.ts +0 -1
- package/dist/features/payments/repository/payout.repository.js +0 -1
- package/dist/features/points/repository/points.repository.d.ts +122 -0
- package/dist/features/points/repository/points.repository.js +304 -1
- package/dist/features/points/schemas/adjust-form.d.ts +58 -0
- package/dist/features/points/schemas/adjust-form.js +63 -0
- package/dist/features/points/schemas/firestore.d.ts +108 -1
- package/dist/features/points/schemas/firestore.js +84 -0
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
- package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
- package/dist/features/price-index/components/PriceIndexToolView.d.ts +23 -4
- package/dist/features/price-index/components/PriceIndexToolView.js +71 -6
- package/dist/features/price-index/market-stats.d.ts +82 -0
- package/dist/features/price-index/market-stats.js +230 -0
- package/dist/features/print/components/BoxLabelPrintView.d.ts +25 -0
- package/dist/features/print/components/BoxLabelPrintView.js +66 -0
- package/dist/features/print/components/LabelProfilePicker.d.ts +13 -0
- package/dist/features/print/components/LabelProfilePicker.js +38 -0
- package/dist/features/print/components/labels.d.ts +117 -0
- package/dist/features/print/components/labels.js +258 -0
- package/dist/features/print/components/labels.style.css +46 -0
- package/dist/features/print/index.d.ts +6 -0
- package/dist/features/print/index.js +16 -0
- package/dist/features/products/columns/productTableColumns.js +5 -4
- package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
- package/dist/features/products/components/MarketplacePrizeDrawCard.js +6 -6
- package/dist/features/products/components/PrizeDrawCollage.js +1 -1
- package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
- package/dist/features/products/components/PrizeRevealModal.js +2 -2
- package/dist/features/products/components/ProductDetailPageView.js +18 -4
- package/dist/features/products/components/ProductForm.js +34 -23
- package/dist/features/products/components/ProductGrid.js +86 -62
- package/dist/features/products/constants/card-badges.d.ts +97 -0
- package/dist/features/products/constants/card-badges.js +100 -0
- package/dist/features/products/repository/products.repository.js +34 -1
- package/dist/features/products/schemas/firestore.d.ts +46 -3
- package/dist/features/products/schemas/firestore.js +21 -0
- package/dist/features/promotions/components/PromotionsView.js +1 -1
- package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +32 -0
- package/dist/features/promotions/repository/claimed-coupons.repository.js +58 -0
- package/dist/features/promotions/schemas/firestore.js +30 -3
- package/dist/features/promotions/schemas/index.d.ts +6 -6
- package/dist/features/protection-claims/repository/protection-claims.repository.d.ts +54 -0
- package/dist/features/protection-claims/repository/protection-claims.repository.js +174 -0
- package/dist/features/protection-claims/schemas/firestore.d.ts +168 -0
- package/dist/features/protection-claims/schemas/firestore.js +130 -0
- package/dist/features/reviews/actions/review-actions.js +3 -2
- package/dist/features/reviews/components/ReviewModal.js +1 -1
- package/dist/features/reviews/components/ReviewsList.js +1 -1
- package/dist/features/reviews/schemas/firestore.d.ts +20 -1
- package/dist/features/scams/constants/scam-types.d.ts +2 -0
- package/dist/features/scams/constants/scam-types.js +18 -0
- package/dist/features/scams/schemas/report-form.d.ts +3 -3
- package/dist/features/scams/schemas/report-form.js +26 -1
- package/dist/features/search/components/Search.js +9 -9
- package/dist/features/search/components/SearchResultsClient.js +18 -3
- package/dist/features/search/components/SearchResultsPageView.d.ts +1 -6
- package/dist/features/search/components/SearchResultsPageView.js +2 -2
- package/dist/features/seller/actions/offer-actions.js +16 -1
- package/dist/features/seller/actions/seller-actions.js +14 -3
- package/dist/features/seller/components/CategoryInlineSelect.js +75 -11
- package/dist/features/seller/components/PrintCenterView.d.ts +5 -0
- package/dist/features/seller/components/PrintCenterView.js +41 -30
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutRequestView.js +16 -5
- package/dist/features/seller/components/SellerPayoutSettingsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.d.ts +16 -0
- package/dist/features/seller/components/SellerProductShell.js +123 -13
- package/dist/features/seller/components/SellerReviewsView.js +4 -2
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/schemas/coupon-form.d.ts +26 -0
- package/dist/features/seller/schemas/coupon-form.js +27 -0
- package/dist/features/seller/schemas/product-form.d.ts +3 -0
- package/dist/features/seller/schemas/product-form.js +5 -0
- package/dist/features/shell/FormShell.js +2 -2
- package/dist/features/shell/QuickFormDrawer.js +14 -0
- package/dist/features/shell/SectionForm.d.ts +19 -0
- package/dist/features/shell/SectionForm.js +133 -9
- package/dist/features/shell/SectionForm.style.css +54 -0
- package/dist/features/shipments/components/AdminShipmentsView.js +16 -1
- package/dist/features/shipments/repository/shipment-items.repository.d.ts +9 -0
- package/dist/features/shipments/repository/shipment-items.repository.js +14 -0
- package/dist/features/site-settings/components/ActionPermissionsManager.js +1 -1
- package/dist/features/sticker-trace/components/StickerCommitPanel.js +1 -1
- package/dist/features/store-extensions/schemas/report-review-form.d.ts +8 -8
- package/dist/features/stores/components/StoreGuideHubView.js +1 -1
- package/dist/features/stores/components/StoreHeader.js +1 -1
- package/dist/features/support/schemas/firestore.d.ts +73 -2
- package/dist/features/support/schemas/firestore.js +59 -0
- package/dist/index.d.ts +16 -24
- package/dist/index.js +38 -47
- package/dist/next/ErrorBoundary.js +1 -1
- package/dist/next/routing/route-map.d.ts +24 -0
- package/dist/next/routing/route-map.js +40 -0
- package/dist/providers/payment-manual/index.d.ts +15 -1
- package/dist/providers/payment-manual/index.js +37 -0
- package/dist/providers/payment-phonepe/index.d.ts +14 -1
- package/dist/providers/payment-phonepe/index.js +36 -0
- package/dist/providers/payment-razorpay/index.d.ts +44 -1
- package/dist/providers/payment-razorpay/index.js +99 -0
- package/dist/providers/shipping-shiprocket/index.d.ts +18 -0
- package/dist/providers/shipping-shiprocket/index.js +18 -0
- package/dist/schemas/registry.d.ts +44 -11
- package/dist/server-entry.d.ts +2 -0
- package/dist/server-entry.js +27 -0
- package/dist/server.d.ts +43 -0
- package/dist/server.js +98 -0
- package/dist/styles.css +418 -149
- package/dist/tailwind-utilities.css +1 -1
- package/dist/tokens/themes/default-dark.js +15 -12
- package/dist/tokens/themes/default-light.js +14 -11
- package/dist/tokens/tokens.css +106 -23
- package/dist/ui/DataTable.style.css +4 -4
- package/dist/ui/columns/cell-renderers.d.ts +20 -0
- package/dist/ui/columns/cell-renderers.js +26 -1
- package/dist/ui/columns/index.d.ts +1 -1
- package/dist/ui/columns/index.js +4 -1
- package/dist/ui/components/Badge.style.css +1 -1
- package/dist/ui/components/Breadcrumb.js +19 -1
- package/dist/ui/components/BulkActionBar.style.css +4 -4
- package/dist/ui/components/Button.style.css +1 -1
- package/dist/ui/components/Checkbox.style.css +1 -1
- package/dist/ui/components/FallbackShell.js +1 -1
- package/dist/ui/components/Form.d.ts +14 -1
- package/dist/ui/components/Form.js +2 -2
- package/dist/ui/components/FormField.js +18 -4
- package/dist/ui/components/FormField.style.css +43 -3
- package/dist/ui/components/GatedPrice.style.css +1 -1
- package/dist/ui/components/IconButton.style.css +1 -1
- package/dist/ui/components/Input.js +22 -1
- package/dist/ui/components/Input.style.css +38 -22
- package/dist/ui/components/ListingFilterDrawer.js +1 -1
- package/dist/ui/components/ListingToolbar.js +1 -1
- package/dist/ui/components/PaginatedSelect.js +0 -0
- package/dist/ui/components/Radio.style.css +1 -1
- package/dist/ui/components/Repeater.d.ts +53 -0
- package/dist/ui/components/Repeater.js +7 -0
- package/dist/ui/components/RichTextEditor.d.ts +20 -1
- package/dist/ui/components/RichTextEditor.js +23 -2
- package/dist/ui/components/Select.style.css +7 -21
- package/dist/ui/components/Semantic.js +27 -3
- package/dist/ui/components/TagInput.style.css +4 -9
- package/dist/ui/components/Textarea.style.css +4 -18
- package/dist/ui/components/Toggle.style.css +1 -1
- package/dist/ui/components/Typography.d.ts +3 -3
- package/dist/ui/components/Typography.js +15 -15
- package/dist/ui/components/ViewToggle.style.css +4 -4
- package/dist/ui/forms/AddAnotherToggle.d.ts +16 -0
- package/dist/ui/forms/AddAnotherToggle.js +56 -0
- package/dist/ui/forms/ColorPickerField.js +15 -2
- package/dist/ui/forms/FieldCheckbox.js +15 -2
- package/dist/ui/forms/FieldInput.d.ts +22 -1
- package/dist/ui/forms/FieldInput.js +19 -5
- package/dist/ui/forms/FieldLabel.d.ts +35 -0
- package/dist/ui/forms/FieldLabel.js +70 -0
- package/dist/ui/forms/FieldSelect.d.ts +4 -1
- package/dist/ui/forms/FieldSelect.js +27 -5
- package/dist/ui/forms/FieldTextarea.d.ts +4 -1
- package/dist/ui/forms/FieldTextarea.js +22 -5
- package/dist/ui/forms/FormShell.d.ts +17 -1
- package/dist/ui/forms/FormShell.js +36 -2
- package/dist/ui/forms/FormShell.style.css +41 -33
- package/dist/ui/forms/index.d.ts +5 -1
- package/dist/ui/forms/index.js +2 -0
- package/dist/ui/icons/icon-registry.d.ts +1 -0
- package/dist/ui/icons/icon-registry.js +17 -1
- package/dist/utils/id-generators.d.ts +80 -0
- package/dist/utils/id-generators.js +93 -0
- package/dist/utils/search-txt-builders.d.ts +12 -0
- package/dist/utils/search-txt-builders.js +17 -0
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +106 -5
- package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +0 -12
- package/dist/features/loyalty/api/admin/loyalty/grant/route.js +0 -38
- package/dist/features/loyalty/api/balance/route.d.ts +0 -12
- package/dist/features/loyalty/api/balance/route.js +0 -41
- package/dist/features/loyalty/api/earn/route.d.ts +0 -12
- package/dist/features/loyalty/api/earn/route.js +0 -38
- package/dist/features/loyalty/api/history/route.d.ts +0 -12
- package/dist/features/loyalty/api/history/route.js +0 -58
- package/dist/features/loyalty/api/redeem/route.d.ts +0 -12
- package/dist/features/loyalty/api/redeem/route.js +0 -38
- package/dist/features/loyalty/columns/index.d.ts +0 -17
- package/dist/features/loyalty/columns/index.js +0 -40
- package/dist/features/loyalty/components/CoinsDisplay.d.ts +0 -12
- package/dist/features/loyalty/components/CoinsDisplay.js +0 -10
- package/dist/features/loyalty/components/index.d.ts +0 -1
- package/dist/features/loyalty/components/index.js +0 -1
- package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +0 -4
- package/dist/features/loyalty/hooks/useLoyaltyBalance.js +0 -25
- package/dist/features/loyalty/index.d.ts +0 -6
- package/dist/features/loyalty/index.js +0 -6
- package/dist/features/loyalty/manifest.d.ts +0 -2
- package/dist/features/loyalty/manifest.js +0 -16
- package/dist/features/loyalty/messages/en.json +0 -19
- package/dist/features/loyalty/repository/loyalty.repository.d.ts +0 -8
- package/dist/features/loyalty/repository/loyalty.repository.js +0 -22
- package/dist/features/loyalty/schemas/index.d.ts +0 -85
- package/dist/features/loyalty/schemas/index.js +0 -40
- package/dist/features/loyalty/server.d.ts +0 -6
- package/dist/features/loyalty/server.js +0 -6
- package/dist/features/loyalty/types/index.d.ts +0 -31
- package/dist/features/loyalty/types/index.js +0 -1
- package/dist/features/loyalty/types/loyalty-config.d.ts +0 -7
- package/dist/features/loyalty/types/loyalty-config.js +0 -1
- package/dist/features/loyalty/types/loyalty-math.d.ts +0 -9
- package/dist/features/loyalty/types/loyalty-math.js +0 -27
- package/dist/features/products/components/ProductOwnerQuickActions.d.ts +0 -11
- package/dist/features/products/components/ProductOwnerQuickActions.js +0 -120
|
@@ -41,8 +41,8 @@ export const DEFAULT_DARK_THEME = {
|
|
|
41
41
|
"appkit-color-secondary-950": "#083344",
|
|
42
42
|
"appkit-color-bg": "#020617",
|
|
43
43
|
"appkit-color-surface": "#0f172a",
|
|
44
|
-
"appkit-color-surface-elevated": "
|
|
45
|
-
"appkit-color-surface-input": "
|
|
44
|
+
"appkit-color-surface-elevated": "#1e293b",
|
|
45
|
+
"appkit-color-surface-input": "#0b1220",
|
|
46
46
|
// Theme-inverting interactive fills. Must stay byte-identical to the
|
|
47
47
|
// [data-theme="default-dark"] block in tokens.css — audit-theme-drift
|
|
48
48
|
// compares them.
|
|
@@ -87,16 +87,19 @@ export const DEFAULT_DARK_THEME = {
|
|
|
87
87
|
"appkit-space-18": "4.5rem",
|
|
88
88
|
"appkit-space-20": "5rem",
|
|
89
89
|
"appkit-space-24": "6rem",
|
|
90
|
-
"appkit-text-2xs": "0.
|
|
91
|
-
"appkit-text-xs": "0.
|
|
92
|
-
"appkit-text-sm": "0.
|
|
93
|
-
"appkit-text-base": "
|
|
94
|
-
"appkit-text-lg": "
|
|
95
|
-
"appkit-text-xl": "1.
|
|
96
|
-
"appkit-text-2xl": "1.
|
|
97
|
-
"appkit-text-3xl": "1.
|
|
98
|
-
"appkit-text-4xl": "
|
|
99
|
-
"appkit-text-5xl": "
|
|
90
|
+
"appkit-text-2xs": "0.6875rem",
|
|
91
|
+
"appkit-text-xs": "0.75rem",
|
|
92
|
+
"appkit-text-sm": "0.875rem",
|
|
93
|
+
"appkit-text-base": "1rem",
|
|
94
|
+
"appkit-text-lg": "1.125rem",
|
|
95
|
+
"appkit-text-xl": "1.25rem",
|
|
96
|
+
"appkit-text-2xl": "1.5rem",
|
|
97
|
+
"appkit-text-3xl": "1.875rem",
|
|
98
|
+
"appkit-text-4xl": "2.25rem",
|
|
99
|
+
"appkit-text-5xl": "3rem",
|
|
100
|
+
"appkit-text-6xl": "3.75rem",
|
|
101
|
+
"appkit-text-7xl": "4.5rem",
|
|
102
|
+
"appkit-text-8xl": "6rem",
|
|
100
103
|
},
|
|
101
104
|
gradients: {
|
|
102
105
|
brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
|
|
@@ -45,7 +45,7 @@ export const DEFAULT_LIGHT_THEME = {
|
|
|
45
45
|
"appkit-color-bg": "#fafafa",
|
|
46
46
|
"appkit-color-surface": "#ffffff",
|
|
47
47
|
"appkit-color-surface-elevated": "#ffffff",
|
|
48
|
-
"appkit-color-surface-input": "#
|
|
48
|
+
"appkit-color-surface-input": "#fafafa",
|
|
49
49
|
// Theme-inverting interactive fills. Must stay byte-identical to the
|
|
50
50
|
// matching :root block in tokens.css — audit-theme-drift compares them.
|
|
51
51
|
"appkit-color-surface-hover": "#f4f4f5",
|
|
@@ -94,16 +94,19 @@ export const DEFAULT_LIGHT_THEME = {
|
|
|
94
94
|
"appkit-space-18": "4.5rem",
|
|
95
95
|
"appkit-space-20": "5rem",
|
|
96
96
|
"appkit-space-24": "6rem",
|
|
97
|
-
"appkit-text-2xs": "0.
|
|
98
|
-
"appkit-text-xs": "0.
|
|
99
|
-
"appkit-text-sm": "0.
|
|
100
|
-
"appkit-text-base": "
|
|
101
|
-
"appkit-text-lg": "
|
|
102
|
-
"appkit-text-xl": "1.
|
|
103
|
-
"appkit-text-2xl": "1.
|
|
104
|
-
"appkit-text-3xl": "1.
|
|
105
|
-
"appkit-text-4xl": "
|
|
106
|
-
"appkit-text-5xl": "
|
|
97
|
+
"appkit-text-2xs": "0.6875rem",
|
|
98
|
+
"appkit-text-xs": "0.75rem",
|
|
99
|
+
"appkit-text-sm": "0.875rem",
|
|
100
|
+
"appkit-text-base": "1rem",
|
|
101
|
+
"appkit-text-lg": "1.125rem",
|
|
102
|
+
"appkit-text-xl": "1.25rem",
|
|
103
|
+
"appkit-text-2xl": "1.5rem",
|
|
104
|
+
"appkit-text-3xl": "1.875rem",
|
|
105
|
+
"appkit-text-4xl": "2.25rem",
|
|
106
|
+
"appkit-text-5xl": "3rem",
|
|
107
|
+
"appkit-text-6xl": "3.75rem",
|
|
108
|
+
"appkit-text-7xl": "4.5rem",
|
|
109
|
+
"appkit-text-8xl": "6rem",
|
|
107
110
|
},
|
|
108
111
|
gradients: {
|
|
109
112
|
brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
|
package/dist/tokens/tokens.css
CHANGED
|
@@ -264,7 +264,13 @@
|
|
|
264
264
|
--appkit-color-bg: #fafafa; /* zinc-50 */
|
|
265
265
|
--appkit-color-surface: #ffffff; /* white */
|
|
266
266
|
--appkit-color-surface-elevated: #ffffff;
|
|
267
|
-
|
|
267
|
+
/* 🛑 A FILL, not white. This was `#ffffff` — identical to `surface` — so a
|
|
268
|
+
* field on a white card had nothing but a 1px `#e4e4e7` border to mark it,
|
|
269
|
+
* which measures ~1.2:1 and is why the audit reported fields reading as
|
|
270
|
+
* faint outlines rather than objects. A recessed well is the cheaper fix
|
|
271
|
+
* than darkening every border in the product, because `--appkit-color-border`
|
|
272
|
+
* is also every divider and table rule. */
|
|
273
|
+
--appkit-color-surface-input: #fafafa; /* zinc-50 — recessed on a white card */
|
|
268
274
|
|
|
269
275
|
/* --- Interactive surfaces ------------------------------------------------
|
|
270
276
|
* `-hover` is the neutral chrome hover fill; `-raised` is a resting panel one
|
|
@@ -335,6 +341,49 @@
|
|
|
335
341
|
--appkit-color-info-on-solid: #ffffff;
|
|
336
342
|
|
|
337
343
|
--appkit-color-focus-ring: #0d9488; /* primary-600 = teal */
|
|
344
|
+
|
|
345
|
+
/* --- The focus ring, in ONE place ----------------------------------------
|
|
346
|
+
*
|
|
347
|
+
* 🛑 `--appkit-color-focus-ring` HAD NO READER. It is declared by all four
|
|
348
|
+
* built-in themes, listed in `required.ts`, and surfaced as an editable
|
|
349
|
+
* swatch in the admin Theme Manager — and not one stylesheet consumed it.
|
|
350
|
+
* Every ring in the product was a hardcoded `rgba()` of the brand RETIRED
|
|
351
|
+
* on 2026-08-17: lime green `rgba(101, 196, 8, …)` in 9 primitives and hot
|
|
352
|
+
* pink `rgba(233, 30, 140, …)` in 6. So an admin could pick a focus colour
|
|
353
|
+
* and change nothing, while every focused control showed a dead brand.
|
|
354
|
+
*
|
|
355
|
+
* Three tokens because the primitives use three genuinely different ring
|
|
356
|
+
* SHAPES, and the shapes are kept byte-for-byte as they were — only the
|
|
357
|
+
* colour is re-pointed, so this carries no visual risk beyond the hue:
|
|
358
|
+
*
|
|
359
|
+
* -ring text fields (Input, Select, Textarea): 3px + a 1px inset
|
|
360
|
+
* -compact buttons (Button, IconButton, TagInput): a flat 2px
|
|
361
|
+
* -halo Checkbox / Radio / Toggle: 2px, then a 4px surface-coloured
|
|
362
|
+
* gap so the ring reads against the control it is hugging
|
|
363
|
+
*
|
|
364
|
+
* They resolve `--appkit-color-focus-ring` at USE time, so each theme's own
|
|
365
|
+
* value applies automatically and every `.dark` focus override in the
|
|
366
|
+
* primitives becomes dead weight — which is the structural half of the fix:
|
|
367
|
+
* light and dark can no longer disagree, because there is only one value.
|
|
368
|
+
*
|
|
369
|
+
* `color-mix` unguarded, matching `--appkit-gradient-glass` above and
|
|
370
|
+
* `--glow-color` in globals.css. */
|
|
371
|
+
--appkit-focus-ring:
|
|
372
|
+
0 0 0 3px color-mix(in srgb, var(--appkit-color-focus-ring) 25%, transparent),
|
|
373
|
+
inset 0 0 0 1px color-mix(in srgb, var(--appkit-color-focus-ring) 15%, transparent);
|
|
374
|
+
--appkit-focus-ring-compact:
|
|
375
|
+
0 0 0 2px color-mix(in srgb, var(--appkit-color-focus-ring) 20%, transparent);
|
|
376
|
+
--appkit-focus-ring-halo:
|
|
377
|
+
0 0 0 2px color-mix(in srgb, var(--appkit-color-focus-ring) 30%, transparent),
|
|
378
|
+
0 0 0 4px var(--appkit-color-surface);
|
|
379
|
+
/* Same shape as `--appkit-focus-ring`, keyed on the error colour — a field
|
|
380
|
+
* that failed validation keeps its red edge while focused instead of
|
|
381
|
+
* swapping to the focus hue and losing the only signal it had. Was
|
|
382
|
+
* `rgba(248, 113, 113, …)` (red-400) hardcoded in Input and Select: the
|
|
383
|
+
* right family, but fixed in every theme and deaf to `--appkit-color-error`. */
|
|
384
|
+
--appkit-focus-ring-error:
|
|
385
|
+
0 0 0 3px color-mix(in srgb, var(--appkit-color-error) 25%, transparent),
|
|
386
|
+
inset 0 0 0 1px color-mix(in srgb, var(--appkit-color-error) 15%, transparent);
|
|
338
387
|
}
|
|
339
388
|
|
|
340
389
|
/* --- Gradients — default-light defaults (overridden at runtime by ThemeProvider) - */
|
|
@@ -405,8 +454,23 @@
|
|
|
405
454
|
|
|
406
455
|
--appkit-color-bg: #020617; /* slate-950 */
|
|
407
456
|
--appkit-color-surface: #0f172a; /* slate-900 */
|
|
408
|
-
|
|
409
|
-
|
|
457
|
+
/* 🛑 ELEVATED WAS DARKER THAN SURFACE. `rgba(15, 23, 42, 0.9)` composites
|
|
458
|
+
* over the page to ~#0e1528, i.e. BELOW `surface` (#0f172a) — so in a dark
|
|
459
|
+
* theme, where elevation reads as "closer to the light", every elevated
|
|
460
|
+
* panel sank instead of rising. That is the audit's "the hero card is
|
|
461
|
+
* nearly invisible against the page".
|
|
462
|
+
*
|
|
463
|
+
* Opaque, not an alpha, and that is the actual lesson: a translucent
|
|
464
|
+
* elevation token composites against WHATEVER IS BEHIND IT, so the same
|
|
465
|
+
* "elevated" panel rendered one colour over the page and another over a
|
|
466
|
+
* card — which is how it ended up below `surface` in the first place
|
|
467
|
+
* without anyone choosing that. */
|
|
468
|
+
--appkit-color-surface-elevated: #1e293b; /* slate-800 — one step UP from surface */
|
|
469
|
+
/* Recessed, and distinct from all three panel levels, because an input
|
|
470
|
+
* appears on the page, on a card and on an elevated panel. The old
|
|
471
|
+
* `rgba(30, 41, 59, 0.6)` composited to the panel's own colour on an
|
|
472
|
+
* elevated panel — an input that disappears into the thing it sits on. */
|
|
473
|
+
--appkit-color-surface-input: #0b1220; /* a well, below slate-900 */
|
|
410
474
|
|
|
411
475
|
/* --- Interactive surfaces ------------------------------------------------
|
|
412
476
|
* `-hover` is the neutral chrome hover fill; `-raised` is a resting panel one
|
|
@@ -499,16 +563,19 @@
|
|
|
499
563
|
--appkit-space-20: 5rem;
|
|
500
564
|
--appkit-space-24: 6rem;
|
|
501
565
|
|
|
502
|
-
--appkit-text-2xs: 0.
|
|
503
|
-
--appkit-text-xs: 0.
|
|
504
|
-
--appkit-text-sm: 0.
|
|
505
|
-
--appkit-text-base:
|
|
506
|
-
--appkit-text-lg:
|
|
507
|
-
--appkit-text-xl: 1.
|
|
508
|
-
--appkit-text-2xl: 1.
|
|
509
|
-
--appkit-text-3xl: 1.
|
|
510
|
-
--appkit-text-4xl:
|
|
511
|
-
--appkit-text-5xl:
|
|
566
|
+
--appkit-text-2xs: 0.6875rem;
|
|
567
|
+
--appkit-text-xs: 0.75rem;
|
|
568
|
+
--appkit-text-sm: 0.875rem;
|
|
569
|
+
--appkit-text-base: 1rem;
|
|
570
|
+
--appkit-text-lg: 1.125rem;
|
|
571
|
+
--appkit-text-xl: 1.25rem;
|
|
572
|
+
--appkit-text-2xl: 1.5rem;
|
|
573
|
+
--appkit-text-3xl: 1.875rem;
|
|
574
|
+
--appkit-text-4xl: 2.25rem;
|
|
575
|
+
--appkit-text-5xl: 3rem;
|
|
576
|
+
--appkit-text-6xl: 3.75rem;
|
|
577
|
+
--appkit-text-7xl: 4.5rem;
|
|
578
|
+
--appkit-text-8xl: 6rem;
|
|
512
579
|
}
|
|
513
580
|
|
|
514
581
|
/* --- Theme — Cobalt Night ([data-theme="cobalt-night"]) ------------------- */
|
|
@@ -639,16 +706,19 @@
|
|
|
639
706
|
--appkit-font-editorial: var(--font-editorial), "Georgia", serif;
|
|
640
707
|
--appkit-font-mono: ui-monospace, "SFMono-Regular", "Cascadia Mono", "Consolas", monospace;
|
|
641
708
|
|
|
642
|
-
--appkit-text-2xs: 0.
|
|
643
|
-
--appkit-text-xs: 0.
|
|
644
|
-
--appkit-text-sm: 0.
|
|
645
|
-
--appkit-text-base:
|
|
646
|
-
--appkit-text-lg:
|
|
647
|
-
--appkit-text-xl: 1.
|
|
648
|
-
--appkit-text-2xl: 1.
|
|
649
|
-
--appkit-text-3xl: 1.
|
|
650
|
-
--appkit-text-4xl:
|
|
651
|
-
--appkit-text-5xl:
|
|
709
|
+
--appkit-text-2xs: 0.6875rem;
|
|
710
|
+
--appkit-text-xs: 0.75rem;
|
|
711
|
+
--appkit-text-sm: 0.875rem;
|
|
712
|
+
--appkit-text-base: 1rem;
|
|
713
|
+
--appkit-text-lg: 1.125rem;
|
|
714
|
+
--appkit-text-xl: 1.25rem;
|
|
715
|
+
--appkit-text-2xl: 1.5rem;
|
|
716
|
+
--appkit-text-3xl: 1.875rem;
|
|
717
|
+
--appkit-text-4xl: 2.25rem;
|
|
718
|
+
--appkit-text-5xl: 3rem;
|
|
719
|
+
--appkit-text-6xl: 3.75rem;
|
|
720
|
+
--appkit-text-7xl: 4.5rem;
|
|
721
|
+
--appkit-text-8xl: 6rem;
|
|
652
722
|
|
|
653
723
|
--appkit-leading-tight: 1.15;
|
|
654
724
|
--appkit-leading-snug: 1.375;
|
|
@@ -664,6 +734,19 @@
|
|
|
664
734
|
|
|
665
735
|
/* --- Spacing -------------------------------------------------------------- */
|
|
666
736
|
:root {
|
|
737
|
+
/* 🛑 THE SCALE HAD NO ZERO, and 18 call sites reached for it anyway.
|
|
738
|
+
*
|
|
739
|
+
* `p-[var(--appkit-space-0)]` on a control that wants no padding resolved
|
|
740
|
+
* to an undefined var, which drops the declaration — so every one of those
|
|
741
|
+
* controls kept its DEFAULT padding, the exact opposite of the intent. The
|
|
742
|
+
* tightest case is `AdminNavigationView`'s ▲/▼ reorder buttons, which pair
|
|
743
|
+
* it with `min-h-0 h-auto` to get a glyph-sized hit area and instead got a
|
|
744
|
+
* full-size button.
|
|
745
|
+
*
|
|
746
|
+
* Declared rather than rewritten to `p-0` at each site: 18 independent
|
|
747
|
+
* authors reaching for the same name is the scale's gap, not 18 mistakes,
|
|
748
|
+
* and a scale that starts at 2px cannot express "none". */
|
|
749
|
+
--appkit-space-0: 0rem; /* 0px */
|
|
667
750
|
--appkit-space-0-5: 0.125rem; /* 2px */
|
|
668
751
|
--appkit-space-1: 0.25rem; /* 4px */
|
|
669
752
|
--appkit-space-1-5: 0.375rem; /* 6px */
|
|
@@ -168,15 +168,15 @@
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
.appkit-data-table__view-btn--active {
|
|
171
|
-
background:
|
|
171
|
+
background: color-mix(in srgb, var(--appkit-color-secondary) 5%, transparent);
|
|
172
172
|
color: var(--appkit-color-secondary-600);
|
|
173
|
-
box-shadow: inset 0 0 0 1px
|
|
173
|
+
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--appkit-color-secondary) 30%, transparent);
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
:is(.dark) .appkit-data-table__view-btn--active {
|
|
177
|
-
background:
|
|
177
|
+
background: color-mix(in srgb, var(--appkit-color-primary) 10%, transparent);
|
|
178
178
|
color: var(--appkit-color-primary);
|
|
179
|
-
box-shadow: inset 0 0 0 1px
|
|
179
|
+
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--appkit-color-primary) 30%, transparent);
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
.appkit-data-table__mobile-cards {
|
|
@@ -7,6 +7,26 @@ import { type StatusTone } from "./column-renderers";
|
|
|
7
7
|
* and `AdminViewCards.tsx`. Both are now consumers of this one.
|
|
8
8
|
*/
|
|
9
9
|
export declare const STATUS_TONE_CLASSES: Record<StatusTone, string>;
|
|
10
|
+
/**
|
|
11
|
+
* A stored status value as something a person reads.
|
|
12
|
+
*
|
|
13
|
+
* 🛑 EVERY status chip in the product printed the raw enum. This renderer
|
|
14
|
+
* used `status` verbatim, so admin tables and cards showed `published`,
|
|
15
|
+
* `in_review`, `out_of_stock` — lowercase, underscored, in our vocabulary
|
|
16
|
+
* rather than the reader's. That is the audit's "status is plain lowercase
|
|
17
|
+
* text where every other surface uses badges": the chip was there, its
|
|
18
|
+
* CONTENT was the database value.
|
|
19
|
+
*
|
|
20
|
+
* 🛑 And `productTableColumns` hand-rolled `status.replace("_", " ")`, which
|
|
21
|
+
* is worse than doing nothing: a STRING pattern replaces only the FIRST
|
|
22
|
+
* occurrence, so `out_of_stock` rendered as "out of_stock". A regex with `g`
|
|
23
|
+
* is the fix, which is reason enough for one helper instead of a `.replace`
|
|
24
|
+
* at each call site.
|
|
25
|
+
*
|
|
26
|
+
* Sentence case, not Title Case: these sit in dense table cells beside real
|
|
27
|
+
* sentences, and "Out Of Stock" reads like a proper noun.
|
|
28
|
+
*/
|
|
29
|
+
export declare function statusLabel(status: string): string;
|
|
10
30
|
/** A status string as a themed chip. Unknown statuses render neutral, not invisible. */
|
|
11
31
|
export declare function renderStatusBadge(status: string | null | undefined, opts?: {
|
|
12
32
|
emptyLabel?: string;
|
|
@@ -21,9 +21,34 @@ export const STATUS_TONE_CLASSES = {
|
|
|
21
21
|
// Not a status colour — see the header.
|
|
22
22
|
neutral: "bg-[var(--appkit-color-surface-elevated)] text-[var(--appkit-color-text-muted)]",
|
|
23
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* A stored status value as something a person reads.
|
|
26
|
+
*
|
|
27
|
+
* 🛑 EVERY status chip in the product printed the raw enum. This renderer
|
|
28
|
+
* used `status` verbatim, so admin tables and cards showed `published`,
|
|
29
|
+
* `in_review`, `out_of_stock` — lowercase, underscored, in our vocabulary
|
|
30
|
+
* rather than the reader's. That is the audit's "status is plain lowercase
|
|
31
|
+
* text where every other surface uses badges": the chip was there, its
|
|
32
|
+
* CONTENT was the database value.
|
|
33
|
+
*
|
|
34
|
+
* 🛑 And `productTableColumns` hand-rolled `status.replace("_", " ")`, which
|
|
35
|
+
* is worse than doing nothing: a STRING pattern replaces only the FIRST
|
|
36
|
+
* occurrence, so `out_of_stock` rendered as "out of_stock". A regex with `g`
|
|
37
|
+
* is the fix, which is reason enough for one helper instead of a `.replace`
|
|
38
|
+
* at each call site.
|
|
39
|
+
*
|
|
40
|
+
* Sentence case, not Title Case: these sit in dense table cells beside real
|
|
41
|
+
* sentences, and "Out Of Stock" reads like a proper noun.
|
|
42
|
+
*/
|
|
43
|
+
export function statusLabel(status) {
|
|
44
|
+
const words = status.replace(/[_-]+/g, " ").trim();
|
|
45
|
+
if (!words)
|
|
46
|
+
return status;
|
|
47
|
+
return words.charAt(0).toUpperCase() + words.slice(1).toLowerCase();
|
|
48
|
+
}
|
|
24
49
|
/** A status string as a themed chip. Unknown statuses render neutral, not invisible. */
|
|
25
50
|
export function renderStatusBadge(status, opts) {
|
|
26
|
-
const label = status
|
|
51
|
+
const label = status ? statusLabel(status) : (opts?.emptyLabel ?? "—");
|
|
27
52
|
const tone = getStatusTone(status);
|
|
28
53
|
return (_jsx(Span, { size: "xs", weight: "medium", rounded: "full", padding: "pill-sm-tall", className: `inline-flex whitespace-nowrap ${STATUS_TONE_CLASSES[tone]}`, children: label }));
|
|
29
54
|
}
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
export { buildColumns, createColumnBuilder, resolveColumnPriority } from "./build-columns";
|
|
5
5
|
export { renderBoolean, renderCurrency, renderCurrencyCompact, renderCount, renderNullable, renderRating, getStatusTone, getResourceIcon, } from "./column-renderers";
|
|
6
6
|
export type { BooleanRenderOpts, RatingMode, RatingRenderOpts, StatusTone, } from "./column-renderers";
|
|
7
|
-
export { STATUS_TONE_CLASSES, renderStatusBadge, renderThumbnail, renderAvatar, renderMoney, renderRelativeDate, renderBooleanIcon, renderCountPill, renderTypeChip, } from "./cell-renderers";
|
|
7
|
+
export { STATUS_TONE_CLASSES, renderStatusBadge, renderThumbnail, renderAvatar, renderMoney, renderRelativeDate, renderBooleanIcon, renderCountPill, renderTypeChip, statusLabel, } from "./cell-renderers";
|
package/dist/ui/columns/index.js
CHANGED
|
@@ -6,4 +6,7 @@ export { renderBoolean, renderCurrency, renderCurrencyCompact, renderCount, rend
|
|
|
6
6
|
// JSX renderers. Deliberately a separate module from `column-renderers.ts`:
|
|
7
7
|
// that one is React-free so it can run in a server context, and mixing the two
|
|
8
8
|
// would drag React into every consumer of a plain string formatter.
|
|
9
|
-
export { STATUS_TONE_CLASSES, renderStatusBadge, renderThumbnail, renderAvatar, renderMoney, renderRelativeDate, renderBooleanIcon, renderCountPill, renderTypeChip,
|
|
9
|
+
export { STATUS_TONE_CLASSES, renderStatusBadge, renderThumbnail, renderAvatar, renderMoney, renderRelativeDate, renderBooleanIcon, renderCountPill, renderTypeChip,
|
|
10
|
+
// The status LABEL on its own, for the handful of cells that need this
|
|
11
|
+
// feature's own tones but the shared wording — see productTableColumns.
|
|
12
|
+
statusLabel, } from "./cell-renderers.js";
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
.appkit-badge--secondary {
|
|
69
69
|
background: var(--appkit-color-secondary-50);
|
|
70
70
|
color: var(--appkit-color-secondary-700);
|
|
71
|
-
border-color:
|
|
71
|
+
border-color: color-mix(in srgb, var(--appkit-color-secondary) 25%, transparent);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
.dark .appkit-badge--active,
|
|
@@ -4,7 +4,25 @@ import { Nav, Ol, Li } from "./Semantic.js";
|
|
|
4
4
|
import { Span } from "./Typography.js";
|
|
5
5
|
import { TextLink } from "./TextLink.js";
|
|
6
6
|
export function Breadcrumb({ items, className = "", tone = "default" }) {
|
|
7
|
-
return (
|
|
7
|
+
return (
|
|
8
|
+
/*
|
|
9
|
+
* 🛑 `appkit-page-breadcrumb` IS A SIGNAL TO CSS, not a style hook — and
|
|
10
|
+
* it belongs on THIS primitive rather than on `BreadcrumbTrail`, because
|
|
11
|
+
* this is the one thing every page-level breadcrumb has in common.
|
|
12
|
+
* `BreadcrumbTrail` wraps it; the scam registry's three surfaces render it
|
|
13
|
+
* directly; and `AutoBreadcrumbs` — the automatic, pathname-derived trail
|
|
14
|
+
* the shell renders on every route — does NOT use it at all, building its
|
|
15
|
+
* own `<Nav><Ol>`. So this class means exactly "a page supplied its own
|
|
16
|
+
* breadcrumb", with one owner and nothing to keep in sync.
|
|
17
|
+
*
|
|
18
|
+
* `AutoBreadcrumbs.style.css` hides the automatic trail when this appears
|
|
19
|
+
* anywhere in the body. See that file for why the resolution is `:has()`
|
|
20
|
+
* and not React state: the shell renders before `{children}`, so a flag a
|
|
21
|
+
* page sets arrives a frame late, and hiding a full-width strip after
|
|
22
|
+
* paint is the top-of-page layout shift just fixed on the announcement
|
|
23
|
+
* bar.
|
|
24
|
+
*/
|
|
25
|
+
_jsx(Nav, { "aria-label": "Breadcrumb", className: `appkit-page-breadcrumb ${tone === "on-media" ? "appkit-breadcrumb--on-media" : ""} ${className}`, children: _jsx(Ol, { className: "appkit-breadcrumb__list", children: items.map((item, i) => {
|
|
8
26
|
const isLast = i === items.length - 1;
|
|
9
27
|
return (_jsxs(Li, { className: "appkit-breadcrumb__item", children: [i > 0 && (_jsx(ChevronRight, { className: "appkit-breadcrumb__separator", "aria-hidden": "true" })), isLast || !item.href ? (_jsx(Span, { className: isLast
|
|
10
28
|
? "appkit-breadcrumb__current"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
position: relative;
|
|
3
3
|
border-radius: 0.5rem;
|
|
4
4
|
overflow: hidden;
|
|
5
|
-
border: 1px solid
|
|
5
|
+
border: 1px solid color-mix(in srgb, var(--appkit-color-secondary) 20%, transparent);
|
|
6
6
|
animation: appkit-slide-in 150ms ease;
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -34,14 +34,14 @@
|
|
|
34
34
|
height: 2rem;
|
|
35
35
|
padding: 0 0.75rem 0 0.5rem;
|
|
36
36
|
border-radius: 9999px;
|
|
37
|
-
border: 1px solid
|
|
38
|
-
background:
|
|
37
|
+
border: 1px solid color-mix(in srgb, var(--appkit-color-secondary) 30%, transparent);
|
|
38
|
+
background: color-mix(in srgb, var(--appkit-color-secondary) 7%, transparent);
|
|
39
39
|
color: var(--appkit-color-secondary-700);
|
|
40
40
|
transition: background-color 0.15s ease;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
.appkit-bulk-bar__count-pill:hover {
|
|
44
|
-
background:
|
|
44
|
+
background: color-mix(in srgb, var(--appkit-color-secondary) 14%, transparent);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.appkit-bulk-bar__count-icon {
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
}
|
|
51
51
|
.appkit-checkbox__input:focus-visible {
|
|
52
52
|
outline: none;
|
|
53
|
-
box-shadow:
|
|
53
|
+
box-shadow: var(--appkit-focus-ring-halo);
|
|
54
54
|
}
|
|
55
55
|
.appkit-checkbox__input:not(:disabled):hover {
|
|
56
56
|
border-color: var(--appkit-color-secondary);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
const TONE_BG = {
|
|
4
|
-
neutral: "var(--appkit-color-
|
|
4
|
+
neutral: "var(--appkit-color-bg)",
|
|
5
5
|
danger: "var(--appkit-color-error-surface)",
|
|
6
6
|
warning: "var(--appkit-color-warning-surface)",
|
|
7
7
|
};
|
|
@@ -41,6 +41,19 @@ export interface FormProps extends Omit<React.FormHTMLAttributes<HTMLFormElement
|
|
|
41
41
|
* this in a modal is a no-op rather than a bug.
|
|
42
42
|
*/
|
|
43
43
|
bottomBar?: FormBottomBarConfig;
|
|
44
|
+
/**
|
|
45
|
+
* Offer "Create & add another" — render `<AddAnotherToggle>` somewhere in
|
|
46
|
+
* the form and read `addAnother` from the render-prop helpers' `shellCtx`.
|
|
47
|
+
*
|
|
48
|
+
* 🛑 PASSING THIS IS AN OBLIGATION, not a flag. The submit handler must keep
|
|
49
|
+
* the user on the form with a fresh draft when `addAnother` is true;
|
|
50
|
+
* otherwise it ships a checkbox that does nothing, which is the shape this
|
|
51
|
+
* codebase has paid for most often. `audit-add-another-honoured` blocks it.
|
|
52
|
+
*
|
|
53
|
+
* Ignored when `shellCtx` is supplied — the parent that owns the state owns
|
|
54
|
+
* this decision too, and two sources would disagree the first time one moved.
|
|
55
|
+
*/
|
|
56
|
+
allowAddAnother?: boolean;
|
|
44
57
|
/** Cross-axis alignment of flex/grid children. Replaces raw `items-*` className. */
|
|
45
58
|
align?: "start" | "center" | "end" | "stretch";
|
|
46
59
|
/** Gap between children — use instead of raw `gap-*` className. */
|
|
@@ -55,7 +68,7 @@ export interface FormBottomBarConfig {
|
|
|
55
68
|
isLoading?: boolean;
|
|
56
69
|
disabled?: boolean;
|
|
57
70
|
}
|
|
58
|
-
export declare function Form({ children, spacing, schema, shellCtx: shellCtxProp, bottomBar, align, gap, surface, padding, paddingX, paddingY, rounded, roundedTop, roundedBottom, border, shadow, overflow, className, ...props }: FormProps): React.JSX.Element;
|
|
71
|
+
export declare function Form({ children, spacing, schema, shellCtx: shellCtxProp, bottomBar, allowAddAnother, align, gap, surface, padding, paddingX, paddingY, rounded, roundedTop, roundedBottom, border, shadow, overflow, className, ...props }: FormProps): React.JSX.Element;
|
|
59
72
|
export interface FormGroupProps {
|
|
60
73
|
children: React.ReactNode;
|
|
61
74
|
columns?: 1 | 2 | 3 | 4;
|
|
@@ -45,8 +45,8 @@ const FORM_ALIGN_MAP = {
|
|
|
45
45
|
end: "items-end",
|
|
46
46
|
stretch: "items-stretch",
|
|
47
47
|
};
|
|
48
|
-
export function Form({ children, spacing, schema, shellCtx: shellCtxProp, bottomBar, align, gap, surface, padding, paddingX, paddingY, rounded, roundedTop, roundedBottom, border, shadow, overflow, className = "", ...props }) {
|
|
49
|
-
const helpers = useFormShellState(schema);
|
|
48
|
+
export function Form({ children, spacing, schema, shellCtx: shellCtxProp, bottomBar, allowAddAnother, align, gap, surface, padding, paddingX, paddingY, rounded, roundedTop, roundedBottom, border, shadow, overflow, className = "", ...props }) {
|
|
49
|
+
const helpers = useFormShellState(schema, undefined, { allowAddAnother });
|
|
50
50
|
const effectiveCtx = shellCtxProp ?? helpers.shellCtx;
|
|
51
51
|
/*
|
|
52
52
|
* Marking the attempt on the NATIVE submit event covers both shapes this
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useContext } from "react";
|
|
3
|
+
import { useContext, useId } from "react";
|
|
4
4
|
import { Input } from "./Input.js";
|
|
5
5
|
import { Select } from "./Select.js";
|
|
6
6
|
import { Textarea } from "./Textarea.js";
|
|
7
|
-
import {
|
|
7
|
+
import { Text } from "./Typography.js";
|
|
8
|
+
import { FieldLabel } from "../forms/FieldLabel.js";
|
|
8
9
|
/*
|
|
9
10
|
* 🛑 FROM THE DEFINING MODULES, NOT the `features/media` barrel.
|
|
10
11
|
*
|
|
@@ -40,7 +41,20 @@ export function FormField({ label, name, card = false, type = "text", value = ""
|
|
|
40
41
|
? touched && !!error
|
|
41
42
|
: !!error
|
|
42
43
|
: false;
|
|
43
|
-
const
|
|
44
|
+
const reactId = useId();
|
|
45
|
+
/*
|
|
46
|
+
* 🛑 UNIQUE PER INSTANCE. This was `field-${name}`, so two fields sharing a
|
|
47
|
+
* name on one page produced two elements with the SAME id — `/auth/login`
|
|
48
|
+
* shipped two `id="field-email"` (the sign-in form and the footer
|
|
49
|
+
* newsletter).
|
|
50
|
+
*
|
|
51
|
+
* That is not cosmetic. `htmlFor` resolves to the FIRST element with the
|
|
52
|
+
* id, so the second field's label points at the first field's input: the
|
|
53
|
+
* label is present in the markup and the input has no accessible name, which
|
|
54
|
+
* is what an accessibility pass reports as an unlabelled field. Clicking the
|
|
55
|
+
* second label also focuses the first input.
|
|
56
|
+
*/
|
|
57
|
+
const inputId = `field-${name}-${reactId}`;
|
|
44
58
|
const errorId = `${inputId}-error`;
|
|
45
59
|
const describedBy = showError ? errorId : undefined;
|
|
46
60
|
function handleFieldChange(newValue) {
|
|
@@ -58,6 +72,6 @@ export function FormField({ label, name, card = false, type = "text", value = ""
|
|
|
58
72
|
if (type === "media" && onUpload) {
|
|
59
73
|
return (_jsxs("div", { className: card ? CARD_CLASS : BASE_CLASS, "data-section": "formfield-div-506", children: [_jsx(MediaUploadField, { label: `${label || name}${required ? " *" : ""}`, value: value, onChange: (url) => handleFieldChange(url), onUpload: onUpload, disabled: disabled, helperText: hint ?? helpText, captureSource: captureSource ?? "file-only", captureMode: captureMode ?? "both", accept: accept, maxSizeMB: maxSizeMB }), showError ? (_jsx(Text, { id: errorId, size: "sm", variant: "error", className: "appkit-form-field__error", role: "alert", children: error })) : null] }));
|
|
60
74
|
}
|
|
61
|
-
return (_jsxs("div", { className: card ? CARD_CLASS : BASE_CLASS, "data-section": "formfield-div-507", children: [label ? (
|
|
75
|
+
return (_jsxs("div", { className: card ? CARD_CLASS : BASE_CLASS, "data-section": "formfield-div-507", children: [label ? (_jsx(FieldLabel, { htmlFor: inputId, required: required, children: label })) : null, type === "select" ? (_jsx(Select, { id: inputId, name: name, value: value, onChange: (event) => handleFieldChange(event.target.value), onBlur: handleFieldBlur, disabled: disabled, options: options, "aria-required": required || undefined, "aria-invalid": showError || undefined, "aria-describedby": describedBy })) : type === "textarea" ? (_jsx(Textarea, { id: inputId, name: name, value: value, onChange: (event) => handleFieldChange(event.target.value), onBlur: handleFieldBlur, placeholder: placeholder, disabled: disabled, rows: rows, "aria-required": required || undefined, "aria-invalid": showError || undefined, "aria-describedby": describedBy })) : (_jsx(Input, { id: inputId, name: name, type: type, value: value, onChange: (event) => handleFieldChange(event.target.value), onBlur: handleFieldBlur, placeholder: placeholder, disabled: disabled, autoComplete: autoComplete, "aria-required": required || undefined, "aria-invalid": showError || undefined, "aria-describedby": describedBy })), !showError && (hint || helpText) ? (_jsx(Text, { size: "sm", variant: "secondary", className: "appkit-form-field__hint", children: hint ?? helpText })) : null, showError ? (_jsx(Text, { id: errorId, size: "sm", variant: "error", className: "appkit-form-field__error", role: "alert", children: error })) : null] }));
|
|
62
76
|
}
|
|
63
77
|
export default FormField;
|
|
@@ -4,16 +4,49 @@
|
|
|
4
4
|
width: 100%;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
+
/*
|
|
8
|
+
* 🛑 ONE THEME-INVERTING TOKEN, NOT A LIGHT/DARK PAIR OF HARDCODED ZINCS.
|
|
9
|
+
*
|
|
10
|
+
* This was `--appkit-color-zinc-700` with an `:is(.dark)` override to
|
|
11
|
+
* `--appkit-color-zinc-300`. Both halves worked — `ThemeProvider` does add the
|
|
12
|
+
* `.dark` class — but the zinc scale is declared ONCE under `:root` and never
|
|
13
|
+
* inverts (Root Cause #79), so these were two fixed greys standing in for a
|
|
14
|
+
* theme decision. A custom admin theme with its own palette got zinc anyway,
|
|
15
|
+
* on every form label in the app.
|
|
16
|
+
*
|
|
17
|
+
* `--appkit-color-text` inverts per theme and carries a MEASURED contrast
|
|
18
|
+
* ratio in its own declaration (tokens.css notes `~7:1` and `~9:1` for the
|
|
19
|
+
* muted variants, and records that the faint one was darkened to clear WCAG AA
|
|
20
|
+
* for normal text). A hardcoded zinc carries no such guarantee and cannot,
|
|
21
|
+
* because it does not know what it is sitting on.
|
|
22
|
+
*
|
|
23
|
+
* So one declaration replaces two, and there is no longer a pairing to get
|
|
24
|
+
* wrong — the same reasoning that made the hover fix a REMOVAL rather than an
|
|
25
|
+
* addition.
|
|
26
|
+
*/
|
|
7
27
|
.appkit-form-field__label {
|
|
8
28
|
display: block;
|
|
9
29
|
margin-bottom: 0.375rem;
|
|
10
30
|
font-size: 0.875rem;
|
|
11
31
|
font-weight: 500;
|
|
12
|
-
color: var(--appkit-color-
|
|
32
|
+
color: var(--appkit-color-text);
|
|
13
33
|
}
|
|
14
34
|
|
|
15
|
-
|
|
16
|
-
|
|
35
|
+
/*
|
|
36
|
+
* Inline placement — the label sits beside its control rather than above it,
|
|
37
|
+
* for dense sections (a 12-field address block). Set once per section via
|
|
38
|
+
* `SectionDef.labelPlacement`, never per field: one field labelling above
|
|
39
|
+
* beside one labelling inline reads as broken rather than as varied.
|
|
40
|
+
*
|
|
41
|
+
* The margin is reset because `above` owns a bottom margin that becomes a gap
|
|
42
|
+
* in the wrong axis once the label is beside the control.
|
|
43
|
+
*/
|
|
44
|
+
.appkit-form-field__label--inline {
|
|
45
|
+
display: inline-block;
|
|
46
|
+
margin-bottom: 0;
|
|
47
|
+
margin-right: 0.5rem;
|
|
48
|
+
min-width: 8rem;
|
|
49
|
+
vertical-align: middle;
|
|
17
50
|
}
|
|
18
51
|
|
|
19
52
|
.appkit-form-field__required {
|
|
@@ -21,8 +54,15 @@
|
|
|
21
54
|
color: var(--appkit-color-error);
|
|
22
55
|
}
|
|
23
56
|
|
|
57
|
+
/*
|
|
58
|
+
* The hint is MUTED, not faint. `--appkit-color-text-faint` exists and its own
|
|
59
|
+
* token comment records being darkened to clear AA for normal text at all —
|
|
60
|
+
* i.e. it is the bottom of the usable range. A hint explains a field's rules
|
|
61
|
+
* and is read by whoever is unsure, so it belongs a tier up.
|
|
62
|
+
*/
|
|
24
63
|
.appkit-form-field__hint {
|
|
25
64
|
margin-top: 0.375rem;
|
|
65
|
+
color: var(--appkit-color-text-muted);
|
|
26
66
|
}
|
|
27
67
|
|
|
28
68
|
.appkit-form-field__error {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
min-width: 5rem;
|
|
12
12
|
height: 1.25rem;
|
|
13
13
|
border-radius: 0.25rem;
|
|
14
|
-
/* 🛑 `--appkit-color-
|
|
14
|
+
/* 🛑 `--appkit-color-bg` is NOT a token — 15 uses, 0 definitions,
|
|
15
15
|
and `audit-undefined-css-vars` ratchets it down. An undefined custom
|
|
16
16
|
property with no fallback makes the whole declaration invalid, so this
|
|
17
17
|
placeholder had no background at all and the grid still reflowed on
|