@develemit/commerce-admin 0.0.0-stage → 0.4.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 (68) hide show
  1. package/README.md +147 -2
  2. package/dist/client/admin-client.d.ts +37 -0
  3. package/dist/client/errors.d.ts +47 -0
  4. package/dist/client/index.d.ts +3 -0
  5. package/dist/client/index.js +1 -0
  6. package/dist/client/map-error.d.ts +2 -0
  7. package/dist/client/transport.d.ts +19 -0
  8. package/dist/client--_j5r8ag.js +168 -0
  9. package/dist/client--_j5r8ag.js.map +1 -0
  10. package/dist/components/admin-layout/admin-layout.d.ts +13 -0
  11. package/dist/components/admin-table/admin-table.d.ts +13 -0
  12. package/dist/components/confirm-dialog/confirm-dialog.d.ts +12 -0
  13. package/dist/components/error-message/error-message.d.ts +5 -0
  14. package/dist/components/money/money.d.ts +5 -0
  15. package/dist/components/notice/notice.d.ts +9 -0
  16. package/dist/components/status-badge/status-badge.d.ts +3 -0
  17. package/dist/index.d.ts +27 -0
  18. package/dist/index.js +2977 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/lib/admin-labels.d.ts +26 -0
  21. package/dist/lib/discount-form.d.ts +28 -0
  22. package/dist/lib/discount-labels.d.ts +56 -0
  23. package/dist/lib/discount-status.d.ts +5 -0
  24. package/dist/lib/image-labels.d.ts +27 -0
  25. package/dist/lib/image-rules.d.ts +4 -0
  26. package/dist/lib/merge-labels.d.ts +19 -0
  27. package/dist/lib/money-input.d.ts +2 -0
  28. package/dist/lib/order-action-labels.d.ts +28 -0
  29. package/dist/lib/order-labels.d.ts +66 -0
  30. package/dist/lib/product-filter.d.ts +6 -0
  31. package/dist/lib/product-form.d.ts +29 -0
  32. package/dist/lib/product-labels.d.ts +52 -0
  33. package/dist/lib/provider.d.ts +45 -0
  34. package/dist/lib/refund-rules.d.ts +7 -0
  35. package/dist/lib/shipping-labels.d.ts +33 -0
  36. package/dist/lib/shipping-rates.d.ts +31 -0
  37. package/dist/lib/use-admin-mutation.d.ts +7 -0
  38. package/dist/lib/use-admin-query.d.ts +7 -0
  39. package/dist/lib/use-debounced.d.ts +1 -0
  40. package/dist/lib/use-discount-pages.d.ts +26 -0
  41. package/dist/lib/use-image-upload.d.ts +18 -0
  42. package/dist/lib/use-order-pages.d.ts +17 -0
  43. package/dist/lib/use-product-pages.d.ts +30 -0
  44. package/dist/styles.css +418 -0
  45. package/dist/views/discounts/admin-discount-editor.d.ts +6 -0
  46. package/dist/views/discounts/admin-discount-list.d.ts +1 -0
  47. package/dist/views/discounts/discount-fields.d.ts +10 -0
  48. package/dist/views/discounts/discount-value.d.ts +4 -0
  49. package/dist/views/orders/admin-order-detail.d.ts +10 -0
  50. package/dist/views/orders/admin-order-list.d.ts +1 -0
  51. package/dist/views/orders/order-actions.d.ts +7 -0
  52. package/dist/views/orders/order-fulfillment.d.ts +4 -0
  53. package/dist/views/orders/order-items.d.ts +4 -0
  54. package/dist/views/orders/order-refunds.d.ts +4 -0
  55. package/dist/views/orders/refund-dialog.d.ts +8 -0
  56. package/dist/views/orders/resolve-button.d.ts +7 -0
  57. package/dist/views/orders/ship-form.d.ts +7 -0
  58. package/dist/views/products/admin-product-editor.d.ts +9 -0
  59. package/dist/views/products/admin-product-images.d.ts +6 -0
  60. package/dist/views/products/admin-product-list.d.ts +1 -0
  61. package/dist/views/products/image-alt-editor.d.ts +9 -0
  62. package/dist/views/products/image-tile.d.ts +15 -0
  63. package/dist/views/products/product-fields.d.ts +12 -0
  64. package/dist/views/products/test-helpers.d.ts +6 -0
  65. package/dist/views/products/upload-picker.d.ts +7 -0
  66. package/dist/views/shipping/admin-shipping-rates.d.ts +4 -0
  67. package/dist/views/shipping/shipping-rate-row.d.ts +15 -0
  68. package/package.json +44 -3
@@ -0,0 +1,418 @@
1
+ .sfa-root {
2
+ color: var(--sf-color-fg, #1a1a1a);
3
+ background: var(--sf-color-bg, #ffffff);
4
+ font-family: var(--sf-font-body, system-ui, sans-serif);
5
+ }
6
+ .sfa-panel {
7
+ border: 1px solid var(--sf-color-border, #e0e0e0);
8
+ border-radius: var(--sf-radius, 4px);
9
+ background: var(--sf-color-surface, #f6f6f6);
10
+ padding: calc(var(--sf-space-unit, 0.25rem) * 4);
11
+ }
12
+ .sfa-btn {
13
+ min-width: 44px;
14
+ min-height: 44px;
15
+ padding: 0 calc(var(--sf-space-unit, 0.25rem) * 4);
16
+ font: inherit;
17
+ font-size: 1rem;
18
+ border: 1px solid var(--sf-color-border, #e0e0e0);
19
+ border-radius: var(--sf-radius, 4px);
20
+ background: var(--sf-color-bg, #ffffff);
21
+ color: inherit;
22
+ cursor: pointer;
23
+ }
24
+ .sfa-btn--primary {
25
+ background: var(--sf-color-accent, #1a1a1a);
26
+ color: var(--sf-color-accent-fg, #ffffff);
27
+ }
28
+ .sfa-btn--danger {
29
+ background: var(--sf-color-danger, #b00020);
30
+ color: #ffffff;
31
+ }
32
+ .sfa-layout {
33
+ display: flex;
34
+ flex-direction: column;
35
+ min-height: 100vh;
36
+ }
37
+ .sfa-nav ul {
38
+ display: flex;
39
+ flex-wrap: wrap;
40
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
41
+ margin: 0;
42
+ padding: calc(var(--sf-space-unit, 0.25rem) * 2);
43
+ list-style: none;
44
+ }
45
+ .sfa-nav__link {
46
+ display: inline-flex;
47
+ align-items: center;
48
+ min-height: 44px;
49
+ padding: 0 calc(var(--sf-space-unit, 0.25rem) * 3);
50
+ }
51
+ /* Bare inline links measure ~22px; hosts cannot restyle kit internals. */
52
+ .sfa-link--tap {
53
+ display: inline-flex;
54
+ align-items: center;
55
+ min-height: 44px;
56
+ padding: 0 calc(var(--sf-space-unit, 0.25rem) * 2);
57
+ }
58
+ .sfa-layout__content {
59
+ flex: 1;
60
+ padding: calc(var(--sf-space-unit, 0.25rem) * 4);
61
+ }
62
+ .sfa-badge {
63
+ display: inline-block;
64
+ padding: 2px 10px;
65
+ border-radius: 999px;
66
+ background: var(--sf-color-surface, #f6f6f6);
67
+ border: 1px solid var(--sf-color-border, #e0e0e0);
68
+ font-size: 0.875rem;
69
+ }
70
+ .sfa-badge--needs-attention {
71
+ border-color: var(--sf-color-danger, #b00020);
72
+ }
73
+ .sfa-badge--refund-pending {
74
+ border-color: var(--sf-color-warning, #b26a00);
75
+ color: var(--sf-color-warning, #b26a00);
76
+ }
77
+ .sfa-badge--refund-succeeded {
78
+ border-color: var(--sf-color-success, #1b7a3d);
79
+ color: var(--sf-color-success, #1b7a3d);
80
+ }
81
+ .sfa-table {
82
+ width: 100%;
83
+ border-collapse: collapse;
84
+ }
85
+ .sfa-table th,
86
+ .sfa-table td {
87
+ padding: calc(var(--sf-space-unit, 0.25rem) * 2);
88
+ text-align: left;
89
+ border-bottom: 1px solid var(--sf-color-border, #e0e0e0);
90
+ }
91
+ @media (max-width: 640px) {
92
+ .sfa-table--stacked thead {
93
+ position: absolute;
94
+ width: 1px;
95
+ height: 1px;
96
+ overflow: hidden;
97
+ clip: rect(0 0 0 0);
98
+ }
99
+ .sfa-table--stacked,
100
+ .sfa-table--stacked tbody,
101
+ .sfa-table--stacked tr,
102
+ .sfa-table--stacked td {
103
+ display: block;
104
+ }
105
+ .sfa-table--stacked tr {
106
+ margin-bottom: calc(var(--sf-space-unit, 0.25rem) * 3);
107
+ border: 1px solid var(--sf-color-border, #e0e0e0);
108
+ border-radius: var(--sf-radius, 4px);
109
+ }
110
+ .sfa-table--stacked td::before {
111
+ content: attr(data-label);
112
+ display: block;
113
+ font-size: 0.75rem;
114
+ opacity: 0.7;
115
+ }
116
+ }
117
+ .sfa-notice {
118
+ display: flex;
119
+ align-items: center;
120
+ justify-content: space-between;
121
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
122
+ padding: calc(var(--sf-space-unit, 0.25rem) * 3);
123
+ border: 1px solid var(--sf-color-border, #e0e0e0);
124
+ border-radius: var(--sf-radius, 4px);
125
+ }
126
+ .sfa-notice--error {
127
+ border-color: var(--sf-color-danger, #b00020);
128
+ }
129
+ .sfa-notice--toast {
130
+ position: fixed;
131
+ left: 50%;
132
+ transform: translateX(-50%);
133
+ bottom: calc(env(safe-area-inset-bottom, 0px) + 16px);
134
+ background: var(--sf-color-bg, #ffffff);
135
+ z-index: 60;
136
+ }
137
+ .sfa-dialog-backdrop {
138
+ position: fixed;
139
+ inset: 0;
140
+ display: flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ background: rgba(0, 0, 0, 0.5);
144
+ z-index: 50;
145
+ }
146
+ .sfa-dialog {
147
+ width: min(92vw, 28rem);
148
+ padding: calc(var(--sf-space-unit, 0.25rem) * 5);
149
+ background: var(--sf-color-bg, #ffffff);
150
+ border-radius: var(--sf-radius, 4px);
151
+ }
152
+ .sfa-dialog__actions {
153
+ display: flex;
154
+ justify-content: flex-end;
155
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
156
+ margin-top: calc(var(--sf-space-unit, 0.25rem) * 4);
157
+ }
158
+ .sfa-root input,
159
+ .sfa-root select,
160
+ .sfa-root textarea {
161
+ font-size: 1rem;
162
+ min-height: 44px;
163
+ }
164
+ .sfa-filter-group {
165
+ display: flex;
166
+ flex-wrap: nowrap;
167
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
168
+ min-width: 0;
169
+ max-width: 100%;
170
+ box-sizing: border-box;
171
+ padding: 3px;
172
+ overflow-x: auto;
173
+ overscroll-behavior-x: contain;
174
+ scrollbar-width: none;
175
+ }
176
+ .sfa-filter-group::-webkit-scrollbar {
177
+ display: none;
178
+ }
179
+ .sfa-filter-group .sfa-filter {
180
+ flex-shrink: 0;
181
+ white-space: nowrap;
182
+ }
183
+ .sfa-products__header {
184
+ display: flex;
185
+ flex-wrap: wrap;
186
+ align-items: center;
187
+ justify-content: space-between;
188
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
189
+ }
190
+ .sfa-products__toolbar {
191
+ display: flex;
192
+ flex-wrap: wrap;
193
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
194
+ margin: calc(var(--sf-space-unit, 0.25rem) * 4) 0;
195
+ }
196
+ .sfa-filter[aria-pressed='true'] {
197
+ background: var(--sf-color-accent, #1a1a1a);
198
+ color: var(--sf-color-accent-fg, #ffffff);
199
+ }
200
+ .sfa-thumb {
201
+ display: inline-flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ width: 48px;
205
+ height: 48px;
206
+ object-fit: cover;
207
+ border-radius: var(--sf-radius, 4px);
208
+ background: var(--sf-color-surface, #f6f6f6);
209
+ font-size: 0.625rem;
210
+ text-align: center;
211
+ }
212
+ .sfa-row-actions {
213
+ display: flex;
214
+ flex-wrap: wrap;
215
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
216
+ }
217
+ .sfa-row-actions a.sfa-btn {
218
+ display: inline-flex;
219
+ align-items: center;
220
+ text-decoration: none;
221
+ }
222
+ .sfa-form {
223
+ display: flex;
224
+ flex-direction: column;
225
+ gap: calc(var(--sf-space-unit, 0.25rem) * 4);
226
+ max-width: 40rem;
227
+ }
228
+ .sfa-field {
229
+ display: flex;
230
+ flex-direction: column;
231
+ gap: calc(var(--sf-space-unit, 0.25rem) * 1);
232
+ }
233
+ .sfa-field__label {
234
+ font-weight: 600;
235
+ }
236
+ .sfa-field__help {
237
+ margin: 0;
238
+ font-size: 0.875rem;
239
+ opacity: 0.75;
240
+ }
241
+ .sfa-field__error {
242
+ margin: 0;
243
+ font-size: 0.875rem;
244
+ color: var(--sf-color-danger, #b00020);
245
+ }
246
+ .sfa-field [aria-invalid='true'] {
247
+ border-color: var(--sf-color-danger, #b00020);
248
+ }
249
+ .sfa-check {
250
+ display: flex;
251
+ align-items: center;
252
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
253
+ min-height: 44px;
254
+ }
255
+ .sfa-check input {
256
+ width: 24px;
257
+ height: 24px;
258
+ min-height: 24px;
259
+ }
260
+ .sfa-sr-only {
261
+ position: absolute;
262
+ width: 1px;
263
+ height: 1px;
264
+ overflow: hidden;
265
+ clip: rect(0 0 0 0);
266
+ white-space: nowrap;
267
+ }
268
+ .sfa-image-picker {
269
+ display: flex;
270
+ flex-wrap: wrap;
271
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
272
+ }
273
+ .sfa-image-picker__btn {
274
+ position: relative;
275
+ display: inline-flex;
276
+ align-items: center;
277
+ cursor: pointer;
278
+ }
279
+ .sfa-image-picker__btn:focus-within {
280
+ outline: 2px solid var(--sf-color-accent, #1a1a1a);
281
+ outline-offset: 2px;
282
+ }
283
+ .sfa-image-grid {
284
+ display: grid;
285
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
286
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
287
+ margin: 0;
288
+ padding: 0;
289
+ list-style: none;
290
+ }
291
+ .sfa-image-tile {
292
+ position: relative;
293
+ display: flex;
294
+ flex-direction: column;
295
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
296
+ min-width: 120px;
297
+ padding: calc(var(--sf-space-unit, 0.25rem) * 2);
298
+ border: 1px solid var(--sf-color-border, #e0e0e0);
299
+ border-radius: var(--sf-radius, 4px);
300
+ }
301
+ .sfa-image-tile[aria-busy='true'] {
302
+ opacity: 0.7;
303
+ }
304
+ .sfa-image-tile__img {
305
+ width: 100%;
306
+ aspect-ratio: 1;
307
+ object-fit: cover;
308
+ }
309
+ .sfa-image-tile__cover {
310
+ position: absolute;
311
+ top: calc(var(--sf-space-unit, 0.25rem) * 3);
312
+ left: calc(var(--sf-space-unit, 0.25rem) * 3);
313
+ padding: 0 calc(var(--sf-space-unit, 0.25rem) * 2);
314
+ border-radius: var(--sf-radius, 4px);
315
+ background: var(--sf-color-accent, #1a1a1a);
316
+ color: var(--sf-color-accent-fg, #ffffff);
317
+ font-size: 0.75rem;
318
+ }
319
+ .sfa-image-tile__actions {
320
+ display: flex;
321
+ flex-direction: column;
322
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
323
+ }
324
+ .sfa-image-tile__alt {
325
+ display: flex;
326
+ flex-direction: column;
327
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
328
+ }
329
+ .sfa-spinner {
330
+ font-size: 0.875rem;
331
+ }
332
+ .sfa-spinner::before {
333
+ content: '';
334
+ display: inline-block;
335
+ width: 1em;
336
+ height: 1em;
337
+ margin-right: 0.5em;
338
+ vertical-align: -0.125em;
339
+ border: 2px solid currentColor;
340
+ border-top-color: transparent;
341
+ border-radius: 50%;
342
+ animation: sfa-spin 0.8s linear infinite;
343
+ }
344
+ @keyframes sfa-spin {
345
+ to {
346
+ transform: rotate(360deg);
347
+ }
348
+ }
349
+ @media (prefers-reduced-motion: reduce) {
350
+ .sfa-spinner::before {
351
+ animation: none;
352
+ }
353
+ }
354
+ .sfa-orders__toolbar {
355
+ display: flex;
356
+ flex-wrap: wrap;
357
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
358
+ margin: calc(var(--sf-space-unit, 0.25rem) * 4) 0;
359
+ }
360
+ .sfa-orders__more {
361
+ margin-top: calc(var(--sf-space-unit, 0.25rem) * 4);
362
+ }
363
+ .sfa-order__header {
364
+ display: flex;
365
+ flex-wrap: wrap;
366
+ align-items: center;
367
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
368
+ }
369
+ .sfa-order__section {
370
+ margin-top: calc(var(--sf-space-unit, 0.25rem) * 6);
371
+ }
372
+ .sfa-order__totals {
373
+ display: grid;
374
+ grid-template-columns: auto auto;
375
+ justify-content: end;
376
+ gap: calc(var(--sf-space-unit, 0.25rem) * 1)
377
+ calc(var(--sf-space-unit, 0.25rem) * 4);
378
+ margin-top: calc(var(--sf-space-unit, 0.25rem) * 3);
379
+ }
380
+ .sfa-order__address {
381
+ font-style: normal;
382
+ }
383
+ .sfa-order__refund--pending {
384
+ font-style: italic;
385
+ }
386
+ .sfa-order__actions,
387
+ .sfa-order__action {
388
+ display: grid;
389
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
390
+ justify-items: start;
391
+ }
392
+ .sfa-rates {
393
+ list-style: none;
394
+ margin: calc(var(--sf-space-unit, 0.25rem) * 4) 0;
395
+ padding: 0;
396
+ display: grid;
397
+ gap: calc(var(--sf-space-unit, 0.25rem) * 4);
398
+ }
399
+ .sfa-rate {
400
+ display: grid;
401
+ grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
402
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
403
+ align-items: end;
404
+ padding: calc(var(--sf-space-unit, 0.25rem) * 4);
405
+ border: 1px solid var(--sf-color-border, #d4d4d4);
406
+ border-radius: var(--sf-radius, 4px);
407
+ }
408
+ .sfa-rate__active {
409
+ display: flex;
410
+ align-items: center;
411
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
412
+ }
413
+ .sfa-rate__actions,
414
+ .sfa-shipping__actions {
415
+ display: flex;
416
+ flex-wrap: wrap;
417
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
418
+ }
@@ -0,0 +1,6 @@
1
+ import { Discount } from '@develemit/commerce-contracts';
2
+ export interface AdminDiscountEditorProps {
3
+ discountId?: string;
4
+ onSaved?: (discount: Discount) => void;
5
+ }
6
+ export declare function AdminDiscountEditor({ discountId, onSaved, }: AdminDiscountEditorProps): import('react').JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function AdminDiscountList(): import('react').JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { DiscountFieldErrors, DiscountForm } from '../../lib/discount-form';
2
+ import { DiscountLabels } from '../../lib/discount-labels';
3
+ export interface DiscountFieldsProps {
4
+ form: DiscountForm;
5
+ errors: DiscountFieldErrors;
6
+ labels: DiscountLabels;
7
+ usedCount: number;
8
+ onChange: <K extends keyof DiscountForm>(field: K, value: DiscountForm[K]) => void;
9
+ }
10
+ export declare function DiscountFields({ form, errors, labels, usedCount, onChange, }: DiscountFieldsProps): import('react').JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { Discount } from '@develemit/commerce-contracts';
2
+ export declare function DiscountValue({ discount }: {
3
+ discount: Discount;
4
+ }): import('react').JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ import { AdminOrderDetail as OrderDetail } from '@develemit/commerce-contracts';
3
+ export interface AdminOrderDetailProps {
4
+ orderId: string;
5
+ actions?: (ctx: {
6
+ order: OrderDetail;
7
+ reload: () => void;
8
+ }) => ReactNode;
9
+ }
10
+ export declare function AdminOrderDetail({ orderId, actions }: AdminOrderDetailProps): import('react').JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function AdminOrderList(): import('react').JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { AdminOrderDetail } from '@develemit/commerce-contracts';
2
+ interface OrderActionsProps {
3
+ order: AdminOrderDetail;
4
+ reload: () => void;
5
+ }
6
+ export declare function OrderActions({ order, reload }: OrderActionsProps): import('react').JSX.Element;
7
+ export {};
@@ -0,0 +1,4 @@
1
+ import { AdminOrderDetail } from '@develemit/commerce-contracts';
2
+ export declare function OrderFulfillment({ order }: {
3
+ order: AdminOrderDetail;
4
+ }): import('react').JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { AdminOrderDetail } from '@develemit/commerce-contracts';
2
+ export declare function OrderItems({ order }: {
3
+ order: AdminOrderDetail;
4
+ }): import('react').JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { AdminOrderDetail } from '@develemit/commerce-contracts';
2
+ export declare function OrderRefunds({ order }: {
3
+ order: AdminOrderDetail;
4
+ }): import('react').JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { AdminOrderDetail } from '@develemit/commerce-contracts';
2
+ interface RefundDialogProps {
3
+ order: AdminOrderDetail;
4
+ onClose: () => void;
5
+ onDone: (message: string) => void;
6
+ }
7
+ export declare function RefundDialog({ order, onClose, onDone }: RefundDialogProps): import('react').JSX.Element;
8
+ export {};
@@ -0,0 +1,7 @@
1
+ import { AdminOrderDetail } from '@develemit/commerce-contracts';
2
+ interface ResolveButtonProps {
3
+ order: AdminOrderDetail;
4
+ onDone: (message: string) => void;
5
+ }
6
+ export declare function ResolveButton({ order, onDone }: ResolveButtonProps): import('react').JSX.Element;
7
+ export {};
@@ -0,0 +1,7 @@
1
+ import { AdminOrderDetail } from '@develemit/commerce-contracts';
2
+ interface ShipFormProps {
3
+ order: AdminOrderDetail;
4
+ onDone: (message: string) => void;
5
+ }
6
+ export declare function ShipForm({ order, onDone }: ShipFormProps): import('react').JSX.Element;
7
+ export {};
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ import { AdminProduct } from '@develemit/commerce-contracts';
3
+ export interface AdminProductEditorProps {
4
+ productId?: string;
5
+ onSaved?: (product: AdminProduct) => void;
6
+ imagesSlot?: ReactNode;
7
+ categories?: string[];
8
+ }
9
+ export declare function AdminProductEditor({ productId, onSaved, imagesSlot, categories, }: AdminProductEditorProps): import('react').JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { AdminProductImage } from './image-tile';
2
+ export interface AdminProductImagesProps {
3
+ productId: string;
4
+ images: AdminProductImage[];
5
+ }
6
+ export declare function AdminProductImages({ productId, images: initial, }: AdminProductImagesProps): import('react').JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function AdminProductList(): import('react').JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { ImageLabels } from '../../lib/image-labels';
2
+ export interface ImageAltEditorProps {
3
+ imageId: string;
4
+ alt: string;
5
+ name: string;
6
+ labels: ImageLabels;
7
+ onSave: (alt: string) => Promise<void>;
8
+ }
9
+ export declare function ImageAltEditor({ imageId, alt, name, labels, onSave, }: ImageAltEditorProps): import('react').JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { AdminProduct } from '@develemit/commerce-contracts';
2
+ import { ImageLabels } from '../../lib/image-labels';
3
+ export type AdminProductImage = AdminProduct['images'][number];
4
+ export type MoveDirection = 'earlier' | 'later';
5
+ export interface ImageTileProps {
6
+ image: AdminProductImage;
7
+ index: number;
8
+ total: number;
9
+ busy: boolean;
10
+ labels: ImageLabels;
11
+ onMove: (direction: MoveDirection) => void;
12
+ onRemove: () => void;
13
+ onSaveAlt: (alt: string) => Promise<void>;
14
+ }
15
+ export declare function ImageTile({ image, index, total, busy, labels, onMove, onRemove, onSaveAlt, }: ImageTileProps): import('react').JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { FieldErrors, ProductForm } from '../../lib/product-form';
2
+ import { ProductLabels } from '../../lib/product-labels';
3
+ export interface FieldGroupProps {
4
+ form: ProductForm;
5
+ errors: FieldErrors;
6
+ labels: ProductLabels;
7
+ statusLabels: Record<string, string>;
8
+ categories?: string[];
9
+ onChange: <K extends keyof ProductForm>(field: K, value: ProductForm[K]) => void;
10
+ }
11
+ export declare function DetailsFields({ form, errors, labels, categories, onChange, }: FieldGroupProps): import('react').JSX.Element;
12
+ export declare function SalesFields({ form, errors, labels, statusLabels, onChange, }: FieldGroupProps): import('react').JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ import { AdminProduct } from '@develemit/commerce-contracts';
3
+ import { AdminClient } from '../../client';
4
+ import { AdminProviderProps } from '../../lib/provider';
5
+ export declare function product(overrides?: Partial<AdminProduct>): AdminProduct;
6
+ export declare function withAdmin(client: Partial<AdminClient>, children: ReactNode, props?: Partial<AdminProviderProps>): import('react').JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { ImageLabels } from '../../lib/image-labels';
2
+ interface UploadPickerProps {
3
+ labels: ImageLabels;
4
+ onFiles: (files: File[]) => void;
5
+ }
6
+ export declare function UploadPicker({ labels, onFiles }: UploadPickerProps): import('react').JSX.Element;
7
+ export {};
@@ -0,0 +1,4 @@
1
+ export interface AdminShippingRatesProps {
2
+ onDirtyChange?: (dirty: boolean) => void;
3
+ }
4
+ export declare function AdminShippingRates({ onDirtyChange }: AdminShippingRatesProps): import('react').JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { RateDraft, RateErrors } from '../../lib/shipping-rates';
2
+ import { ShippingLabels } from '../../lib/shipping-labels';
3
+ export type RateMove = 'earlier' | 'later';
4
+ export interface ShippingRateRowProps {
5
+ draft: RateDraft;
6
+ index: number;
7
+ total: number;
8
+ errors: RateErrors;
9
+ disabled: boolean;
10
+ labels: ShippingLabels;
11
+ onChange: (patch: Partial<RateDraft>) => void;
12
+ onMove: (direction: RateMove) => void;
13
+ onRemove: () => void;
14
+ }
15
+ export declare function ShippingRateRow({ draft, index, total, errors, disabled, labels, onChange, onMove, onRemove, }: ShippingRateRowProps): import('react').JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,47 @@
1
1
  {
2
2
  "name": "@develemit/commerce-admin",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.4.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ "./package.json": "./package.json",
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./client": {
16
+ "types": "./dist/client/index.d.ts",
17
+ "import": "./dist/client/index.js",
18
+ "default": "./dist/client/index.js"
19
+ },
20
+ "./styles.css": "./dist/styles.css"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "!**/*.tsbuildinfo"
25
+ ],
26
+ "nx": {
27
+ "name": "commerce-admin",
28
+ "tags": [
29
+ "scope:admin",
30
+ "type:lib"
31
+ ]
32
+ },
33
+ "peerDependencies": {
34
+ "react": "^19.0.0",
35
+ "react-dom": "^19.0.0"
36
+ },
37
+ "license": "MIT",
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "dependencies": {
42
+ "@develemit/commerce-contracts": "0.4.0"
43
+ },
44
+ "devDependencies": {
45
+ "@testing-library/user-event": "^14.6.8"
46
+ }
6
47
  }