@rovela-ai/sdk 0.5.15 → 0.5.17

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 (128) hide show
  1. package/dist/admin/api/customers.d.ts +40 -1
  2. package/dist/admin/api/customers.d.ts.map +1 -1
  3. package/dist/admin/api/customers.js +136 -8
  4. package/dist/admin/api/customers.js.map +1 -1
  5. package/dist/admin/api/index.d.ts +1 -1
  6. package/dist/admin/api/index.d.ts.map +1 -1
  7. package/dist/admin/api/index.js +3 -1
  8. package/dist/admin/api/index.js.map +1 -1
  9. package/dist/admin/components/CustomerAddressPanel.d.ts +12 -0
  10. package/dist/admin/components/CustomerAddressPanel.d.ts.map +1 -0
  11. package/dist/admin/components/CustomerAddressPanel.js +172 -0
  12. package/dist/admin/components/CustomerAddressPanel.js.map +1 -0
  13. package/dist/admin/components/CustomerDetails.d.ts.map +1 -1
  14. package/dist/admin/components/CustomerDetails.js +9 -4
  15. package/dist/admin/components/CustomerDetails.js.map +1 -1
  16. package/dist/admin/hooks/useAdminCustomers.d.ts.map +1 -1
  17. package/dist/admin/hooks/useAdminCustomers.js +31 -0
  18. package/dist/admin/hooks/useAdminCustomers.js.map +1 -1
  19. package/dist/admin/index.d.ts +1 -1
  20. package/dist/admin/index.d.ts.map +1 -1
  21. package/dist/admin/index.js.map +1 -1
  22. package/dist/admin/types.d.ts +46 -0
  23. package/dist/admin/types.d.ts.map +1 -1
  24. package/dist/auth/api/address.d.ts +27 -0
  25. package/dist/auth/api/address.d.ts.map +1 -0
  26. package/dist/auth/api/address.js +73 -0
  27. package/dist/auth/api/address.js.map +1 -0
  28. package/dist/auth/api/addresses.d.ts +54 -0
  29. package/dist/auth/api/addresses.d.ts.map +1 -0
  30. package/dist/auth/api/addresses.js +152 -0
  31. package/dist/auth/api/addresses.js.map +1 -0
  32. package/dist/auth/api/index.d.ts +4 -0
  33. package/dist/auth/api/index.d.ts.map +1 -1
  34. package/dist/auth/api/index.js +5 -0
  35. package/dist/auth/api/index.js.map +1 -1
  36. package/dist/auth/components/AddressBook.d.ts +7 -0
  37. package/dist/auth/components/AddressBook.d.ts.map +1 -0
  38. package/dist/auth/components/AddressBook.js +86 -0
  39. package/dist/auth/components/AddressBook.js.map +1 -0
  40. package/dist/auth/components/AddressForm.d.ts +20 -0
  41. package/dist/auth/components/AddressForm.d.ts.map +1 -0
  42. package/dist/auth/components/AddressForm.js +86 -0
  43. package/dist/auth/components/AddressForm.js.map +1 -0
  44. package/dist/auth/components/index.d.ts +4 -0
  45. package/dist/auth/components/index.d.ts.map +1 -1
  46. package/dist/auth/components/index.js +2 -0
  47. package/dist/auth/components/index.js.map +1 -1
  48. package/dist/auth/hooks/index.d.ts +2 -0
  49. package/dist/auth/hooks/index.d.ts.map +1 -1
  50. package/dist/auth/hooks/index.js +1 -0
  51. package/dist/auth/hooks/index.js.map +1 -1
  52. package/dist/auth/hooks/useAddresses.d.ts +44 -0
  53. package/dist/auth/hooks/useAddresses.d.ts.map +1 -0
  54. package/dist/auth/hooks/useAddresses.js +167 -0
  55. package/dist/auth/hooks/useAddresses.js.map +1 -0
  56. package/dist/auth/index.d.ts +6 -0
  57. package/dist/auth/index.d.ts.map +1 -1
  58. package/dist/auth/index.js +3 -0
  59. package/dist/auth/index.js.map +1 -1
  60. package/dist/auth/server/customer-service.d.ts +1 -0
  61. package/dist/auth/server/customer-service.d.ts.map +1 -1
  62. package/dist/auth/server/customer-service.js +6 -0
  63. package/dist/auth/server/customer-service.js.map +1 -1
  64. package/dist/cart/components/CartItem.d.ts.map +1 -1
  65. package/dist/cart/components/CartItem.js +13 -7
  66. package/dist/cart/components/CartItem.js.map +1 -1
  67. package/dist/cart/store.d.ts.map +1 -1
  68. package/dist/cart/store.js +1 -0
  69. package/dist/cart/store.js.map +1 -1
  70. package/dist/checkout/api/checkout.d.ts.map +1 -1
  71. package/dist/checkout/api/checkout.js +1 -0
  72. package/dist/checkout/api/checkout.js.map +1 -1
  73. package/dist/checkout/components/CheckoutFlow.d.ts.map +1 -1
  74. package/dist/checkout/components/CheckoutFlow.js +64 -3
  75. package/dist/checkout/components/CheckoutFlow.js.map +1 -1
  76. package/dist/checkout/components/OrderTimeline.d.ts +10 -0
  77. package/dist/checkout/components/OrderTimeline.d.ts.map +1 -0
  78. package/dist/checkout/components/OrderTimeline.js +54 -0
  79. package/dist/checkout/components/OrderTimeline.js.map +1 -0
  80. package/dist/checkout/components/index.d.ts +2 -0
  81. package/dist/checkout/components/index.d.ts.map +1 -1
  82. package/dist/checkout/components/index.js +1 -0
  83. package/dist/checkout/components/index.js.map +1 -1
  84. package/dist/checkout/hooks/useCheckout.d.ts.map +1 -1
  85. package/dist/checkout/hooks/useCheckout.js +1 -0
  86. package/dist/checkout/hooks/useCheckout.js.map +1 -1
  87. package/dist/checkout/index.d.ts +2 -1
  88. package/dist/checkout/index.d.ts.map +1 -1
  89. package/dist/checkout/index.js +1 -1
  90. package/dist/checkout/index.js.map +1 -1
  91. package/dist/checkout/server/create-checkout-session.d.ts.map +1 -1
  92. package/dist/checkout/server/create-checkout-session.js +20 -0
  93. package/dist/checkout/server/create-checkout-session.js.map +1 -1
  94. package/dist/checkout/server/order-service.d.ts.map +1 -1
  95. package/dist/checkout/server/order-service.js +30 -4
  96. package/dist/checkout/server/order-service.js.map +1 -1
  97. package/dist/checkout/types.d.ts +11 -0
  98. package/dist/checkout/types.d.ts.map +1 -1
  99. package/dist/core/StoreSettingsProvider.d.ts +2 -0
  100. package/dist/core/StoreSettingsProvider.d.ts.map +1 -1
  101. package/dist/core/StoreSettingsProvider.js +2 -0
  102. package/dist/core/StoreSettingsProvider.js.map +1 -1
  103. package/dist/core/api/settings.d.ts +1 -0
  104. package/dist/core/api/settings.d.ts.map +1 -1
  105. package/dist/core/api/settings.js +2 -0
  106. package/dist/core/api/settings.js.map +1 -1
  107. package/dist/core/db/index.d.ts +2 -2
  108. package/dist/core/db/index.d.ts.map +1 -1
  109. package/dist/core/db/index.js +2 -0
  110. package/dist/core/db/index.js.map +1 -1
  111. package/dist/core/db/queries.d.ts +125 -10
  112. package/dist/core/db/queries.d.ts.map +1 -1
  113. package/dist/core/db/queries.js +221 -0
  114. package/dist/core/db/queries.js.map +1 -1
  115. package/dist/core/db/schema.d.ts +382 -5
  116. package/dist/core/db/schema.d.ts.map +1 -1
  117. package/dist/core/db/schema.js +45 -0
  118. package/dist/core/db/schema.js.map +1 -1
  119. package/dist/core/server/index.d.ts +2 -2
  120. package/dist/core/server/index.d.ts.map +1 -1
  121. package/dist/core/server/index.js +2 -0
  122. package/dist/core/server/index.js.map +1 -1
  123. package/dist/core/server/sanitize.d.ts.map +1 -1
  124. package/dist/core/server/sanitize.js +11 -5
  125. package/dist/core/server/sanitize.js.map +1 -1
  126. package/dist/core/types.d.ts +4 -0
  127. package/dist/core/types.d.ts.map +1 -1
  128. package/package.json +9 -1
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @rovela/sdk/auth/api/addresses
3
+ *
4
+ * Customer address-book API — list + create. requireCustomer-gated.
5
+ *
6
+ * Usage:
7
+ * ```typescript
8
+ * // app/api/account/addresses/route.ts
9
+ * export { GET, POST } from '@rovela-ai/sdk/auth/api/addresses'
10
+ * ```
11
+ */
12
+ import { NextRequest } from 'next/server';
13
+ import { type CustomerAddressInput } from '../../core/db/queries';
14
+ import type { CustomerAddress } from '../../core/db/schema';
15
+ type AddressRow = CustomerAddress;
16
+ /** Client-facing address shape (no owner/internal columns beyond id). */
17
+ export interface CustomerAddressDto {
18
+ id: string;
19
+ label: string | null;
20
+ firstName: string;
21
+ lastName: string;
22
+ company: string | null;
23
+ line1: string;
24
+ line2: string | null;
25
+ city: string;
26
+ state: string | null;
27
+ postalCode: string;
28
+ country: string;
29
+ phone: string | null;
30
+ isDefaultShipping: boolean;
31
+ isDefaultBilling: boolean;
32
+ createdAt: string | Date;
33
+ updatedAt: string | Date;
34
+ }
35
+ export declare function serializeAddress(a: AddressRow): CustomerAddressDto;
36
+ /**
37
+ * Validate a full address body (create). Returns `{data}` or `{error}`.
38
+ * Required: firstName, lastName, line1, city, postalCode, country (ISO-2).
39
+ */
40
+ export declare function parseAddressBody(body: unknown): {
41
+ data: CustomerAddressInput;
42
+ } | {
43
+ error: string;
44
+ };
45
+ /** Validate a PARTIAL address body (update) — only provided keys are set. */
46
+ export declare function parsePartialAddressBody(body: unknown): {
47
+ data: Partial<CustomerAddressInput>;
48
+ } | {
49
+ error: string;
50
+ };
51
+ export declare function GET(): Promise<Response>;
52
+ export declare function POST(request: NextRequest): Promise<Response>;
53
+ export {};
54
+ //# sourceMappingURL=addresses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../../src/auth/api/addresses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,KAAK,UAAU,GAAG,eAAe,CAAA;AAEjC,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,EAAE,OAAO,CAAA;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,kBAAkB,CAmBlE;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GACZ;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CA+BpD;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,GACZ;IAAE,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAgC7D;AAED,wBAAsB,GAAG,sBAUxB;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,qBAY9C"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * @rovela/sdk/auth/api/addresses
3
+ *
4
+ * Customer address-book API — list + create. requireCustomer-gated.
5
+ *
6
+ * Usage:
7
+ * ```typescript
8
+ * // app/api/account/addresses/route.ts
9
+ * export { GET, POST } from '@rovela-ai/sdk/auth/api/addresses'
10
+ * ```
11
+ */
12
+ import { requireCustomer } from '../server/customer-session';
13
+ import { listCustomerAddresses, createCustomerAddress, } from '../../core/db/queries';
14
+ export function serializeAddress(a) {
15
+ return {
16
+ id: a.id,
17
+ label: a.label ?? null,
18
+ firstName: a.firstName,
19
+ lastName: a.lastName,
20
+ company: a.company ?? null,
21
+ line1: a.line1,
22
+ line2: a.line2 ?? null,
23
+ city: a.city,
24
+ state: a.state ?? null,
25
+ postalCode: a.postalCode,
26
+ country: a.country,
27
+ phone: a.phone ?? null,
28
+ isDefaultShipping: !!a.isDefaultShipping,
29
+ isDefaultBilling: !!a.isDefaultBilling,
30
+ createdAt: a.createdAt,
31
+ updatedAt: a.updatedAt,
32
+ };
33
+ }
34
+ const s = (v, max) => {
35
+ if (typeof v !== 'string')
36
+ return null;
37
+ const t = v.trim();
38
+ return t ? t.slice(0, max) : null;
39
+ };
40
+ /**
41
+ * Validate a full address body (create). Returns `{data}` or `{error}`.
42
+ * Required: firstName, lastName, line1, city, postalCode, country (ISO-2).
43
+ */
44
+ export function parseAddressBody(body) {
45
+ if (!body || typeof body !== 'object')
46
+ return { error: 'Invalid request body' };
47
+ const b = body;
48
+ const firstName = s(b.firstName, 255);
49
+ const lastName = s(b.lastName, 255);
50
+ const line1 = s(b.line1, 255);
51
+ const city = s(b.city, 255);
52
+ const postalCode = s(b.postalCode, 40);
53
+ const countryRaw = s(b.country, 2);
54
+ if (!firstName || !lastName)
55
+ return { error: 'First and last name are required' };
56
+ if (!line1)
57
+ return { error: 'Address line 1 is required' };
58
+ if (!city)
59
+ return { error: 'City is required' };
60
+ if (!postalCode)
61
+ return { error: 'Postal code is required' };
62
+ if (!countryRaw || countryRaw.length !== 2)
63
+ return { error: 'A valid 2-letter country is required' };
64
+ return {
65
+ data: {
66
+ label: s(b.label, 100),
67
+ firstName,
68
+ lastName,
69
+ company: s(b.company, 255),
70
+ line1,
71
+ line2: s(b.line2, 255),
72
+ city,
73
+ state: s(b.state, 255),
74
+ postalCode,
75
+ country: countryRaw.toUpperCase(),
76
+ phone: s(b.phone, 40),
77
+ isDefaultShipping: b.isDefaultShipping === true,
78
+ isDefaultBilling: b.isDefaultBilling === true,
79
+ },
80
+ };
81
+ }
82
+ /** Validate a PARTIAL address body (update) — only provided keys are set. */
83
+ export function parsePartialAddressBody(body) {
84
+ if (!body || typeof body !== 'object')
85
+ return { error: 'Invalid request body' };
86
+ const b = body;
87
+ const out = {};
88
+ const setStr = (key, max, required = false) => {
89
+ if (b[key] === undefined)
90
+ return;
91
+ const v = s(b[key], max);
92
+ if (required && !v)
93
+ throw new Error(`${String(key)} cannot be empty`);
94
+ out[key] = v;
95
+ };
96
+ try {
97
+ setStr('label', 100);
98
+ setStr('firstName', 255, true);
99
+ setStr('lastName', 255, true);
100
+ setStr('company', 255);
101
+ setStr('line1', 255, true);
102
+ setStr('line2', 255);
103
+ setStr('city', 255, true);
104
+ setStr('state', 255);
105
+ setStr('postalCode', 40, true);
106
+ setStr('phone', 40);
107
+ if (b.country !== undefined) {
108
+ const c = s(b.country, 2);
109
+ if (!c || c.length !== 2)
110
+ return { error: 'A valid 2-letter country is required' };
111
+ out.country = c.toUpperCase();
112
+ }
113
+ if (b.isDefaultShipping !== undefined)
114
+ out.isDefaultShipping = b.isDefaultShipping === true;
115
+ if (b.isDefaultBilling !== undefined)
116
+ out.isDefaultBilling = b.isDefaultBilling === true;
117
+ }
118
+ catch (e) {
119
+ return { error: e.message };
120
+ }
121
+ return { data: out };
122
+ }
123
+ export async function GET() {
124
+ const guard = await requireCustomer();
125
+ if (!guard.ok)
126
+ return guard.response;
127
+ try {
128
+ const rows = await listCustomerAddresses(guard.customer.id);
129
+ return Response.json({ addresses: rows.map((r) => serializeAddress(r)) });
130
+ }
131
+ catch (error) {
132
+ console.error('[Addresses API] list failed:', error);
133
+ return Response.json({ error: 'Failed to load addresses' }, { status: 500 });
134
+ }
135
+ }
136
+ export async function POST(request) {
137
+ const guard = await requireCustomer();
138
+ if (!guard.ok)
139
+ return guard.response;
140
+ try {
141
+ const parsed = parseAddressBody(await request.json());
142
+ if ('error' in parsed)
143
+ return Response.json({ error: parsed.error }, { status: 400 });
144
+ const created = await createCustomerAddress(guard.customer.id, parsed.data);
145
+ return Response.json({ address: serializeAddress(created) }, { status: 201 });
146
+ }
147
+ catch (error) {
148
+ console.error('[Addresses API] create failed:', error);
149
+ return Response.json({ error: 'Failed to save address' }, { status: 500 });
150
+ }
151
+ }
152
+ //# sourceMappingURL=addresses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../src/auth/api/addresses.ts"],"names":[],"mappings":"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"}
@@ -34,4 +34,8 @@ export { POST as forgotPasswordPOST } from './forgot-password';
34
34
  export { GET as resetPasswordGET, POST as resetPasswordPOST } from './reset-password';
35
35
  export { POST as requestRefundPOST } from './request-refund';
36
36
  export { POST as requestReturnPOST } from './request-return';
37
+ export { GET as addressesGET, POST as addressesPOST } from './addresses';
38
+ export type { CustomerAddressDto } from './addresses';
39
+ export { serializeAddress, parseAddressBody, parsePartialAddressBody } from './addresses';
40
+ export { PATCH as addressPATCH, DELETE as addressDELETE } from './address';
37
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,YAAY,CAAA;AAGjD,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG/E,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAGtE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAG9D,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGrF,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAG5D,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,YAAY,CAAA;AAGjD,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG/E,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAGtE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAG9D,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGrF,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAG5D,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAG5D,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,aAAa,CAAA;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAGzF,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,WAAW,CAAA"}
@@ -41,4 +41,9 @@ export { GET as resetPasswordGET, POST as resetPasswordPOST } from './reset-pass
41
41
  export { POST as requestRefundPOST } from './request-refund';
42
42
  // Customer return request
43
43
  export { POST as requestReturnPOST } from './request-return';
44
+ // Address book — list + create
45
+ export { GET as addressesGET, POST as addressesPOST } from './addresses';
46
+ export { serializeAddress, parseAddressBody, parsePartialAddressBody } from './addresses';
47
+ // Address book — update + soft-delete one address
48
+ export { PATCH as addressPATCH, DELETE as addressDELETE } from './address';
44
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,eAAe;AACf,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,YAAY,CAAA;AAEjD,qBAAqB;AACrB,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/E,sBAAsB;AACtB,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,yBAAyB;AACzB,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE9D,2BAA2B;AAC3B,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAErF,0BAA0B;AAC1B,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,0BAA0B;AAC1B,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,eAAe;AACf,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,YAAY,CAAA;AAEjD,qBAAqB;AACrB,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/E,sBAAsB;AACtB,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,yBAAyB;AACzB,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE9D,2BAA2B;AAC3B,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAErF,0BAA0B;AAC1B,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,0BAA0B;AAC1B,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,+BAA+B;AAC/B,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,aAAa,CAAA;AAExE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAEzF,kDAAkD;AAClD,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,7 @@
1
+ export interface AddressBookProps {
2
+ /** When false (e.g. not signed in), the book renders nothing / a hint. */
3
+ enabled?: boolean;
4
+ className?: string;
5
+ }
6
+ export declare function AddressBook({ enabled, className }: AddressBookProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=AddressBook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressBook.d.ts","sourceRoot":"","sources":["../../../src/auth/components/AddressBook.tsx"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAsBD,wBAAgB,WAAW,CAAC,EAAE,OAAc,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAwM1E"}
@@ -0,0 +1,86 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * @rovela/sdk/auth/components/AddressBook
5
+ *
6
+ * Full self-service address-book manager for the customer account. Lists saved
7
+ * addresses, and handles add / edit / archive / set-default via `useAddresses`.
8
+ * Mount on the store's `/account/addresses` page.
9
+ */
10
+ import { useState } from 'react';
11
+ import { MapPin, Pencil, Plus, Trash2, Loader2 } from 'lucide-react';
12
+ import { cn } from '../../core/utils';
13
+ import { getCountryName } from '../../checkout/constants';
14
+ import { useAddresses } from '../hooks/useAddresses';
15
+ import { AddressForm } from './AddressForm';
16
+ function toInitial(a) {
17
+ return {
18
+ label: a.label,
19
+ firstName: a.firstName,
20
+ lastName: a.lastName,
21
+ company: a.company,
22
+ line1: a.line1,
23
+ line2: a.line2,
24
+ city: a.city,
25
+ state: a.state,
26
+ postalCode: a.postalCode,
27
+ country: a.country,
28
+ phone: a.phone,
29
+ isDefaultShipping: a.isDefaultShipping,
30
+ isDefaultBilling: a.isDefaultBilling,
31
+ };
32
+ }
33
+ export function AddressBook({ enabled = true, className }) {
34
+ const { addresses, isLoading, error, createAddress, updateAddress, deleteAddress, } = useAddresses(enabled);
35
+ const [view, setView] = useState({ mode: 'list' });
36
+ const [isSubmitting, setIsSubmitting] = useState(false);
37
+ const [formError, setFormError] = useState(null);
38
+ const [pendingDelete, setPendingDelete] = useState(null);
39
+ const [deletingId, setDeletingId] = useState(null);
40
+ async function handleCreate(values) {
41
+ setIsSubmitting(true);
42
+ setFormError(null);
43
+ const created = await createAddress(values);
44
+ setIsSubmitting(false);
45
+ if (created)
46
+ setView({ mode: 'list' });
47
+ else
48
+ setFormError('Could not save the address. Please try again.');
49
+ }
50
+ async function handleUpdate(id, values) {
51
+ setIsSubmitting(true);
52
+ setFormError(null);
53
+ const updated = await updateAddress(id, values);
54
+ setIsSubmitting(false);
55
+ if (updated)
56
+ setView({ mode: 'list' });
57
+ else
58
+ setFormError('Could not update the address. Please try again.');
59
+ }
60
+ async function handleDelete(id) {
61
+ setDeletingId(id);
62
+ await deleteAddress(id);
63
+ setDeletingId(null);
64
+ setPendingDelete(null);
65
+ }
66
+ if (view.mode === 'create') {
67
+ return (_jsxs("div", { className: className, children: [_jsx("h2", { className: "mb-4 text-lg font-semibold text-foreground", children: "Add a new address" }), _jsx(AddressForm, { showDefaults: true, onSubmit: handleCreate, onCancel: () => {
68
+ setFormError(null);
69
+ setView({ mode: 'list' });
70
+ }, isSubmitting: isSubmitting, error: formError, submitLabel: "Save address" })] }));
71
+ }
72
+ if (view.mode === 'edit') {
73
+ return (_jsxs("div", { className: className, children: [_jsx("h2", { className: "mb-4 text-lg font-semibold text-foreground", children: "Edit address" }), _jsx(AddressForm, { showDefaults: true, initial: toInitial(view.address), onSubmit: (values) => handleUpdate(view.address.id, values), onCancel: () => {
74
+ setFormError(null);
75
+ setView({ mode: 'list' });
76
+ }, isSubmitting: isSubmitting, error: formError, submitLabel: "Save changes" })] }));
77
+ }
78
+ return (_jsxs("div", { className: className, children: [_jsxs("div", { className: "mb-4 flex items-center justify-between", children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Saved addresses" }), _jsxs("button", { type: "button", onClick: () => {
79
+ setFormError(null);
80
+ setView({ mode: 'create' });
81
+ }, className: "inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2", children: [_jsx(Plus, { className: "h-4 w-4" }), "Add address"] })] }), error && (_jsx("div", { className: "mb-4 rounded-md bg-red-50 p-3 text-sm text-red-600", children: error })), isLoading ? (_jsx("div", { className: "flex items-center justify-center py-12 text-muted-foreground", children: _jsx(Loader2, { className: "h-5 w-5 animate-spin" }) })) : addresses.length === 0 ? (_jsxs("div", { className: "rounded-lg border border-dashed border-border bg-muted/20 px-6 py-12 text-center", children: [_jsx(MapPin, { className: "mx-auto h-8 w-8 text-muted-foreground/60" }), _jsx("p", { className: "mt-3 text-sm font-medium text-foreground", children: "No saved addresses yet" }), _jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: "Add an address to check out faster next time." })] })) : (_jsx("ul", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: addresses.map((a) => (_jsxs("li", { className: "relative rounded-lg border border-border bg-background p-4 text-sm", children: [_jsxs("div", { className: "mb-2 flex flex-wrap items-center gap-1.5", children: [a.label && (_jsx("span", { className: "rounded bg-muted px-1.5 py-0.5 text-xs font-medium text-foreground", children: a.label })), a.isDefaultShipping && (_jsx("span", { className: "rounded bg-primary/10 px-1.5 py-0.5 text-xs font-medium text-primary", children: "Default shipping" })), a.isDefaultBilling && (_jsx("span", { className: "rounded bg-primary/10 px-1.5 py-0.5 text-xs font-medium text-primary", children: "Default billing" }))] }), _jsxs("p", { className: "font-medium text-foreground", children: [a.firstName, " ", a.lastName] }), a.company && _jsx("p", { className: "text-muted-foreground", children: a.company }), _jsx("p", { className: "text-muted-foreground", children: a.line1 }), a.line2 && _jsx("p", { className: "text-muted-foreground", children: a.line2 }), _jsxs("p", { className: "text-muted-foreground", children: [a.city, a.state ? `, ${a.state}` : '', " ", a.postalCode] }), _jsx("p", { className: "text-muted-foreground", children: getCountryName(a.country) }), a.phone && _jsx("p", { className: "mt-1 text-muted-foreground", children: a.phone }), _jsxs("div", { className: "mt-3 flex items-center gap-3 border-t border-border/60 pt-3", children: [_jsxs("button", { type: "button", onClick: () => {
82
+ setFormError(null);
83
+ setView({ mode: 'edit', address: a });
84
+ }, className: "inline-flex items-center gap-1 text-xs font-medium text-primary hover:text-primary/80", children: [_jsx(Pencil, { className: "h-3.5 w-3.5" }), "Edit"] }), pendingDelete === a.id ? (_jsxs("span", { className: "inline-flex items-center gap-2 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: "Remove?" }), _jsx("button", { type: "button", onClick: () => handleDelete(a.id), disabled: deletingId === a.id, className: "font-medium text-red-600 hover:text-red-700 disabled:opacity-50", children: deletingId === a.id ? 'Removing…' : 'Yes' }), _jsx("button", { type: "button", onClick: () => setPendingDelete(null), className: "text-muted-foreground hover:text-foreground", children: "No" })] })) : (_jsxs("button", { type: "button", onClick: () => setPendingDelete(a.id), className: cn('inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-red-600'), children: [_jsx(Trash2, { className: "h-3.5 w-3.5" }), "Remove"] }))] })] }, a.id))) }))] }));
85
+ }
86
+ //# sourceMappingURL=AddressBook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressBook.js","sourceRoot":"","sources":["../../../src/auth/components/AddressBook.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AddressInput } from '../hooks/useAddresses';
2
+ export interface AddressFormProps {
3
+ /** Prefill values (edit mode). */
4
+ initial?: Partial<AddressInput>;
5
+ /** Called with validated values. May be async; the form shows `isSubmitting`. */
6
+ onSubmit: (values: AddressInput) => void | Promise<void>;
7
+ onCancel?: () => void;
8
+ isSubmitting?: boolean;
9
+ /** Server/parent error to surface above the actions. */
10
+ error?: string | null;
11
+ submitLabel?: string;
12
+ cancelLabel?: string;
13
+ /** Show the "set as default shipping / billing" checkboxes (account book). */
14
+ showDefaults?: boolean;
15
+ /** Restrict the country dropdown (defaults to COMMON_COUNTRIES). */
16
+ allowedCountries?: string[];
17
+ className?: string;
18
+ }
19
+ export declare function AddressForm({ initial, onSubmit, onCancel, isSubmitting, error, submitLabel, cancelLabel, showDefaults, allowedCountries, className, }: AddressFormProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=AddressForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressForm.d.ts","sourceRoot":"","sources":["../../../src/auth/components/AddressForm.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC/B,iFAAiF;IACjF,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAOD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAoB,EACpB,KAAK,EACL,WAA4B,EAC5B,WAAsB,EACtB,YAAoB,EACpB,gBAAgB,EAChB,SAAS,GACV,EAAE,gBAAgB,2CAgSlB"}
@@ -0,0 +1,86 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * @rovela/sdk/auth/components/AddressForm
5
+ *
6
+ * Reusable create/edit form for a customer address. Used by the account
7
+ * address book, the admin customer editor, and the checkout "add address" flow.
8
+ * Presentation-only — the caller owns persistence (via `useAddresses` or an
9
+ * admin hook) and passes `onSubmit`.
10
+ */
11
+ import { useMemo, useState } from 'react';
12
+ import { cn } from '../../core/utils';
13
+ import { Label } from './Label';
14
+ import { COMMON_COUNTRIES, US_STATES, countryRequiresState, } from '../../checkout/constants';
15
+ const inputClass = 'mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary';
16
+ export function AddressForm({ initial, onSubmit, onCancel, isSubmitting = false, error, submitLabel = 'Save address', cancelLabel = 'Cancel', showDefaults = false, allowedCountries, className, }) {
17
+ const [label, setLabel] = useState(initial?.label ?? '');
18
+ const [firstName, setFirstName] = useState(initial?.firstName ?? '');
19
+ const [lastName, setLastName] = useState(initial?.lastName ?? '');
20
+ const [company, setCompany] = useState(initial?.company ?? '');
21
+ const [line1, setLine1] = useState(initial?.line1 ?? '');
22
+ const [line2, setLine2] = useState(initial?.line2 ?? '');
23
+ const [city, setCity] = useState(initial?.city ?? '');
24
+ const [state, setState] = useState(initial?.state ?? '');
25
+ const [postalCode, setPostalCode] = useState(initial?.postalCode ?? '');
26
+ const [country, setCountry] = useState(initial?.country ?? 'US');
27
+ const [phone, setPhone] = useState(initial?.phone ?? '');
28
+ const [isDefaultShipping, setIsDefaultShipping] = useState(!!initial?.isDefaultShipping);
29
+ const [isDefaultBilling, setIsDefaultBilling] = useState(!!initial?.isDefaultBilling);
30
+ const [fieldErrors, setFieldErrors] = useState({});
31
+ const countries = useMemo(() => {
32
+ if (!allowedCountries || allowedCountries.length === 0)
33
+ return COMMON_COUNTRIES;
34
+ const set = new Set(allowedCountries.map((c) => c.toUpperCase()));
35
+ const filtered = COMMON_COUNTRIES.filter((c) => set.has(c.code));
36
+ return filtered.length > 0 ? filtered : COMMON_COUNTRIES;
37
+ }, [allowedCountries]);
38
+ const requiresState = countryRequiresState(country);
39
+ function validate() {
40
+ const errs = {};
41
+ const req = (v, key) => {
42
+ if (!v.trim())
43
+ errs[key] = 'Required';
44
+ };
45
+ req(firstName, 'firstName');
46
+ req(lastName, 'lastName');
47
+ req(line1, 'line1');
48
+ req(city, 'city');
49
+ req(postalCode, 'postalCode');
50
+ if (!country.trim())
51
+ errs.country = 'Required';
52
+ if (requiresState && !state.trim())
53
+ errs.state = 'Required';
54
+ setFieldErrors(errs);
55
+ if (Object.keys(errs).length > 0)
56
+ return null;
57
+ return {
58
+ label: label.trim() || null,
59
+ firstName: firstName.trim(),
60
+ lastName: lastName.trim(),
61
+ company: company.trim() || null,
62
+ line1: line1.trim(),
63
+ line2: line2.trim() || null,
64
+ city: city.trim(),
65
+ state: state.trim() || null,
66
+ postalCode: postalCode.trim(),
67
+ country: country.trim().toUpperCase(),
68
+ phone: phone.trim() || null,
69
+ ...(showDefaults ? { isDefaultShipping, isDefaultBilling } : {}),
70
+ };
71
+ }
72
+ async function handleSubmit(e) {
73
+ e.preventDefault();
74
+ const values = validate();
75
+ if (!values)
76
+ return;
77
+ await onSubmit(values);
78
+ }
79
+ const err = (key) => fieldErrors[key] ? _jsx("p", { className: "mt-1 text-xs text-red-600", children: fieldErrors[key] }) : null;
80
+ return (_jsxs("form", { onSubmit: handleSubmit, className: cn('space-y-4', className), children: [showDefaults && (_jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-label", children: "Label (optional)" }), _jsx("input", { id: "addr-label", type: "text", value: label, onChange: (e) => setLabel(e.target.value), placeholder: "Home, Work, Job site\u2026", className: inputClass })] })), _jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-first", children: "First name" }), _jsx("input", { id: "addr-first", type: "text", value: firstName, onChange: (e) => setFirstName(e.target.value), className: inputClass, autoComplete: "given-name" }), err('firstName')] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-last", children: "Last name" }), _jsx("input", { id: "addr-last", type: "text", value: lastName, onChange: (e) => setLastName(e.target.value), className: inputClass, autoComplete: "family-name" }), err('lastName')] })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-company", children: "Company (optional)" }), _jsx("input", { id: "addr-company", type: "text", value: company, onChange: (e) => setCompany(e.target.value), className: inputClass, autoComplete: "organization" })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-line1", children: "Address" }), _jsx("input", { id: "addr-line1", type: "text", value: line1, onChange: (e) => setLine1(e.target.value), className: inputClass, autoComplete: "address-line1", placeholder: "Street address" }), err('line1')] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-line2", children: "Apartment, suite, etc. (optional)" }), _jsx("input", { id: "addr-line2", type: "text", value: line2, onChange: (e) => setLine2(e.target.value), className: inputClass, autoComplete: "address-line2" })] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-city", children: "City" }), _jsx("input", { id: "addr-city", type: "text", value: city, onChange: (e) => setCity(e.target.value), className: inputClass, autoComplete: "address-level2" }), err('city')] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-postal", children: "Postal code" }), _jsx("input", { id: "addr-postal", type: "text", value: postalCode, onChange: (e) => setPostalCode(e.target.value), className: inputClass, autoComplete: "postal-code" }), err('postalCode')] })] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-country", children: "Country" }), _jsx("select", { id: "addr-country", value: country, onChange: (e) => {
81
+ setCountry(e.target.value);
82
+ if (!countryRequiresState(e.target.value))
83
+ setState('');
84
+ }, className: inputClass, autoComplete: "country", children: countries.map((c) => (_jsx("option", { value: c.code, children: c.name }, c.code))) }), err('country')] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-state", children: requiresState ? 'State / Province' : 'State / Province (optional)' }), country === 'US' ? (_jsxs("select", { id: "addr-state", value: state, onChange: (e) => setState(e.target.value), className: inputClass, autoComplete: "address-level1", children: [_jsx("option", { value: "", children: "Select a state" }), US_STATES.map((s) => (_jsx("option", { value: s.code, children: s.name }, s.code)))] })) : (_jsx("input", { id: "addr-state", type: "text", value: state, onChange: (e) => setState(e.target.value), className: inputClass, autoComplete: "address-level1" })), err('state')] })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "addr-phone", children: "Phone (optional)" }), _jsx("input", { id: "addr-phone", type: "tel", value: phone, onChange: (e) => setPhone(e.target.value), className: inputClass, autoComplete: "tel", placeholder: "For delivery updates" })] }), showDefaults && (_jsxs("div", { className: "space-y-2", children: [_jsxs("label", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx("input", { type: "checkbox", checked: isDefaultShipping, onChange: (e) => setIsDefaultShipping(e.target.checked), className: "h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary" }), "Use as default shipping address"] }), _jsxs("label", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx("input", { type: "checkbox", checked: isDefaultBilling, onChange: (e) => setIsDefaultBilling(e.target.checked), className: "h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary" }), "Use as default billing address"] })] })), error && (_jsx("div", { className: "rounded-md bg-red-50 p-3 text-sm text-red-600", children: error })), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("button", { type: "submit", disabled: isSubmitting, className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", children: isSubmitting ? 'Saving…' : submitLabel }), onCancel && (_jsx("button", { type: "button", onClick: onCancel, disabled: isSubmitting, className: "rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground hover:bg-muted/50 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 disabled:opacity-50", children: cancelLabel }))] })] }));
85
+ }
86
+ //# sourceMappingURL=AddressForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressForm.js","sourceRoot":"","sources":["../../../src/auth/components/AddressForm.tsx"],"names":[],"mappings":"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"}
@@ -12,4 +12,8 @@ export { UserMenu } from './UserMenu';
12
12
  export { AuthGuard, withAuth } from './AuthGuard';
13
13
  export { Label } from './Label';
14
14
  export type { LabelProps } from './Label';
15
+ export { AddressForm } from './AddressForm';
16
+ export type { AddressFormProps } from './AddressForm';
17
+ export { AddressBook } from './AddressBook';
18
+ export type { AddressBookProps } from './AddressBook';
15
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA"}
@@ -11,4 +11,6 @@ export { VerifyEmailNotice } from './VerifyEmailNotice';
11
11
  export { UserMenu } from './UserMenu';
12
12
  export { AuthGuard, withAuth } from './AuthGuard';
13
13
  export { Label } from './Label';
14
+ export { AddressForm } from './AddressForm';
15
+ export { AddressBook } from './AddressBook';
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
@@ -4,4 +4,6 @@
4
4
  * Client-side authentication hooks.
5
5
  */
6
6
  export { useAuth } from './useAuth';
7
+ export { useAddresses } from './useAddresses';
8
+ export type { UseAddressesReturn, AddressInput, AddressDefaultKind, } from './useAddresses';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAA"}
@@ -4,4 +4,5 @@
4
4
  * Client-side authentication hooks.
5
5
  */
6
6
  export { useAuth } from './useAuth';
7
+ export { useAddresses } from './useAddresses';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,44 @@
1
+ import type { CustomerAddressDto } from '../api/addresses';
2
+ /** Fields a customer can submit when creating/editing an address. */
3
+ export interface AddressInput {
4
+ label?: string | null;
5
+ firstName: string;
6
+ lastName: string;
7
+ company?: string | null;
8
+ line1: string;
9
+ line2?: string | null;
10
+ city: string;
11
+ state?: string | null;
12
+ postalCode: string;
13
+ country: string;
14
+ phone?: string | null;
15
+ isDefaultShipping?: boolean;
16
+ isDefaultBilling?: boolean;
17
+ }
18
+ export type AddressDefaultKind = 'shipping' | 'billing' | 'both';
19
+ export interface UseAddressesReturn {
20
+ addresses: CustomerAddressDto[];
21
+ isLoading: boolean;
22
+ error: string | null;
23
+ /** Re-fetch the list from the server. */
24
+ refresh: () => Promise<void>;
25
+ /** Create a new address; returns it (and refreshes the list) or null on failure. */
26
+ createAddress: (input: AddressInput) => Promise<CustomerAddressDto | null>;
27
+ /** Partially update an address; returns the updated row or null. */
28
+ updateAddress: (id: string, input: Partial<AddressInput>) => Promise<CustomerAddressDto | null>;
29
+ /** Archive (soft-delete) an address. Returns success. */
30
+ deleteAddress: (id: string) => Promise<boolean>;
31
+ /** Mark an address as the default shipping/billing/both. Returns success. */
32
+ setDefault: (id: string, kind: AddressDefaultKind) => Promise<boolean>;
33
+ /** The current default-shipping address, if any. */
34
+ defaultShipping: CustomerAddressDto | null;
35
+ /** The current default-billing address, if any. */
36
+ defaultBilling: CustomerAddressDto | null;
37
+ }
38
+ /**
39
+ * Manage the signed-in customer's saved addresses.
40
+ *
41
+ * @param enabled - when false, skips the initial fetch (e.g. guest checkout).
42
+ */
43
+ export declare function useAddresses(enabled?: boolean): UseAddressesReturn;
44
+ //# sourceMappingURL=useAddresses.d.ts.map