@mohasinac/appkit 4.14.0 → 4.16.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 (206) hide show
  1. package/dist/_internal/server/features/auctions/actions.js +2 -2
  2. package/dist/_internal/server/features/cart/service.d.ts +3 -3
  3. package/dist/_internal/server/features/checkout/actions.js +19 -0
  4. package/dist/_internal/server/features/checkout/source-context.d.ts +5 -0
  5. package/dist/_internal/server/features/checkout/source-context.js +157 -0
  6. package/dist/_internal/server/features/offers/adapters.d.ts +103 -0
  7. package/dist/_internal/server/features/offers/adapters.js +88 -0
  8. package/dist/_internal/server/features/offers/index.d.ts +2 -0
  9. package/dist/_internal/server/features/offers/index.js +1 -0
  10. package/dist/_internal/server/features/orders/adapters.js +24 -0
  11. package/dist/_internal/server/jobs/core/offerExpiry.js +10 -10
  12. package/dist/_internal/shared/actions/action-registry.d.ts +9 -2
  13. package/dist/_internal/shared/actions/action-registry.js +458 -7
  14. package/dist/_internal/shared/features/auctions/schema.d.ts +14 -2
  15. package/dist/_internal/shared/features/auctions/schema.js +13 -1
  16. package/dist/_internal/shared/features/blog/schema.d.ts +4 -4
  17. package/dist/_internal/shared/features/cart/schema.d.ts +25 -20
  18. package/dist/_internal/shared/features/cart/schema.js +15 -0
  19. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +22 -22
  20. package/dist/_internal/shared/features/orders/schema.d.ts +4 -4
  21. package/dist/_internal/shared/features/products/schema.d.ts +27 -27
  22. package/dist/_internal/shared/features/promotions/schema.d.ts +4 -4
  23. package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
  24. package/dist/_internal/shared/history/history.d.ts +22 -0
  25. package/dist/_internal/shared/history/history.js +41 -1
  26. package/dist/client.d.ts +13 -2
  27. package/dist/client.js +20 -2
  28. package/dist/constants/field-names.d.ts +8 -6
  29. package/dist/constants/field-names.js +48 -6
  30. package/dist/contracts/extend.d.ts +29 -0
  31. package/dist/contracts/extend.js +20 -0
  32. package/dist/contracts/index.d.ts +2 -1
  33. package/dist/contracts/index.js +2 -0
  34. package/dist/features/account/components/UserBidsView.js +12 -4
  35. package/dist/features/account/components/UserReturnsView.d.ts +3 -0
  36. package/dist/features/account/components/UserReturnsView.js +17 -1
  37. package/dist/features/admin/components/AdminAuditLogView.js +1 -0
  38. package/dist/features/admin/components/AdminBidsView.js +15 -2
  39. package/dist/features/admin/components/AdminBlogEditorView.js +65 -33
  40. package/dist/features/admin/components/AdminFeatureEditorView.js +35 -6
  41. package/dist/features/admin/components/AdminNavEditorView.js +15 -5
  42. package/dist/features/admin/components/AdminNewsletterView.js +18 -2
  43. package/dist/features/admin/components/AdminOffersView.js +62 -18
  44. package/dist/features/admin/components/AdminPaymentMethodsView.js +24 -4
  45. package/dist/features/admin/components/AdminScammerEditorView.d.ts +2 -1
  46. package/dist/features/admin/components/AdminScammerEditorView.js +3 -13
  47. package/dist/features/admin/components/AdminScammersView.js +3 -8
  48. package/dist/features/admin/components/AdminSectionsView.js +32 -23
  49. package/dist/features/admin/components/AdminSessionsView.js +17 -2
  50. package/dist/features/admin/components/AdminViewCards.js +24 -17
  51. package/dist/features/admin/components/DataListingView.js +15 -1
  52. package/dist/features/admin/components/DataTable.js +7 -17
  53. package/dist/features/admin/components/ViewAuditLogEntryModal.js +1 -0
  54. package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +4 -2
  55. package/dist/features/admin/components/sections/adminSectionsTypes.js +45 -27
  56. package/dist/features/admin/constants/filter-tabs.d.ts +3 -0
  57. package/dist/features/admin/constants/filter-tabs.js +1 -0
  58. package/dist/features/admin/schemas/homepage-section-form.d.ts +22 -0
  59. package/dist/features/admin/schemas/homepage-section-form.js +68 -0
  60. package/dist/features/admin/schemas/nav-item-form.d.ts +74 -0
  61. package/dist/features/admin/schemas/nav-item-form.js +72 -0
  62. package/dist/features/auctions/components/AuctionBidsTable.d.ts +10 -1
  63. package/dist/features/auctions/components/AuctionBidsTable.js +22 -4
  64. package/dist/features/auctions/components/bid-detail-fields.d.ts +29 -0
  65. package/dist/features/auctions/components/bid-detail-fields.js +103 -0
  66. package/dist/features/auctions/schemas/index.d.ts +14 -14
  67. package/dist/features/audit-log/schemas/firestore.d.ts +14 -0
  68. package/dist/features/audit-log/schemas/firestore.js +7 -0
  69. package/dist/features/auth/schemas/index.d.ts +2 -2
  70. package/dist/features/blog/actions/blog-actions.d.ts +7 -7
  71. package/dist/features/blog/schemas/blog-form.d.ts +80 -0
  72. package/dist/features/blog/schemas/blog-form.js +100 -0
  73. package/dist/features/blog/schemas/index.d.ts +10 -10
  74. package/dist/features/cart/schemas/index.d.ts +3 -3
  75. package/dist/features/catalogue/schemas/validation.d.ts +12 -12
  76. package/dist/features/categories/schemas/index.d.ts +16 -16
  77. package/dist/features/collections/schemas/index.d.ts +8 -8
  78. package/dist/features/events/components/AdminEventEditorView.js +32 -54
  79. package/dist/features/events/components/AdminEventEntriesView.js +22 -3
  80. package/dist/features/events/schemas/event-form.d.ts +113 -0
  81. package/dist/features/events/schemas/event-form.js +82 -0
  82. package/dist/features/events/schemas/index.d.ts +2 -2
  83. package/dist/features/faq/actions/faq-actions.d.ts +6 -6
  84. package/dist/features/faq/schemas/index.d.ts +6 -6
  85. package/dist/features/grouped/schemas/grouped-listing-form.d.ts +101 -0
  86. package/dist/features/grouped/schemas/grouped-listing-form.js +89 -0
  87. package/dist/features/grouped/schemas/index.d.ts +4 -4
  88. package/dist/features/homepage/actions/homepage-section-actions.d.ts +11 -3
  89. package/dist/features/homepage/actions/homepage-section-actions.js +33 -1
  90. package/dist/features/homepage/schemas/index.d.ts +71 -40
  91. package/dist/features/homepage/schemas/index.js +24 -0
  92. package/dist/features/messages/schemas/index.d.ts +2 -2
  93. package/dist/features/orders/components/OrderStatusTimeline.d.ts +5 -1
  94. package/dist/features/orders/components/OrderStatusTimeline.js +39 -20
  95. package/dist/features/orders/repository/orders.repository.js +5 -0
  96. package/dist/features/orders/schemas/firestore.d.ts +36 -1
  97. package/dist/features/orders/schemas/index.d.ts +24 -24
  98. package/dist/features/orders/types/index.d.ts +35 -7
  99. package/dist/features/pre-orders/schemas/index.d.ts +4 -4
  100. package/dist/features/products/components/GroupSettingsPanel.js +5 -1
  101. package/dist/features/products/schemas/index.d.ts +38 -38
  102. package/dist/features/products/schemas/product-features.validators.d.ts +75 -2
  103. package/dist/features/products/schemas/product-features.validators.js +63 -0
  104. package/dist/features/promotions/schemas/index.d.ts +14 -14
  105. package/dist/features/reviews/schemas/index.d.ts +14 -14
  106. package/dist/features/scams/constants/scammer-status-display.d.ts +28 -0
  107. package/dist/features/scams/constants/scammer-status-display.js +79 -0
  108. package/dist/features/scams/schemas/index.d.ts +2 -2
  109. package/dist/features/search/schemas/index.d.ts +2 -2
  110. package/dist/features/seller/actions/offer-actions.js +32 -2
  111. package/dist/features/seller/components/OfferPhaseTimeline.d.ts +59 -0
  112. package/dist/features/seller/components/OfferPhaseTimeline.js +107 -0
  113. package/dist/features/seller/components/SellerBidsView.js +11 -4
  114. package/dist/features/seller/components/SellerCouponEditorView.js +17 -17
  115. package/dist/features/seller/components/SellerOffersView.js +2 -1
  116. package/dist/features/seller/components/SellerPayoutSettingsView.js +38 -14
  117. package/dist/features/seller/repository/offer.repository.d.ts +69 -8
  118. package/dist/features/seller/repository/offer.repository.js +127 -23
  119. package/dist/features/seller/schemas/coupon-form.d.ts +72 -0
  120. package/dist/features/seller/schemas/coupon-form.js +116 -0
  121. package/dist/features/seller/schemas/firestore.d.ts +56 -2
  122. package/dist/features/seller/schemas/firestore.js +27 -0
  123. package/dist/features/seller/schemas/index.d.ts +2 -2
  124. package/dist/features/seller/schemas/offer-forms.d.ts +21 -0
  125. package/dist/features/seller/schemas/offer-forms.js +21 -0
  126. package/dist/features/shell/build-sections.d.ts +63 -0
  127. package/dist/features/shell/build-sections.js +207 -0
  128. package/dist/features/shell/field-ui-meta.d.ts +115 -0
  129. package/dist/features/shell/field-ui-meta.js +324 -0
  130. package/dist/features/shell/index.d.ts +4 -0
  131. package/dist/features/shell/index.js +2 -0
  132. package/dist/features/shipments/schemas/validation.d.ts +22 -22
  133. package/dist/features/status-history/components/StatusTimeline.d.ts +74 -0
  134. package/dist/features/status-history/components/StatusTimeline.js +46 -0
  135. package/dist/features/status-history/index.d.ts +11 -0
  136. package/dist/features/status-history/index.js +10 -0
  137. package/dist/features/store-extensions/components/ReviewDecisionModal.d.ts +27 -0
  138. package/dist/features/store-extensions/components/ReviewDecisionModal.js +82 -0
  139. package/dist/features/store-extensions/index.d.ts +12 -0
  140. package/dist/features/store-extensions/index.js +12 -0
  141. package/dist/features/store-extensions/schemas/admin-notification-form.d.ts +36 -0
  142. package/dist/features/store-extensions/schemas/admin-notification-form.js +114 -0
  143. package/dist/features/store-extensions/schemas/analytics-forms.d.ts +57 -0
  144. package/dist/features/store-extensions/schemas/analytics-forms.js +158 -0
  145. package/dist/features/store-extensions/schemas/custom-role-form.d.ts +85 -0
  146. package/dist/features/store-extensions/schemas/custom-role-form.js +118 -0
  147. package/dist/features/store-extensions/schemas/firestore.d.ts +21 -1
  148. package/dist/features/store-extensions/schemas/firestore.js +60 -0
  149. package/dist/features/store-extensions/schemas/google-config-form.d.ts +53 -0
  150. package/dist/features/store-extensions/schemas/google-config-form.js +105 -0
  151. package/dist/features/store-extensions/schemas/item-request-create-form.d.ts +28 -0
  152. package/dist/features/store-extensions/schemas/item-request-create-form.js +80 -0
  153. package/dist/features/store-extensions/schemas/listing-template-form.d.ts +78 -0
  154. package/dist/features/store-extensions/schemas/listing-template-form.js +87 -0
  155. package/dist/features/store-extensions/schemas/moderation-review-form.d.ts +49 -0
  156. package/dist/features/store-extensions/schemas/moderation-review-form.js +101 -0
  157. package/dist/features/store-extensions/schemas/payout-method-form.d.ts +153 -0
  158. package/dist/features/store-extensions/schemas/payout-method-form.js +155 -0
  159. package/dist/features/store-extensions/schemas/report-create-form.d.ts +25 -0
  160. package/dist/features/store-extensions/schemas/report-create-form.js +79 -0
  161. package/dist/features/store-extensions/schemas/report-review-form.d.ts +47 -0
  162. package/dist/features/store-extensions/schemas/report-review-form.js +111 -0
  163. package/dist/features/store-extensions/schemas/shipping-config-form.d.ts +148 -0
  164. package/dist/features/store-extensions/schemas/shipping-config-form.js +104 -0
  165. package/dist/features/store-extensions/schemas/store-category-form.d.ts +54 -0
  166. package/dist/features/store-extensions/schemas/store-category-form.js +73 -0
  167. package/dist/features/stores/schemas/index.d.ts +4 -4
  168. package/dist/features/support/schemas/index.d.ts +4 -4
  169. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +350 -0
  170. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
  171. package/dist/index.d.ts +12 -2
  172. package/dist/index.js +12 -2
  173. package/dist/next/routing/route-map.d.ts +16 -2
  174. package/dist/next/routing/route-map.js +9 -2
  175. package/dist/schemas/firestore-value.d.ts +8 -0
  176. package/dist/schemas/firestore-value.js +44 -0
  177. package/dist/schemas/index.d.ts +1 -1
  178. package/dist/schemas/index.js +1 -1
  179. package/dist/schemas/registry.d.ts +734 -101
  180. package/dist/schemas/registry.js +64 -1
  181. package/dist/seed/bids-seed-data.js +30 -0
  182. package/dist/seed/offers-seed-data.js +212 -7
  183. package/dist/seed/orders-seed-data.js +336 -1
  184. package/dist/seed/products-auctions-seed-data.js +41 -0
  185. package/dist/server.d.ts +2 -0
  186. package/dist/server.js +5 -0
  187. package/dist/styles.css +1 -1
  188. package/dist/tailwind-utilities.css +1 -1
  189. package/dist/ui/DataTable.js +4 -2
  190. package/dist/ui/columns/build-columns.d.ts +6 -1
  191. package/dist/ui/columns/build-columns.js +53 -0
  192. package/dist/ui/columns/cell-renderers.d.ts +68 -0
  193. package/dist/ui/columns/cell-renderers.js +111 -0
  194. package/dist/ui/columns/column-renderers.d.ts +6 -1
  195. package/dist/ui/columns/column-renderers.js +6 -1
  196. package/dist/ui/columns/index.d.ts +2 -1
  197. package/dist/ui/columns/index.js +5 -1
  198. package/dist/ui/components/Button.js +27 -2
  199. package/dist/ui/components/RecordDetailModal.d.ts +10 -1
  200. package/dist/ui/components/RecordDetailModal.js +2 -2
  201. package/dist/ui/icons/icon-registry.d.ts +65 -0
  202. package/dist/ui/icons/icon-registry.js +115 -0
  203. package/package.json +2 -1
  204. package/scripts/node-esm-loader.mjs +65 -0
  205. package/scripts/seed-cli-loader.mjs +6 -49
  206. package/scripts/seed-cli.mjs +1 -1
@@ -65,7 +65,54 @@ export function actionLabel(def) {
65
65
  // flows can reference today.
66
66
  export const ACTIONS = {
67
67
  PRODUCT: {
68
+ /*
69
+ * The buyer-facing verbs below shipped long ago; the four CRUD entries
70
+ * here did not exist at all, so every "New listing" / "Edit" / "Delete"
71
+ * control in the seller and admin product surfaces was an inline action
72
+ * object outside the registry (Rule #7).
73
+ */
74
+ view: {
75
+ iconKey: "view",
76
+ id: "product.view",
77
+ label: "View",
78
+ ariaLabel: "View listing",
79
+ description: "Open the listing's public detail page.",
80
+ kind: "secondary",
81
+ },
82
+ create: {
83
+ iconKey: "create",
84
+ id: "product.create",
85
+ label: "New listing",
86
+ ariaLabel: "Create a new listing",
87
+ description: "Create a listing of any type.",
88
+ kind: "primary",
89
+ permissions: ["admin", "seller"],
90
+ },
91
+ edit: {
92
+ iconKey: "edit",
93
+ id: "product.edit",
94
+ label: "Edit",
95
+ ariaLabel: "Edit listing",
96
+ description: "Edit this listing.",
97
+ kind: "secondary",
98
+ permissions: ["admin", "seller"],
99
+ },
100
+ delete: {
101
+ iconKey: "delete",
102
+ id: "product.delete",
103
+ label: "Delete",
104
+ ariaLabel: "Delete listing",
105
+ description: "Permanently delete this listing.",
106
+ kind: "danger",
107
+ permissions: ["admin", "seller"],
108
+ confirmation: {
109
+ title: "Delete this listing?",
110
+ body: "This cannot be undone. Orders that already reference it keep their own copy of the title, price and image, so past orders stay readable.",
111
+ confirmLabel: "Delete listing",
112
+ },
113
+ },
68
114
  "add-to-cart": {
115
+ iconKey: "cart",
69
116
  id: "product.add-to-cart",
70
117
  label: "Add to cart",
71
118
  ariaLabel: "Add to cart",
@@ -74,6 +121,7 @@ export const ACTIONS = {
74
121
  listingTypeScope: ["standard", "pre-order", "prize-draw", "digital-code", "live"],
75
122
  },
76
123
  "buy-now": {
124
+ iconKey: "cart",
77
125
  id: "product.buy-now",
78
126
  label: "Buy now",
79
127
  description: "Skip cart and head straight to checkout for this listing.",
@@ -81,6 +129,7 @@ export const ACTIONS = {
81
129
  listingTypeScope: ["standard", "pre-order"],
82
130
  },
83
131
  "add-to-wishlist": {
132
+ iconKey: "wishlist",
84
133
  id: "product.add-to-wishlist",
85
134
  label: "Save",
86
135
  ariaLabel: "Add to wishlist",
@@ -88,6 +137,7 @@ export const ACTIONS = {
88
137
  kind: "ghost",
89
138
  },
90
139
  "remove-from-wishlist": {
140
+ iconKey: "wishlist",
91
141
  id: "product.remove-from-wishlist",
92
142
  label: "Saved",
93
143
  ariaLabel: "Remove from wishlist",
@@ -95,6 +145,7 @@ export const ACTIONS = {
95
145
  kind: "ghost",
96
146
  },
97
147
  "sync-wishlist-item": {
148
+ iconKey: "retry",
98
149
  id: "product.sync-wishlist-item",
99
150
  label: "Sync",
100
151
  ariaLabel: "Sync this wishlist item with the latest product data",
@@ -102,6 +153,7 @@ export const ACTIONS = {
102
153
  kind: "ghost",
103
154
  },
104
155
  "share": {
156
+ iconKey: "share",
105
157
  id: "product.share",
106
158
  label: "Share",
107
159
  ariaLabel: "Share this listing",
@@ -109,6 +161,7 @@ export const ACTIONS = {
109
161
  kind: "ghost",
110
162
  },
111
163
  "compare": {
164
+ iconKey: "analytics",
112
165
  id: "product.compare",
113
166
  label: "Compare",
114
167
  ariaLabel: "Add to comparison",
@@ -116,6 +169,7 @@ export const ACTIONS = {
116
169
  kind: "ghost",
117
170
  },
118
171
  "make-offer": {
172
+ iconKey: "message",
119
173
  id: "product.make-offer",
120
174
  label: "Make an offer",
121
175
  description: "Propose a price to the seller for a classified listing.",
@@ -125,6 +179,7 @@ export const ACTIONS = {
125
179
  },
126
180
  AUCTION: {
127
181
  "place-bid": {
182
+ iconKey: "bid",
128
183
  id: "auction.place-bid",
129
184
  label: "Place bid",
130
185
  description: "Submit a bid on an auction listing.",
@@ -132,6 +187,7 @@ export const ACTIONS = {
132
187
  listingTypeScope: ["auction"],
133
188
  },
134
189
  "buy-it-now": {
190
+ iconKey: "cart",
135
191
  id: "auction.buy-it-now",
136
192
  label: "Buy It Now",
137
193
  description: "Claim the listing at the buy-now price (SB-UNI-H). Offered while the auction is unsold, before its end date, and while the buy-now price still beats the standing bid. Places a bid at that price plus a 1h locked cart line — the auction stays live until the buyer pays.",
@@ -139,6 +195,7 @@ export const ACTIONS = {
139
195
  listingTypeScope: ["auction"],
140
196
  },
141
197
  "watch": {
198
+ iconKey: "view",
142
199
  id: "auction.watch",
143
200
  label: "Watch auction",
144
201
  ariaLabel: "Watch this auction",
@@ -147,6 +204,7 @@ export const ACTIONS = {
147
204
  listingTypeScope: ["auction"],
148
205
  },
149
206
  "unwatch": {
207
+ iconKey: "hide",
150
208
  id: "auction.unwatch",
151
209
  label: "Watching",
152
210
  ariaLabel: "Stop watching this auction",
@@ -157,6 +215,7 @@ export const ACTIONS = {
157
215
  },
158
216
  PRE_ORDER: {
159
217
  "add-to-cart": {
218
+ iconKey: "cart",
160
219
  id: "pre-order.add-to-cart",
161
220
  label: "Add to cart",
162
221
  description: "Add a pre-order listing to the cart for checkout.",
@@ -164,6 +223,7 @@ export const ACTIONS = {
164
223
  listingTypeScope: ["pre-order"],
165
224
  },
166
225
  "reserve-now": {
226
+ iconKey: "cart",
167
227
  id: "pre-order.reserve-now",
168
228
  label: "Reserve now",
169
229
  description: "Lock in a pre-order reservation for this listing.",
@@ -171,6 +231,7 @@ export const ACTIONS = {
171
231
  listingTypeScope: ["pre-order"],
172
232
  },
173
233
  "cancel-reservation": {
234
+ iconKey: "cancel",
174
235
  id: "pre-order.cancel-reservation",
175
236
  label: "Cancel reservation",
176
237
  description: "Cancel the buyer's pre-order reservation.",
@@ -186,6 +247,7 @@ export const ACTIONS = {
186
247
  },
187
248
  PRIZE_DRAW: {
188
249
  "buy-now": {
250
+ iconKey: "cart",
189
251
  id: "prize-draw.buy-now",
190
252
  label: "Buy now",
191
253
  description: "Purchase a prize-draw entry directly (buyout — skips cart, goes to checkout).",
@@ -193,6 +255,7 @@ export const ACTIONS = {
193
255
  listingTypeScope: ["prize-draw"],
194
256
  },
195
257
  "enter-draw": {
258
+ iconKey: "confirm",
196
259
  id: "prize-draw.enter-draw",
197
260
  label: "Enter draw",
198
261
  description: "Purchase an entry into the prize draw.",
@@ -200,6 +263,7 @@ export const ACTIONS = {
200
263
  listingTypeScope: ["prize-draw"],
201
264
  },
202
265
  "reveal-code": {
266
+ iconKey: "view",
203
267
  id: "prize-draw.reveal-code",
204
268
  label: "Reveal code",
205
269
  description: "Reveal the buyer's prize-draw redemption code.",
@@ -209,6 +273,7 @@ export const ACTIONS = {
209
273
  },
210
274
  CLASSIFIED: {
211
275
  "contact-seller": {
276
+ iconKey: "message",
212
277
  id: "classified.contact-seller",
213
278
  label: "Contact seller",
214
279
  description: "Open a conversations thread with the seller — classified flow (SB-UNI-M).",
@@ -218,6 +283,7 @@ export const ACTIONS = {
218
283
  },
219
284
  DIGITAL_CODE: {
220
285
  "claim-code": {
286
+ iconKey: "confirm",
221
287
  id: "digital-code.claim-code",
222
288
  label: "Claim code",
223
289
  description: "Purchase and immediately reveal a digital code.",
@@ -227,6 +293,7 @@ export const ACTIONS = {
227
293
  },
228
294
  LIVE: {
229
295
  "inquire": {
296
+ iconKey: "message",
230
297
  id: "live.inquire",
231
298
  label: "Inquire",
232
299
  description: "Open a conversation with the seller about a live-item listing.",
@@ -236,6 +303,7 @@ export const ACTIONS = {
236
303
  },
237
304
  BUNDLE: {
238
305
  "buy-now": {
306
+ iconKey: "cart",
239
307
  id: "bundle.buy-now",
240
308
  label: "Buy now",
241
309
  description: "Purchase a bundle directly (buyout — skips cart, goes to checkout).",
@@ -243,12 +311,198 @@ export const ACTIONS = {
243
311
  categoryTypeScope: ["bundle"],
244
312
  },
245
313
  },
246
- GROUP: {},
247
- CATEGORY: {},
248
- BRAND: {},
249
- SUBLISTING: {},
314
+ /*
315
+ * These four buckets were literally `{}` for months while their editors
316
+ * shipped and worked — every CRUD control on a category, brand, grouped
317
+ * listing or sub-listing was therefore an inline action object, which is
318
+ * exactly what Rule #7 exists to prevent.
319
+ *
320
+ * Every destructive entry carries a `confirmation`, without which the action
321
+ * fires immediately and irreversibly.
322
+ */
323
+ GROUP: {
324
+ view: {
325
+ iconKey: "view",
326
+ id: "group.view",
327
+ label: "View",
328
+ ariaLabel: "View grouped listing",
329
+ description: "Open the grouped listing detail page.",
330
+ kind: "secondary",
331
+ },
332
+ create: {
333
+ iconKey: "create",
334
+ id: "group.create",
335
+ label: "New grouped listing",
336
+ ariaLabel: "Create a new grouped listing",
337
+ description: "Create a new grouped listing.",
338
+ kind: "primary",
339
+ permissions: ["admin"],
340
+ },
341
+ edit: {
342
+ iconKey: "edit",
343
+ id: "group.edit",
344
+ label: "Edit",
345
+ ariaLabel: "Edit grouped listing",
346
+ description: "Edit this grouped listing.",
347
+ kind: "secondary",
348
+ permissions: ["admin"],
349
+ },
350
+ delete: {
351
+ iconKey: "delete",
352
+ id: "group.delete",
353
+ label: "Delete",
354
+ ariaLabel: "Delete grouped listing",
355
+ description: "Permanently delete this grouped listing.",
356
+ kind: "danger",
357
+ permissions: ["admin"],
358
+ confirmation: {
359
+ title: "Delete this grouped listing?",
360
+ body: "This cannot be undone. Member listings are not deleted — only the group that ties them together.",
361
+ confirmLabel: "Delete",
362
+ },
363
+ },
364
+ },
365
+ CATEGORY: {
366
+ view: {
367
+ iconKey: "view",
368
+ id: "category.view",
369
+ label: "View",
370
+ ariaLabel: "View category",
371
+ description: "Open the category detail page.",
372
+ kind: "secondary",
373
+ categoryTypeScope: ["category"],
374
+ },
375
+ create: {
376
+ iconKey: "create",
377
+ id: "category.create",
378
+ label: "New category",
379
+ ariaLabel: "Create a new category",
380
+ description: "Create a new category.",
381
+ kind: "primary",
382
+ permissions: ["admin"],
383
+ categoryTypeScope: ["category"],
384
+ },
385
+ edit: {
386
+ iconKey: "edit",
387
+ id: "category.edit",
388
+ label: "Edit",
389
+ ariaLabel: "Edit category",
390
+ description: "Edit this category.",
391
+ kind: "secondary",
392
+ permissions: ["admin"],
393
+ categoryTypeScope: ["category"],
394
+ },
395
+ delete: {
396
+ iconKey: "delete",
397
+ id: "category.delete",
398
+ label: "Delete",
399
+ ariaLabel: "Delete category",
400
+ description: "Permanently delete this category.",
401
+ kind: "danger",
402
+ permissions: ["admin"],
403
+ confirmation: {
404
+ title: "Delete this category?",
405
+ body: "This cannot be undone. Listings filed under it are not deleted, but they will no longer appear on this category page.",
406
+ confirmLabel: "Delete",
407
+ },
408
+ categoryTypeScope: ["category"],
409
+ },
410
+ },
411
+ BRAND: {
412
+ view: {
413
+ iconKey: "view",
414
+ id: "brand.view",
415
+ label: "View",
416
+ ariaLabel: "View brand",
417
+ description: "Open the brand detail page.",
418
+ kind: "secondary",
419
+ categoryTypeScope: ["brand"],
420
+ },
421
+ create: {
422
+ iconKey: "create",
423
+ id: "brand.create",
424
+ label: "New brand",
425
+ ariaLabel: "Create a new brand",
426
+ description: "Create a new brand.",
427
+ kind: "primary",
428
+ permissions: ["admin"],
429
+ categoryTypeScope: ["brand"],
430
+ },
431
+ edit: {
432
+ iconKey: "edit",
433
+ id: "brand.edit",
434
+ label: "Edit",
435
+ ariaLabel: "Edit brand",
436
+ description: "Edit this brand.",
437
+ kind: "secondary",
438
+ permissions: ["admin"],
439
+ categoryTypeScope: ["brand"],
440
+ },
441
+ delete: {
442
+ iconKey: "delete",
443
+ id: "brand.delete",
444
+ label: "Delete",
445
+ ariaLabel: "Delete brand",
446
+ description: "Permanently delete this brand.",
447
+ kind: "danger",
448
+ permissions: ["admin"],
449
+ confirmation: {
450
+ title: "Delete this brand?",
451
+ body: "This cannot be undone. Products keep their `brand` string, so they will be orphaned from every brand page until re-filed.",
452
+ confirmLabel: "Delete",
453
+ },
454
+ categoryTypeScope: ["brand"],
455
+ },
456
+ },
457
+ SUBLISTING: {
458
+ view: {
459
+ iconKey: "view",
460
+ id: "sublisting.view",
461
+ label: "View",
462
+ ariaLabel: "View sub-listing",
463
+ description: "Open the sub-listing detail page.",
464
+ kind: "secondary",
465
+ categoryTypeScope: ["sublisting"],
466
+ },
467
+ create: {
468
+ iconKey: "create",
469
+ id: "sublisting.create",
470
+ label: "New sub-listing",
471
+ ariaLabel: "Create a new sub-listing",
472
+ description: "Create a new sub-listing.",
473
+ kind: "primary",
474
+ permissions: ["admin"],
475
+ categoryTypeScope: ["sublisting"],
476
+ },
477
+ edit: {
478
+ iconKey: "edit",
479
+ id: "sublisting.edit",
480
+ label: "Edit",
481
+ ariaLabel: "Edit sub-listing",
482
+ description: "Edit this sub-listing.",
483
+ kind: "secondary",
484
+ permissions: ["admin"],
485
+ categoryTypeScope: ["sublisting"],
486
+ },
487
+ delete: {
488
+ iconKey: "delete",
489
+ id: "sublisting.delete",
490
+ label: "Delete",
491
+ ariaLabel: "Delete sub-listing",
492
+ description: "Permanently delete this sub-listing.",
493
+ kind: "danger",
494
+ permissions: ["admin"],
495
+ confirmation: {
496
+ title: "Delete this sub-listing?",
497
+ body: "This cannot be undone.",
498
+ confirmLabel: "Delete",
499
+ },
500
+ categoryTypeScope: ["sublisting"],
501
+ },
502
+ },
250
503
  STORE: {
251
504
  "follow": {
505
+ iconKey: "wishlist",
252
506
  id: "store.follow",
253
507
  label: "Follow",
254
508
  ariaLabel: "Follow this store",
@@ -256,6 +510,7 @@ export const ACTIONS = {
256
510
  kind: "secondary",
257
511
  },
258
512
  "unfollow": {
513
+ iconKey: "wishlist",
259
514
  id: "store.unfollow",
260
515
  label: "Following",
261
516
  ariaLabel: "Unfollow this store",
@@ -263,6 +518,7 @@ export const ACTIONS = {
263
518
  kind: "ghost",
264
519
  },
265
520
  "view-all": {
521
+ iconKey: "view",
266
522
  id: "store.view-all",
267
523
  label: "View all",
268
524
  ariaLabel: "View all listings from this store",
@@ -271,6 +527,7 @@ export const ACTIONS = {
271
527
  },
272
528
  // ── Offer management ─────────────────────────────────────────────────
273
529
  "accept-offer": {
530
+ iconKey: "approve",
274
531
  id: "store.accept-offer",
275
532
  label: "Accept",
276
533
  ariaLabel: "Accept this offer",
@@ -279,6 +536,7 @@ export const ACTIONS = {
279
536
  permissions: ["seller", "admin"],
280
537
  },
281
538
  "reject-offer": {
539
+ iconKey: "reject",
282
540
  id: "store.reject-offer",
283
541
  label: "Reject",
284
542
  ariaLabel: "Reject this offer",
@@ -293,6 +551,7 @@ export const ACTIONS = {
293
551
  },
294
552
  },
295
553
  "counter-offer": {
554
+ iconKey: "reply",
296
555
  id: "store.counter-offer",
297
556
  label: "Counter",
298
557
  ariaLabel: "Counter this offer",
@@ -302,6 +561,7 @@ export const ACTIONS = {
302
561
  },
303
562
  // ── Payout view ──────────────────────────────────────────────────────
304
563
  "view-payout": {
564
+ iconKey: "view",
305
565
  id: "store.view-payout",
306
566
  label: "View Details",
307
567
  ariaLabel: "View payout details",
@@ -310,6 +570,7 @@ export const ACTIONS = {
310
570
  permissions: ["seller", "admin"],
311
571
  },
312
572
  "export-payout": {
573
+ iconKey: "export",
313
574
  id: "store.export-payout",
314
575
  label: "Export",
315
576
  ariaLabel: "Export payout details",
@@ -318,6 +579,7 @@ export const ACTIONS = {
318
579
  permissions: ["seller", "admin"],
319
580
  },
320
581
  "set-payout-reminder": {
582
+ iconKey: "settings",
321
583
  id: "store.set-payout-reminder",
322
584
  label: "Remind Me",
323
585
  ariaLabel: "Toggle a follow-up reminder on this payout",
@@ -327,6 +589,7 @@ export const ACTIONS = {
327
589
  },
328
590
  // ── Review management ───────────────────────────────────────────────
329
591
  "reply-review": {
592
+ iconKey: "reply",
330
593
  id: "store.reply-review",
331
594
  label: "Reply",
332
595
  ariaLabel: "Reply to this review",
@@ -335,6 +598,7 @@ export const ACTIONS = {
335
598
  permissions: ["seller", "admin"],
336
599
  },
337
600
  "contest-review": {
601
+ iconKey: "report",
338
602
  id: "store.contest-review",
339
603
  label: "Contest",
340
604
  ariaLabel: "Contest this review",
@@ -343,6 +607,7 @@ export const ACTIONS = {
343
607
  permissions: ["seller", "admin"],
344
608
  },
345
609
  "buyer-feedback": {
610
+ iconKey: "message",
346
611
  id: "store.buyer-feedback",
347
612
  label: "Feedback",
348
613
  ariaLabel: "Send feedback to buyer",
@@ -352,6 +617,7 @@ export const ACTIONS = {
352
617
  },
353
618
  // ── WhatsApp integration ────────────────────────────────────────────
354
619
  "whatsapp-connect": {
620
+ iconKey: "link",
355
621
  id: "store.whatsapp-connect",
356
622
  label: "Save & Connect",
357
623
  ariaLabel: "Save WhatsApp credentials and connect",
@@ -360,6 +626,7 @@ export const ACTIONS = {
360
626
  permissions: ["seller", "admin"],
361
627
  },
362
628
  "whatsapp-catalog-sync": {
629
+ iconKey: "retry",
363
630
  id: "store.whatsapp-catalog-sync",
364
631
  label: "Push to WhatsApp",
365
632
  ariaLabel: "Sync products to WhatsApp catalog",
@@ -368,6 +635,7 @@ export const ACTIONS = {
368
635
  permissions: ["seller", "admin"],
369
636
  },
370
637
  "whatsapp-catalog-import": {
638
+ iconKey: "upload",
371
639
  id: "store.whatsapp-catalog-import",
372
640
  label: "Import from WhatsApp",
373
641
  ariaLabel: "Import products from WhatsApp catalog",
@@ -377,6 +645,7 @@ export const ACTIONS = {
377
645
  },
378
646
  // ── Google Reviews integration ──────────────────────────────────────
379
647
  "google-reviews-sync": {
648
+ iconKey: "retry",
380
649
  id: "store.google-reviews-sync",
381
650
  label: "Sync now",
382
651
  ariaLabel: "Sync Google Business reviews",
@@ -385,6 +654,7 @@ export const ACTIONS = {
385
654
  permissions: ["seller", "admin"],
386
655
  },
387
656
  "save-google-settings": {
657
+ iconKey: "save",
388
658
  id: "store.save-google-settings",
389
659
  label: "Save Settings",
390
660
  ariaLabel: "Save Google Business settings",
@@ -394,6 +664,7 @@ export const ACTIONS = {
394
664
  },
395
665
  // ── Refresh ─────────────────────────────────────────────────────────
396
666
  "refresh-offers": {
667
+ iconKey: "retry",
397
668
  id: "store.refresh-offers",
398
669
  label: "Refresh",
399
670
  ariaLabel: "Refresh offers list",
@@ -402,6 +673,7 @@ export const ACTIONS = {
402
673
  permissions: ["seller", "admin"],
403
674
  },
404
675
  "edit-listing": {
676
+ iconKey: "edit",
405
677
  id: "store.edit-listing",
406
678
  label: "Edit",
407
679
  ariaLabel: "Edit listing",
@@ -410,6 +682,7 @@ export const ACTIONS = {
410
682
  permissions: ["seller", "admin"],
411
683
  },
412
684
  "delete-listing": {
685
+ iconKey: "delete",
413
686
  id: "store.delete-listing",
414
687
  label: "Delete",
415
688
  ariaLabel: "Delete listing",
@@ -424,6 +697,7 @@ export const ACTIONS = {
424
697
  },
425
698
  },
426
699
  "publish-listing": {
700
+ iconKey: "save",
427
701
  id: "store.publish-listing",
428
702
  label: "Publish",
429
703
  description: "Make this listing visible to buyers.",
@@ -431,6 +705,7 @@ export const ACTIONS = {
431
705
  permissions: ["seller", "admin"],
432
706
  },
433
707
  "unpublish-listing": {
708
+ iconKey: "hide",
434
709
  id: "store.unpublish-listing",
435
710
  label: "Unpublish",
436
711
  description: "Hide this listing from buyers.",
@@ -438,6 +713,7 @@ export const ACTIONS = {
438
713
  permissions: ["seller", "admin"],
439
714
  },
440
715
  "mark-shipped": {
716
+ iconKey: "ship",
441
717
  id: "store.mark-shipped",
442
718
  label: "Mark as shipped",
443
719
  description: "Update an order status to shipped and enter tracking info.",
@@ -445,6 +721,7 @@ export const ACTIONS = {
445
721
  permissions: ["seller", "admin"],
446
722
  },
447
723
  "mark-installment-paid": {
724
+ iconKey: "confirm",
448
725
  id: "store.mark-installment-paid",
449
726
  label: "Mark installment paid",
450
727
  ariaLabel: "Mark this EMI installment as paid",
@@ -459,6 +736,7 @@ export const ACTIONS = {
459
736
  },
460
737
  },
461
738
  "request-payout": {
739
+ iconKey: "send",
462
740
  id: "store.request-payout",
463
741
  label: "Request payout",
464
742
  description: "Submit a payout request for available store earnings.",
@@ -466,6 +744,7 @@ export const ACTIONS = {
466
744
  permissions: ["seller"],
467
745
  },
468
746
  "save-changes": {
747
+ iconKey: "save",
469
748
  id: "store.save-changes",
470
749
  label: "Save changes",
471
750
  description: "Submit the store listing or settings form.",
@@ -473,6 +752,7 @@ export const ACTIONS = {
473
752
  permissions: ["seller", "admin"],
474
753
  },
475
754
  "print-labels": {
755
+ iconKey: "export",
476
756
  id: "store.print-labels",
477
757
  label: "Print Labels",
478
758
  ariaLabel: "Print inventory labels for selected products",
@@ -481,6 +761,7 @@ export const ACTIONS = {
481
761
  permissions: ["seller", "admin"],
482
762
  },
483
763
  "set-location": {
764
+ iconKey: "settings",
484
765
  id: "store.set-location",
485
766
  label: "Set Location",
486
767
  ariaLabel: "Set physical storage location for selected items",
@@ -489,6 +770,7 @@ export const ACTIONS = {
489
770
  permissions: ["seller", "admin"],
490
771
  },
491
772
  "print-packing-slips": {
773
+ iconKey: "export",
492
774
  id: "store.print-packing-slips",
493
775
  label: "Print Packing Slips",
494
776
  ariaLabel: "Print packing slips for selected orders",
@@ -497,6 +779,7 @@ export const ACTIONS = {
497
779
  permissions: ["seller", "admin"],
498
780
  },
499
781
  "open-print-center": {
782
+ iconKey: "view",
500
783
  id: "store.open-print-center",
501
784
  label: "Print Center",
502
785
  ariaLabel: "Open the Print & Label Center",
@@ -507,6 +790,7 @@ export const ACTIONS = {
507
790
  // SB-UNI-W follow-up (plan §7) — leaves for the 11 unwired store-dashboard
508
791
  // form/row CTAs identified by the W-3 sweep.
509
792
  "create-template": {
793
+ iconKey: "create",
510
794
  id: "store.create-template",
511
795
  label: "Create Template",
512
796
  ariaLabel: "Create a new product template",
@@ -515,6 +799,7 @@ export const ACTIONS = {
515
799
  permissions: ["seller", "admin"],
516
800
  },
517
801
  "update-template": {
802
+ iconKey: "edit",
518
803
  id: "store.update-template",
519
804
  label: "Save Changes",
520
805
  ariaLabel: "Save changes to template",
@@ -523,6 +808,7 @@ export const ACTIONS = {
523
808
  permissions: ["seller", "admin"],
524
809
  },
525
810
  "edit-template": {
811
+ iconKey: "edit",
526
812
  id: "store.edit-template",
527
813
  label: "Edit",
528
814
  ariaLabel: "Edit template",
@@ -531,6 +817,7 @@ export const ACTIONS = {
531
817
  permissions: ["seller", "admin"],
532
818
  },
533
819
  "delete-template": {
820
+ iconKey: "delete",
534
821
  id: "store.delete-template",
535
822
  label: "Delete",
536
823
  ariaLabel: "Delete template",
@@ -545,6 +832,7 @@ export const ACTIONS = {
545
832
  },
546
833
  },
547
834
  "create-bundle": {
835
+ iconKey: "create",
548
836
  id: "store.create-bundle",
549
837
  label: "Create Bundle",
550
838
  ariaLabel: "Create a new bundle",
@@ -553,6 +841,7 @@ export const ACTIONS = {
553
841
  permissions: ["seller", "admin"],
554
842
  },
555
843
  "create-feature": {
844
+ iconKey: "create",
556
845
  id: "store.create-feature",
557
846
  label: "Create Feature",
558
847
  ariaLabel: "Create a new product feature badge",
@@ -561,6 +850,7 @@ export const ACTIONS = {
561
850
  permissions: ["seller", "admin"],
562
851
  },
563
852
  "update-slug": {
853
+ iconKey: "edit",
564
854
  id: "store.update-slug",
565
855
  label: "Update Slug",
566
856
  ariaLabel: "Update store slug",
@@ -575,6 +865,7 @@ export const ACTIONS = {
575
865
  },
576
866
  },
577
867
  "delete-sublisting-category": {
868
+ iconKey: "delete",
578
869
  id: "store.delete-sublisting-category",
579
870
  label: "Delete",
580
871
  ariaLabel: "Delete sublisting category",
@@ -589,6 +880,7 @@ export const ACTIONS = {
589
880
  },
590
881
  },
591
882
  "cancel-form": {
883
+ iconKey: "cancel",
592
884
  id: "store.cancel-form",
593
885
  label: "Cancel",
594
886
  ariaLabel: "Cancel form and close",
@@ -596,6 +888,7 @@ export const ACTIONS = {
596
888
  kind: "ghost",
597
889
  },
598
890
  "new-template": {
891
+ iconKey: "create",
599
892
  id: "store.new-template",
600
893
  label: "+ New Template",
601
894
  ariaLabel: "Open the new-template drawer",
@@ -606,6 +899,7 @@ export const ACTIONS = {
606
899
  },
607
900
  BLOG: {
608
901
  "create-post": {
902
+ iconKey: "create",
609
903
  id: "blog.create-post",
610
904
  label: "New Post",
611
905
  ariaLabel: "Create a new blog post",
@@ -614,6 +908,7 @@ export const ACTIONS = {
614
908
  permissions: ["admin", "moderator"],
615
909
  },
616
910
  "edit-post": {
911
+ iconKey: "edit",
617
912
  id: "blog.edit-post",
618
913
  label: "Edit",
619
914
  ariaLabel: "Edit this blog post",
@@ -622,6 +917,7 @@ export const ACTIONS = {
622
917
  permissions: ["admin", "moderator"],
623
918
  },
624
919
  "delete-post": {
920
+ iconKey: "delete",
625
921
  id: "blog.delete-post",
626
922
  label: "Delete",
627
923
  ariaLabel: "Delete this blog post",
@@ -638,12 +934,14 @@ export const ACTIONS = {
638
934
  },
639
935
  EVENT: {
640
936
  "register": {
937
+ iconKey: "user",
641
938
  id: "event.register",
642
939
  label: "Register",
643
940
  description: "Register to participate in this event.",
644
941
  kind: "primary",
645
942
  },
646
943
  "cancel-registration": {
944
+ iconKey: "cancel",
647
945
  id: "event.cancel-registration",
648
946
  label: "Cancel registration",
649
947
  description: "Cancel participation in this event.",
@@ -658,6 +956,7 @@ export const ACTIONS = {
658
956
  },
659
957
  USER: {
660
958
  "cancel-order": {
959
+ iconKey: "cancel",
661
960
  id: "user.cancel-order",
662
961
  label: "Cancel Order",
663
962
  description: "Cancel a pending or confirmed order.",
@@ -670,6 +969,7 @@ export const ACTIONS = {
670
969
  },
671
970
  },
672
971
  "cancel-order-items": {
972
+ iconKey: "cancel",
673
973
  id: "user.cancel-order-items",
674
974
  label: "Cancel Selected Items",
675
975
  description: "Cancel a subset of items on a pending or confirmed order and continue with the rest.",
@@ -682,30 +982,35 @@ export const ACTIONS = {
682
982
  },
683
983
  },
684
984
  "request-return": {
985
+ iconKey: "restore",
685
986
  id: "user.request-return",
686
987
  label: "Request return",
687
988
  description: "Raise a return request for a delivered order.",
688
989
  kind: "secondary",
689
990
  },
690
991
  "save-settings": {
992
+ iconKey: "save",
691
993
  id: "user.save-settings",
692
994
  label: "Save changes",
693
995
  description: "Submit the user settings form.",
694
996
  kind: "primary",
695
997
  },
696
998
  "send-verification-email": {
999
+ iconKey: "send",
697
1000
  id: "user.send-verification-email",
698
1001
  label: "Send Verification Email",
699
1002
  description: "Send a verification link to the new email address.",
700
1003
  kind: "secondary",
701
1004
  },
702
1005
  "update-password": {
1006
+ iconKey: "edit",
703
1007
  id: "user.update-password",
704
1008
  label: "Update Password",
705
1009
  description: "Submit the change-password form.",
706
1010
  kind: "secondary",
707
1011
  },
708
1012
  "delete-address": {
1013
+ iconKey: "delete",
709
1014
  id: "user.delete-address",
710
1015
  label: "Delete address",
711
1016
  ariaLabel: "Delete address",
@@ -719,6 +1024,7 @@ export const ACTIONS = {
719
1024
  },
720
1025
  },
721
1026
  "set-default-address": {
1027
+ iconKey: "confirm",
722
1028
  id: "user.set-default-address",
723
1029
  label: "Set as default",
724
1030
  ariaLabel: "Set as default address",
@@ -727,6 +1033,7 @@ export const ACTIONS = {
727
1033
  },
728
1034
  // Plan §6 — wishlist bulk actions (sticky bulk-action toolbar leaves).
729
1035
  "wishlist-bulk-remove": {
1036
+ iconKey: "wishlist",
730
1037
  id: "user.wishlist-bulk-remove",
731
1038
  label: "Remove selected",
732
1039
  ariaLabel: "Remove selected items from wishlist",
@@ -740,6 +1047,7 @@ export const ACTIONS = {
740
1047
  },
741
1048
  },
742
1049
  "wishlist-bulk-move-to-cart": {
1050
+ iconKey: "wishlist",
743
1051
  id: "user.wishlist-bulk-move-to-cart",
744
1052
  label: "Move to cart",
745
1053
  ariaLabel: "Move selected items to cart",
@@ -747,6 +1055,7 @@ export const ACTIONS = {
747
1055
  kind: "primary",
748
1056
  },
749
1057
  "clear-selection": {
1058
+ iconKey: "delete",
750
1059
  id: "user.clear-selection",
751
1060
  label: "Deselect",
752
1061
  ariaLabel: "Clear current selection",
@@ -760,9 +1069,10 @@ export const ACTIONS = {
760
1069
  ariaLabel: "View order details",
761
1070
  description: "Open the full details of this order.",
762
1071
  kind: "ghost",
763
- iconKey: "Eye",
1072
+ iconKey: "view",
764
1073
  },
765
1074
  "track-order": {
1075
+ iconKey: "ship",
766
1076
  id: "user.track-order",
767
1077
  label: "Track Order",
768
1078
  ariaLabel: "Track your order shipment",
@@ -770,6 +1080,7 @@ export const ACTIONS = {
770
1080
  kind: "ghost",
771
1081
  },
772
1082
  "reorder": {
1083
+ iconKey: "order",
773
1084
  id: "user.reorder",
774
1085
  label: "Reorder",
775
1086
  ariaLabel: "Reorder items from this order",
@@ -782,9 +1093,10 @@ export const ACTIONS = {
782
1093
  ariaLabel: "Download order invoice",
783
1094
  description: "Download a PDF invoice for this order.",
784
1095
  kind: "ghost",
785
- iconKey: "FileDown",
1096
+ iconKey: "export",
786
1097
  },
787
1098
  "write-review": {
1099
+ iconKey: "review",
788
1100
  id: "user.write-review",
789
1101
  label: "Write Review",
790
1102
  ariaLabel: "Write a review for this order",
@@ -792,6 +1104,7 @@ export const ACTIONS = {
792
1104
  kind: "secondary",
793
1105
  },
794
1106
  "refresh-offers": {
1107
+ iconKey: "retry",
795
1108
  id: "user.refresh-offers",
796
1109
  label: "Refresh",
797
1110
  ariaLabel: "Refresh offers",
@@ -800,6 +1113,7 @@ export const ACTIONS = {
800
1113
  },
801
1114
  // Plan §10 — claim-coupon wallet (won-coupon entry points & wallet leaves).
802
1115
  "claim-coupon": {
1116
+ iconKey: "confirm",
803
1117
  id: "user.claim-coupon",
804
1118
  label: "Claim Coupon",
805
1119
  ariaLabel: "Claim this coupon to your wallet",
@@ -807,6 +1121,7 @@ export const ACTIONS = {
807
1121
  kind: "primary",
808
1122
  },
809
1123
  "use-claimed-coupon": {
1124
+ iconKey: "confirm",
810
1125
  id: "user.use-claimed-coupon",
811
1126
  label: "Apply at checkout",
812
1127
  ariaLabel: "Apply this coupon at checkout",
@@ -814,6 +1129,7 @@ export const ACTIONS = {
814
1129
  kind: "link",
815
1130
  },
816
1131
  "remove-claimed-coupon": {
1132
+ iconKey: "delete",
817
1133
  id: "user.remove-claimed-coupon",
818
1134
  label: "Remove",
819
1135
  ariaLabel: "Remove coupon from wallet",
@@ -823,6 +1139,7 @@ export const ACTIONS = {
823
1139
  },
824
1140
  SELLER: {
825
1141
  "cancel-bid": {
1142
+ iconKey: "cancel",
826
1143
  id: "seller.cancel-bid",
827
1144
  label: "Cancel selected",
828
1145
  ariaLabel: "Cancel selected bids",
@@ -839,6 +1156,7 @@ export const ACTIONS = {
839
1156
  },
840
1157
  SHIPMENT: {
841
1158
  "create": {
1159
+ iconKey: "create",
842
1160
  id: "shipment.create",
843
1161
  label: "New Shipment",
844
1162
  ariaLabel: "Create a new procurement shipment",
@@ -847,6 +1165,7 @@ export const ACTIONS = {
847
1165
  permissions: ["admin"],
848
1166
  },
849
1167
  "mark-received": {
1168
+ iconKey: "confirm",
850
1169
  id: "shipment.mark-received",
851
1170
  label: "Mark Received",
852
1171
  ariaLabel: "Mark this shipment as received",
@@ -855,6 +1174,7 @@ export const ACTIONS = {
855
1174
  permissions: ["admin"],
856
1175
  },
857
1176
  "unlink-item": {
1177
+ iconKey: "link",
858
1178
  id: "shipment.unlink-item",
859
1179
  label: "Unlink",
860
1180
  ariaLabel: "Unlink this item from its product",
@@ -863,6 +1183,7 @@ export const ACTIONS = {
863
1183
  permissions: ["admin"],
864
1184
  },
865
1185
  "delete": {
1186
+ iconKey: "delete",
866
1187
  id: "shipment.delete",
867
1188
  label: "Delete",
868
1189
  ariaLabel: "Delete this shipment",
@@ -879,6 +1200,7 @@ export const ACTIONS = {
879
1200
  },
880
1201
  CATALOGUE: {
881
1202
  "list-item": {
1203
+ iconKey: "create",
882
1204
  id: "catalogue.list-item",
883
1205
  label: "List",
884
1206
  ariaLabel: "List this catalogue item directly",
@@ -887,6 +1209,7 @@ export const ACTIONS = {
887
1209
  permissions: ["seller", "admin"],
888
1210
  },
889
1211
  "submit-for-approval": {
1212
+ iconKey: "send",
890
1213
  id: "catalogue.submit-for-approval",
891
1214
  label: "Request to sell",
892
1215
  ariaLabel: "Request admin list this item on your behalf",
@@ -894,6 +1217,7 @@ export const ACTIONS = {
894
1217
  kind: "secondary",
895
1218
  },
896
1219
  "unlink": {
1220
+ iconKey: "link",
897
1221
  id: "catalogue.unlink",
898
1222
  label: "Unlink",
899
1223
  ariaLabel: "Unlink this catalogue item from its product",
@@ -902,6 +1226,7 @@ export const ACTIONS = {
902
1226
  permissions: ["admin"],
903
1227
  },
904
1228
  "delete": {
1229
+ iconKey: "delete",
905
1230
  id: "catalogue.delete",
906
1231
  label: "Delete",
907
1232
  ariaLabel: "Remove this catalogue item",
@@ -915,6 +1240,7 @@ export const ACTIONS = {
915
1240
  },
916
1241
  },
917
1242
  "approve": {
1243
+ iconKey: "approve",
918
1244
  id: "catalogue.approve",
919
1245
  label: "Approve",
920
1246
  ariaLabel: "Approve this catalogue listing request",
@@ -923,6 +1249,7 @@ export const ACTIONS = {
923
1249
  permissions: ["admin"],
924
1250
  },
925
1251
  "reject": {
1252
+ iconKey: "reject",
926
1253
  id: "catalogue.reject",
927
1254
  label: "Reject",
928
1255
  ariaLabel: "Reject this catalogue listing request",
@@ -940,6 +1267,7 @@ export const ACTIONS = {
940
1267
  ADMIN: {
941
1268
  // ── Product moderation ─────────────────────────────────────────────────
942
1269
  "approve-product": {
1270
+ iconKey: "approve",
943
1271
  id: "admin.approve-product",
944
1272
  label: "Approve",
945
1273
  ariaLabel: "Approve listing",
@@ -948,6 +1276,7 @@ export const ACTIONS = {
948
1276
  permissions: ["admin", "moderator"],
949
1277
  },
950
1278
  "reject-product": {
1279
+ iconKey: "reject",
951
1280
  id: "admin.reject-product",
952
1281
  label: "Reject",
953
1282
  ariaLabel: "Reject listing",
@@ -963,6 +1292,7 @@ export const ACTIONS = {
963
1292
  },
964
1293
  // ── User moderation ────────────────────────────────────────────────────
965
1294
  "ban-user": {
1295
+ iconKey: "ban",
966
1296
  id: "admin.ban-user",
967
1297
  label: "Ban user",
968
1298
  ariaLabel: "Ban this user",
@@ -977,6 +1307,7 @@ export const ACTIONS = {
977
1307
  },
978
1308
  },
979
1309
  "unban-user": {
1310
+ iconKey: "restore",
980
1311
  id: "admin.unban-user",
981
1312
  label: "Lift ban",
982
1313
  ariaLabel: "Lift ban on this user",
@@ -985,6 +1316,7 @@ export const ACTIONS = {
985
1316
  permissions: ["admin"],
986
1317
  },
987
1318
  "bulk-suspend-users": {
1319
+ iconKey: "ban",
988
1320
  id: "admin.bulk-suspend-users",
989
1321
  label: "Suspend selected",
990
1322
  ariaLabel: "Suspend selected users",
@@ -999,6 +1331,7 @@ export const ACTIONS = {
999
1331
  },
1000
1332
  },
1001
1333
  "bulk-restore-users": {
1334
+ iconKey: "restore",
1002
1335
  id: "admin.bulk-restore-users",
1003
1336
  label: "Restore selected",
1004
1337
  ariaLabel: "Restore selected users",
@@ -1007,6 +1340,7 @@ export const ACTIONS = {
1007
1340
  permissions: ["admin"],
1008
1341
  },
1009
1342
  "bulk-delete-users": {
1343
+ iconKey: "delete",
1010
1344
  id: "admin.bulk-delete-users",
1011
1345
  label: "Delete selected",
1012
1346
  ariaLabel: "Delete selected users",
@@ -1021,6 +1355,7 @@ export const ACTIONS = {
1021
1355
  },
1022
1356
  },
1023
1357
  "verify-payment": {
1358
+ iconKey: "verify",
1024
1359
  id: "admin.verify-payment",
1025
1360
  label: "Verify Payment",
1026
1361
  ariaLabel: "Mark payment as received and verified",
@@ -1034,6 +1369,7 @@ export const ACTIONS = {
1034
1369
  },
1035
1370
  },
1036
1371
  "request-payment-reupload": {
1372
+ iconKey: "upload",
1037
1373
  id: "admin.request-payment-reupload",
1038
1374
  label: "Request Re-upload",
1039
1375
  ariaLabel: "Ask the buyer to re-upload a corrected payment proof",
@@ -1047,6 +1383,7 @@ export const ACTIONS = {
1047
1383
  },
1048
1384
  },
1049
1385
  "reject-payment-fraud": {
1386
+ iconKey: "reject",
1050
1387
  id: "admin.reject-payment-fraud",
1051
1388
  label: "Reject as Fraudulent",
1052
1389
  ariaLabel: "Reject this payment proof as fraudulent, cancel the order, and ban the account",
@@ -1061,6 +1398,7 @@ export const ACTIONS = {
1061
1398
  },
1062
1399
  },
1063
1400
  "verify-vendor": {
1401
+ iconKey: "verify",
1064
1402
  id: "admin.verify-vendor",
1065
1403
  label: "Verify vendor",
1066
1404
  ariaLabel: "Grant verified-vendor status",
@@ -1069,6 +1407,7 @@ export const ACTIONS = {
1069
1407
  permissions: ["admin"],
1070
1408
  },
1071
1409
  "unverify-vendor": {
1410
+ iconKey: "reject",
1072
1411
  id: "admin.unverify-vendor",
1073
1412
  label: "Remove verification",
1074
1413
  ariaLabel: "Revoke verified-vendor status",
@@ -1084,6 +1423,7 @@ export const ACTIONS = {
1084
1423
  },
1085
1424
  // ── Store moderation ───────────────────────────────────────────────────
1086
1425
  "verify-store": {
1426
+ iconKey: "verify",
1087
1427
  id: "admin.verify-store",
1088
1428
  label: "Verify store",
1089
1429
  ariaLabel: "Verify this store",
@@ -1092,6 +1432,7 @@ export const ACTIONS = {
1092
1432
  permissions: ["admin"],
1093
1433
  },
1094
1434
  "suspend-store": {
1435
+ iconKey: "ban",
1095
1436
  id: "admin.suspend-store",
1096
1437
  label: "Suspend store",
1097
1438
  ariaLabel: "Suspend this store",
@@ -1107,6 +1448,7 @@ export const ACTIONS = {
1107
1448
  },
1108
1449
  // ── Review moderation ──────────────────────────────────────────────────
1109
1450
  "approve-review": {
1451
+ iconKey: "approve",
1110
1452
  id: "admin.approve-review",
1111
1453
  label: "Approve",
1112
1454
  ariaLabel: "Approve review",
@@ -1115,6 +1457,7 @@ export const ACTIONS = {
1115
1457
  permissions: ["admin", "moderator"],
1116
1458
  },
1117
1459
  "reject-review": {
1460
+ iconKey: "reject",
1118
1461
  id: "admin.reject-review",
1119
1462
  label: "Reject",
1120
1463
  ariaLabel: "Reject review",
@@ -1130,6 +1473,7 @@ export const ACTIONS = {
1130
1473
  },
1131
1474
  // ── Return request moderation ──────────────────────────────────────────
1132
1475
  "approve-return": {
1476
+ iconKey: "approve",
1133
1477
  id: "admin.approve-return",
1134
1478
  label: "Approve return",
1135
1479
  ariaLabel: "Approve return request",
@@ -1138,6 +1482,7 @@ export const ACTIONS = {
1138
1482
  permissions: ["admin", "moderator"],
1139
1483
  },
1140
1484
  "reject-return": {
1485
+ iconKey: "reject",
1141
1486
  id: "admin.reject-return",
1142
1487
  label: "Reject return",
1143
1488
  ariaLabel: "Reject return request",
@@ -1153,6 +1498,7 @@ export const ACTIONS = {
1153
1498
  },
1154
1499
  // ── Payout management ──────────────────────────────────────────────────
1155
1500
  "calculate-payouts": {
1501
+ iconKey: "analytics",
1156
1502
  id: "admin.calculate-payouts",
1157
1503
  label: "Calculate Payouts",
1158
1504
  ariaLabel: "Run the weekly payout eligibility calculation",
@@ -1161,6 +1507,7 @@ export const ACTIONS = {
1161
1507
  permissions: ["admin"],
1162
1508
  },
1163
1509
  "grant-payout": {
1510
+ iconKey: "approve",
1164
1511
  id: "admin.grant-payout",
1165
1512
  label: "Approve payout",
1166
1513
  ariaLabel: "Approve payout request",
@@ -1169,6 +1516,7 @@ export const ACTIONS = {
1169
1516
  permissions: ["admin"],
1170
1517
  },
1171
1518
  "hold-payout": {
1519
+ iconKey: "pause",
1172
1520
  id: "admin.hold-payout",
1173
1521
  label: "Hold payout",
1174
1522
  ariaLabel: "Put payout on hold",
@@ -1184,6 +1532,7 @@ export const ACTIONS = {
1184
1532
  },
1185
1533
  // ── Bundle management ──────────────────────────────────────────────────
1186
1534
  "rebuild-bundle": {
1535
+ iconKey: "retry",
1187
1536
  id: "admin.rebuild-bundle",
1188
1537
  label: "Rebuild bundle",
1189
1538
  ariaLabel: "Trigger bundle stock rebuild",
@@ -1193,6 +1542,7 @@ export const ACTIONS = {
1193
1542
  },
1194
1543
  // ── Dev / system ───────────────────────────────────────────────────────
1195
1544
  "reset-seed-data": {
1545
+ iconKey: "retry",
1196
1546
  id: "admin.reset-seed-data",
1197
1547
  label: "Reset seed data",
1198
1548
  ariaLabel: "Clear and re-seed Firestore",
@@ -1208,6 +1558,7 @@ export const ACTIONS = {
1208
1558
  },
1209
1559
  // ── Generic admin forms ────────────────────────────────────────────────
1210
1560
  "save-changes": {
1561
+ iconKey: "save",
1211
1562
  id: "admin.save-changes",
1212
1563
  label: "Save changes",
1213
1564
  description: "Submit any admin editor form.",
@@ -1215,6 +1566,7 @@ export const ACTIONS = {
1215
1566
  permissions: ["admin", "moderator"],
1216
1567
  },
1217
1568
  "export-csv": {
1569
+ iconKey: "export",
1218
1570
  id: "admin.export-csv",
1219
1571
  label: "Export CSV",
1220
1572
  ariaLabel: "Export data as CSV",
@@ -1224,6 +1576,7 @@ export const ACTIONS = {
1224
1576
  },
1225
1577
  // ── Order management ──────────────────────────────────────────────────
1226
1578
  "mark-shipped": {
1579
+ iconKey: "ship",
1227
1580
  id: "admin.mark-shipped",
1228
1581
  label: "Mark as Shipped",
1229
1582
  ariaLabel: "Mark order as shipped",
@@ -1232,6 +1585,7 @@ export const ACTIONS = {
1232
1585
  permissions: ["admin", "moderator"],
1233
1586
  },
1234
1587
  "mark-delivered": {
1588
+ iconKey: "ship",
1235
1589
  id: "admin.mark-delivered",
1236
1590
  label: "Mark as Delivered",
1237
1591
  ariaLabel: "Mark order as delivered",
@@ -1240,6 +1594,7 @@ export const ACTIONS = {
1240
1594
  permissions: ["admin", "moderator"],
1241
1595
  },
1242
1596
  "mark-installment-paid": {
1597
+ iconKey: "confirm",
1243
1598
  id: "admin.mark-installment-paid",
1244
1599
  label: "Mark installment paid",
1245
1600
  ariaLabel: "Mark this EMI installment as paid",
@@ -1254,6 +1609,7 @@ export const ACTIONS = {
1254
1609
  },
1255
1610
  },
1256
1611
  "cancel-order": {
1612
+ iconKey: "cancel",
1257
1613
  id: "admin.cancel-order",
1258
1614
  label: "Cancel Orders",
1259
1615
  ariaLabel: "Cancel selected orders",
@@ -1269,6 +1625,7 @@ export const ACTIONS = {
1269
1625
  },
1270
1626
  // ── Payout management (extended) ──────────────────────────────────────
1271
1627
  "mark-paid": {
1628
+ iconKey: "confirm",
1272
1629
  id: "admin.mark-paid",
1273
1630
  label: "Mark Paid",
1274
1631
  ariaLabel: "Mark payout as paid",
@@ -1278,6 +1635,7 @@ export const ACTIONS = {
1278
1635
  },
1279
1636
  // ── Session management ────────────────────────────────────────────────
1280
1637
  "revoke-session": {
1638
+ iconKey: "ban",
1281
1639
  id: "admin.revoke-session",
1282
1640
  label: "Revoke Sessions",
1283
1641
  ariaLabel: "Revoke selected sessions",
@@ -1293,6 +1651,7 @@ export const ACTIONS = {
1293
1651
  },
1294
1652
  // ── Notification management ───────────────────────────────────────────
1295
1653
  "mark-read": {
1654
+ iconKey: "confirm",
1296
1655
  id: "admin.mark-read",
1297
1656
  label: "Mark Read",
1298
1657
  ariaLabel: "Mark selected notifications as read",
@@ -1301,6 +1660,7 @@ export const ACTIONS = {
1301
1660
  permissions: ["admin", "moderator"],
1302
1661
  },
1303
1662
  "delete-notification": {
1663
+ iconKey: "delete",
1304
1664
  id: "admin.delete-notification",
1305
1665
  label: "Delete Notifications",
1306
1666
  ariaLabel: "Delete selected notifications",
@@ -1316,6 +1676,7 @@ export const ACTIONS = {
1316
1676
  },
1317
1677
  // ── Tester QA management ──────────────────────────────────────────────
1318
1678
  "mark-feedback-reviewed": {
1679
+ iconKey: "confirm",
1319
1680
  id: "admin.mark-feedback-reviewed",
1320
1681
  label: "Mark Reviewed",
1321
1682
  ariaLabel: "Mark this tester feedback as reviewed",
@@ -1324,6 +1685,7 @@ export const ACTIONS = {
1324
1685
  permissions: ["admin"],
1325
1686
  },
1326
1687
  "export-tester-feedback": {
1688
+ iconKey: "export",
1327
1689
  id: "admin.export-tester-feedback",
1328
1690
  label: "Download Report",
1329
1691
  ariaLabel: "Download tester feedback as a Markdown report",
@@ -1332,6 +1694,7 @@ export const ACTIONS = {
1332
1694
  permissions: ["admin"],
1333
1695
  },
1334
1696
  "export-event-entries": {
1697
+ iconKey: "export",
1335
1698
  id: "admin.export-event-entries",
1336
1699
  label: "Download Report",
1337
1700
  ariaLabel: "Download this event's entries as a Markdown report",
@@ -1340,6 +1703,7 @@ export const ACTIONS = {
1340
1703
  permissions: ["admin"],
1341
1704
  },
1342
1705
  "create-checklist-item": {
1706
+ iconKey: "create",
1343
1707
  id: "admin.create-checklist-item",
1344
1708
  label: "Add Test Case",
1345
1709
  ariaLabel: "Add a new tester checklist item",
@@ -1348,6 +1712,7 @@ export const ACTIONS = {
1348
1712
  permissions: ["admin"],
1349
1713
  },
1350
1714
  "edit-checklist-item": {
1715
+ iconKey: "edit",
1351
1716
  id: "admin.edit-checklist-item",
1352
1717
  label: "Edit",
1353
1718
  ariaLabel: "Edit this tester checklist item",
@@ -1356,6 +1721,7 @@ export const ACTIONS = {
1356
1721
  permissions: ["admin"],
1357
1722
  },
1358
1723
  "delete-checklist-item": {
1724
+ iconKey: "delete",
1359
1725
  id: "admin.delete-checklist-item",
1360
1726
  label: "Delete",
1361
1727
  ariaLabel: "Delete this tester checklist item",
@@ -1370,6 +1736,7 @@ export const ACTIONS = {
1370
1736
  },
1371
1737
  },
1372
1738
  "confirm-bug": {
1739
+ iconKey: "confirm",
1373
1740
  id: "admin.confirm-bug",
1374
1741
  label: "Mark as Bug",
1375
1742
  ariaLabel: "Confirm this as a real bug and credit the reporting tester",
@@ -1384,6 +1751,7 @@ export const ACTIONS = {
1384
1751
  },
1385
1752
  },
1386
1753
  "reopen-checklist-item": {
1754
+ iconKey: "restore",
1387
1755
  id: "admin.reopen-checklist-item",
1388
1756
  label: "Reopen as New Test Case",
1389
1757
  ariaLabel: "Reopen this fixed case as a new version for retest",
@@ -1398,6 +1766,7 @@ export const ACTIONS = {
1398
1766
  },
1399
1767
  },
1400
1768
  "resend-notification": {
1769
+ iconKey: "send",
1401
1770
  id: "admin.resend-notification",
1402
1771
  label: "Resend",
1403
1772
  ariaLabel: "Resend this notification",
@@ -1407,6 +1776,7 @@ export const ACTIONS = {
1407
1776
  },
1408
1777
  // ── Blog management ───────────────────────────────────────────────────
1409
1778
  "publish-blog": {
1779
+ iconKey: "save",
1410
1780
  id: "admin.publish-blog",
1411
1781
  label: "Publish Selected",
1412
1782
  ariaLabel: "Publish selected blog posts",
@@ -1415,6 +1785,7 @@ export const ACTIONS = {
1415
1785
  permissions: ["admin", "moderator"],
1416
1786
  },
1417
1787
  "draft-blog": {
1788
+ iconKey: "edit",
1418
1789
  id: "admin.draft-blog",
1419
1790
  label: "Move to Draft",
1420
1791
  ariaLabel: "Move selected posts to draft",
@@ -1424,6 +1795,7 @@ export const ACTIONS = {
1424
1795
  },
1425
1796
  // ── Brand & category management ───────────────────────────────────────
1426
1797
  "edit-brand": {
1798
+ iconKey: "edit",
1427
1799
  id: "admin.edit-brand",
1428
1800
  label: "Edit Brand",
1429
1801
  ariaLabel: "Edit this brand",
@@ -1432,6 +1804,7 @@ export const ACTIONS = {
1432
1804
  permissions: ["admin"],
1433
1805
  },
1434
1806
  "edit-category": {
1807
+ iconKey: "edit",
1435
1808
  id: "admin.edit-category",
1436
1809
  label: "Edit Category",
1437
1810
  ariaLabel: "Edit this category",
@@ -1441,6 +1814,7 @@ export const ACTIONS = {
1441
1814
  },
1442
1815
  // ── Feature & prize-draw management ────────────────────────────────────
1443
1816
  "delete-feature": {
1817
+ iconKey: "delete",
1444
1818
  id: "admin.delete-feature",
1445
1819
  label: "Delete Features",
1446
1820
  ariaLabel: "Delete selected features",
@@ -1455,6 +1829,7 @@ export const ACTIONS = {
1455
1829
  },
1456
1830
  },
1457
1831
  "delete-prize-draw": {
1832
+ iconKey: "delete",
1458
1833
  id: "admin.delete-prize-draw",
1459
1834
  label: "Delete Prize Draws",
1460
1835
  ariaLabel: "Delete selected prize draws",
@@ -1470,6 +1845,7 @@ export const ACTIONS = {
1470
1845
  },
1471
1846
  // ── Product toggles ───────────────────────────────────────────────────
1472
1847
  "toggle-featured": {
1848
+ iconKey: "review",
1473
1849
  id: "admin.toggle-featured",
1474
1850
  label: "Toggle Featured",
1475
1851
  ariaLabel: "Toggle featured status",
@@ -1478,6 +1854,7 @@ export const ACTIONS = {
1478
1854
  permissions: ["admin", "moderator"],
1479
1855
  },
1480
1856
  "toggle-promoted": {
1857
+ iconKey: "analytics",
1481
1858
  id: "admin.toggle-promoted",
1482
1859
  label: "Toggle Promoted",
1483
1860
  ariaLabel: "Toggle promoted status",
@@ -1486,6 +1863,7 @@ export const ACTIONS = {
1486
1863
  permissions: ["admin"],
1487
1864
  },
1488
1865
  "toggle-on-sale": {
1866
+ iconKey: "analytics",
1489
1867
  id: "admin.toggle-on-sale",
1490
1868
  label: "Toggle On Sale",
1491
1869
  ariaLabel: "Toggle on-sale status",
@@ -1495,6 +1873,7 @@ export const ACTIONS = {
1495
1873
  },
1496
1874
  // ── Bundle management ─────────────────────────────────────────────────
1497
1875
  "activate-bundle": {
1876
+ iconKey: "resume",
1498
1877
  id: "admin.activate-bundle",
1499
1878
  label: "Activate",
1500
1879
  ariaLabel: "Activate selected bundles",
@@ -1503,6 +1882,7 @@ export const ACTIONS = {
1503
1882
  permissions: ["admin"],
1504
1883
  },
1505
1884
  "deactivate-bundle": {
1885
+ iconKey: "pause",
1506
1886
  id: "admin.deactivate-bundle",
1507
1887
  label: "Deactivate",
1508
1888
  ariaLabel: "Deactivate selected bundles",
@@ -1511,6 +1891,7 @@ export const ACTIONS = {
1511
1891
  permissions: ["admin"],
1512
1892
  },
1513
1893
  "delete-bundle": {
1894
+ iconKey: "delete",
1514
1895
  id: "admin.delete-bundle",
1515
1896
  label: "Delete",
1516
1897
  ariaLabel: "Delete selected bundles",
@@ -1526,6 +1907,7 @@ export const ACTIONS = {
1526
1907
  },
1527
1908
  // ── Store/User management (bulk) ──────────────────────────────────────
1528
1909
  "manage-store": {
1910
+ iconKey: "settings",
1529
1911
  id: "admin.manage-store",
1530
1912
  label: "Manage Store",
1531
1913
  ariaLabel: "Manage this store",
@@ -1534,6 +1916,7 @@ export const ACTIONS = {
1534
1916
  permissions: ["admin"],
1535
1917
  },
1536
1918
  "manage-user": {
1919
+ iconKey: "settings",
1537
1920
  id: "admin.manage-user",
1538
1921
  label: "Manage Selected",
1539
1922
  ariaLabel: "Manage selected users",
@@ -1543,6 +1926,7 @@ export const ACTIONS = {
1543
1926
  },
1544
1927
  // ── Carousel management ──────────────────────────────────────────────
1545
1928
  "edit-carousel": {
1929
+ iconKey: "edit",
1546
1930
  id: "admin.edit-carousel",
1547
1931
  label: "Edit Slide",
1548
1932
  ariaLabel: "Edit carousel slide",
@@ -1551,6 +1935,7 @@ export const ACTIONS = {
1551
1935
  permissions: ["admin"],
1552
1936
  },
1553
1937
  "delete-carousel": {
1938
+ iconKey: "delete",
1554
1939
  id: "admin.delete-carousel",
1555
1940
  label: "Delete Slides",
1556
1941
  ariaLabel: "Delete selected carousel slides",
@@ -1566,6 +1951,7 @@ export const ACTIONS = {
1566
1951
  },
1567
1952
  // ── Contact management ────────────────────────────────────────────────
1568
1953
  "mark-contact-read": {
1954
+ iconKey: "confirm",
1569
1955
  id: "admin.mark-contact-read",
1570
1956
  label: "Mark Read",
1571
1957
  ariaLabel: "Mark selected messages as read",
@@ -1574,6 +1960,7 @@ export const ACTIONS = {
1574
1960
  permissions: ["admin", "moderator"],
1575
1961
  },
1576
1962
  "archive-contact": {
1963
+ iconKey: "archive",
1577
1964
  id: "admin.archive-contact",
1578
1965
  label: "Archive Messages",
1579
1966
  ariaLabel: "Archive selected messages",
@@ -1582,6 +1969,7 @@ export const ACTIONS = {
1582
1969
  permissions: ["admin", "moderator"],
1583
1970
  },
1584
1971
  "delete-contact": {
1972
+ iconKey: "delete",
1585
1973
  id: "admin.delete-contact",
1586
1974
  label: "Delete Messages",
1587
1975
  ariaLabel: "Delete selected messages",
@@ -1597,6 +1985,7 @@ export const ACTIONS = {
1597
1985
  },
1598
1986
  // ── Newsletter management ─────────────────────────────────────────────
1599
1987
  "unsubscribe-newsletter": {
1988
+ iconKey: "email",
1600
1989
  id: "admin.unsubscribe-newsletter",
1601
1990
  label: "Unsubscribe",
1602
1991
  ariaLabel: "Unsubscribe selected subscribers",
@@ -1612,6 +2001,7 @@ export const ACTIONS = {
1612
2001
  },
1613
2002
  // ── Team management ───────────────────────────────────────────────────
1614
2003
  "edit-team-member": {
2004
+ iconKey: "edit",
1615
2005
  id: "admin.edit-team-member",
1616
2006
  label: "Edit Permissions",
1617
2007
  ariaLabel: "Edit team member permissions",
@@ -1620,6 +2010,7 @@ export const ACTIONS = {
1620
2010
  permissions: ["admin"],
1621
2011
  },
1622
2012
  "remove-team-member": {
2013
+ iconKey: "delete",
1623
2014
  id: "admin.remove-team-member",
1624
2015
  label: "Remove Members",
1625
2016
  ariaLabel: "Remove selected team members",
@@ -1635,6 +2026,7 @@ export const ACTIONS = {
1635
2026
  },
1636
2027
  // ── FAQ management ────────────────────────────────────────────────────
1637
2028
  "delete-faq": {
2029
+ iconKey: "delete",
1638
2030
  id: "admin.delete-faq",
1639
2031
  label: "Delete FAQs",
1640
2032
  ariaLabel: "Delete selected FAQs",
@@ -1649,6 +2041,7 @@ export const ACTIONS = {
1649
2041
  },
1650
2042
  },
1651
2043
  "archive-faq": {
2044
+ iconKey: "archive",
1652
2045
  id: "admin.archive-faq",
1653
2046
  label: "Archive FAQs",
1654
2047
  ariaLabel: "Archive selected FAQs",
@@ -1658,6 +2051,7 @@ export const ACTIONS = {
1658
2051
  },
1659
2052
  // ── Coupon management ─────────────────────────────────────────────────
1660
2053
  "delete-coupon": {
2054
+ iconKey: "delete",
1661
2055
  id: "admin.delete-coupon",
1662
2056
  label: "Delete Coupons",
1663
2057
  ariaLabel: "Delete selected coupons",
@@ -1672,6 +2066,7 @@ export const ACTIONS = {
1672
2066
  },
1673
2067
  },
1674
2068
  "edit-coupon": {
2069
+ iconKey: "edit",
1675
2070
  id: "admin.edit-coupon",
1676
2071
  label: "Edit Coupon",
1677
2072
  ariaLabel: "Edit this coupon",
@@ -1680,6 +2075,7 @@ export const ACTIONS = {
1680
2075
  permissions: ["admin"],
1681
2076
  },
1682
2077
  "duplicate-coupon": {
2078
+ iconKey: "duplicate",
1683
2079
  id: "admin.duplicate-coupon",
1684
2080
  label: "Duplicate",
1685
2081
  ariaLabel: "Duplicate this coupon",
@@ -1689,6 +2085,7 @@ export const ACTIONS = {
1689
2085
  },
1690
2086
  // ── Navigation management ─────────────────────────────────────────────
1691
2087
  "edit-nav": {
2088
+ iconKey: "edit",
1692
2089
  id: "admin.edit-nav",
1693
2090
  label: "Edit",
1694
2091
  ariaLabel: "Edit navigation item",
@@ -1697,6 +2094,7 @@ export const ACTIONS = {
1697
2094
  permissions: ["admin"],
1698
2095
  },
1699
2096
  "delete-nav": {
2097
+ iconKey: "delete",
1700
2098
  id: "admin.delete-nav",
1701
2099
  label: "Delete Nav Items",
1702
2100
  ariaLabel: "Delete selected navigation items",
@@ -1712,6 +2110,7 @@ export const ACTIONS = {
1712
2110
  },
1713
2111
  // ── Sublisting category management ────────────────────────────────────
1714
2112
  "delete-sublisting-category": {
2113
+ iconKey: "delete",
1715
2114
  id: "admin.delete-sublisting-category",
1716
2115
  label: "Delete Categories",
1717
2116
  ariaLabel: "Delete selected sublisting categories",
@@ -1727,6 +2126,7 @@ export const ACTIONS = {
1727
2126
  },
1728
2127
  // ── Scammer management ────────────────────────────────────────────────
1729
2128
  "verify-scammer": {
2129
+ iconKey: "verify",
1730
2130
  id: "admin.verify-scammer",
1731
2131
  label: "Verify Report",
1732
2132
  ariaLabel: "Verify this scammer report",
@@ -1735,6 +2135,7 @@ export const ACTIONS = {
1735
2135
  permissions: ["admin", "moderator"],
1736
2136
  },
1737
2137
  "dismiss-scammer": {
2138
+ iconKey: "reject",
1738
2139
  id: "admin.dismiss-scammer",
1739
2140
  label: "Dismiss",
1740
2141
  ariaLabel: "Dismiss this scammer report",
@@ -1743,6 +2144,7 @@ export const ACTIONS = {
1743
2144
  permissions: ["admin", "moderator"],
1744
2145
  },
1745
2146
  "delete-scammer": {
2147
+ iconKey: "delete",
1746
2148
  id: "admin.delete-scammer",
1747
2149
  label: "Delete Reports",
1748
2150
  ariaLabel: "Delete selected scammer reports",
@@ -1758,6 +2160,7 @@ export const ACTIONS = {
1758
2160
  },
1759
2161
  // ── Support ticket management ──────────────────────────────────────────
1760
2162
  "view-ticket": {
2163
+ iconKey: "view",
1761
2164
  id: "admin.view-ticket",
1762
2165
  label: "View Details",
1763
2166
  ariaLabel: "View support ticket details",
@@ -1766,6 +2169,7 @@ export const ACTIONS = {
1766
2169
  permissions: ["admin", "moderator"],
1767
2170
  },
1768
2171
  "close-ticket": {
2172
+ iconKey: "cancel",
1769
2173
  id: "admin.close-ticket",
1770
2174
  label: "Close Tickets",
1771
2175
  ariaLabel: "Close selected tickets",
@@ -1774,6 +2178,7 @@ export const ACTIONS = {
1774
2178
  permissions: ["admin", "moderator"],
1775
2179
  },
1776
2180
  "escalate-ticket": {
2181
+ iconKey: "report",
1777
2182
  id: "admin.escalate-ticket",
1778
2183
  label: "Escalate",
1779
2184
  ariaLabel: "Escalate this ticket",
@@ -1783,6 +2188,7 @@ export const ACTIONS = {
1783
2188
  },
1784
2189
  // ── Event entry management ────────────────────────────────────────────
1785
2190
  "approve-entry": {
2191
+ iconKey: "approve",
1786
2192
  id: "admin.approve-entry",
1787
2193
  label: "Approve Entries",
1788
2194
  ariaLabel: "Approve selected event entries",
@@ -1791,6 +2197,7 @@ export const ACTIONS = {
1791
2197
  permissions: ["admin", "moderator"],
1792
2198
  },
1793
2199
  "reject-entry": {
2200
+ iconKey: "reject",
1794
2201
  id: "admin.reject-entry",
1795
2202
  label: "Reject Entries",
1796
2203
  ariaLabel: "Reject selected event entries",
@@ -1806,6 +2213,7 @@ export const ACTIONS = {
1806
2213
  },
1807
2214
  // ── Event entry management (row-level) ──────────────────────────────
1808
2215
  "confirm-entry": {
2216
+ iconKey: "confirm",
1809
2217
  id: "admin.confirm-entry",
1810
2218
  label: "Confirm",
1811
2219
  ariaLabel: "Confirm this event entry",
@@ -1814,6 +2222,7 @@ export const ACTIONS = {
1814
2222
  permissions: ["admin", "moderator"],
1815
2223
  },
1816
2224
  "waitlist-entry": {
2225
+ iconKey: "pause",
1817
2226
  id: "admin.waitlist-entry",
1818
2227
  label: "Waitlist",
1819
2228
  ariaLabel: "Waitlist this event entry",
@@ -1822,6 +2231,7 @@ export const ACTIONS = {
1822
2231
  permissions: ["admin", "moderator"],
1823
2232
  },
1824
2233
  "cancel-entry": {
2234
+ iconKey: "cancel",
1825
2235
  id: "admin.cancel-entry",
1826
2236
  label: "Cancel",
1827
2237
  ariaLabel: "Cancel this event entry",
@@ -1837,6 +2247,7 @@ export const ACTIONS = {
1837
2247
  },
1838
2248
  // ── Review management (row-level) ─────────────────────────────────
1839
2249
  "feature-review": {
2250
+ iconKey: "review",
1840
2251
  id: "admin.feature-review",
1841
2252
  label: "Feature",
1842
2253
  ariaLabel: "Feature this review",
@@ -1845,6 +2256,7 @@ export const ACTIONS = {
1845
2256
  permissions: ["admin", "moderator"],
1846
2257
  },
1847
2258
  "unfeature-review": {
2259
+ iconKey: "review",
1848
2260
  id: "admin.unfeature-review",
1849
2261
  label: "Unfeature",
1850
2262
  ariaLabel: "Unfeature this review",
@@ -1854,6 +2266,7 @@ export const ACTIONS = {
1854
2266
  },
1855
2267
  // ── Scammer management (row-level) ────────────────────────────────
1856
2268
  "review-scammer": {
2269
+ iconKey: "review",
1857
2270
  id: "admin.review-scammer",
1858
2271
  label: "Review",
1859
2272
  ariaLabel: "Review this scammer report",
@@ -1863,6 +2276,7 @@ export const ACTIONS = {
1863
2276
  },
1864
2277
  // ── Bid management ────────────────────────────────────────────────────
1865
2278
  "cancel-bid": {
2279
+ iconKey: "cancel",
1866
2280
  id: "admin.cancel-bid",
1867
2281
  label: "Cancel Selected",
1868
2282
  ariaLabel: "Cancel selected bids",
@@ -1877,12 +2291,15 @@ export const ACTIONS = {
1877
2291
  },
1878
2292
  },
1879
2293
  "cancel-offer": {
2294
+ iconKey: "cancel",
1880
2295
  id: "admin.cancel-offer",
1881
2296
  label: "Cancel Offer",
1882
2297
  ariaLabel: "Cancel this offer",
1883
2298
  description: "Expire the offer, clear it from the buyer's cart, and notify them. Admin cannot accept or counter on a seller's behalf.",
1884
2299
  kind: "danger",
1885
- permissions: ["admin", "moderator"],
2300
+ // Admin only. The route is ROLES_ADMIN_ONLY, so listing "moderator" here
2301
+ // showed a moderator an action that could only ever return 403.
2302
+ permissions: ["admin"],
1886
2303
  confirmation: {
1887
2304
  title: "Cancel this offer?",
1888
2305
  body: "The offer will be expired and removed from the buyer's cart, and they'll be notified. This cannot be undone — the buyer would need to make a new offer.",
@@ -1892,6 +2309,7 @@ export const ACTIONS = {
1892
2309
  },
1893
2310
  // ── Address ban management ─────────────────────────────────────────────
1894
2311
  "ban-address": {
2312
+ iconKey: "ban",
1895
2313
  id: "admin.ban-address",
1896
2314
  label: "Ban Address",
1897
2315
  ariaLabel: "Ban this address",
@@ -1906,6 +2324,7 @@ export const ACTIONS = {
1906
2324
  },
1907
2325
  },
1908
2326
  "approve-unban": {
2327
+ iconKey: "approve",
1909
2328
  id: "admin.approve-unban",
1910
2329
  label: "Approve Unban",
1911
2330
  ariaLabel: "Approve unban request",
@@ -1914,6 +2333,7 @@ export const ACTIONS = {
1914
2333
  permissions: ["admin"],
1915
2334
  },
1916
2335
  "reject-unban": {
2336
+ iconKey: "reject",
1917
2337
  id: "admin.reject-unban",
1918
2338
  label: "Reject Unban",
1919
2339
  ariaLabel: "Reject unban request",
@@ -1923,6 +2343,7 @@ export const ACTIONS = {
1923
2343
  },
1924
2344
  // ── Payment method ban management ──────────────────────────────────────
1925
2345
  "ban-payment-method": {
2346
+ iconKey: "ban",
1926
2347
  id: "admin.ban-payment-method",
1927
2348
  label: "Ban Payment Method",
1928
2349
  ariaLabel: "Ban this payment method",
@@ -1937,6 +2358,7 @@ export const ACTIONS = {
1937
2358
  },
1938
2359
  },
1939
2360
  "approve-payment-unban": {
2361
+ iconKey: "approve",
1940
2362
  id: "admin.approve-payment-unban",
1941
2363
  label: "Approve Unban",
1942
2364
  ariaLabel: "Approve payment method unban",
@@ -1945,6 +2367,7 @@ export const ACTIONS = {
1945
2367
  permissions: ["admin"],
1946
2368
  },
1947
2369
  "reject-payment-unban": {
2370
+ iconKey: "reject",
1948
2371
  id: "admin.reject-payment-unban",
1949
2372
  label: "Reject Unban",
1950
2373
  ariaLabel: "Reject payment method unban",
@@ -1955,6 +2378,7 @@ export const ACTIONS = {
1955
2378
  },
1956
2379
  CART: {
1957
2380
  "clear-cart": {
2381
+ iconKey: "delete",
1958
2382
  id: "cart.clear",
1959
2383
  label: "Clear cart",
1960
2384
  description: "Remove every item from the buyer's cart.",
@@ -1967,6 +2391,7 @@ export const ACTIONS = {
1967
2391
  },
1968
2392
  },
1969
2393
  "remove-item": {
2394
+ iconKey: "delete",
1970
2395
  id: "cart.remove-item",
1971
2396
  label: "Remove",
1972
2397
  ariaLabel: "Remove item from cart",
@@ -1974,12 +2399,14 @@ export const ACTIONS = {
1974
2399
  kind: "ghost",
1975
2400
  },
1976
2401
  "checkout": {
2402
+ iconKey: "cart",
1977
2403
  id: "cart.checkout",
1978
2404
  label: "Proceed to checkout",
1979
2405
  description: "Navigate from the cart page to the checkout flow.",
1980
2406
  kind: "primary",
1981
2407
  },
1982
2408
  "continue-shopping": {
2409
+ iconKey: "back",
1983
2410
  id: "cart.continue-shopping",
1984
2411
  label: "Continue shopping",
1985
2412
  description: "Navigate back from the cart to the product catalogue.",
@@ -1988,60 +2415,70 @@ export const ACTIONS = {
1988
2415
  },
1989
2416
  CHECKOUT: {
1990
2417
  "place-order": {
2418
+ iconKey: "bid",
1991
2419
  id: "checkout.place-order",
1992
2420
  label: "Place order",
1993
2421
  description: "Submit the order with the chosen payment method.",
1994
2422
  kind: "primary",
1995
2423
  },
1996
2424
  "continue-to-verification": {
2425
+ iconKey: "back",
1997
2426
  id: "checkout.continue-to-verification",
1998
2427
  label: "Continue",
1999
2428
  description: "Advance from address selection to the payment step.",
2000
2429
  kind: "primary",
2001
2430
  },
2002
2431
  "verify-otp": {
2432
+ iconKey: "verify",
2003
2433
  id: "checkout.verify-otp",
2004
2434
  label: "Verify & Continue",
2005
2435
  description: "Submit the high-value-order one-time code and proceed to payment.",
2006
2436
  kind: "primary",
2007
2437
  },
2008
2438
  "resend-otp": {
2439
+ iconKey: "send",
2009
2440
  id: "checkout.resend-otp",
2010
2441
  label: "Resend code",
2011
2442
  description: "Re-send the high-value-order verification code to the buyer's registered email.",
2012
2443
  kind: "ghost",
2013
2444
  },
2014
2445
  "pay-online": {
2446
+ iconKey: "cart",
2015
2447
  id: "checkout.pay-online",
2016
2448
  label: "Pay Online (Razorpay)",
2017
2449
  description: "Initiate an online payment via Razorpay UPI/Card/NetBanking.",
2018
2450
  kind: "primary",
2019
2451
  },
2020
2452
  "pay-cod": {
2453
+ iconKey: "cart",
2021
2454
  id: "checkout.pay-cod",
2022
2455
  label: "Cash on Delivery",
2023
2456
  description: "Place the order for cash-on-delivery payment.",
2024
2457
  kind: "secondary",
2025
2458
  },
2026
2459
  "admin-bypass": {
2460
+ iconKey: "lock",
2027
2461
  id: "checkout.admin-bypass",
2028
2462
  label: "Skip Verification — Admin Bypass",
2029
2463
  description: "Admin test mode: skip identity verification and place a test order without payment.",
2030
2464
  kind: "secondary",
2031
2465
  },
2032
2466
  "admin-bypass-payment": {
2467
+ iconKey: "lock",
2033
2468
  id: "checkout.admin-bypass-payment",
2034
2469
  label: "No Payment — Admin Bypass Order",
2035
2470
  description: "Admin test mode: place a real order record without charging any payment.",
2036
2471
  kind: "secondary",
2037
2472
  },
2038
2473
  "apply-coupon": {
2474
+ iconKey: "confirm",
2039
2475
  id: "checkout.apply-coupon",
2040
2476
  label: "Apply coupon",
2041
2477
  description: "Validate and apply a coupon code at checkout before payment.",
2042
2478
  kind: "secondary",
2043
2479
  },
2044
2480
  "remove-coupon": {
2481
+ iconKey: "delete",
2045
2482
  id: "checkout.remove-coupon",
2046
2483
  label: "Remove coupon",
2047
2484
  description: "Remove an applied coupon from the current checkout session.",
@@ -2050,18 +2487,21 @@ export const ACTIONS = {
2050
2487
  },
2051
2488
  NAV: {
2052
2489
  "sign-in": {
2490
+ iconKey: "user",
2053
2491
  id: "nav.sign-in",
2054
2492
  label: "Sign in",
2055
2493
  description: "Navigate to the sign-in page.",
2056
2494
  kind: "primary",
2057
2495
  },
2058
2496
  "sign-up": {
2497
+ iconKey: "user",
2059
2498
  id: "nav.sign-up",
2060
2499
  label: "Sign up",
2061
2500
  description: "Navigate to the registration page.",
2062
2501
  kind: "secondary",
2063
2502
  },
2064
2503
  "sign-out": {
2504
+ iconKey: "back",
2065
2505
  id: "nav.sign-out",
2066
2506
  label: "Sign out",
2067
2507
  description: "End the current session.",
@@ -2075,6 +2515,7 @@ export const ACTIONS = {
2075
2515
  },
2076
2516
  MEDIA: {
2077
2517
  "copy-url": {
2518
+ iconKey: "duplicate",
2078
2519
  id: "media.copy-url",
2079
2520
  label: "Copy URL",
2080
2521
  ariaLabel: "Copy media URL to clipboard",
@@ -2082,6 +2523,7 @@ export const ACTIONS = {
2082
2523
  kind: "ghost",
2083
2524
  },
2084
2525
  "clear-previews": {
2526
+ iconKey: "delete",
2085
2527
  id: "media.clear-previews",
2086
2528
  label: "Clear previews",
2087
2529
  ariaLabel: "Clear uploaded previews",
@@ -2090,6 +2532,7 @@ export const ACTIONS = {
2090
2532
  permissions: ["admin", "moderator"],
2091
2533
  },
2092
2534
  "discard-staged": {
2535
+ iconKey: "delete",
2093
2536
  id: "media.discard-staged",
2094
2537
  label: "Discard staged uploads",
2095
2538
  ariaLabel: "Discard all staged uploads",
@@ -2106,6 +2549,7 @@ export const ACTIONS = {
2106
2549
  },
2107
2550
  SUPPORT: {
2108
2551
  "create-ticket": {
2552
+ iconKey: "create",
2109
2553
  id: "support.create-ticket",
2110
2554
  label: "Contact Support",
2111
2555
  ariaLabel: "Create a support ticket",
@@ -2113,6 +2557,7 @@ export const ACTIONS = {
2113
2557
  kind: "primary",
2114
2558
  },
2115
2559
  "reply-ticket": {
2560
+ iconKey: "reply",
2116
2561
  id: "support.reply-ticket",
2117
2562
  label: "Reply",
2118
2563
  ariaLabel: "Reply to this ticket",
@@ -2120,6 +2565,7 @@ export const ACTIONS = {
2120
2565
  kind: "primary",
2121
2566
  },
2122
2567
  "close-ticket": {
2568
+ iconKey: "cancel",
2123
2569
  id: "support.close-ticket",
2124
2570
  label: "Close Ticket",
2125
2571
  ariaLabel: "Close this support ticket",
@@ -2134,6 +2580,7 @@ export const ACTIONS = {
2134
2580
  },
2135
2581
  TESTER: {
2136
2582
  "save-note": {
2583
+ iconKey: "save",
2137
2584
  id: "tester.save-note",
2138
2585
  label: "Save Note",
2139
2586
  ariaLabel: "Save comment and screenshot for this step",
@@ -2143,12 +2590,14 @@ export const ACTIONS = {
2143
2590
  },
2144
2591
  LOTTERY: {
2145
2592
  "pull": {
2593
+ iconKey: "retry",
2146
2594
  id: "lottery.pull",
2147
2595
  label: "Submit Entry",
2148
2596
  description: "Submit a lottery pull entry — slot assigned immediately.",
2149
2597
  kind: "primary",
2150
2598
  },
2151
2599
  "flag-entry": {
2600
+ iconKey: "report",
2152
2601
  id: "lottery.flag-entry",
2153
2602
  label: "Flag as Scammer",
2154
2603
  description: "Flag a lottery entry as fraudulent.",
@@ -2162,6 +2611,7 @@ export const ACTIONS = {
2162
2611
  },
2163
2612
  },
2164
2613
  "reopen-slot": {
2614
+ iconKey: "restore",
2165
2615
  id: "lottery.reopen-slot",
2166
2616
  label: "Reopen Slot",
2167
2617
  description: "Free a flagged entry's slot so it can be claimed again.",
@@ -2174,6 +2624,7 @@ export const ACTIONS = {
2174
2624
  },
2175
2625
  },
2176
2626
  "cancel": {
2627
+ iconKey: "cancel",
2177
2628
  id: "lottery.cancel",
2178
2629
  label: "Cancel Lottery",
2179
2630
  description: "Close the draw window and reject pending pulls.",