@mohasinac/appkit 4.59.0 → 4.60.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.
Files changed (531) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +62 -5
  3. package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +2 -2
  4. package/dist/_internal/server/features/brands/actions.js +78 -4
  5. package/dist/_internal/server/features/checkout/actions.d.ts +36 -13
  6. package/dist/_internal/server/features/checkout/actions.js +668 -183
  7. package/dist/_internal/server/features/checkout/supplier-identity.js +18 -1
  8. package/dist/_internal/server/features/gateway-events/index.d.ts +10 -0
  9. package/dist/_internal/server/features/gateway-events/index.js +10 -0
  10. package/dist/_internal/server/features/gateway-events/ingest.d.ts +127 -0
  11. package/dist/_internal/server/features/gateway-events/ingest.js +188 -0
  12. package/dist/_internal/server/features/gateway-events/redact.d.ts +66 -0
  13. package/dist/_internal/server/features/gateway-events/redact.js +151 -0
  14. package/dist/_internal/server/features/grievance/actions.d.ts +63 -0
  15. package/dist/_internal/server/features/grievance/actions.js +173 -0
  16. package/dist/_internal/server/features/grievance/index.d.ts +8 -0
  17. package/dist/_internal/server/features/grievance/index.js +8 -0
  18. package/dist/_internal/server/features/grouped/data.js +28 -3
  19. package/dist/_internal/server/features/lottery/actions.js +99 -4
  20. package/dist/_internal/server/features/order-completion/actions.d.ts +92 -0
  21. package/dist/_internal/server/features/order-completion/actions.js +336 -0
  22. package/dist/_internal/server/features/order-completion/index.d.ts +7 -0
  23. package/dist/_internal/server/features/order-completion/index.js +7 -0
  24. package/dist/_internal/server/features/orders/actions.d.ts +13 -0
  25. package/dist/_internal/server/features/orders/actions.js +56 -2
  26. package/dist/_internal/server/features/orders/adapters.js +26 -0
  27. package/dist/_internal/server/features/orders/cancellation-refund.d.ts +116 -0
  28. package/dist/_internal/server/features/orders/cancellation-refund.js +466 -0
  29. package/dist/_internal/server/features/orders/index.d.ts +2 -1
  30. package/dist/_internal/server/features/orders/index.js +1 -1
  31. package/dist/_internal/server/features/orders/service.d.ts +60 -0
  32. package/dist/_internal/server/features/orders/service.js +74 -0
  33. package/dist/_internal/server/features/payment-cases/disputes.d.ts +76 -0
  34. package/dist/_internal/server/features/payment-cases/disputes.js +241 -0
  35. package/dist/_internal/server/features/payment-cases/index.d.ts +9 -0
  36. package/dist/_internal/server/features/payment-cases/index.js +9 -0
  37. package/dist/_internal/server/features/payouts/actions.d.ts +28 -3
  38. package/dist/_internal/server/features/payouts/actions.js +84 -10
  39. package/dist/_internal/server/features/points/adjust.d.ts +61 -0
  40. package/dist/_internal/server/features/points/adjust.js +121 -0
  41. package/dist/_internal/server/features/points/award.d.ts +65 -0
  42. package/dist/_internal/server/features/points/award.js +145 -0
  43. package/dist/_internal/server/features/price-index/market.d.ts +33 -0
  44. package/dist/_internal/server/features/price-index/market.js +54 -1
  45. package/dist/_internal/server/features/products/data.js +40 -22
  46. package/dist/_internal/server/features/protection-claims/actions.d.ts +72 -0
  47. package/dist/_internal/server/features/protection-claims/actions.js +228 -0
  48. package/dist/_internal/server/features/protection-claims/index.d.ts +8 -0
  49. package/dist/_internal/server/features/protection-claims/index.js +8 -0
  50. package/dist/_internal/server/features/refunds/actions.d.ts +20 -0
  51. package/dist/_internal/server/features/refunds/actions.js +259 -17
  52. package/dist/_internal/server/features/refunds/capacity.d.ts +29 -0
  53. package/dist/_internal/server/features/refunds/capacity.js +37 -0
  54. package/dist/_internal/server/features/reviews/actions.js +3 -2
  55. package/dist/_internal/server/features/search/index-build/sources.js +20 -1
  56. package/dist/_internal/server/features/shipping/reconcile.d.ts +10 -1
  57. package/dist/_internal/server/features/shipping/reconcile.js +34 -3
  58. package/dist/_internal/server/features/shipping/reimbursement.d.ts +117 -0
  59. package/dist/_internal/server/features/shipping/reimbursement.js +223 -0
  60. package/dist/_internal/server/features/stores/tabs.d.ts +19 -4
  61. package/dist/_internal/server/features/stores/tabs.js +24 -4
  62. package/dist/_internal/server/functions/https.d.ts +31 -1
  63. package/dist/_internal/server/functions/https.js +52 -1
  64. package/dist/_internal/server/functions/scheduled.d.ts +72 -1
  65. package/dist/_internal/server/functions/scheduled.js +124 -1
  66. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +62 -16
  67. package/dist/_internal/server/jobs/core/boxRollupReconcile.d.ts +46 -0
  68. package/dist/_internal/server/jobs/core/boxRollupReconcile.js +142 -0
  69. package/dist/_internal/server/jobs/core/dailyDataCleanup.js +149 -1
  70. package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +14 -0
  71. package/dist/_internal/server/jobs/core/dailyStatusDigest.js +79 -1
  72. package/dist/_internal/server/jobs/core/index.d.ts +2 -0
  73. package/dist/_internal/server/jobs/core/index.js +2 -0
  74. package/dist/_internal/server/jobs/core/marketPriceRollup.d.ts +64 -0
  75. package/dist/_internal/server/jobs/core/marketPriceRollup.js +153 -0
  76. package/dist/_internal/server/jobs/core/obligationSweep.d.ts +36 -0
  77. package/dist/_internal/server/jobs/core/obligationSweep.js +503 -0
  78. package/dist/_internal/server/jobs/core/paymentReconcile.d.ts +79 -0
  79. package/dist/_internal/server/jobs/core/paymentReconcile.js +614 -0
  80. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +34 -0
  81. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +35 -4
  82. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.d.ts +2 -0
  83. package/dist/_internal/server/jobs/handlers/boxRollupReconcile.js +15 -0
  84. package/dist/_internal/server/jobs/handlers/countersReconcileNow.d.ts +65 -0
  85. package/dist/_internal/server/jobs/handlers/countersReconcileNow.js +89 -0
  86. package/dist/_internal/server/jobs/handlers/index.d.ts +5 -0
  87. package/dist/_internal/server/jobs/handlers/index.js +5 -0
  88. package/dist/_internal/server/jobs/handlers/marketPriceRollup.d.ts +2 -0
  89. package/dist/_internal/server/jobs/handlers/marketPriceRollup.js +2 -0
  90. package/dist/_internal/server/jobs/handlers/obligationSweep.d.ts +2 -0
  91. package/dist/_internal/server/jobs/handlers/obligationSweep.js +15 -0
  92. package/dist/_internal/server/jobs/handlers/onShipmentAllocationSync.js +30 -1
  93. package/dist/_internal/server/jobs/handlers/paymentReconcile.d.ts +2 -0
  94. package/dist/_internal/server/jobs/handlers/paymentReconcile.js +6 -0
  95. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  96. package/dist/_internal/shared/actions/action-registry.js +71 -0
  97. package/dist/_internal/shared/checkout/coupon-discount.d.ts +73 -0
  98. package/dist/_internal/shared/checkout/coupon-discount.js +103 -0
  99. package/dist/_internal/shared/checkout/lanes.d.ts +42 -0
  100. package/dist/_internal/shared/checkout/lanes.js +46 -0
  101. package/dist/_internal/shared/checkout/order-math.d.ts +149 -1
  102. package/dist/_internal/shared/checkout/order-math.js +251 -3
  103. package/dist/_internal/shared/checkout/refundable-base.d.ts +116 -0
  104. package/dist/_internal/shared/checkout/refundable-base.js +122 -0
  105. package/dist/_internal/shared/features/auctions/config.d.ts +14 -1
  106. package/dist/_internal/shared/features/auctions/config.js +30 -1
  107. package/dist/_internal/shared/features/brands/schema.d.ts +42 -0
  108. package/dist/_internal/shared/features/brands/schema.js +18 -0
  109. package/dist/_internal/shared/features/orders/refund-copy.d.ts +22 -0
  110. package/dist/_internal/shared/features/orders/refund-copy.js +34 -0
  111. package/dist/_internal/shared/features/print/label-profiles.d.ts +198 -0
  112. package/dist/_internal/shared/features/print/label-profiles.js +350 -0
  113. package/dist/_internal/shared/features/products/to-product-item.js +33 -5
  114. package/dist/_internal/shared/fees/calculator.d.ts +31 -2
  115. package/dist/_internal/shared/fees/calculator.js +103 -5
  116. package/dist/_internal/shared/fees/india-states.d.ts +195 -0
  117. package/dist/_internal/shared/fees/india-states.js +190 -0
  118. package/dist/_internal/shared/fees/payout-hold.d.ts +80 -0
  119. package/dist/_internal/shared/fees/payout-hold.js +74 -0
  120. package/dist/_internal/shared/obligations/deadlines.d.ts +94 -0
  121. package/dist/_internal/shared/obligations/deadlines.js +155 -0
  122. package/dist/_internal/shared/shipping/quote.d.ts +96 -0
  123. package/dist/_internal/shared/shipping/quote.js +67 -0
  124. package/dist/_internal/shared/time/business-days.d.ts +91 -0
  125. package/dist/_internal/shared/time/business-days.js +185 -0
  126. package/dist/cli/index.js +0 -2
  127. package/dist/client.d.ts +9 -4
  128. package/dist/client.js +26 -3
  129. package/dist/configs/tailwind.d.ts +0 -12
  130. package/dist/configs/tailwind.js +28 -15
  131. package/dist/constants/api-endpoints.d.ts +51 -9
  132. package/dist/constants/api-endpoints.js +23 -7
  133. package/dist/constants/index.d.ts +1 -1
  134. package/dist/constants/index.js +1 -1
  135. package/dist/contracts/index.d.ts +1 -1
  136. package/dist/contracts/payment.d.ts +131 -0
  137. package/dist/features/about/components/AboutView.js +1 -1
  138. package/dist/features/about/components/DeveloperView.js +5 -2
  139. package/dist/features/about/components/FAQPageView.js +2 -1
  140. package/dist/features/about/components/FeesView.js +2 -1
  141. package/dist/features/about/components/HelpPageView.js +2 -1
  142. package/dist/features/about/components/HowAuctionsWorkView.js +2 -1
  143. package/dist/features/about/components/HowCheckoutWorksView.js +2 -1
  144. package/dist/features/about/components/HowEmiWorksView.js +2 -1
  145. package/dist/features/about/components/HowOffersWorkView.js +2 -1
  146. package/dist/features/about/components/HowOrdersWorkView.js +2 -1
  147. package/dist/features/about/components/HowPayoutsWorkView.js +2 -1
  148. package/dist/features/about/components/HowPreOrdersWorkView.js +2 -1
  149. package/dist/features/about/components/HowReviewsWorkView.js +2 -1
  150. package/dist/features/about/components/PolicyPageView.js +2 -1
  151. package/dist/features/about/components/ProseHero.d.ts +73 -0
  152. package/dist/features/about/components/ProseHero.js +18 -0
  153. package/dist/features/about/components/SecurityPrivacyView.js +2 -1
  154. package/dist/features/about/components/ShippingPolicyView.js +2 -1
  155. package/dist/features/about/components/TrackOrderView.js +2 -1
  156. package/dist/features/about/components/UnauthorizedView.js +1 -1
  157. package/dist/features/about/index.d.ts +2 -0
  158. package/dist/features/about/index.js +5 -0
  159. package/dist/features/account/actions/address-actions.d.ts +26 -2
  160. package/dist/features/account/actions/address-actions.js +25 -1
  161. package/dist/features/account/components/BuyerShoppingGuideView.js +1 -1
  162. package/dist/features/account/components/NotificationPreferencesPanel.js +1 -1
  163. package/dist/features/account/components/UserOrdersView.js +17 -0
  164. package/dist/features/account/components/UserSidebar.js +1 -1
  165. package/dist/features/account/hooks/useNotifications.js +29 -0
  166. package/dist/features/admin/actions/admin-coupon-actions.js +36 -0
  167. package/dist/features/admin/components/AdminBeysView.js +2 -2
  168. package/dist/features/admin/components/AdminBlogEditorView.js +2 -2
  169. package/dist/features/admin/components/AdminBrandEditorView.js +32 -2
  170. package/dist/features/admin/components/AdminBundleEditorView.js +1 -1
  171. package/dist/features/admin/components/AdminCarouselEditorView.js +1 -1
  172. package/dist/features/admin/components/AdminCategoriesView.js +1 -1
  173. package/dist/features/admin/components/AdminCategoryEditorView.js +73 -17
  174. package/dist/features/admin/components/AdminContactEditorView.js +1 -1
  175. package/dist/features/admin/components/AdminCouponEditorView.js +26 -1
  176. package/dist/features/admin/components/AdminFaqEditorView.js +1 -1
  177. package/dist/features/admin/components/AdminFaqsView.js +2 -2
  178. package/dist/features/admin/components/AdminGatewayEventsView.d.ts +54 -0
  179. package/dist/features/admin/components/AdminGatewayEventsView.js +209 -0
  180. package/dist/features/admin/components/AdminGuideHubView.js +1 -1
  181. package/dist/features/admin/components/AdminMoneyCasesView.d.ts +60 -0
  182. package/dist/features/admin/components/AdminMoneyCasesView.js +287 -0
  183. package/dist/features/admin/components/AdminPartsView.js +2 -2
  184. package/dist/features/admin/components/AdminProductsView.js +75 -4
  185. package/dist/features/admin/components/AdminSidebar.js +2 -2
  186. package/dist/features/admin/components/AdminSiteSettingsView.js +65 -7
  187. package/dist/features/admin/components/AdminSublistingCategoriesView.js +2 -0
  188. package/dist/features/admin/components/AdminSupportTicketDetailView.js +1 -1
  189. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
  190. package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
  191. package/dist/features/admin/components/AdminUsersView.js +72 -1
  192. package/dist/features/admin/components/AdminViewCards.d.ts +3 -1
  193. package/dist/features/admin/components/AdminViewCards.js +4 -4
  194. package/dist/features/admin/components/DataListingView.d.ts +28 -0
  195. package/dist/features/admin/components/DataListingView.js +175 -14
  196. package/dist/features/admin/components/DataTable.d.ts +12 -1
  197. package/dist/features/admin/components/DataTable.js +3 -3
  198. package/dist/features/admin/components/OwnerQuickActions.d.ts +1 -1
  199. package/dist/features/admin/components/OwnerQuickActions.js +60 -2
  200. package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +1 -1
  201. package/dist/features/admin/components/RecordOwnerQuickActions.js +61 -14
  202. package/dist/features/admin/components/analytics/AdminStatCard.d.ts +35 -1
  203. package/dist/features/admin/components/analytics/AdminStatCard.js +77 -2
  204. package/dist/features/admin/components/index.d.ts +4 -0
  205. package/dist/features/admin/components/index.js +6 -0
  206. package/dist/features/admin/constants/filter-tabs.d.ts +156 -0
  207. package/dist/features/admin/constants/filter-tabs.js +106 -0
  208. package/dist/features/admin/repository/site-settings.repository.d.ts +22 -0
  209. package/dist/features/admin/repository/site-settings.repository.js +82 -1
  210. package/dist/features/admin/schemas/admin-editor-forms.d.ts +21 -0
  211. package/dist/features/admin/schemas/admin-editor-forms.js +44 -0
  212. package/dist/features/admin/schemas/firestore.js +5 -1
  213. package/dist/features/admin/schemas/site-settings-form.js +30 -1
  214. package/dist/features/auctions/actions/bid-actions.js +13 -1
  215. package/dist/features/auctions/components/AuctionBottomActions.js +2 -2
  216. package/dist/features/auctions/components/AuctionDetailPageView.js +3 -1
  217. package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +11 -0
  218. package/dist/features/auctions/components/MarketplaceAuctionCard.js +5 -3
  219. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +8 -1
  220. package/dist/features/auctions/components/PlaceBidFormClient.js +2 -2
  221. package/dist/features/audit-log/schemas/firestore.d.ts +28 -0
  222. package/dist/features/audit-log/schemas/firestore.js +14 -0
  223. package/dist/features/auth/permissions/constants.d.ts +17 -1
  224. package/dist/features/auth/permissions/constants.js +18 -0
  225. package/dist/features/blog/components/BlogPostView.js +1 -1
  226. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
  227. package/dist/features/categories/api/[id]/description-template/route.js +107 -1
  228. package/dist/features/categories/components/BrandDetailPageView.js +2 -2
  229. package/dist/features/categories/components/BreadcrumbTrail.js +7 -1
  230. package/dist/features/categories/components/BundleDetailView.js +1 -1
  231. package/dist/features/categories/components/CategoryDetailPageView.js +2 -2
  232. package/dist/features/categories/components/CategoryForm.js +12 -1
  233. package/dist/features/categories/components/CategoryTemplatePicker.js +38 -5
  234. package/dist/features/categories/repository/market-price-index.repository.d.ts +123 -0
  235. package/dist/features/categories/repository/market-price-index.repository.js +105 -0
  236. package/dist/features/categories/repository/price-observation.repository.d.ts +166 -0
  237. package/dist/features/categories/repository/price-observation.repository.js +132 -0
  238. package/dist/features/events/components/EventSaleBanner.js +1 -1
  239. package/dist/features/events/components/EventStatusBadge.js +1 -1
  240. package/dist/features/faq/components/FAQAccordion.js +2 -1
  241. package/dist/features/faq/components/FAQCategorySidebar.js +2 -2
  242. package/dist/features/faq/components/FAQHelpfulButtons.js +4 -4
  243. package/dist/features/faq/components/RelatedFAQs.js +1 -1
  244. package/dist/features/filters/FilterFacetSection.js +1 -1
  245. package/dist/features/filters/SwitchFilter.js +1 -1
  246. package/dist/features/gateway-events/repository/gateway-events.repository.d.ts +117 -0
  247. package/dist/features/gateway-events/repository/gateway-events.repository.js +274 -0
  248. package/dist/features/gateway-events/schemas/firestore.d.ts +217 -0
  249. package/dist/features/gateway-events/schemas/firestore.js +125 -0
  250. package/dist/features/gateway-events/schemas/index.d.ts +81 -0
  251. package/dist/features/gateway-events/schemas/index.js +79 -0
  252. package/dist/features/grouped/components/GroupedListingDetailView.js +1 -1
  253. package/dist/features/homepage/components/AnnouncementBar.js +37 -1
  254. package/dist/features/homepage/components/AnnouncementBar.style.css +30 -0
  255. package/dist/features/homepage/components/BrandsSection.js +1 -1
  256. package/dist/features/homepage/components/CTABannerSection.js +1 -1
  257. package/dist/features/homepage/components/FeaturedBundlesSection.js +14 -24
  258. package/dist/features/homepage/components/HeroCarousel.js +2 -2
  259. package/dist/features/homepage/components/SocialPostCard.js +1 -1
  260. package/dist/features/inventory/components/AdminMoveLedgerView.d.ts +7 -0
  261. package/dist/features/inventory/components/AdminMoveLedgerView.js +157 -0
  262. package/dist/features/inventory/components/AdminStorageBoxesView.d.ts +11 -0
  263. package/dist/features/inventory/components/AdminStorageBoxesView.js +168 -0
  264. package/dist/features/inventory/components/ReceiveStationView.d.ts +39 -0
  265. package/dist/features/inventory/components/ReceiveStationView.js +413 -0
  266. package/dist/features/inventory/components/operator-message.d.ts +29 -0
  267. package/dist/features/inventory/components/operator-message.js +41 -0
  268. package/dist/features/inventory/index.d.ts +13 -0
  269. package/dist/features/inventory/index.js +28 -0
  270. package/dist/features/inventory/repository/inventory-movements.repository.d.ts +97 -0
  271. package/dist/features/inventory/repository/inventory-movements.repository.js +186 -0
  272. package/dist/features/inventory/repository/inventory-placements.repository.d.ts +179 -0
  273. package/dist/features/inventory/repository/inventory-placements.repository.js +345 -0
  274. package/dist/features/inventory/repository/storage-boxes.repository.d.ts +83 -0
  275. package/dist/features/inventory/repository/storage-boxes.repository.js +127 -0
  276. package/dist/features/inventory/schemas/firestore.d.ts +197 -0
  277. package/dist/features/inventory/schemas/firestore.js +159 -0
  278. package/dist/features/layout/AppLayoutShell.d.ts +12 -1
  279. package/dist/features/layout/AppLayoutShell.js +25 -12
  280. package/dist/features/layout/AutoBreadcrumbs.js +162 -3
  281. package/dist/features/layout/AutoBreadcrumbs.style.css +45 -0
  282. package/dist/features/layout/BottomNavbar.d.ts +1 -1
  283. package/dist/features/layout/BottomNavbar.js +2 -2
  284. package/dist/features/media/MediaAvatar.js +1 -1
  285. package/dist/features/media/MediaImage.d.ts +24 -4
  286. package/dist/features/media/MediaImage.js +44 -4
  287. package/dist/features/media/MediaLightbox.js +1 -1
  288. package/dist/features/media/modals/ImageCropModal.js +1 -1
  289. package/dist/features/media/modals/ImageEditor.js +1 -1
  290. package/dist/features/media/upload/MediaUploadField.js +91 -3
  291. package/dist/features/obligations/constants/policies.d.ts +92 -0
  292. package/dist/features/obligations/constants/policies.js +378 -0
  293. package/dist/features/obligations/repository/obligations.repository.d.ts +68 -0
  294. package/dist/features/obligations/repository/obligations.repository.js +158 -0
  295. package/dist/features/obligations/schemas/firestore.d.ts +160 -0
  296. package/dist/features/obligations/schemas/firestore.js +87 -0
  297. package/dist/features/orders/actions/order-actions.d.ts +43 -4
  298. package/dist/features/orders/actions/order-actions.js +60 -3
  299. package/dist/features/orders/actions/refund-actions.js +70 -10
  300. package/dist/features/orders/components/OrderCompletionPanel.d.ts +27 -0
  301. package/dist/features/orders/components/OrderCompletionPanel.js +192 -0
  302. package/dist/features/orders/components/OrdersList.js +2 -2
  303. package/dist/features/orders/components/RefundHistoryTable.js +3 -1
  304. package/dist/features/orders/components/index.d.ts +2 -0
  305. package/dist/features/orders/components/index.js +6 -0
  306. package/dist/features/orders/constants/transitions.d.ts +59 -0
  307. package/dist/features/orders/constants/transitions.js +104 -0
  308. package/dist/features/orders/repository/orders.repository.d.ts +109 -6
  309. package/dist/features/orders/repository/orders.repository.js +464 -21
  310. package/dist/features/orders/schemas/firestore.d.ts +270 -0
  311. package/dist/features/orders/schemas/firestore.js +24 -0
  312. package/dist/features/orders/schemas/index.d.ts +61 -0
  313. package/dist/features/orders/schemas/index.js +22 -0
  314. package/dist/features/orders/types/index.d.ts +79 -0
  315. package/dist/features/parts/components/PartsIndexPageView.js +8 -1
  316. package/dist/features/payment-cases/repository/payment-cases.repository.d.ts +170 -0
  317. package/dist/features/payment-cases/repository/payment-cases.repository.js +342 -0
  318. package/dist/features/payment-cases/schemas/firestore.d.ts +229 -0
  319. package/dist/features/payment-cases/schemas/firestore.js +105 -0
  320. package/dist/features/payment-cases/schemas/resolve-form.d.ts +97 -0
  321. package/dist/features/payment-cases/schemas/resolve-form.js +114 -0
  322. package/dist/features/payments/repository/payout.repository.d.ts +0 -1
  323. package/dist/features/payments/repository/payout.repository.js +0 -1
  324. package/dist/features/points/repository/points.repository.d.ts +122 -0
  325. package/dist/features/points/repository/points.repository.js +304 -1
  326. package/dist/features/points/schemas/adjust-form.d.ts +58 -0
  327. package/dist/features/points/schemas/adjust-form.js +63 -0
  328. package/dist/features/points/schemas/firestore.d.ts +108 -1
  329. package/dist/features/points/schemas/firestore.js +84 -0
  330. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
  331. package/dist/features/pre-orders/components/PreOrderBadge.js +1 -1
  332. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
  333. package/dist/features/price-index/components/PriceIndexToolView.d.ts +23 -4
  334. package/dist/features/price-index/components/PriceIndexToolView.js +71 -6
  335. package/dist/features/price-index/market-stats.d.ts +82 -0
  336. package/dist/features/price-index/market-stats.js +230 -0
  337. package/dist/features/print/components/BoxLabelPrintView.d.ts +25 -0
  338. package/dist/features/print/components/BoxLabelPrintView.js +66 -0
  339. package/dist/features/print/components/LabelProfilePicker.d.ts +13 -0
  340. package/dist/features/print/components/LabelProfilePicker.js +38 -0
  341. package/dist/features/print/components/labels.d.ts +117 -0
  342. package/dist/features/print/components/labels.js +258 -0
  343. package/dist/features/print/components/labels.style.css +46 -0
  344. package/dist/features/print/index.d.ts +6 -0
  345. package/dist/features/print/index.js +16 -0
  346. package/dist/features/products/columns/productTableColumns.js +5 -4
  347. package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
  348. package/dist/features/products/components/MarketplacePrizeDrawCard.js +6 -6
  349. package/dist/features/products/components/PrizeDrawCollage.js +1 -1
  350. package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
  351. package/dist/features/products/components/PrizeRevealModal.js +2 -2
  352. package/dist/features/products/components/ProductDetailPageView.js +18 -4
  353. package/dist/features/products/components/ProductForm.js +34 -23
  354. package/dist/features/products/components/ProductGrid.js +86 -62
  355. package/dist/features/products/constants/card-badges.d.ts +97 -0
  356. package/dist/features/products/constants/card-badges.js +100 -0
  357. package/dist/features/products/repository/products.repository.js +34 -1
  358. package/dist/features/products/schemas/firestore.d.ts +46 -3
  359. package/dist/features/products/schemas/firestore.js +21 -0
  360. package/dist/features/promotions/components/PromotionsView.js +1 -1
  361. package/dist/features/promotions/repository/claimed-coupons.repository.d.ts +32 -0
  362. package/dist/features/promotions/repository/claimed-coupons.repository.js +58 -0
  363. package/dist/features/promotions/schemas/firestore.js +30 -3
  364. package/dist/features/promotions/schemas/index.d.ts +6 -6
  365. package/dist/features/protection-claims/repository/protection-claims.repository.d.ts +54 -0
  366. package/dist/features/protection-claims/repository/protection-claims.repository.js +174 -0
  367. package/dist/features/protection-claims/schemas/firestore.d.ts +168 -0
  368. package/dist/features/protection-claims/schemas/firestore.js +130 -0
  369. package/dist/features/reviews/actions/review-actions.js +3 -2
  370. package/dist/features/reviews/components/ReviewModal.js +1 -1
  371. package/dist/features/reviews/components/ReviewsList.js +1 -1
  372. package/dist/features/reviews/schemas/firestore.d.ts +20 -1
  373. package/dist/features/scams/constants/scam-types.d.ts +2 -0
  374. package/dist/features/scams/constants/scam-types.js +18 -0
  375. package/dist/features/scams/schemas/report-form.d.ts +3 -3
  376. package/dist/features/scams/schemas/report-form.js +26 -1
  377. package/dist/features/search/components/Search.js +9 -9
  378. package/dist/features/search/components/SearchResultsClient.js +18 -3
  379. package/dist/features/search/components/SearchResultsPageView.d.ts +1 -6
  380. package/dist/features/search/components/SearchResultsPageView.js +2 -2
  381. package/dist/features/seller/actions/offer-actions.js +16 -1
  382. package/dist/features/seller/actions/seller-actions.js +14 -3
  383. package/dist/features/seller/components/CategoryInlineSelect.js +75 -11
  384. package/dist/features/seller/components/PrintCenterView.d.ts +5 -0
  385. package/dist/features/seller/components/PrintCenterView.js +41 -30
  386. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  387. package/dist/features/seller/components/SellerPayoutRequestView.js +16 -5
  388. package/dist/features/seller/components/SellerPayoutSettingsView.js +1 -1
  389. package/dist/features/seller/components/SellerProductShell.d.ts +16 -0
  390. package/dist/features/seller/components/SellerProductShell.js +123 -13
  391. package/dist/features/seller/components/SellerReviewsView.js +4 -2
  392. package/dist/features/seller/components/SellerSidebar.js +1 -1
  393. package/dist/features/seller/schemas/coupon-form.d.ts +26 -0
  394. package/dist/features/seller/schemas/coupon-form.js +27 -0
  395. package/dist/features/seller/schemas/product-form.d.ts +3 -0
  396. package/dist/features/seller/schemas/product-form.js +5 -0
  397. package/dist/features/shell/FormShell.js +2 -2
  398. package/dist/features/shell/QuickFormDrawer.js +14 -0
  399. package/dist/features/shell/SectionForm.d.ts +19 -0
  400. package/dist/features/shell/SectionForm.js +133 -9
  401. package/dist/features/shell/SectionForm.style.css +54 -0
  402. package/dist/features/shipments/components/AdminShipmentsView.js +16 -1
  403. package/dist/features/shipments/repository/shipment-items.repository.d.ts +9 -0
  404. package/dist/features/shipments/repository/shipment-items.repository.js +14 -0
  405. package/dist/features/site-settings/components/ActionPermissionsManager.js +1 -1
  406. package/dist/features/sticker-trace/components/StickerCommitPanel.js +1 -1
  407. package/dist/features/store-extensions/schemas/report-review-form.d.ts +8 -8
  408. package/dist/features/stores/components/StoreGuideHubView.js +1 -1
  409. package/dist/features/stores/components/StoreHeader.js +1 -1
  410. package/dist/features/support/schemas/firestore.d.ts +73 -2
  411. package/dist/features/support/schemas/firestore.js +59 -0
  412. package/dist/index.d.ts +16 -24
  413. package/dist/index.js +38 -47
  414. package/dist/next/ErrorBoundary.js +1 -1
  415. package/dist/next/routing/route-map.d.ts +24 -0
  416. package/dist/next/routing/route-map.js +40 -0
  417. package/dist/providers/payment-manual/index.d.ts +15 -1
  418. package/dist/providers/payment-manual/index.js +37 -0
  419. package/dist/providers/payment-phonepe/index.d.ts +14 -1
  420. package/dist/providers/payment-phonepe/index.js +36 -0
  421. package/dist/providers/payment-razorpay/index.d.ts +44 -1
  422. package/dist/providers/payment-razorpay/index.js +99 -0
  423. package/dist/providers/shipping-shiprocket/index.d.ts +18 -0
  424. package/dist/providers/shipping-shiprocket/index.js +18 -0
  425. package/dist/schemas/registry.d.ts +44 -11
  426. package/dist/server-entry.d.ts +2 -0
  427. package/dist/server-entry.js +27 -0
  428. package/dist/server.d.ts +42 -0
  429. package/dist/server.js +93 -0
  430. package/dist/styles.css +418 -149
  431. package/dist/tailwind-utilities.css +1 -1
  432. package/dist/tokens/themes/default-dark.js +15 -12
  433. package/dist/tokens/themes/default-light.js +14 -11
  434. package/dist/tokens/tokens.css +106 -23
  435. package/dist/ui/DataTable.style.css +4 -4
  436. package/dist/ui/columns/cell-renderers.d.ts +20 -0
  437. package/dist/ui/columns/cell-renderers.js +26 -1
  438. package/dist/ui/columns/index.d.ts +1 -1
  439. package/dist/ui/columns/index.js +4 -1
  440. package/dist/ui/components/Badge.style.css +1 -1
  441. package/dist/ui/components/Breadcrumb.js +19 -1
  442. package/dist/ui/components/BulkActionBar.style.css +4 -4
  443. package/dist/ui/components/Button.style.css +1 -1
  444. package/dist/ui/components/Checkbox.style.css +1 -1
  445. package/dist/ui/components/FallbackShell.js +1 -1
  446. package/dist/ui/components/Form.d.ts +14 -1
  447. package/dist/ui/components/Form.js +2 -2
  448. package/dist/ui/components/FormField.js +18 -4
  449. package/dist/ui/components/FormField.style.css +43 -3
  450. package/dist/ui/components/GatedPrice.style.css +1 -1
  451. package/dist/ui/components/IconButton.style.css +1 -1
  452. package/dist/ui/components/Input.js +22 -1
  453. package/dist/ui/components/Input.style.css +38 -22
  454. package/dist/ui/components/ListingFilterDrawer.js +1 -1
  455. package/dist/ui/components/ListingToolbar.js +1 -1
  456. package/dist/ui/components/PaginatedSelect.js +0 -0
  457. package/dist/ui/components/Radio.style.css +1 -1
  458. package/dist/ui/components/Repeater.d.ts +53 -0
  459. package/dist/ui/components/Repeater.js +7 -0
  460. package/dist/ui/components/RichTextEditor.d.ts +20 -1
  461. package/dist/ui/components/RichTextEditor.js +23 -2
  462. package/dist/ui/components/Select.style.css +7 -21
  463. package/dist/ui/components/Semantic.js +27 -3
  464. package/dist/ui/components/TagInput.style.css +4 -9
  465. package/dist/ui/components/Textarea.style.css +4 -18
  466. package/dist/ui/components/Toggle.style.css +1 -1
  467. package/dist/ui/components/Typography.d.ts +3 -3
  468. package/dist/ui/components/Typography.js +15 -15
  469. package/dist/ui/components/ViewToggle.style.css +4 -4
  470. package/dist/ui/forms/AddAnotherToggle.d.ts +16 -0
  471. package/dist/ui/forms/AddAnotherToggle.js +56 -0
  472. package/dist/ui/forms/ColorPickerField.js +15 -2
  473. package/dist/ui/forms/FieldCheckbox.js +15 -2
  474. package/dist/ui/forms/FieldInput.d.ts +22 -1
  475. package/dist/ui/forms/FieldInput.js +19 -5
  476. package/dist/ui/forms/FieldLabel.d.ts +35 -0
  477. package/dist/ui/forms/FieldLabel.js +70 -0
  478. package/dist/ui/forms/FieldSelect.d.ts +4 -1
  479. package/dist/ui/forms/FieldSelect.js +27 -5
  480. package/dist/ui/forms/FieldTextarea.d.ts +4 -1
  481. package/dist/ui/forms/FieldTextarea.js +22 -5
  482. package/dist/ui/forms/FormShell.d.ts +17 -1
  483. package/dist/ui/forms/FormShell.js +36 -2
  484. package/dist/ui/forms/FormShell.style.css +41 -33
  485. package/dist/ui/forms/index.d.ts +5 -1
  486. package/dist/ui/forms/index.js +2 -0
  487. package/dist/ui/icons/icon-registry.d.ts +1 -0
  488. package/dist/ui/icons/icon-registry.js +17 -1
  489. package/dist/utils/id-generators.d.ts +80 -0
  490. package/dist/utils/id-generators.js +93 -0
  491. package/dist/utils/search-txt-builders.d.ts +12 -0
  492. package/dist/utils/search-txt-builders.js +17 -0
  493. package/package.json +1 -1
  494. package/scripts/seed-cli.mjs +106 -5
  495. package/dist/features/loyalty/api/admin/loyalty/grant/route.d.ts +0 -12
  496. package/dist/features/loyalty/api/admin/loyalty/grant/route.js +0 -38
  497. package/dist/features/loyalty/api/balance/route.d.ts +0 -12
  498. package/dist/features/loyalty/api/balance/route.js +0 -41
  499. package/dist/features/loyalty/api/earn/route.d.ts +0 -12
  500. package/dist/features/loyalty/api/earn/route.js +0 -38
  501. package/dist/features/loyalty/api/history/route.d.ts +0 -12
  502. package/dist/features/loyalty/api/history/route.js +0 -58
  503. package/dist/features/loyalty/api/redeem/route.d.ts +0 -12
  504. package/dist/features/loyalty/api/redeem/route.js +0 -38
  505. package/dist/features/loyalty/columns/index.d.ts +0 -17
  506. package/dist/features/loyalty/columns/index.js +0 -40
  507. package/dist/features/loyalty/components/CoinsDisplay.d.ts +0 -12
  508. package/dist/features/loyalty/components/CoinsDisplay.js +0 -10
  509. package/dist/features/loyalty/components/index.d.ts +0 -1
  510. package/dist/features/loyalty/components/index.js +0 -1
  511. package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +0 -4
  512. package/dist/features/loyalty/hooks/useLoyaltyBalance.js +0 -25
  513. package/dist/features/loyalty/index.d.ts +0 -6
  514. package/dist/features/loyalty/index.js +0 -6
  515. package/dist/features/loyalty/manifest.d.ts +0 -2
  516. package/dist/features/loyalty/manifest.js +0 -16
  517. package/dist/features/loyalty/messages/en.json +0 -19
  518. package/dist/features/loyalty/repository/loyalty.repository.d.ts +0 -8
  519. package/dist/features/loyalty/repository/loyalty.repository.js +0 -22
  520. package/dist/features/loyalty/schemas/index.d.ts +0 -85
  521. package/dist/features/loyalty/schemas/index.js +0 -40
  522. package/dist/features/loyalty/server.d.ts +0 -6
  523. package/dist/features/loyalty/server.js +0 -6
  524. package/dist/features/loyalty/types/index.d.ts +0 -31
  525. package/dist/features/loyalty/types/index.js +0 -1
  526. package/dist/features/loyalty/types/loyalty-config.d.ts +0 -7
  527. package/dist/features/loyalty/types/loyalty-config.js +0 -1
  528. package/dist/features/loyalty/types/loyalty-math.d.ts +0 -9
  529. package/dist/features/loyalty/types/loyalty-math.js +0 -27
  530. package/dist/features/products/components/ProductOwnerQuickActions.d.ts +0 -11
  531. package/dist/features/products/components/ProductOwnerQuickActions.js +0 -120
@@ -24,7 +24,28 @@ export const Input = React.forwardRef(function Input({ label, error, helperText,
24
24
  .filter(Boolean)
25
25
  .join(" ");
26
26
  if (bare) {
27
- return (_jsx("input", { ...props, ref: ref, id: inputId, disabled: disabled, "aria-invalid": error ? "true" : undefined, className: inputClassName }));
27
+ /*
28
+ * 🛑 `bare` DROPPED THE LABEL, and four call sites pass one.
29
+ *
30
+ * This branch exists to render an `<input>` with no wrapper markup —
31
+ * `/admin/site`'s native colour pickers need the element bare so the
32
+ * swatch fills its box. But it also ignored `label` entirely, so
33
+ * `<Input type="color" label="Overlay color" bare />` rendered an input
34
+ * with NO accessible name while the call site plainly declared one.
35
+ * A prop accepted and silently discarded (Root Cause #51's shape), and
36
+ * it lands on exactly the page the audit measured.
37
+ *
38
+ * `aria-label` rather than a `<label>` element: adding a label here
39
+ * would reintroduce the wrapper this branch exists to avoid. Only when
40
+ * the label is a STRING — a ReactNode cannot become an attribute, and
41
+ * stringifying one would produce "[object Object]" as the field's
42
+ * accessible name, which is worse than none.
43
+ *
44
+ * A caller's own `aria-label` wins, so this fills a gap and never
45
+ * overrides an explicit choice.
46
+ */
47
+ const bareAriaLabel = props["aria-label"] ?? (typeof label === "string" ? label : undefined);
48
+ return (_jsx("input", { ...props, ref: ref, id: inputId, disabled: disabled, "aria-label": bareAriaLabel, "aria-invalid": error ? "true" : undefined, className: inputClassName }));
28
49
  }
29
50
  const adornment = rightIcon ??
30
51
  (success && !error ? (_jsx("svg", { className: CLS_INPUT_SUCCESS_ICON, viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { fillRule: "evenodd", d: "M16.704 5.29a1 1 0 010 1.42l-7.2 7.2a1 1 0 01-1.415 0l-3.2-3.2a1 1 0 111.414-1.42l2.493 2.494 6.493-6.494a1 1 0 011.415 0z", clipRule: "evenodd" }) })) : null);
@@ -1,10 +1,33 @@
1
+ /*
2
+ * ── Geometry: aligned to `.appkit-select__trigger`, not invented ───────────
3
+ *
4
+ * This measured 34px tall with a 6px radius, against a select trigger
5
+ * 40px tall with an 8px radius sitting in the same `<FormGroup>` — so a text
6
+ * field and a dropdown on one row of one form were visibly different
7
+ * controls. 34px with 14px text is also a desktop-density target on a touch
8
+ * device.
9
+ *
10
+ * `--appkit-size-input-md` is 40px and already existed; the select already
11
+ * used it, and so do `Button`, `ActionRow` and `Tabs`. `Input` and
12
+ * `Textarea` were the two that did not. So this is not a new number — it is
13
+ * the four controls that already agreed being joined by the two that did
14
+ * not, which is why it carries no judgement call about what "40" should be.
15
+ *
16
+ * Radius follows the same rule: `--appkit-radius-lg` (8px) is what the
17
+ * select already renders, and 8px is inside the 8–12px range the audit
18
+ * named. Reaching for 10px would have invented a third radius to sit beside
19
+ * two existing ones.
20
+ */
1
21
  .appkit-input {
2
22
  width: 100%;
23
+ min-height: var(--appkit-size-input-md);
3
24
  border: 1px solid var(--appkit-color-border);
4
- border-radius: 0.375rem;
5
- background: var(--appkit-color-surface);
25
+ border-radius: var(--appkit-radius-lg);
26
+ /* The token named for this control, which it did not read: the light fill
27
+ * was `surface` and the dark fill a hardcoded `rgba(30, 41, 59, 0.7)`. */
28
+ background: var(--appkit-color-surface-input);
6
29
  color: var(--appkit-color-text);
7
- padding: 0.375rem 0.625rem;
30
+ padding: 0.5rem 0.75rem;
8
31
  font-size: 0.875rem;
9
32
  line-height: 1.4;
10
33
  transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
@@ -20,16 +43,16 @@
20
43
 
21
44
  .appkit-input:focus-visible {
22
45
  outline: none;
23
- border-color: var(--appkit-color-secondary);
24
- box-shadow: 0 0 0 3px rgba(101, 196, 8, 0.25), inset 0 0 0 1px rgba(101, 196, 8, 0.15);
25
- }
26
-
27
- .dark .appkit-input {
28
- border-color: var(--appkit-color-border);
29
- background: rgba(30, 41, 59, 0.7);
30
- color: var(--appkit-color-text);
46
+ border-color: var(--appkit-color-focus-ring);
47
+ box-shadow: var(--appkit-focus-ring);
31
48
  }
32
49
 
50
+ /*
51
+ * The `.dark .appkit-input` block that stood here is gone: it set
52
+ * `border-color` and `color` to the SAME tokens the base rule already uses,
53
+ * and a hardcoded background that is now `--appkit-color-surface-input`.
54
+ * Three declarations, nothing to say.
55
+ */
33
56
  .dark .appkit-input::placeholder {
34
57
  color: var(--appkit-color-text-muted);
35
58
  }
@@ -38,29 +61,22 @@
38
61
  border-color: var(--appkit-color-slate-500);
39
62
  }
40
63
 
41
- .dark .appkit-input:focus-visible {
42
- border-color: var(--appkit-color-primary);
43
- box-shadow: 0 0 0 3px rgba(233, 30, 140, 0.25), inset 0 0 0 1px rgba(233, 30, 140, 0.15);
44
- }
45
-
46
64
  /* Error variant */
47
65
  .appkit-input--error {
48
66
  border-color: var(--appkit-color-error);
49
- background: rgba(254, 202, 202, 0.06);
67
+ background: color-mix(in srgb, var(--appkit-color-error) 6%, var(--appkit-color-surface-input));
50
68
  }
51
69
 
52
70
  .appkit-input--error:focus-visible {
53
71
  border-color: var(--appkit-color-error);
54
- box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.25), inset 0 0 0 1px rgba(248, 113, 113, 0.15);
72
+ box-shadow: var(--appkit-focus-ring-error);
55
73
  }
56
74
 
57
75
  /* Disabled state */
76
+ /* `--appkit-color-bg` inverts with the theme, so the `.dark` override that
77
+ * pinned this to `rgba(30, 41, 59, 0.4)` was saying the same thing twice. */
58
78
  .appkit-input:disabled {
59
79
  opacity: 0.55;
60
80
  cursor: not-allowed;
61
81
  background: var(--appkit-color-bg);
62
82
  }
63
-
64
- .dark .appkit-input:disabled {
65
- background: rgba(30, 41, 59, 0.4);
66
- }
@@ -5,7 +5,7 @@ import { Button } from "./Button.js";
5
5
  import { Span } from "./Typography.js";
6
6
  import { sectionBackgroundStyle } from "./Semantic.js";
7
7
  import { useHandMode } from "../../_internal/client/hand-mode/index.js";
8
- const CLS_CLEAR_BTN = "text-xs text-[var(--appkit-color-text-muted)] hover:text-error text-[var(--appkit-color-text-muted)] transition-colors min-h-0 h-auto p-0";
8
+ const CLS_CLEAR_BTN = "text-xs hover:text-error text-[var(--appkit-color-text-muted)] transition-colors min-h-0 h-auto p-0";
9
9
  export function ListingFilterDrawer({ open, onClose, onApply, onClear, activeCount, children, background, }) {
10
10
  const { hand } = useHandMode();
11
11
  if (!open)
@@ -23,7 +23,7 @@ const DEFAULT_LABELS = {
23
23
  };
24
24
  const VIEW_BTN_BASE = "p-1.5 sm:p-2 transition-colors";
25
25
  const VIEW_BTN_ACTIVE = "bg-[var(--appkit-color-primary)] text-white";
26
- const VIEW_BTN_INACTIVE = "text-[var(--appkit-color-text-muted)] hover:bg-surface-hover text-[var(--appkit-color-text-muted)]";
26
+ const VIEW_BTN_INACTIVE = "hover:bg-surface-hover text-[var(--appkit-color-text-muted)]";
27
27
  export function ListingToolbar({ filterCount = 0, onFiltersClick, searchValue = "", searchPlaceholder = "Search…", onSearchChange, onSearchCommit, onSearchKeyDown, sortValue, sortOptions, onSortChange, view = "grid", onViewChange, hideViewToggle = false, showTableView = false, onResetAll, hasActiveState = false, bulkMode = false, bulkSelectedCount = 0, bulkTotalCount = 0, onBulkSelectAll, onBulkClear, toggles, extra, labels, className = "", dismissible = true, toolbarId, collapseLabel = "Toolbar", }) {
28
28
  const l = { ...DEFAULT_LABELS, ...labels };
29
29
  const pathname = usePathname();
@@ -213,7 +213,7 @@
213
213
  }
214
214
  .appkit-radio-item__input:focus-visible {
215
215
  outline: none;
216
- box-shadow: 0 0 0 2px rgba(101, 196, 8, 0.3), 0 0 0 4px var(--appkit-color-surface);
216
+ box-shadow: var(--appkit-focus-ring-halo);
217
217
  }
218
218
  .appkit-radio-item__input:not(:disabled):hover {
219
219
  border-color: var(--appkit-color-secondary);
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A minimal add/remove repeater for a list of editable rows.
3
+ *
4
+ * ── Why this moved here ─────────────────────────────────────────────────────
5
+ *
6
+ * It lived inside `AdminCategoryEditorView` with a note on it:
7
+ *
8
+ * Deliberately NOT a new appkit primitive: three local shapes with three
9
+ * different row renderers is not yet the Rule of Three on a *component* —
10
+ * it is one container used three times with a render prop. Promote it
11
+ * when a fourth caller appears outside this file.
12
+ *
13
+ * That was right, and the brand editor is the fourth caller. Promoted on the
14
+ * condition its own author set, rather than copied — a second repeater would
15
+ * be the shape the Duplication Framework exists to stop, and the three
16
+ * existing call sites keep working unchanged because the API did not move.
17
+ *
18
+ * ── The row identity question ───────────────────────────────────────────────
19
+ *
20
+ * 🛑 `key={i}` IS THE INDEX, AND THAT IS A REAL LIMITATION, not an oversight.
21
+ * These rows have no stable id — they are literal form values a human is
22
+ * typing, created blank and filled in — so there is nothing else to key on.
23
+ * The consequence is that REMOVING a row remounts every row below it, which
24
+ * loses focus and any uncommitted IME composition in those inputs.
25
+ *
26
+ * It is tolerable here because the lists are short (`max` is 8 or fewer at
27
+ * every call site) and removal is rare compared to typing. It would not be
28
+ * tolerable on a long or reorderable list; if one appears, give the rows an
29
+ * id at creation and key on that instead of reaching for this.
30
+ */
31
+ import React from "react";
32
+ export interface RepeaterProps<T> {
33
+ rows: T[];
34
+ onChange: (next: T[]) => void;
35
+ /** Builds an empty row. Called on every "add". */
36
+ blank: () => T;
37
+ addLabel: string;
38
+ /**
39
+ * Renders one row's fields. `set` patches THAT row only — callers never
40
+ * splice the array themselves, which is what keeps the immutable update in
41
+ * one place instead of at every call site.
42
+ */
43
+ renderRow: (row: T, set: (patch: Partial<T>) => void) => React.ReactNode;
44
+ /**
45
+ * Hard cap. Required rather than optional: every one of these lists renders
46
+ * somewhere with a layout budget — category highlights sit above the FAQs
47
+ * on a public page — and "unbounded by default" is how a form becomes a way
48
+ * to break the page it feeds.
49
+ */
50
+ max: number;
51
+ }
52
+ export declare function Repeater<T>({ rows, onChange, blank, addLabel, renderRow, max, }: RepeaterProps<T>): React.JSX.Element;
53
+ export default Repeater;
@@ -0,0 +1,7 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button, Div, Stack, Text } from "../index.js";
4
+ export function Repeater({ rows, onChange, blank, addLabel, renderRow, max, }) {
5
+ return (_jsxs(Stack, { gap: "sm", children: [rows.map((row, i) => (_jsx(Div, { rounded: "lg", border: "default", padding: "sm", children: _jsxs(Stack, { gap: "xs", children: [renderRow(row, (patch) => onChange(rows.map((r, j) => (j === i ? { ...r, ...patch } : r)))), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => onChange(rows.filter((_, j) => j !== i)), children: "Remove" })] }) }, i))), rows.length < max ? (_jsx(Button, { variant: "secondary", size: "sm", onClick: () => onChange([...rows, blank()]), children: addLabel })) : (_jsxs(Text, { size: "xs", color: "muted", children: ["Maximum of ", max, " reached."] }))] }));
6
+ }
7
+ export default Repeater;
@@ -6,5 +6,24 @@ export interface RichTextEditorProps {
6
6
  className?: string;
7
7
  minHeightClassName?: string;
8
8
  placeholder?: string;
9
+ /**
10
+ * The `id` of the element labelling this editor.
11
+ *
12
+ * 🛑 `aria-labelledby`, NOT `htmlFor` ON THE LABEL — and that is a hard
13
+ * constraint rather than a preference. `htmlFor` only associates with a
14
+ * LABELABLE element (`input`, `select`, `textarea`, `button`, `output`,
15
+ * `meter`, `progress`), and this editor is a `contenteditable` div, which is
16
+ * none of them. A `<Label htmlFor>` pointing here associates with nothing:
17
+ * the label is visibly present, the editor has no accessible name, and an
18
+ * accessibility pass reports an unlabelled field while a human sees a
19
+ * perfectly labelled one.
20
+ *
21
+ * This prop did not exist, so EVERY rich-text field in the app was
22
+ * unlabelled — `CategoryForm` rendered a bare `<Label>` with no `htmlFor` at
23
+ * all, which is the honest version of the same gap.
24
+ */
25
+ ariaLabelledBy?: string;
26
+ /** Use when there is no visible label to point at. */
27
+ ariaLabel?: string;
9
28
  }
10
- export declare function RichTextEditor({ value, onChange, disabled, className, minHeightClassName, placeholder, }: RichTextEditorProps): React.JSX.Element;
29
+ export declare function RichTextEditor({ value, onChange, disabled, className, minHeightClassName, placeholder, ariaLabelledBy, ariaLabel, }: RichTextEditorProps): React.JSX.Element;
@@ -53,7 +53,7 @@ function sanitizeRichTextHtml(html) {
53
53
  sanitizeChildren(template.content);
54
54
  return template.innerHTML;
55
55
  }
56
- export function RichTextEditor({ value, onChange, disabled = false, className = "", minHeightClassName = "min-h-[180px]", placeholder = "Write formatted content...", }) {
56
+ export function RichTextEditor({ value, onChange, disabled = false, className = "", minHeightClassName = "min-h-[180px]", placeholder = "Write formatted content...", ariaLabelledBy, ariaLabel, }) {
57
57
  const editorRef = useRef(null);
58
58
  const emitChange = () => {
59
59
  if (!editorRef.current)
@@ -120,5 +120,26 @@ export function RichTextEditor({ value, onChange, disabled = false, className =
120
120
  editor.innerHTML = safeValue;
121
121
  }
122
122
  }, [value]);
123
- return (_jsxs("div", { className: `appkit-rich-text-editor rounded-lg border border-zinc-200 bg-[var(--appkit-color-surface)] border-[var(--appkit-color-border)] bg-[var(--appkit-color-surface)] ${className}`, "data-section": "richtexteditor-div-582", children: [_jsx("div", { className: "appkit-rich-text-editor__toolbar flex flex-wrap gap-1 border-b p-2 border-[var(--appkit-color-border)]", "data-section": "richtexteditor-div-583", children: toolbarActions.map((action) => (_jsx("button", { type: "button", title: action.title, onClick: action.run, disabled: disabled, className: "appkit-rich-text-editor__btn rounded px-2 py-1 text-xs font-medium transition hover:bg-surface-hover disabled:cursor-not-allowed disabled:opacity-50 text-[var(--appkit-color-text-muted)]", children: action.label }, action.title))) }), _jsx("div", { ref: editorRef, role: "textbox", "aria-label": "Rich text editor", contentEditable: !disabled, suppressContentEditableWarning: true, "data-placeholder": placeholder, onInput: emitChange, onBlur: emitChange, className: `prose max-w-none p-3 focus:outline-none ${minHeightClassName} ${disabled ? "cursor-not-allowed opacity-70" : ""}` })] }));
123
+ return (_jsxs("div", { className: `appkit-rich-text-editor rounded-lg border border-zinc-200 bg-[var(--appkit-color-surface)] border-[var(--appkit-color-border)] bg-[var(--appkit-color-surface)] ${className}`, "data-section": "richtexteditor-div-582", children: [_jsx("div", { className: "appkit-rich-text-editor__toolbar flex flex-wrap gap-1 border-b p-2 border-[var(--appkit-color-border)]", "data-section": "richtexteditor-div-583", children: toolbarActions.map((action) => (_jsx("button", { type: "button", title: action.title, onClick: action.run, disabled: disabled, className: "appkit-rich-text-editor__btn rounded px-2 py-1 text-xs font-medium transition hover:bg-surface-hover disabled:cursor-not-allowed disabled:opacity-50 text-[var(--appkit-color-text-muted)]", children: action.label }, action.title))) }), _jsx("div", { ref: editorRef,
124
+ /*
125
+ * 🛑 `role` and `aria-label` USED TO BE DECLARED HERE TOO, hardcoded
126
+ * to "Rich text editor" — and when the labelling props were added
127
+ * below, that made two of each on one element (`TS17001: JSX elements
128
+ * cannot have multiple attributes with the same name`). Removed here
129
+ * rather than there, because the hardcoded name was the weaker of the
130
+ * two: every rich-text field in the app announced itself as "Rich
131
+ * text editor", which says what the WIDGET is and never which FIELD
132
+ * it is — on the category editor that is the one describing the
133
+ * category, and the user could not tell.
134
+ */
135
+ contentEditable: !disabled, suppressContentEditableWarning: true,
136
+ /*
137
+ * 🛑 `role="textbox"` AND `aria-multiline` ARE REQUIRED FOR THE NAME TO
138
+ * BE ANNOUNCED. A bare `contenteditable` div has no role, and
139
+ * `aria-labelledby` on a roleless generic element is not reliably
140
+ * exposed — the name attaches to something the user is never told is
141
+ * editable. The role is what makes it a form control to assistive
142
+ * technology, and only then does the label mean anything.
143
+ */
144
+ role: "textbox", "aria-multiline": "true", "aria-labelledby": ariaLabelledBy, "aria-label": ariaLabelledBy ? undefined : ariaLabel, "aria-disabled": disabled || undefined, "data-placeholder": placeholder, onInput: emitChange, onBlur: emitChange, className: `prose max-w-none p-3 focus:outline-none ${minHeightClassName} ${disabled ? "cursor-not-allowed opacity-70" : ""}` })] }));
124
145
  }
@@ -17,21 +17,15 @@
17
17
  display: flex;
18
18
  align-items: center;
19
19
  justify-content: space-between;
20
- border-radius: 0.5rem;
20
+ border-radius: var(--appkit-radius-lg);
21
21
  border: 1px solid var(--appkit-color-border);
22
- background: var(--appkit-color-surface);
22
+ background: var(--appkit-color-surface-input);
23
23
  color: var(--appkit-color-text);
24
24
  padding: 0.5rem 0.75rem;
25
25
  font-size: 0.875rem;
26
26
  transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
27
27
  }
28
28
 
29
- .dark .appkit-select__trigger {
30
- border-color: var(--appkit-color-border);
31
- background: rgba(30, 41, 59, 0.7);
32
- color: var(--appkit-color-text);
33
- }
34
-
35
29
  .appkit-select__trigger--enabled:hover:not(:focus-visible) {
36
30
  border-color: var(--appkit-color-zinc-400);
37
31
  }
@@ -42,24 +36,19 @@
42
36
 
43
37
  .appkit-select__trigger--default:focus-visible {
44
38
  outline: none;
45
- border-color: var(--appkit-color-secondary);
46
- box-shadow: 0 0 0 3px rgba(101, 196, 8, 0.25), inset 0 0 0 1px rgba(101, 196, 8, 0.15);
47
- }
48
-
49
- .dark .appkit-select__trigger--default:focus-visible {
50
- border-color: var(--appkit-color-primary);
51
- box-shadow: 0 0 0 3px rgba(233, 30, 140, 0.25), inset 0 0 0 1px rgba(233, 30, 140, 0.15);
39
+ border-color: var(--appkit-color-focus-ring);
40
+ box-shadow: var(--appkit-focus-ring);
52
41
  }
53
42
 
54
43
  .appkit-select__trigger--error {
55
44
  border-color: var(--appkit-color-error);
56
- background: rgba(254, 202, 202, 0.06);
45
+ background: color-mix(in srgb, var(--appkit-color-error) 6%, var(--appkit-color-surface-input));
57
46
  }
58
47
 
59
48
  .appkit-select__trigger--error:focus-visible {
60
49
  outline: none;
61
50
  border-color: var(--appkit-color-error);
62
- box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.25), inset 0 0 0 1px rgba(248, 113, 113, 0.15);
51
+ box-shadow: var(--appkit-focus-ring-error);
63
52
  }
64
53
 
65
54
  .appkit-select__trigger--disabled {
@@ -68,9 +57,6 @@
68
57
  background: var(--appkit-color-bg);
69
58
  }
70
59
 
71
- .dark .appkit-select__trigger--disabled {
72
- background: rgba(30, 41, 59, 0.4);
73
- }
74
60
 
75
61
  .appkit-select__trigger--enabled {
76
62
  cursor: pointer;
@@ -174,7 +160,7 @@
174
160
  }
175
161
 
176
162
  .dark .appkit-select__option--selected {
177
- background: rgba(233, 30, 140, 0.15);
163
+ background: color-mix(in srgb, var(--appkit-color-primary) 15%, transparent);
178
164
  color: var(--appkit-color-primary-300);
179
165
  }
180
166
 
@@ -287,7 +287,7 @@ const TR_BORDER_MAP = {
287
287
  none: "",
288
288
  default: "border-b border-[var(--appkit-color-border)]",
289
289
  subtle: "border-b border-[var(--appkit-color-border-subtle)]",
290
- strong: "border-b border-[var(--appkit-color-border-strong)]",
290
+ strong: "border-b border-[var(--appkit-color-border)]",
291
291
  };
292
292
  const TR_SURFACE_MAP = {
293
293
  none: "",
@@ -304,6 +304,30 @@ export function Tr({ hover = false, border, surface, className = "", children, .
304
304
  className,
305
305
  ].filter(Boolean).join(" "), ...props, children: children }));
306
306
  }
307
+ /**
308
+ * 🛑 A MAP, because `text-${align}` was a class Tailwind never saw.
309
+ *
310
+ * `Th` and `Td` both built their alignment as `align ? \`text-${align}\` : ""`.
311
+ * Tailwind's content scanner reads source as PLAIN TEXT, so an interpolated
312
+ * class is one it never generates — and these only worked because OTHER files
313
+ * happen to write `text-left`, `text-center` and `text-right` literally.
314
+ * Measured in `dist/tailwind-utilities.css`: all three present, so nothing is
315
+ * broken today.
316
+ *
317
+ * They worked BY ACCIDENT. Delete the last literal `text-right` anywhere in
318
+ * the codebase and every right-aligned table cell silently loses its
319
+ * alignment, with these two files looking untouched and correct. Root Cause
320
+ * #67 is this failure mode, and a fourth `CellAlign` value — `justify`, say —
321
+ * would be dead on arrival: `text-justify` is NOT in the compiled output.
322
+ *
323
+ * A `Record<CellAlign, string>` makes the literals visible to the scanner and
324
+ * makes a new union member a compile error rather than a silent no-op.
325
+ */
326
+ const CELL_ALIGN_MAP = {
327
+ left: "text-left",
328
+ center: "text-center",
329
+ right: "text-right",
330
+ };
307
331
  const CELL_PADDING_MAP = {
308
332
  none: "",
309
333
  xs: "px-2 py-1",
@@ -370,7 +394,7 @@ const CELL_WEIGHT_MAP = {
370
394
  export function Th({ align, size, weight, padding, paddingX, paddingY, paddingSide, color, className = "", children, ...props }) {
371
395
  return (_jsx("th", { className: [
372
396
  "appkit-th",
373
- align ? `text-${align}` : "",
397
+ align ? CELL_ALIGN_MAP[align] : "",
374
398
  size ? CELL_SIZE_MAP[size] : "",
375
399
  weight ? CELL_WEIGHT_MAP[weight] : "",
376
400
  padding ? CELL_PADDING_MAP[padding] : "",
@@ -384,7 +408,7 @@ export function Th({ align, size, weight, padding, paddingX, paddingY, paddingSi
384
408
  export function Td({ align, size, weight, padding, paddingX, paddingY, paddingSide, color, className = "", children, ...props }) {
385
409
  return (_jsx("td", { className: [
386
410
  "appkit-td",
387
- align ? `text-${align}` : "",
411
+ align ? CELL_ALIGN_MAP[align] : "",
388
412
  size ? CELL_SIZE_MAP[size] : "",
389
413
  weight ? CELL_WEIGHT_MAP[weight] : "",
390
414
  padding ? CELL_PADDING_MAP[padding] : "",
@@ -26,8 +26,8 @@
26
26
  }
27
27
 
28
28
  .appkit-tag-input__field:focus-within {
29
- border-color: var(--appkit-color-secondary-600);
30
- box-shadow: 0 0 0 2px rgba(80, 156, 2, 0.2);
29
+ border-color: var(--appkit-color-focus-ring);
30
+ box-shadow: var(--appkit-focus-ring-compact);
31
31
  }
32
32
 
33
33
  .appkit-tag-input__field--disabled {
@@ -40,7 +40,7 @@
40
40
  align-items: center;
41
41
  gap: 0.25rem;
42
42
  border-radius: 9999px;
43
- background: rgba(80, 156, 2, 0.1);
43
+ background: color-mix(in srgb, var(--appkit-color-secondary) 10%, transparent);
44
44
  padding: 0.125rem 0.5rem;
45
45
  font-size: 0.75rem;
46
46
  font-weight: 500;
@@ -90,13 +90,8 @@
90
90
  background: var(--appkit-color-surface);
91
91
  }
92
92
 
93
- .dark .appkit-tag-input__field:focus-within {
94
- border-color: var(--appkit-color-primary);
95
- box-shadow: 0 0 0 2px rgba(233, 30, 140, 0.2);
96
- }
97
-
98
93
  .dark .appkit-tag-input__tag {
99
- background: rgba(233, 30, 140, 0.15);
94
+ background: color-mix(in srgb, var(--appkit-color-primary) 15%, transparent);
100
95
  color: var(--appkit-color-primary-300);
101
96
  }
102
97
 
@@ -1,8 +1,8 @@
1
1
  .appkit-textarea {
2
2
  width: 100%;
3
3
  border: 1px solid var(--appkit-color-border);
4
- border-radius: 0.375rem;
5
- background: var(--appkit-color-surface);
4
+ border-radius: var(--appkit-radius-lg);
5
+ background: var(--appkit-color-surface-input);
6
6
  color: var(--appkit-color-text);
7
7
  padding: 0.5rem 0.625rem;
8
8
  font-size: 0.875rem;
@@ -22,8 +22,8 @@
22
22
 
23
23
  .appkit-textarea:focus-visible {
24
24
  outline: none;
25
- border-color: var(--appkit-color-secondary);
26
- box-shadow: 0 0 0 3px rgba(101, 196, 8, 0.25), inset 0 0 0 1px rgba(101, 196, 8, 0.15);
25
+ border-color: var(--appkit-color-focus-ring);
26
+ box-shadow: var(--appkit-focus-ring);
27
27
  }
28
28
 
29
29
  .appkit-textarea:disabled {
@@ -33,12 +33,6 @@
33
33
  resize: none;
34
34
  }
35
35
 
36
- .dark .appkit-textarea {
37
- border-color: var(--appkit-color-border);
38
- background: rgba(30, 41, 59, 0.7);
39
- color: var(--appkit-color-text);
40
- }
41
-
42
36
  .dark .appkit-textarea::placeholder {
43
37
  color: var(--appkit-color-text-muted);
44
38
  }
@@ -47,11 +41,3 @@
47
41
  border-color: var(--appkit-color-slate-500);
48
42
  }
49
43
 
50
- .dark .appkit-textarea:focus-visible {
51
- border-color: var(--appkit-color-primary);
52
- box-shadow: 0 0 0 3px rgba(233, 30, 140, 0.25), inset 0 0 0 1px rgba(233, 30, 140, 0.15);
53
- }
54
-
55
- .dark .appkit-textarea:disabled {
56
- background: rgba(30, 41, 59, 0.4);
57
- }
@@ -21,7 +21,7 @@
21
21
 
22
22
  .appkit-toggle__track:focus-visible {
23
23
  outline: none;
24
- box-shadow: 0 0 0 2px rgba(101, 196, 8, 0.3), 0 0 0 4px var(--appkit-color-surface);
24
+ box-shadow: var(--appkit-focus-ring-halo);
25
25
  }
26
26
 
27
27
  .appkit-toggle__track--off {
@@ -19,9 +19,9 @@ declare const TYPOGRAPHY: {
19
19
  readonly "3xl": "appkit-text--3xl";
20
20
  readonly "4xl": "appkit-text--4xl";
21
21
  readonly "5xl": "appkit-text--5xl";
22
- readonly "6xl": "text-6xl";
23
- readonly "7xl": "text-7xl";
24
- readonly "8xl": "text-8xl";
22
+ readonly "6xl": "text-[length:var(--appkit-text-6xl)]";
23
+ readonly "7xl": "text-[length:var(--appkit-text-7xl)]";
24
+ readonly "8xl": "text-[length:var(--appkit-text-8xl)]";
25
25
  };
26
26
  readonly textWeight: {
27
27
  readonly light: "appkit-font--light";
@@ -21,9 +21,9 @@ const TYPOGRAPHY = {
21
21
  "3xl": "appkit-text--3xl",
22
22
  "4xl": "appkit-text--4xl",
23
23
  "5xl": "appkit-text--5xl",
24
- "6xl": "text-6xl",
25
- "7xl": "text-7xl",
26
- "8xl": "text-8xl",
24
+ "6xl": "text-[length:var(--appkit-text-6xl)]",
25
+ "7xl": "text-[length:var(--appkit-text-7xl)]",
26
+ "8xl": "text-[length:var(--appkit-text-8xl)]",
27
27
  },
28
28
  textWeight: {
29
29
  light: "appkit-font--light",
@@ -103,9 +103,9 @@ const RESPONSIVE_TEXT_SIZE_CLASS = {
103
103
  "3xl": "sm:text-[length:var(--appkit-text-3xl)]",
104
104
  "4xl": "sm:text-[length:var(--appkit-text-4xl)]",
105
105
  "5xl": "sm:text-[length:var(--appkit-text-5xl)]",
106
- "6xl": "sm:text-6xl",
107
- "7xl": "sm:text-7xl",
108
- "8xl": "sm:text-8xl",
106
+ "6xl": "sm:text-[length:var(--appkit-text-6xl)]",
107
+ "7xl": "sm:text-[length:var(--appkit-text-7xl)]",
108
+ "8xl": "sm:text-[length:var(--appkit-text-8xl)]",
109
109
  },
110
110
  "md:": {
111
111
  xs: "md:text-[length:var(--appkit-text-xs)]",
@@ -117,9 +117,9 @@ const RESPONSIVE_TEXT_SIZE_CLASS = {
117
117
  "3xl": "md:text-[length:var(--appkit-text-3xl)]",
118
118
  "4xl": "md:text-[length:var(--appkit-text-4xl)]",
119
119
  "5xl": "md:text-[length:var(--appkit-text-5xl)]",
120
- "6xl": "md:text-6xl",
121
- "7xl": "md:text-7xl",
122
- "8xl": "md:text-8xl",
120
+ "6xl": "md:text-[length:var(--appkit-text-6xl)]",
121
+ "7xl": "md:text-[length:var(--appkit-text-7xl)]",
122
+ "8xl": "md:text-[length:var(--appkit-text-8xl)]",
123
123
  },
124
124
  "lg:": {
125
125
  xs: "lg:text-[length:var(--appkit-text-xs)]",
@@ -131,9 +131,9 @@ const RESPONSIVE_TEXT_SIZE_CLASS = {
131
131
  "3xl": "lg:text-[length:var(--appkit-text-3xl)]",
132
132
  "4xl": "lg:text-[length:var(--appkit-text-4xl)]",
133
133
  "5xl": "lg:text-[length:var(--appkit-text-5xl)]",
134
- "6xl": "lg:text-6xl",
135
- "7xl": "lg:text-7xl",
136
- "8xl": "lg:text-8xl",
134
+ "6xl": "lg:text-[length:var(--appkit-text-6xl)]",
135
+ "7xl": "lg:text-[length:var(--appkit-text-7xl)]",
136
+ "8xl": "lg:text-[length:var(--appkit-text-8xl)]",
137
137
  },
138
138
  "xl:": {
139
139
  xs: "xl:text-[length:var(--appkit-text-xs)]",
@@ -145,9 +145,9 @@ const RESPONSIVE_TEXT_SIZE_CLASS = {
145
145
  "3xl": "xl:text-[length:var(--appkit-text-3xl)]",
146
146
  "4xl": "xl:text-[length:var(--appkit-text-4xl)]",
147
147
  "5xl": "xl:text-[length:var(--appkit-text-5xl)]",
148
- "6xl": "xl:text-6xl",
149
- "7xl": "xl:text-7xl",
150
- "8xl": "xl:text-8xl",
148
+ "6xl": "xl:text-[length:var(--appkit-text-6xl)]",
149
+ "7xl": "xl:text-[length:var(--appkit-text-7xl)]",
150
+ "8xl": "xl:text-[length:var(--appkit-text-8xl)]",
151
151
  },
152
152
  };
153
153
  function responsiveSizeClass(prefix, size) {
@@ -15,8 +15,8 @@
15
15
 
16
16
  .appkit-view-toggle__button--active {
17
17
  color: var(--appkit-color-secondary-600);
18
- background: rgba(80, 156, 2, 0.08);
19
- border-color: rgba(80, 156, 2, 0.3);
18
+ background: color-mix(in srgb, var(--appkit-color-secondary) 8%, transparent);
19
+ border-color: color-mix(in srgb, var(--appkit-color-secondary) 30%, transparent);
20
20
  }
21
21
 
22
22
  .appkit-view-toggle__button--inactive {
@@ -36,8 +36,8 @@
36
36
 
37
37
  .dark .appkit-view-toggle__button--active {
38
38
  color: var(--appkit-color-primary);
39
- background: rgba(233, 30, 140, 0.14);
40
- border-color: rgba(233, 30, 140, 0.35);
39
+ background: color-mix(in srgb, var(--appkit-color-primary) 14%, transparent);
40
+ border-color: color-mix(in srgb, var(--appkit-color-primary) 35%, transparent);
41
41
  }
42
42
 
43
43
  .dark .appkit-view-toggle__button--inactive {
@@ -0,0 +1,16 @@
1
+ export interface AddAnotherToggleProps {
2
+ /** What is being created, for the label: "listing" → "Create & add another listing". */
3
+ noun?: string;
4
+ /** Hidden while editing an existing record — see the note below. */
5
+ isCreate?: boolean;
6
+ }
7
+ export declare function AddAnotherToggle({ noun, isCreate, }: AddAnotherToggleProps): import("react").JSX.Element | null;
8
+ /**
9
+ * The submit button's label, given the toggle.
10
+ *
11
+ * 🛑 A SEPARATE HELPER BECAUSE THE LABEL MUST CHANGE. A button that says
12
+ * "Create listing" and then does not navigate has lied about what it did, and
13
+ * the user's next move is to press it again — which creates a duplicate. The
14
+ * label is the only thing telling them the destination changed.
15
+ */
16
+ export declare function addAnotherSubmitLabel(base: string, addAnother: boolean): string;