bitsnap-react 1.7.1 → 1.8.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 (85) hide show
  1. package/dist/CartProvider-5KAG5QGA.mjs +2 -0
  2. package/dist/CartProvider-7GJXW2IP.js +2 -0
  3. package/dist/CartProvider-7GJXW2IP.js.map +1 -0
  4. package/dist/catalog.js +1 -1
  5. package/dist/catalog.js.map +1 -1
  6. package/dist/catalog.mjs +1 -1
  7. package/dist/chunk-45AP7UZE.mjs +2 -0
  8. package/dist/chunk-45AP7UZE.mjs.map +1 -0
  9. package/dist/chunk-7XTDFTQU.js +4 -0
  10. package/dist/chunk-7XTDFTQU.js.map +1 -0
  11. package/dist/chunk-C6Z7LOHB.mjs +2 -0
  12. package/dist/chunk-C6Z7LOHB.mjs.map +1 -0
  13. package/dist/chunk-HB6KQT26.mjs +4 -0
  14. package/dist/chunk-HB6KQT26.mjs.map +1 -0
  15. package/dist/chunk-JSDGZ4NY.js +2 -0
  16. package/dist/chunk-JSDGZ4NY.js.map +1 -0
  17. package/dist/chunk-KOVKUJAW.mjs +2 -0
  18. package/dist/chunk-KOVKUJAW.mjs.map +1 -0
  19. package/dist/chunk-KOYBZORL.js +2 -0
  20. package/dist/chunk-KOYBZORL.js.map +1 -0
  21. package/dist/chunk-LWK4E5G5.js +2 -0
  22. package/dist/chunk-LWK4E5G5.js.map +1 -0
  23. package/dist/chunk-OJT3YO2R.mjs +2 -0
  24. package/dist/{chunk-6KQBDN7M.mjs.map → chunk-OJT3YO2R.mjs.map} +1 -1
  25. package/dist/chunk-OUYRKNZJ.mjs +2 -0
  26. package/dist/chunk-OUYRKNZJ.mjs.map +1 -0
  27. package/dist/chunk-P2YB25KZ.js +2 -0
  28. package/dist/chunk-P2YB25KZ.js.map +1 -0
  29. package/dist/chunk-T2POA6RW.js +2 -0
  30. package/dist/chunk-T2POA6RW.js.map +1 -0
  31. package/dist/chunk-VPKE2ZOR.mjs +2 -0
  32. package/dist/{chunk-FTYJTO6O.mjs.map → chunk-VPKE2ZOR.mjs.map} +1 -1
  33. package/dist/chunk-WRCXZMKK.js +2 -0
  34. package/dist/chunk-WRCXZMKK.js.map +1 -0
  35. package/dist/chunk-WSM4OM72.mjs +2 -0
  36. package/dist/chunk-WSM4OM72.mjs.map +1 -0
  37. package/dist/chunk-XRNTUSBH.js +2 -0
  38. package/dist/chunk-XRNTUSBH.js.map +1 -0
  39. package/dist/chunk-Z2BKIX6F.js +2 -0
  40. package/dist/chunk-Z2BKIX6F.js.map +1 -0
  41. package/dist/course.d.mts +1872 -0
  42. package/dist/course.d.ts +1872 -0
  43. package/dist/course.js +2 -0
  44. package/dist/course.js.map +1 -0
  45. package/dist/course.mjs +2 -0
  46. package/dist/course.mjs.map +1 -0
  47. package/dist/errors.js +1 -1
  48. package/dist/errors.js.map +1 -1
  49. package/dist/index.css +1 -1
  50. package/dist/index.css.map +1 -1
  51. package/dist/index.d.mts +5 -36
  52. package/dist/index.d.ts +5 -36
  53. package/dist/index.js +1 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.mjs +1 -1
  56. package/dist/index.mjs.map +1 -1
  57. package/dist/internal.js +1 -1
  58. package/dist/internal.js.map +1 -1
  59. package/dist/methods-ITD6WFIY.mjs +2 -0
  60. package/dist/methods-JENIGNF7.js +2 -0
  61. package/dist/methods-JENIGNF7.js.map +1 -0
  62. package/dist/models.js +1 -1
  63. package/dist/models.js.map +1 -1
  64. package/dist/returns.d.mts +5 -195
  65. package/dist/returns.d.ts +5 -195
  66. package/dist/returns.js +1 -1
  67. package/dist/returns.js.map +1 -1
  68. package/dist/returns.mjs +1 -1
  69. package/dist/texts-CIEFbJTN.d.ts +196 -0
  70. package/dist/texts-tQtAGJCT.d.mts +196 -0
  71. package/dist/types-BTm_ZolC.d.ts +40 -0
  72. package/dist/types-PSBBDdQm.d.mts +40 -0
  73. package/package.json +57 -22
  74. package/dist/CartProvider-F2VH7WFO.mjs +0 -2
  75. package/dist/chunk-3TENJTY4.mjs +0 -2
  76. package/dist/chunk-3TENJTY4.mjs.map +0 -1
  77. package/dist/chunk-4HOZFM6V.mjs +0 -2
  78. package/dist/chunk-4HOZFM6V.mjs.map +0 -1
  79. package/dist/chunk-6KQBDN7M.mjs +0 -2
  80. package/dist/chunk-FTYJTO6O.mjs +0 -2
  81. package/dist/chunk-RATFYRKZ.mjs +0 -4
  82. package/dist/chunk-RATFYRKZ.mjs.map +0 -1
  83. package/dist/methods-PFZSMZFU.mjs +0 -2
  84. /package/dist/{CartProvider-F2VH7WFO.mjs.map → CartProvider-5KAG5QGA.mjs.map} +0 -0
  85. /package/dist/{methods-PFZSMZFU.mjs.map → methods-ITD6WFIY.mjs.map} +0 -0
package/dist/returns.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{a as L}from"./chunk-6KQBDN7M.mjs";import{A as p,C as u,D as R,E as o,F as y,G as a,H as i,I as m,J as l,L as x,M as d,N as P,O as f,P as S,Q as c,R as T,S as C,h as e,u as t,v as r,w as s,x as n}from"./chunk-4HOZFM6V.mjs";import"./chunk-3TENJTY4.mjs";import"./chunk-U6FLIRIV.mjs";export{L as BitsnapReturns,R as BitsnapReturnsProvider,e as Environment,t as RETURNS_SLOT_NAMES,r as ReturnsAppearanceProvider,d as ReturnsCodeStep,S as ReturnsConfirmation,x as ReturnsEmailStep,C as ReturnsMyReturnDetail,T as ReturnsMyReturnsList,f as ReturnsOrderDetail,P as ReturnsOrderList,u as ReturnsProvider,c as ReturnsResult,i as useCreateReturn,l as useMyReturn,m as useMyReturns,y as useReturnOrders,o as useReturnSession,a as useReturnableOrder,s as useReturnsAppearance,n as useReturnsSlot,p as useReturnsText};
1
+ import{a as L}from"./chunk-OJT3YO2R.mjs";import{A as C,c as t,d as r,e as s,f as n,i as p,k as u,l as R,m as o,n as y,o as a,p as i,q as m,r as l,t as x,u as d,v as P,w as f,x as S,y as c,z as T}from"./chunk-45AP7UZE.mjs";import"./chunk-KOVKUJAW.mjs";import{h as e}from"./chunk-WSM4OM72.mjs";import"./chunk-OUYRKNZJ.mjs";import"./chunk-U6FLIRIV.mjs";export{L as BitsnapReturns,R as BitsnapReturnsProvider,e as Environment,t as RETURNS_SLOT_NAMES,r as ReturnsAppearanceProvider,d as ReturnsCodeStep,S as ReturnsConfirmation,x as ReturnsEmailStep,C as ReturnsMyReturnDetail,T as ReturnsMyReturnsList,f as ReturnsOrderDetail,P as ReturnsOrderList,u as ReturnsProvider,c as ReturnsResult,i as useCreateReturn,l as useMyReturn,m as useMyReturns,y as useReturnOrders,o as useReturnSession,a as useReturnableOrder,s as useReturnsAppearance,n as useReturnsSlot,p as useReturnsText};
2
2
  //# sourceMappingURL=returns.mjs.map
@@ -0,0 +1,196 @@
1
+ import { CSSProperties } from 'react';
2
+ import { S as SlotAppearance, A as AppearanceElements } from './appearance-core-Dt2grZdl.js';
3
+
4
+ /**
5
+ * Returns appearance API.
6
+ *
7
+ * It mirrors `CheckoutAppearance` (theme, tokens, elements) so a shop can reuse
8
+ * one brand object for both. The resolver is pure: it turns the caller input
9
+ * into a theme name, the tokens in effect, the slot overrides and the inline
10
+ * style for the theme boundary.
11
+ */
12
+ type ReturnsTheme = "light" | "dark";
13
+ type ReturnsAppearanceTokens = {
14
+ /** Font family of the returns views. The library never loads fonts. */
15
+ fontFamily?: string;
16
+ /** Base font size. */
17
+ fontSize?: string;
18
+ /** Page background. */
19
+ background?: string;
20
+ /** Raised surfaces: cards, skeletons, summaries. */
21
+ surface?: string;
22
+ /** Main text color. */
23
+ foreground?: string;
24
+ /** Secondary text: descriptions, dates, hints. */
25
+ mutedForeground?: string;
26
+ /** Borders of cards, inputs and separators. */
27
+ border?: string;
28
+ /** Primary button background. */
29
+ buttonBackground?: string;
30
+ /** Primary button text. */
31
+ buttonForeground?: string;
32
+ /** Primary button background on hover. */
33
+ buttonHoverBackground?: string;
34
+ /** Hover surface of secondary buttons and selectable cards. */
35
+ hoverSurface?: string;
36
+ /** Focus ring color. Also applied to shared UI primitives through `--ring`. */
37
+ focusRing?: string;
38
+ /** Error color. */
39
+ error?: string;
40
+ /** Success color: result screen, completed and refunded statuses. */
41
+ success?: string;
42
+ /** Warning color: statuses that need attention. */
43
+ warning?: string;
44
+ /** Status badge background. */
45
+ badgeBackground?: string;
46
+ /** Status badge text. */
47
+ badgeForeground?: string;
48
+ /** Background of text inputs and the note field. */
49
+ inputBackground?: string;
50
+ /** Corner radius, applied through `--radius`. */
51
+ radius?: string;
52
+ };
53
+ /**
54
+ * Stable slot names. They are exposed as `data-bitsnap-returns-slot`
55
+ * attributes so they can also be targeted from plain CSS.
56
+ */
57
+ declare const RETURNS_SLOT_NAMES: readonly ["root", "header", "title", "description", "backButton", "stepIndicator", "error", "emptyState", "skeleton", "emailForm", "emailInput", "codeForm", "codeInput", "resendButton", "logoutButton", "orderList", "orderCard", "orderReference", "orderDate", "orderTotal", "pagination", "lineList", "line", "lineName", "linePrice", "lineQuantityControl", "quantityButton", "quantityInput", "lineIneligibleReason", "noteInput", "summary", "submitButton", "secondaryButton", "successState", "returnReference", "returnInstructions", "returnList", "returnCard", "statusBadge", "history", "historyEntry"];
58
+ type ReturnsSlotName = (typeof RETURNS_SLOT_NAMES)[number];
59
+ type ReturnsSlotAppearance = SlotAppearance;
60
+ type ReturnsAppearanceElements = AppearanceElements<ReturnsSlotName>;
61
+ type ReturnsAppearance = {
62
+ /** `"light"` or `"dark"`. Omitted means `"light"`. */
63
+ theme?: ReturnsTheme;
64
+ /** Partial overrides applied over the theme preset. */
65
+ tokens?: ReturnsAppearanceTokens;
66
+ /** Per element `className`/`style` overrides. */
67
+ elements?: ReturnsAppearanceElements;
68
+ };
69
+ type ResolvedReturnsAppearance = {
70
+ theme: ReturnsTheme;
71
+ /** Tokens that are in effect (the theme preset plus caller overrides). */
72
+ tokens: ReturnsAppearanceTokens;
73
+ elements: ReturnsAppearanceElements;
74
+ /** Theme marker class for the theme boundary. */
75
+ boundaryClassName: string;
76
+ /** Inline custom properties applied to the returns root. */
77
+ boundaryStyle: CSSProperties;
78
+ };
79
+
80
+ /**
81
+ * Every string the returns views render. Pass a partial object through the
82
+ * `texts` prop of `BitsnapReturns`/`ReturnsProvider` to override any of them,
83
+ * whatever the locale. Strings with `{name}` placeholders keep them in
84
+ * overrides; unknown placeholders are left untouched.
85
+ */
86
+ type ReturnsTexts = {
87
+ /** Label of the back buttons. */
88
+ back: string;
89
+ /** Step indicator, placeholders `{current}` and `{total}`. */
90
+ stepIndicator: string;
91
+ /** Skeleton accessible label. */
92
+ loading: string;
93
+ /** Button that opens the list of previous returns. */
94
+ myReturnsLink: string;
95
+ emailStepTitle: string;
96
+ emailStepDescription: string;
97
+ emailLabel: string;
98
+ emailPlaceholder: string;
99
+ emailSubmit: string;
100
+ codeStepTitle: string;
101
+ /** Placeholder `{email}`. */
102
+ codeStepDescription: string;
103
+ codeLabel: string;
104
+ codeSubmit: string;
105
+ resend: string;
106
+ /** Placeholder `{seconds}`. */
107
+ resendIn: string;
108
+ logout: string;
109
+ ordersTitle: string;
110
+ ordersDescription: string;
111
+ ordersEmpty: string;
112
+ /** Placeholder `{reference}`. */
113
+ orderTitle: string;
114
+ /** Placeholder `{count}`. */
115
+ orderReturnableLines: string;
116
+ orderSelect: string;
117
+ paginationPrevious: string;
118
+ paginationNext: string;
119
+ /** Placeholders `{page}` and `{total}` (number of orders). */
120
+ paginationInfo: string;
121
+ /** Placeholder `{reference}`. */
122
+ orderDetailTitle: string;
123
+ orderDetailDescription: string;
124
+ /** Placeholder `{name}`. */
125
+ quantityLabel: string;
126
+ /** Placeholder `{name}`. */
127
+ quantityDecrease: string;
128
+ /** Placeholder `{name}`. */
129
+ quantityIncrease: string;
130
+ /** Placeholder `{available}`. */
131
+ quantityOfAvailable: string;
132
+ /** Shown for an ineligible line without a reason from the backend. */
133
+ lineIneligibleFallback: string;
134
+ noteLabel: string;
135
+ notePlaceholder: string;
136
+ selectionContinue: string;
137
+ selectionEmpty: string;
138
+ previousReturnsTitle: string;
139
+ confirmationTitle: string;
140
+ confirmationDescription: string;
141
+ confirmationSummary: string;
142
+ /** Placeholder `{quantity}`. */
143
+ confirmationQuantity: string;
144
+ confirmationNote: string;
145
+ confirmationSubmit: string;
146
+ successTitle: string;
147
+ successDescription: string;
148
+ successReference: string;
149
+ successInstructions: string;
150
+ successDone: string;
151
+ myReturnsTitle: string;
152
+ myReturnsDescription: string;
153
+ myReturnsEmpty: string;
154
+ myReturnOpen: string;
155
+ myReturnDetailTitle: string;
156
+ /** Placeholder `{reference}`. */
157
+ myReturnTitle: string;
158
+ myReturnCreatedAt: string;
159
+ myReturnRefund: string;
160
+ myReturnLines: string;
161
+ /** Placeholders `{requested}`, `{approved}`, `{received}`. */
162
+ myReturnLineQuantities: string;
163
+ myReturnNote: string;
164
+ myReturnHistory: string;
165
+ statusSubmitted: string;
166
+ statusApproved: string;
167
+ statusRejected: string;
168
+ statusAwaitingReceipt: string;
169
+ statusReceived: string;
170
+ statusCompleted: string;
171
+ statusCancelled: string;
172
+ statusRefunded: string;
173
+ /** Any status the backend adds later. */
174
+ statusFallback: string;
175
+ refundStatusNotStarted: string;
176
+ refundStatusPending: string;
177
+ refundStatusSucceeded: string;
178
+ refundStatusFailed: string;
179
+ refundStatusFallback: string;
180
+ errorGeneric: string;
181
+ errorInvalidEmail: string;
182
+ errorInvalidCode: string;
183
+ errorSessionExpired: string;
184
+ errorOrderNotFound: string;
185
+ errorReturnNotFound: string;
186
+ errorQuantityUnavailable: string;
187
+ errorItemNotReturnable: string;
188
+ errorReturnsDisabled: string;
189
+ errorRateLimited: string;
190
+ errorIdempotencyConflict: string;
191
+ errorDeliveryFailed: string;
192
+ errorRetry: string;
193
+ };
194
+ type ReturnsTextKey = keyof ReturnsTexts;
195
+
196
+ export { type ReturnsAppearance as R, type ReturnsTexts as a, RETURNS_SLOT_NAMES as b, type ReturnsAppearanceElements as c, type ReturnsAppearanceTokens as d, type ReturnsSlotAppearance as e, type ReturnsSlotName as f, type ReturnsTheme as g, type ReturnsTextKey as h, type ResolvedReturnsAppearance as i };
@@ -0,0 +1,196 @@
1
+ import { CSSProperties } from 'react';
2
+ import { S as SlotAppearance, A as AppearanceElements } from './appearance-core-Dt2grZdl.mjs';
3
+
4
+ /**
5
+ * Returns appearance API.
6
+ *
7
+ * It mirrors `CheckoutAppearance` (theme, tokens, elements) so a shop can reuse
8
+ * one brand object for both. The resolver is pure: it turns the caller input
9
+ * into a theme name, the tokens in effect, the slot overrides and the inline
10
+ * style for the theme boundary.
11
+ */
12
+ type ReturnsTheme = "light" | "dark";
13
+ type ReturnsAppearanceTokens = {
14
+ /** Font family of the returns views. The library never loads fonts. */
15
+ fontFamily?: string;
16
+ /** Base font size. */
17
+ fontSize?: string;
18
+ /** Page background. */
19
+ background?: string;
20
+ /** Raised surfaces: cards, skeletons, summaries. */
21
+ surface?: string;
22
+ /** Main text color. */
23
+ foreground?: string;
24
+ /** Secondary text: descriptions, dates, hints. */
25
+ mutedForeground?: string;
26
+ /** Borders of cards, inputs and separators. */
27
+ border?: string;
28
+ /** Primary button background. */
29
+ buttonBackground?: string;
30
+ /** Primary button text. */
31
+ buttonForeground?: string;
32
+ /** Primary button background on hover. */
33
+ buttonHoverBackground?: string;
34
+ /** Hover surface of secondary buttons and selectable cards. */
35
+ hoverSurface?: string;
36
+ /** Focus ring color. Also applied to shared UI primitives through `--ring`. */
37
+ focusRing?: string;
38
+ /** Error color. */
39
+ error?: string;
40
+ /** Success color: result screen, completed and refunded statuses. */
41
+ success?: string;
42
+ /** Warning color: statuses that need attention. */
43
+ warning?: string;
44
+ /** Status badge background. */
45
+ badgeBackground?: string;
46
+ /** Status badge text. */
47
+ badgeForeground?: string;
48
+ /** Background of text inputs and the note field. */
49
+ inputBackground?: string;
50
+ /** Corner radius, applied through `--radius`. */
51
+ radius?: string;
52
+ };
53
+ /**
54
+ * Stable slot names. They are exposed as `data-bitsnap-returns-slot`
55
+ * attributes so they can also be targeted from plain CSS.
56
+ */
57
+ declare const RETURNS_SLOT_NAMES: readonly ["root", "header", "title", "description", "backButton", "stepIndicator", "error", "emptyState", "skeleton", "emailForm", "emailInput", "codeForm", "codeInput", "resendButton", "logoutButton", "orderList", "orderCard", "orderReference", "orderDate", "orderTotal", "pagination", "lineList", "line", "lineName", "linePrice", "lineQuantityControl", "quantityButton", "quantityInput", "lineIneligibleReason", "noteInput", "summary", "submitButton", "secondaryButton", "successState", "returnReference", "returnInstructions", "returnList", "returnCard", "statusBadge", "history", "historyEntry"];
58
+ type ReturnsSlotName = (typeof RETURNS_SLOT_NAMES)[number];
59
+ type ReturnsSlotAppearance = SlotAppearance;
60
+ type ReturnsAppearanceElements = AppearanceElements<ReturnsSlotName>;
61
+ type ReturnsAppearance = {
62
+ /** `"light"` or `"dark"`. Omitted means `"light"`. */
63
+ theme?: ReturnsTheme;
64
+ /** Partial overrides applied over the theme preset. */
65
+ tokens?: ReturnsAppearanceTokens;
66
+ /** Per element `className`/`style` overrides. */
67
+ elements?: ReturnsAppearanceElements;
68
+ };
69
+ type ResolvedReturnsAppearance = {
70
+ theme: ReturnsTheme;
71
+ /** Tokens that are in effect (the theme preset plus caller overrides). */
72
+ tokens: ReturnsAppearanceTokens;
73
+ elements: ReturnsAppearanceElements;
74
+ /** Theme marker class for the theme boundary. */
75
+ boundaryClassName: string;
76
+ /** Inline custom properties applied to the returns root. */
77
+ boundaryStyle: CSSProperties;
78
+ };
79
+
80
+ /**
81
+ * Every string the returns views render. Pass a partial object through the
82
+ * `texts` prop of `BitsnapReturns`/`ReturnsProvider` to override any of them,
83
+ * whatever the locale. Strings with `{name}` placeholders keep them in
84
+ * overrides; unknown placeholders are left untouched.
85
+ */
86
+ type ReturnsTexts = {
87
+ /** Label of the back buttons. */
88
+ back: string;
89
+ /** Step indicator, placeholders `{current}` and `{total}`. */
90
+ stepIndicator: string;
91
+ /** Skeleton accessible label. */
92
+ loading: string;
93
+ /** Button that opens the list of previous returns. */
94
+ myReturnsLink: string;
95
+ emailStepTitle: string;
96
+ emailStepDescription: string;
97
+ emailLabel: string;
98
+ emailPlaceholder: string;
99
+ emailSubmit: string;
100
+ codeStepTitle: string;
101
+ /** Placeholder `{email}`. */
102
+ codeStepDescription: string;
103
+ codeLabel: string;
104
+ codeSubmit: string;
105
+ resend: string;
106
+ /** Placeholder `{seconds}`. */
107
+ resendIn: string;
108
+ logout: string;
109
+ ordersTitle: string;
110
+ ordersDescription: string;
111
+ ordersEmpty: string;
112
+ /** Placeholder `{reference}`. */
113
+ orderTitle: string;
114
+ /** Placeholder `{count}`. */
115
+ orderReturnableLines: string;
116
+ orderSelect: string;
117
+ paginationPrevious: string;
118
+ paginationNext: string;
119
+ /** Placeholders `{page}` and `{total}` (number of orders). */
120
+ paginationInfo: string;
121
+ /** Placeholder `{reference}`. */
122
+ orderDetailTitle: string;
123
+ orderDetailDescription: string;
124
+ /** Placeholder `{name}`. */
125
+ quantityLabel: string;
126
+ /** Placeholder `{name}`. */
127
+ quantityDecrease: string;
128
+ /** Placeholder `{name}`. */
129
+ quantityIncrease: string;
130
+ /** Placeholder `{available}`. */
131
+ quantityOfAvailable: string;
132
+ /** Shown for an ineligible line without a reason from the backend. */
133
+ lineIneligibleFallback: string;
134
+ noteLabel: string;
135
+ notePlaceholder: string;
136
+ selectionContinue: string;
137
+ selectionEmpty: string;
138
+ previousReturnsTitle: string;
139
+ confirmationTitle: string;
140
+ confirmationDescription: string;
141
+ confirmationSummary: string;
142
+ /** Placeholder `{quantity}`. */
143
+ confirmationQuantity: string;
144
+ confirmationNote: string;
145
+ confirmationSubmit: string;
146
+ successTitle: string;
147
+ successDescription: string;
148
+ successReference: string;
149
+ successInstructions: string;
150
+ successDone: string;
151
+ myReturnsTitle: string;
152
+ myReturnsDescription: string;
153
+ myReturnsEmpty: string;
154
+ myReturnOpen: string;
155
+ myReturnDetailTitle: string;
156
+ /** Placeholder `{reference}`. */
157
+ myReturnTitle: string;
158
+ myReturnCreatedAt: string;
159
+ myReturnRefund: string;
160
+ myReturnLines: string;
161
+ /** Placeholders `{requested}`, `{approved}`, `{received}`. */
162
+ myReturnLineQuantities: string;
163
+ myReturnNote: string;
164
+ myReturnHistory: string;
165
+ statusSubmitted: string;
166
+ statusApproved: string;
167
+ statusRejected: string;
168
+ statusAwaitingReceipt: string;
169
+ statusReceived: string;
170
+ statusCompleted: string;
171
+ statusCancelled: string;
172
+ statusRefunded: string;
173
+ /** Any status the backend adds later. */
174
+ statusFallback: string;
175
+ refundStatusNotStarted: string;
176
+ refundStatusPending: string;
177
+ refundStatusSucceeded: string;
178
+ refundStatusFailed: string;
179
+ refundStatusFallback: string;
180
+ errorGeneric: string;
181
+ errorInvalidEmail: string;
182
+ errorInvalidCode: string;
183
+ errorSessionExpired: string;
184
+ errorOrderNotFound: string;
185
+ errorReturnNotFound: string;
186
+ errorQuantityUnavailable: string;
187
+ errorItemNotReturnable: string;
188
+ errorReturnsDisabled: string;
189
+ errorRateLimited: string;
190
+ errorIdempotencyConflict: string;
191
+ errorDeliveryFailed: string;
192
+ errorRetry: string;
193
+ };
194
+ type ReturnsTextKey = keyof ReturnsTexts;
195
+
196
+ export { type ReturnsAppearance as R, type ReturnsTexts as a, RETURNS_SLOT_NAMES as b, type ReturnsAppearanceElements as c, type ReturnsAppearanceTokens as d, type ReturnsSlotAppearance as e, type ReturnsSlotName as f, type ReturnsTheme as g, type ReturnsTextKey as h, type ResolvedReturnsAppearance as i };
@@ -0,0 +1,40 @@
1
+ import { R as ReturnsAppearance, a as ReturnsTexts } from './texts-CIEFbJTN.js';
2
+
3
+ interface GetThemeOutput {
4
+ logoURL?: string;
5
+ logoDarkURL?: string;
6
+ colors?: {
7
+ brand?: string;
8
+ brandDark?: string;
9
+ };
10
+ }
11
+ type PanelScreen = "products" | "notifications" | "profile" | "plans" | "orders" | "order-details" | "returns" | "return-details" | "course";
12
+ type PanelSearchParamsType = {
13
+ product?: string;
14
+ state: PanelScreen;
15
+ orderId?: string;
16
+ returnId?: string;
17
+ /** `state: "course"`: `UserProduct.accessId` of the open course. */
18
+ course?: string;
19
+ /** `state: "course"`: id of the open lesson or test. */
20
+ item?: string;
21
+ };
22
+ interface PanelProps {
23
+ projectID: string;
24
+ theme?: GetThemeOutput;
25
+ loginURL: string;
26
+ /**
27
+ * Appearance of the Returns screen. When omitted, `buttonBackground`,
28
+ * `focusRing` and a readable `buttonForeground` are derived from
29
+ * `theme.colors.brand`.
30
+ */
31
+ returnsAppearance?: ReturnsAppearance;
32
+ /** Text overrides of the Returns screen. */
33
+ returnsTexts?: Partial<ReturnsTexts>;
34
+ }
35
+ interface PanelLoginProps {
36
+ projectID: string;
37
+ theme?: GetThemeOutput;
38
+ }
39
+
40
+ export type { GetThemeOutput as G, PanelProps as P, PanelLoginProps as a, PanelScreen as b, PanelSearchParamsType as c };
@@ -0,0 +1,40 @@
1
+ import { R as ReturnsAppearance, a as ReturnsTexts } from './texts-tQtAGJCT.mjs';
2
+
3
+ interface GetThemeOutput {
4
+ logoURL?: string;
5
+ logoDarkURL?: string;
6
+ colors?: {
7
+ brand?: string;
8
+ brandDark?: string;
9
+ };
10
+ }
11
+ type PanelScreen = "products" | "notifications" | "profile" | "plans" | "orders" | "order-details" | "returns" | "return-details" | "course";
12
+ type PanelSearchParamsType = {
13
+ product?: string;
14
+ state: PanelScreen;
15
+ orderId?: string;
16
+ returnId?: string;
17
+ /** `state: "course"`: `UserProduct.accessId` of the open course. */
18
+ course?: string;
19
+ /** `state: "course"`: id of the open lesson or test. */
20
+ item?: string;
21
+ };
22
+ interface PanelProps {
23
+ projectID: string;
24
+ theme?: GetThemeOutput;
25
+ loginURL: string;
26
+ /**
27
+ * Appearance of the Returns screen. When omitted, `buttonBackground`,
28
+ * `focusRing` and a readable `buttonForeground` are derived from
29
+ * `theme.colors.brand`.
30
+ */
31
+ returnsAppearance?: ReturnsAppearance;
32
+ /** Text overrides of the Returns screen. */
33
+ returnsTexts?: Partial<ReturnsTexts>;
34
+ }
35
+ interface PanelLoginProps {
36
+ projectID: string;
37
+ theme?: GetThemeOutput;
38
+ }
39
+
40
+ export type { GetThemeOutput as G, PanelProps as P, PanelLoginProps as a, PanelScreen as b, PanelSearchParamsType as c };
package/package.json CHANGED
@@ -1,34 +1,31 @@
1
1
  {
2
2
  "name": "bitsnap-react",
3
- "version": "1.7.1",
3
+ "version": "1.8.0",
4
4
  "description": "This is Bitsnap React library for easy integration with any website which is using React framework",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "type": "commonjs",
8
- "scripts": {
9
- "build": "tsup",
10
- "test:returns-ssr": "pnpm build && node --test test/returns-widget.ssr.test.cjs",
11
- "test:catalog-ssr": "pnpm build && node --test test/catalog.ssr.test.cjs",
12
- "build:publish": "pnpm build --env.publish",
13
- "clean": "rimraf ./dist",
14
- "dev": "tsup --watch",
15
- "dev:publish": "pnpm dev --env.publish",
16
- "test": "tsup src/components/checkout/appearance.test.ts src/components/checkout/texts.test.ts src/lib/appearance-core.test.ts src/lib/texts.test.ts src/components/returns/appearance.test.ts src/components/returns/texts.test.ts src/components/returns/errors.test.ts src/components/returns/money.test.ts src/components/returns/session-storage.test.ts src/components/returns/state-machine.test.ts src/components/returns/selection.test.ts src/components/returns/legacy.test.ts src/panel/returns-appearance.test.ts src/components/products/appearance.test.ts src/components/products/texts.test.ts src/components/products/format.test.ts src/components/products/fetch.test.ts src/components/products/useProducts.test.ts src/components/products/cart-target.test.ts src/components/checkout/cart-items.test.ts --format esm --out-dir .test-dist --no-config --silent && node --test \".test-dist/**/*.test.mjs\"",
17
- "test:types": "tsc -p test/consumer/tsconfig.json",
18
- "test:package": "node test/consumer/verify-package.mjs"
19
- },
20
8
  "repository": {
21
9
  "type": "git",
22
10
  "url": "git+https://github.com/emmems/bitsnap-react.git"
23
11
  },
24
- "keywords": ["bitsnap", "checkout", "shop", "ecommerce"],
12
+ "keywords": [
13
+ "bitsnap",
14
+ "checkout",
15
+ "shop",
16
+ "ecommerce"
17
+ ],
25
18
  "author": "Piotr Michalik",
26
19
  "license": "SEE LICENSE IN LICENSE file",
27
20
  "bugs": {
28
21
  "url": "https://github.com/emmems/bitsnap-react/issues"
29
22
  },
30
- "sideEffects": ["*.css"],
31
- "files": ["dist"],
23
+ "sideEffects": [
24
+ "*.css"
25
+ ],
26
+ "files": [
27
+ "dist"
28
+ ],
32
29
  "types": "./dist/index.d.ts",
33
30
  "homepage": "https://github.com/emmems/bitsnap-react#readme",
34
31
  "devDependencies": {
@@ -36,6 +33,7 @@
36
33
  "@types/react": "^19.2.0",
37
34
  "@types/react-dom": "^19.2.0",
38
35
  "autoprefixer": "^10.4.20",
36
+ "jsdom": "^30.1.3",
39
37
  "postcss": "^8.5.3",
40
38
  "tsup": "^8.3.5",
41
39
  "typescript": "^5.6.3"
@@ -65,6 +63,7 @@
65
63
  "class-variance-authority": "^0.7.1",
66
64
  "clsx": "^2.1.1",
67
65
  "dlx": "^0.2.1",
66
+ "dompurify": "^3.4.17",
68
67
  "hls.js": "^1.6.15",
69
68
  "input-otp": "^1.4.2",
70
69
  "label": "^0.2.2",
@@ -155,15 +154,51 @@
155
154
  "default": "./dist/catalog.js"
156
155
  }
157
156
  },
157
+ "./course": {
158
+ "import": {
159
+ "types": "./dist/course.d.mts",
160
+ "default": "./dist/course.mjs"
161
+ },
162
+ "require": {
163
+ "types": "./dist/course.d.ts",
164
+ "default": "./dist/course.js"
165
+ }
166
+ },
158
167
  "./package.json": "./package.json"
159
168
  },
160
169
  "typesVersions": {
161
170
  "*": {
162
- "models": ["./dist/models.d.ts"],
163
- "internal": ["./dist/internal.d.ts"],
164
- "errors": ["./dist/errors.d.ts"],
165
- "returns": ["./dist/returns.d.ts"],
166
- "catalog": ["./dist/catalog.d.ts"]
171
+ "models": [
172
+ "./dist/models.d.ts"
173
+ ],
174
+ "internal": [
175
+ "./dist/internal.d.ts"
176
+ ],
177
+ "errors": [
178
+ "./dist/errors.d.ts"
179
+ ],
180
+ "returns": [
181
+ "./dist/returns.d.ts"
182
+ ],
183
+ "catalog": [
184
+ "./dist/catalog.d.ts"
185
+ ],
186
+ "course": [
187
+ "./dist/course.d.ts"
188
+ ]
167
189
  }
190
+ },
191
+ "scripts": {
192
+ "build": "tsup",
193
+ "test:returns-ssr": "pnpm build && node --test test/returns-widget.ssr.test.cjs",
194
+ "test:catalog-ssr": "pnpm build && node --test test/catalog.ssr.test.cjs",
195
+ "test:course-ssr": "pnpm build && node --test test/course.ssr.test.cjs",
196
+ "build:publish": "pnpm build --env.publish",
197
+ "clean": "rimraf ./dist",
198
+ "dev": "tsup --watch",
199
+ "dev:publish": "pnpm dev --env.publish",
200
+ "test": "tsup src/components/checkout/appearance.test.ts src/components/checkout/texts.test.ts src/lib/appearance-core.test.ts src/lib/texts.test.ts src/components/returns/appearance.test.ts src/components/returns/texts.test.ts src/components/returns/errors.test.ts src/components/returns/money.test.ts src/components/returns/session-storage.test.ts src/components/returns/state-machine.test.ts src/components/returns/selection.test.ts src/components/returns/legacy.test.ts src/panel/returns-appearance.test.ts src/components/products/appearance.test.ts src/components/products/texts.test.ts src/components/products/format.test.ts src/components/products/fetch.test.ts src/components/products/useProducts.test.ts src/components/products/cart-target.test.ts src/components/checkout/cart-items.test.ts src/course/logic.test.ts src/course/accent.test.ts src/course/texts.test.ts src/course/datasource.test.ts src/course/sanitize.test.ts src/course/VideoPlayer.test.tsx src/course/PanelCourse.test.tsx --format esm --out-dir .test-dist --no-config --external jsdom --silent && node --test \".test-dist/**/*.test.mjs\"",
201
+ "test:types": "tsc -p test/consumer/tsconfig.json",
202
+ "test:package": "node test/consumer/verify-package.mjs"
168
203
  }
169
- }
204
+ }
@@ -1,2 +0,0 @@
1
- import{L as c,M as d,N as e,O as f,P as g,Q as h,R as i}from"./chunk-RATFYRKZ.mjs";import"./chunk-4HOZFM6V.mjs";import{k as a,l as b}from"./chunk-3TENJTY4.mjs";import"./chunk-U6FLIRIV.mjs";export{c as MARKETING_AGREEMENT_ID,d as bitsnapProjectID,h as default,i as getCheckoutMethods,b as getLocale,f as getProjectID,a as setLocale,e as setProjectID,g as useCartProvider};
2
- //# sourceMappingURL=CartProvider-F2VH7WFO.mjs.map
@@ -1,2 +0,0 @@
1
- var u="https://bitsnap.pl",d=u;function h(t){console.log("setCustomHost",t),d=t}function x(t,e){return e.toLowerCase().startsWith("en")?t.en:t.pl}function g(t,e){let n={...t};if(e!=null)for(let[r,o]of Object.entries(e))o!=null&&(n[r]=o);return n}function c(t,e,n){return g(x(t,e),n)}function T(t,e){return t[e]??e}var y={en:{cart:"Cart",emptyCart:"Your cart is empty.",total:"Total:",delivery:"+ delivery",chooseCountry:"Choose a country",nextStep:"Next step",unavailableProducts:"Not all products are available."},pl:{cart:"Koszyk",emptyCart:"Brak produkt\xF3w w koszyku.",total:"Suma:",delivery:"+ dostawa",chooseCountry:"Wybierz kraj",nextStep:"Nast\u0119pny krok",unavailableProducts:"Nie wszystkie produkty s\u0105 dost\u0119pne w magazynie."}};function k(t,e){return c(y,t,e)}function R(t,e,n){return T(k(e,n),t)}var i="pl-PL",p="bitsnap-locale",a;function L(t){let e=t?.trim();a=e?e.toLowerCase()==="en"?"en-US":e.toLowerCase()==="pl"?i:e:void 0,typeof localStorage<"u"&&(a==null?localStorage.removeItem(p):localStorage.setItem(p,a))}function E(){return a??(typeof localStorage<"u"?localStorage.getItem(p)??i:i)}import{clsx as m}from"clsx";import{twMerge as f}from"tailwind-merge";function z(...t){return f(m(t))}function S(t){let e={};for(let[n,r]of Object.entries(t))r!=null&&(e[n]=r);return e}function b(t){return Object.values(t).some(e=>e!=null&&(e.className!=null||e.style!=null))}function C(t,e,n){let r={};for(let[o,l]of Object.entries(e)){let s=t[o];s!=null&&(r[l]=s)}for(let{token:o,variable:l}of n){let s=t[o];s!=null&&(r[l]=s)}return r}function H(t,e){let n=t?.theme??e.defaultTheme,r=S({...e.presets[n],...t?.tokens}),o=t?.elements??{};return{theme:n,isCustomized:t?.theme!=null||Object.keys(r).length>0||b(o),tokens:r,elements:o,boundaryStyle:C(r,e.variables,e.shadcnVariables)}}function N(t,e){return t[e]}export{z as a,u as b,d as c,h as d,H as e,N as f,x as g,c as h,R as i,i as j,L as k,E as l};
2
- //# sourceMappingURL=chunk-3TENJTY4.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/checkout/constants.ts","../src/lib/texts.ts","../src/components/checkout/texts.ts","../src/components/checkout/locale.ts","../src/lib/utils.ts","../src/lib/appearance-core.ts"],"sourcesContent":["export const DEFAULT_HOST = \"https://bitsnap.pl\";\nexport let HOST = DEFAULT_HOST;\n\nexport function setCustomHost(host: string) {\n console.log(\"setCustomHost\", host);\n HOST = host;\n}\n","/**\n * Shared text machinery: typed string tables per locale, the locale fallback\n * and a merge with caller overrides. Each module (checkout, later returns)\n * supplies its own key type and default tables.\n */\n\n/** Strings of one locale, keyed by text key. */\nexport type TextTable<Key extends string> = Record<Key, string>;\n\n/** Default tables for the supported locales. */\nexport type LocaleTables<Key extends string> = {\n en: TextTable<Key>;\n pl: TextTable<Key>;\n};\n\n/**\n * Picks the table for a locale. Any locale starting with `en` (case\n * insensitive, so `en`, `en-US`, `EN-gb`) gets English; everything else,\n * including unknown locales, gets the Polish default.\n */\nexport function pickLocaleTable<Key extends string>(\n tables: LocaleTables<Key>,\n locale: string,\n): TextTable<Key> {\n return locale.toLowerCase().startsWith(\"en\") ? tables.en : tables.pl;\n}\n\n/**\n * Merges caller overrides over a table. Overrides apply regardless of the\n * locale; `undefined`/`null` entries are ignored so the default stays.\n */\nexport function mergeTexts<Key extends string>(\n table: TextTable<Key>,\n overrides?: Partial<TextTable<Key>>,\n): TextTable<Key> {\n const result: Record<string, string> = { ...table };\n\n if (overrides != null) {\n for (const [key, value] of Object.entries<string | undefined>(overrides)) {\n if (value != null) {\n result[key] = value;\n }\n }\n }\n\n return result as TextTable<Key>;\n}\n\n/** Locale table merged with the caller overrides. */\nexport function resolveTexts<Key extends string>(\n tables: LocaleTables<Key>,\n locale: string,\n overrides?: Partial<TextTable<Key>>,\n): TextTable<Key> {\n return mergeTexts(pickLocaleTable(tables, locale), overrides);\n}\n\n/** Looks up a single text. Unknown keys return the key itself. */\nexport function lookupText<Key extends string>(\n texts: TextTable<Key>,\n key: Key,\n): string {\n return (texts as Record<string, string | undefined>)[key] ?? key;\n}\n","import {\n lookupText,\n resolveTexts,\n type LocaleTables,\n} from \"@/src/lib/texts\";\n\n/**\n * Every string the checkout renders. Pass a partial object through the\n * `texts` prop of `BitsnapCheckout` to override any of them, whatever the\n * locale.\n */\nexport type CheckoutTexts = {\n /** Drawer title. */\n cart: string;\n /** Shown when the cart has no products. */\n emptyCart: string;\n /** Label next to the total price. */\n total: string;\n /** Delivery note next to the total price. */\n delivery: string;\n /** Country selector placeholder. */\n chooseCountry: string;\n /** Checkout button label. */\n nextStep: string;\n /** Error shown when some products are out of stock. */\n unavailableProducts: string;\n};\n\nexport type CheckoutTextKey = keyof CheckoutTexts;\n\nexport const CHECKOUT_TEXT_TABLES: LocaleTables<CheckoutTextKey> = {\n en: {\n cart: \"Cart\",\n emptyCart: \"Your cart is empty.\",\n total: \"Total:\",\n delivery: \"+ delivery\",\n chooseCountry: \"Choose a country\",\n nextStep: \"Next step\",\n unavailableProducts: \"Not all products are available.\",\n },\n pl: {\n cart: \"Koszyk\",\n emptyCart: \"Brak produktów w koszyku.\",\n total: \"Suma:\",\n delivery: \"+ dostawa\",\n chooseCountry: \"Wybierz kraj\",\n nextStep: \"Następny krok\",\n unavailableProducts: \"Nie wszystkie produkty są dostępne w magazynie.\",\n },\n};\n\n/** Default texts for a locale merged with the caller overrides. */\nexport function resolveCheckoutTexts(\n locale: string,\n overrides?: Partial<CheckoutTexts>,\n): CheckoutTexts {\n return resolveTexts(CHECKOUT_TEXT_TABLES, locale, overrides);\n}\n\nexport function getCheckoutText(\n key: CheckoutTextKey,\n locale: string,\n overrides?: Partial<CheckoutTexts>,\n): string {\n return lookupText(resolveCheckoutTexts(locale, overrides), key);\n}\n","import { pickLocaleTable } from \"@/src/lib/texts\";\nimport { CHECKOUT_TEXT_TABLES } from \"./texts\";\n\nexport const DEFAULT_LOCALE = \"pl-PL\" as const;\nconst localeStorageKey = \"bitsnap-locale\";\n\nlet activeLocale: string | undefined;\n\nexport function setLocale(locale?: string): void {\n const value = locale?.trim();\n activeLocale = value\n ? value.toLowerCase() === \"en\"\n ? \"en-US\"\n : value.toLowerCase() === \"pl\"\n ? DEFAULT_LOCALE\n : value\n : undefined;\n if (typeof localStorage !== \"undefined\") {\n if (activeLocale == null) {\n localStorage.removeItem(localeStorageKey);\n } else {\n localStorage.setItem(localeStorageKey, activeLocale);\n }\n }\n}\n\nexport function getLocale(): string {\n if (activeLocale != null) {\n return activeLocale;\n }\n if (typeof localStorage !== \"undefined\") {\n return localStorage.getItem(localeStorageKey) ?? DEFAULT_LOCALE;\n }\n return DEFAULT_LOCALE;\n}\n\nexport function translate(key: string, locale: string = getLocale()): string {\n return (\n (pickLocaleTable(CHECKOUT_TEXT_TABLES, locale) as Record<string, string>)[\n key\n ] ?? key\n );\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport type Modify<T, R> = Omit<T, keyof R> & R;\n\nexport type Partial<T> = {\n [P in keyof T]?: T[P];\n};\n","import type { CSSProperties } from \"react\";\n\n/**\n * Generic building blocks shared by the appearance modules (checkout, and\n * later returns). Each module supplies its own token to CSS variable map, theme\n * presets and shadcn mapping, and keeps its own public types. Everything here\n * is pure so it can be tested without a DOM.\n */\n\n/** Caller overrides for a single slot. */\nexport type SlotAppearance = {\n /** Merged after the built-in classes with `cn`, so Tailwind conflicts resolve. */\n className?: string;\n /** Merged after the built-in inline styles. */\n style?: CSSProperties;\n};\n\n/** Typed partial map of slot name to its overrides. */\nexport type AppearanceElements<Slot extends string> = Partial<\n Record<Slot, SlotAppearance>\n>;\n\n/** CSS custom property used for each token. */\nexport type TokenVariables<Token extends string> = Readonly<\n Record<Token, string>\n>;\n\n/**\n * Remaps a token onto a shadcn theme variable (`--background`, `--ring`, ...)\n * so shared UI primitives follow the module's tokens. Only written when the\n * token is in effect.\n */\nexport type ShadcnVariableMapping<Token extends string> = readonly {\n token: Token;\n variable: string;\n}[];\n\nexport type AppearanceCoreConfig<Token extends string, Theme extends string> = {\n /** Theme used when the caller does not select one. */\n defaultTheme: Theme;\n /** Partial token sets applied underneath the caller tokens. */\n presets: Record<Theme, Partial<Record<Token, string>>>;\n variables: TokenVariables<Token>;\n shadcnVariables: ShadcnVariableMapping<Token>;\n};\n\nexport type ResolvedAppearanceCore<\n Token extends string,\n Theme extends string,\n Slot extends string,\n> = {\n theme: Theme;\n /** `true` as soon as the caller passed a theme, a token or a slot override. */\n isCustomized: boolean;\n /** Tokens that are in effect. Empty entries were dropped. */\n tokens: Partial<Record<Token, string>>;\n elements: AppearanceElements<Slot>;\n /** Inline custom properties for the theme boundary. */\n boundaryStyle: CSSProperties;\n};\n\n/** Drops `undefined`/`null` tokens so unset values keep the stylesheet default. */\nexport function omitUndefined<Token extends string>(\n tokens: Partial<Record<Token, string>>,\n): Partial<Record<Token, string>> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(tokens)) {\n if (value != null) {\n result[key] = value;\n }\n }\n\n return result as Partial<Record<Token, string>>;\n}\n\nexport function hasAnyElement<Slot extends string>(\n elements: AppearanceElements<Slot>,\n): boolean {\n return Object.values<SlotAppearance | undefined>(elements).some(\n (element) =>\n element != null && (element.className != null || element.style != null),\n );\n}\n\n/**\n * Token to CSS variable resolution, followed by the shadcn remapping. Only\n * tokens that are in effect produce a variable.\n */\nexport function resolveBoundaryStyle<Token extends string>(\n tokens: Partial<Record<Token, string>>,\n variables: TokenVariables<Token>,\n shadcnVariables: ShadcnVariableMapping<Token>,\n): CSSProperties {\n const style: Record<string, string> = {};\n\n for (const [token, variable] of Object.entries<string>(variables)) {\n const value = tokens[token as Token];\n if (value != null) {\n style[variable] = value;\n }\n }\n\n for (const { token, variable } of shadcnVariables) {\n const value = tokens[token];\n if (value != null) {\n style[variable] = value;\n }\n }\n\n return style as CSSProperties;\n}\n\n/**\n * Resolves theme, tokens, slot overrides and the boundary style. The resolver\n * never invents values: a token is only present when the caller provided it or\n * selected a theme preset that carries it.\n */\nexport function resolveAppearanceCore<\n Token extends string,\n Theme extends string,\n Slot extends string,\n>(\n appearance:\n | {\n theme?: Theme;\n tokens?: Partial<Record<Token, string>>;\n elements?: AppearanceElements<Slot>;\n }\n | undefined,\n config: AppearanceCoreConfig<Token, Theme>,\n): ResolvedAppearanceCore<Token, Theme, Slot> {\n const theme: Theme = appearance?.theme ?? config.defaultTheme;\n\n const tokens = omitUndefined<Token>({\n ...config.presets[theme],\n ...appearance?.tokens,\n });\n\n const elements = appearance?.elements ?? {};\n\n return {\n theme,\n isCustomized:\n appearance?.theme != null ||\n Object.keys(tokens).length > 0 ||\n hasAnyElement(elements),\n tokens,\n elements,\n boundaryStyle: resolveBoundaryStyle(\n tokens,\n config.variables,\n config.shadcnVariables,\n ),\n };\n}\n\n/** Caller overrides for a slot, if any were provided. */\nexport function getSlotAppearance<Slot extends string>(\n elements: AppearanceElements<Slot>,\n slot: Slot,\n): SlotAppearance | undefined {\n return elements[slot];\n}\n"],"mappings":"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","names":["DEFAULT_HOST","HOST","setCustomHost","host","pickLocaleTable","tables","locale","mergeTexts","table","overrides","result","key","value","resolveTexts","lookupText","texts","CHECKOUT_TEXT_TABLES","resolveCheckoutTexts","locale","overrides","resolveTexts","getCheckoutText","key","lookupText","DEFAULT_LOCALE","localeStorageKey","activeLocale","setLocale","locale","value","getLocale","clsx","twMerge","cn","inputs","omitUndefined","tokens","result","key","value","hasAnyElement","elements","element","resolveBoundaryStyle","variables","shadcnVariables","style","token","variable","resolveAppearanceCore","appearance","config","theme","getSlotAppearance","slot"]}