@luxfi/core 5.3.0 → 5.3.2

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 (179) hide show
  1. package/commerce/ui/conf.ts +13 -13
  2. package/commerce/ui/context.tsx +123 -123
  3. package/commerce/ui/store.ts +289 -289
  4. package/components/access-code-input.tsx +71 -71
  5. package/components/auth/auth-listener.tsx +29 -29
  6. package/components/auth/auth-token/clear-auth-token.tsx +12 -12
  7. package/components/auth/auth-token/set-auth-token.tsx +16 -16
  8. package/components/auth/common-auth-domains.ts +16 -16
  9. package/components/auth/login-panel.tsx +107 -107
  10. package/components/back-button.tsx +49 -49
  11. package/components/chat-widget.tsx +85 -85
  12. package/components/commerce/_to_deprecate_checkout-widget/const.ts +13 -13
  13. package/components/commerce/_to_deprecate_checkout-widget/index.tsx_ +188 -188
  14. package/components/commerce/_to_deprecate_checkout-widget/obs-string-set.ts +48 -48
  15. package/components/commerce/_to_deprecate_checkout-widget/use-anim-clx-set.ts +58 -58
  16. package/components/commerce/bag-button.tsx +98 -98
  17. package/components/commerce/buy-button.tsx +34 -34
  18. package/components/commerce/checkout-button.tsx +129 -129
  19. package/components/commerce/checkout-panel/cart-accordian.tsx +66 -66
  20. package/components/commerce/checkout-panel/checkout-panel-props.ts +9 -9
  21. package/components/commerce/checkout-panel/desktop-bag-carousel.tsx +36 -36
  22. package/components/commerce/checkout-panel/desktop-cp.tsx +82 -82
  23. package/components/commerce/checkout-panel/index.tsx +126 -126
  24. package/components/commerce/checkout-panel/mobile-cp.tsx +66 -66
  25. package/components/commerce/checkout-panel/policy-links.tsx +29 -29
  26. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  27. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  28. package/components/commerce/desktop-bag-popup.tsx +78 -78
  29. package/components/commerce/desktop-nav-menu.tsx +130 -130
  30. package/components/commerce/drawer/index.tsx +88 -88
  31. package/components/commerce/drawer/micro.tsx +144 -144
  32. package/components/commerce/drawer/shell.tsx +85 -85
  33. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  34. package/components/commerce/mobile-login-button.tsx +107 -101
  35. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  36. package/components/commerce/mobile-nav-menu-ai.tsx +50 -47
  37. package/components/commerce/mobile-nav-menu-item.tsx +49 -49
  38. package/components/commerce/mobile-nav-menu.tsx +101 -101
  39. package/components/contact-dialog/contact-form.tsx +113 -113
  40. package/components/contact-dialog/disclaimer.tsx +13 -13
  41. package/components/contact-dialog/index.tsx +64 -64
  42. package/components/copyright.tsx +21 -21
  43. package/components/drawer-margin.tsx +25 -25
  44. package/components/footer.tsx +77 -77
  45. package/components/header/desktop.tsx +51 -50
  46. package/components/header/index.tsx +50 -52
  47. package/components/header/mobile.tsx +163 -163
  48. package/components/header/theme-toggle.tsx +26 -26
  49. package/components/icons/24k-gold-card.tsx +43 -43
  50. package/components/icons/ai-chat-act.tsx +47 -47
  51. package/components/icons/ai-chat.tsx +29 -29
  52. package/components/icons/anodized-titanium.tsx +45 -45
  53. package/components/icons/avatar.tsx +11 -11
  54. package/components/icons/bag-icon.tsx +10 -10
  55. package/components/icons/blog-act.tsx +14 -14
  56. package/components/icons/blog.tsx +20 -20
  57. package/components/icons/bridge-act.tsx +18 -18
  58. package/components/icons/bridge.tsx +68 -68
  59. package/components/icons/changelog-act.tsx +15 -15
  60. package/components/icons/changelog.tsx +21 -21
  61. package/components/icons/chrome.tsx +45 -45
  62. package/components/icons/coins-act.tsx +29 -29
  63. package/components/icons/coins.tsx +20 -20
  64. package/components/icons/compare-cards-act.tsx +30 -30
  65. package/components/icons/compare-cards.tsx +21 -21
  66. package/components/icons/credit-act.tsx +29 -29
  67. package/components/icons/credit.tsx +20 -20
  68. package/components/icons/customer-support-act.tsx +27 -27
  69. package/components/icons/customer-support.tsx +21 -21
  70. package/components/icons/customers-act.tsx +65 -65
  71. package/components/icons/customers.tsx +33 -33
  72. package/components/icons/developer-docs-act.tsx +26 -26
  73. package/components/icons/developer-docs.tsx +20 -20
  74. package/components/icons/exchange-act.tsx +27 -27
  75. package/components/icons/exchange.tsx +21 -21
  76. package/components/icons/explorer-act.tsx +27 -27
  77. package/components/icons/explorer.tsx +22 -22
  78. package/components/icons/faqs-act.tsx +27 -27
  79. package/components/icons/faqs.tsx +21 -21
  80. package/components/icons/github.tsx +14 -14
  81. package/components/icons/guides-act.tsx +26 -26
  82. package/components/icons/guides.tsx +21 -21
  83. package/components/icons/gun-metal.tsx +44 -44
  84. package/components/icons/index.tsx +43 -43
  85. package/components/icons/integrations-act.tsx +41 -41
  86. package/components/icons/integrations.tsx +25 -25
  87. package/components/icons/irradescent.tsx +41 -41
  88. package/components/icons/launch-subnet.tsx +21 -21
  89. package/components/icons/launchsubnet-act.tsx +29 -29
  90. package/components/icons/left-arrow.tsx +11 -11
  91. package/components/icons/lux-finance-act.tsx +34 -34
  92. package/components/icons/lux-finance.tsx +23 -23
  93. package/components/icons/lux-logo.tsx +10 -10
  94. package/components/icons/lux-pass-act.tsx +41 -41
  95. package/components/icons/lux-pass.tsx +25 -25
  96. package/components/icons/lux-quests-act.tsx +15 -15
  97. package/components/icons/lux-quests.tsx +21 -21
  98. package/components/icons/market-act.tsx +39 -39
  99. package/components/icons/market.tsx +24 -24
  100. package/components/icons/mirrored-titanium.tsx +46 -46
  101. package/components/icons/more-benefits-act.tsx +29 -29
  102. package/components/icons/more-benefits.tsx +21 -21
  103. package/components/icons/open-source-act.tsx +41 -41
  104. package/components/icons/open-source.tsx +26 -26
  105. package/components/icons/right-arrow.tsx +10 -10
  106. package/components/icons/safe-act.tsx +77 -77
  107. package/components/icons/safe.tsx +37 -37
  108. package/components/icons/search.tsx +12 -12
  109. package/components/icons/secure-delivery.tsx +13 -13
  110. package/components/icons/shop-act.tsx +29 -29
  111. package/components/icons/shop.tsx +20 -20
  112. package/components/icons/social-icon.tsx +35 -35
  113. package/components/icons/social-svg.css +3 -3
  114. package/components/icons/sterling-silver-card.tsx +44 -44
  115. package/components/icons/templates-act.tsx +29 -29
  116. package/components/icons/templates.tsx +21 -21
  117. package/components/icons/validators-act.tsx +42 -42
  118. package/components/icons/validators.tsx +41 -41
  119. package/components/icons/view-all-card-act.tsx +28 -28
  120. package/components/icons/view-all-card.tsx +20 -20
  121. package/components/icons/wallet-act.tsx +29 -29
  122. package/components/icons/wallet.tsx +20 -20
  123. package/components/icons/warpcast.tsx +58 -58
  124. package/components/icons/youtube-logo.tsx +59 -59
  125. package/components/index.ts +25 -25
  126. package/components/logo.tsx +89 -89
  127. package/components/main.tsx +27 -27
  128. package/components/mini-chart/index.tsx +7 -7
  129. package/components/mini-chart/mini-chart-props.ts +43 -43
  130. package/components/mini-chart/mini-chart.tsx +85 -85
  131. package/components/mini-chart/wrapper.tsx +23 -23
  132. package/components/not-found/index.tsx +28 -28
  133. package/components/not-found/not-found-content.mdx +5 -5
  134. package/components/scripts.tsx +24 -24
  135. package/components/tooltip.tsx +31 -31
  136. package/environment.d.ts +5 -5
  137. package/next/analytics/fpixel.ts +15 -15
  138. package/next/analytics/google-analytics.ts +13 -13
  139. package/next/analytics/index.ts +3 -3
  140. package/next/analytics/pixel-analytics.tsx +54 -54
  141. package/next/font/get-app-router-font-classes.ts +12 -12
  142. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  143. package/next/font/next-font-desc.ts +27 -27
  144. package/next/font/pages-router-font-vars.tsx +18 -18
  145. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  146. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  147. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  148. package/next/head-metadata/index.tsx +208 -208
  149. package/next/middleware/determine-device-mw.ts +16 -16
  150. package/package.json +79 -79
  151. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  152. package/root-layout/index.tsx +112 -112
  153. package/server-actions/firebase-app.ts +14 -14
  154. package/server-actions/index.ts +5 -5
  155. package/server-actions/store-contact.ts +51 -51
  156. package/site-def/footer/community.tsx +67 -67
  157. package/site-def/footer/company.ts +37 -37
  158. package/site-def/footer/ecosystem.ts +37 -37
  159. package/site-def/footer/index.tsx +26 -26
  160. package/site-def/footer/legal.ts +28 -28
  161. package/site-def/footer/network.ts +45 -45
  162. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  163. package/site-def/index.ts +2 -2
  164. package/site-def/main-nav.tsx +458 -458
  165. package/style/cart-animation.css +29 -29
  166. package/style/checkout-animation.css +23 -23
  167. package/style/drawer-handle-overrides.css +160 -160
  168. package/style/lux-colors.css +85 -85
  169. package/style/lux-global.css +50 -47
  170. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  171. package/tailwind/index.ts +2 -2
  172. package/tailwind/lux-tw-fonts.ts +39 -39
  173. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  174. package/tsconfig.json +15 -15
  175. package/types/chatbot-config.ts +6 -6
  176. package/types/chatbot-suggested-question.ts +7 -7
  177. package/types/contact-info.ts +10 -10
  178. package/types/index.ts +4 -4
  179. package/types/site-def.ts +43 -43
@@ -1,290 +1,290 @@
1
- import {
2
- action,
3
- autorun,
4
- computed,
5
- makeObservable,
6
- observable,
7
- reaction,
8
- type IReactionDisposer,
9
- } from 'mobx'
10
-
11
- import type { CommerceService } from '@hanzo/commerce/types'
12
-
13
- const LOG = false ////////////////////
14
- const log = (s: string) => {
15
- if (LOG) {
16
- console.log('COMMERCE_UI ' + s)
17
- }
18
- }
19
-
20
- type SnapPoint = number | string
21
-
22
- type SnapPoints = {
23
- full: SnapPoint
24
- micro: SnapPoint
25
- }
26
-
27
- type SnapPointsConfig = {
28
- mb: SnapPoints
29
- dt: SnapPoints
30
- }
31
-
32
- type DrawerState = 'closed' | 'micro' | 'full'
33
-
34
- interface SelectAndBuy {
35
- showVariants: (skuPath: string) => void
36
- showRecentVariants: () => void
37
- hideVariants: () => void
38
- get currentSkuPath(): string | undefined
39
- newRoute: () => void
40
- }
41
-
42
- interface CommerceDrawer {
43
-
44
- get open(): boolean
45
- get state(): DrawerState
46
- get closedByUser(): boolean
47
- setClosedByUser(b: boolean): void
48
- get modal(): boolean
49
- get points(): SnapPoint[]
50
- get activePoint(): SnapPoint | null
51
- // Called by UI Gesture
52
- onActivePointChanged: (p: SnapPoint | null) => void
53
- get showCheckout(): boolean
54
- get showRecent(): boolean
55
- get showBuy(): boolean
56
-
57
- get microHeight(): SnapPoint
58
- get isMobile(): boolean
59
- get snapPointPx(): number
60
- }
61
-
62
- class CommerceUIStore implements
63
- SelectAndBuy,
64
- CommerceDrawer
65
- {
66
- _vHeight: number = 0
67
- _routeChangedTime = 0
68
-
69
- _currentSkuPath: string | undefined = undefined
70
- _closedByUser: boolean = false
71
- _checkingOut: boolean | undefined = undefined
72
- _ignoreStateChange: boolean = false
73
- _activePoint: SnapPoint | null = null
74
-
75
- _reactionDisposers: IReactionDisposer[] = []
76
- _service: CommerceService
77
- _pointsConfig: SnapPointsConfig
78
- _points: SnapPoints // points to either this._pointsConfig.md or this._pointsConfig.dt
79
-
80
- constructor(s: CommerceService, conf: SnapPointsConfig) {
81
- this._service = s
82
- this._pointsConfig = conf
83
- this._points = this._pointsConfig.dt
84
-
85
- makeObservable(this, {
86
- _currentSkuPath: observable,
87
- _closedByUser: observable,
88
- _checkingOut: observable,
89
- _activePoint: observable,
90
- _points: observable.ref,
91
- _vHeight: observable,
92
- _routeChangedTime: observable,
93
-
94
- showVariants: action,
95
- showRecentVariants: action,
96
- hideVariants: action,
97
- setClosedByUser: action,
98
- setCheckingOut: action,
99
- setActivePoint: action,
100
- setMobile: action,
101
- setViewportHeight: action,
102
- setRouteChangedTime: action,
103
-
104
- activePoint: computed,
105
- checkingOut: computed,
106
- closedByUser: computed,
107
- currentSkuPath: computed,
108
- microHeight: computed,
109
- modal: computed,
110
- points: computed,
111
- showRecent: computed,
112
- showBuy: computed,
113
- showCheckout: computed,
114
- snapPointPx: computed,
115
- state: computed,
116
- open: computed
117
- })
118
- }
119
-
120
- initialize = (): void => {
121
-
122
- this._reactionDisposers.push(reaction(
123
- () => ( this.state ),
124
- (s) => {
125
- if (this.ignoreStateChange) {
126
- log(`STATE CHANGE to "${s}" (IGNORED)`) // ===========
127
- this.setIgnoreStateChange(false)
128
- return
129
- }
130
- else {
131
- log(`STATE CHANGE to "${s}" (UI REACTED)`) // ===========
132
- this._syncUIToState(s)
133
- }
134
- }
135
- ))
136
- /*
137
- this._reactionDisposers.push(autorun(() => {
138
- log('AUTORUN: OPEN: ' + this.open)
139
- log('AUTORUN:' + // ===============
140
- '[showCheckout: ' + this.showCheckout +
141
- '], [showRecent: ' + this.showRecent +
142
- '], [showBuy: ' + this.showBuy +
143
- '], [closedByUser: ' + this._closedByUser +
144
- '], [checkingOut: ' + this._checkingOut + ']'
145
- ) // ===========
146
- }))
147
- */
148
- }
149
-
150
- newRoute = () => {
151
- this.setRouteChangedTime(new Date().getTime())
152
- this.hideVariants()
153
- this.setClosedByUser(false)
154
- // DO NOT reset _checkingOut!
155
- }
156
-
157
- onActivePointChanged = (newPoint: SnapPoint | null): void => {
158
- log("ON onActivePointChanged: " + newPoint) // ===========
159
- if (newPoint === this._points.micro && this.activePoint === this._points.full) {
160
- this.setIgnoreStateChange(true)
161
- this.hideVariants()
162
- }
163
- else if (newPoint === this._points.full && this.activePoint === this._points.micro) {
164
- this.setIgnoreStateChange(true)
165
- this.showRecentVariants()
166
- }
167
- this.setActivePoint(newPoint)
168
- }
169
-
170
- showVariants = (skuPath: string): void => {
171
- this._service.setCurrentItem(undefined)
172
- this._currentSkuPath = skuPath
173
- this._closedByUser = false
174
- }
175
-
176
- showRecentVariants = (): void => {
177
- const recentItemInfo = this._service.recentItem
178
- if (recentItemInfo) {
179
- this._service.setCurrentItem(undefined)
180
- this._currentSkuPath = recentItemInfo.item.sku
181
- this._closedByUser = false
182
- }
183
- }
184
-
185
- hideVariants = (): void => { this._currentSkuPath = undefined }
186
- get currentSkuPath(): string | undefined { return this._currentSkuPath }
187
-
188
- get closedByUser(): boolean { return this._closedByUser }
189
- setClosedByUser = (b: boolean): void => { this._closedByUser = b}
190
-
191
- get ignoreStateChange(): boolean { return this._ignoreStateChange }
192
- setIgnoreStateChange = (b: boolean): void => { this._ignoreStateChange = b}
193
-
194
- get checkingOut(): boolean | undefined { return this._checkingOut }
195
- setCheckingOut = (b: boolean): void => { this._checkingOut = b }
196
-
197
- get activePoint(): SnapPoint | null { return this._activePoint }
198
- setActivePoint = (pt: SnapPoint | null): void => { this._activePoint = pt}
199
-
200
- setRouteChangedTime = (t: number): void => {this._routeChangedTime = t}
201
-
202
- get points(): SnapPoint[] {
203
- return [this._points.micro, this._points.full]
204
- }
205
-
206
- _syncUIToState = (s: DrawerState) => {
207
- log("_syncUIToState: " + s) // ===========
208
- if (s === 'micro') {
209
- this.setActivePoint(this.points[0])
210
- }
211
- else if (s === 'full') {
212
- this.setActivePoint(this.points[this.points.length - 1])
213
- }
214
- }
215
-
216
- get open(): boolean {
217
-
218
- log('open():' + // ===============
219
- ' showCheckout: ' + this.showCheckout +
220
- ' showRecent: ' + this.showRecent +
221
- ' showBuy: ' + this.showBuy
222
- ) // ===========
223
-
224
- return (
225
- this._checkingOut !== undefined
226
- &&
227
- !this._checkingOut
228
- &&
229
- !this.closedByUser
230
- &&
231
- (this.showCheckout || this.showRecent || this.showBuy)
232
- )
233
- }
234
-
235
- get state(): DrawerState {
236
- if (!this.closedByUser && !this._checkingOut) {
237
- if (this.showBuy) {
238
- return 'full'
239
- }
240
- else if (this.showRecent || this.showCheckout) {
241
- return 'micro'
242
- }
243
- }
244
- return 'closed'
245
- }
246
-
247
- get showRecent(): boolean {
248
-
249
- const recentInfo = this._service.recentItem
250
- return !!recentInfo && recentInfo.modified > this._routeChangedTime
251
- }
252
-
253
- get showBuy(): boolean {return !!this.currentSkuPath}
254
- get showCheckout(): boolean { return !this._service.cartEmpty}
255
- get modal(): boolean { return this.state !== 'micro'}
256
-
257
- get microHeight(): SnapPoint {
258
- return this._points.micro
259
- }
260
-
261
- get isMobile(): boolean { return this._pointsConfig.mb === this._points }
262
- setMobile = (b: boolean): void => {
263
- log("setMobile: " + b) // ===========
264
- this._points = b ? this._pointsConfig.mb : this._pointsConfig.dt
265
- }
266
-
267
- setViewportHeight = (v: number) => {this._vHeight = v}
268
- get snapPointPx(): number {
269
- if (!this._activePoint || this._vHeight === 0) return 0
270
-
271
- if (typeof this._activePoint === 'string') {
272
- return parseInt(this._activePoint)
273
- }
274
-
275
- return this._vHeight * this._activePoint as number
276
- }
277
-
278
- dispose = () => {
279
- this._reactionDisposers.forEach((d) => {d()})
280
- }
281
- }
282
-
283
- export {
284
- CommerceUIStore,
285
- type CommerceDrawer,
286
- type SelectAndBuy,
287
- type SnapPointsConfig,
288
- type SnapPoints,
289
- type SnapPoint
1
+ import {
2
+ action,
3
+ autorun,
4
+ computed,
5
+ makeObservable,
6
+ observable,
7
+ reaction,
8
+ type IReactionDisposer,
9
+ } from 'mobx'
10
+
11
+ import type { CommerceService } from '@hanzo/commerce/types'
12
+
13
+ const LOG = false ////////////////////
14
+ const log = (s: string) => {
15
+ if (LOG) {
16
+ console.log('COMMERCE_UI ' + s)
17
+ }
18
+ }
19
+
20
+ type SnapPoint = number | string
21
+
22
+ type SnapPoints = {
23
+ full: SnapPoint
24
+ micro: SnapPoint
25
+ }
26
+
27
+ type SnapPointsConfig = {
28
+ mb: SnapPoints
29
+ dt: SnapPoints
30
+ }
31
+
32
+ type DrawerState = 'closed' | 'micro' | 'full'
33
+
34
+ interface SelectAndBuy {
35
+ showVariants: (skuPath: string) => void
36
+ showRecentVariants: () => void
37
+ hideVariants: () => void
38
+ get currentSkuPath(): string | undefined
39
+ newRoute: () => void
40
+ }
41
+
42
+ interface CommerceDrawer {
43
+
44
+ get open(): boolean
45
+ get state(): DrawerState
46
+ get closedByUser(): boolean
47
+ setClosedByUser(b: boolean): void
48
+ get modal(): boolean
49
+ get points(): SnapPoint[]
50
+ get activePoint(): SnapPoint | null
51
+ // Called by UI Gesture
52
+ onActivePointChanged: (p: SnapPoint | null) => void
53
+ get showCheckout(): boolean
54
+ get showRecent(): boolean
55
+ get showBuy(): boolean
56
+
57
+ get microHeight(): SnapPoint
58
+ get isMobile(): boolean
59
+ get snapPointPx(): number
60
+ }
61
+
62
+ class CommerceUIStore implements
63
+ SelectAndBuy,
64
+ CommerceDrawer
65
+ {
66
+ _vHeight: number = 0
67
+ _routeChangedTime = 0
68
+
69
+ _currentSkuPath: string | undefined = undefined
70
+ _closedByUser: boolean = false
71
+ _checkingOut: boolean | undefined = undefined
72
+ _ignoreStateChange: boolean = false
73
+ _activePoint: SnapPoint | null = null
74
+
75
+ _reactionDisposers: IReactionDisposer[] = []
76
+ _service: CommerceService
77
+ _pointsConfig: SnapPointsConfig
78
+ _points: SnapPoints // points to either this._pointsConfig.md or this._pointsConfig.dt
79
+
80
+ constructor(s: CommerceService, conf: SnapPointsConfig) {
81
+ this._service = s
82
+ this._pointsConfig = conf
83
+ this._points = this._pointsConfig.dt
84
+
85
+ makeObservable(this, {
86
+ _currentSkuPath: observable,
87
+ _closedByUser: observable,
88
+ _checkingOut: observable,
89
+ _activePoint: observable,
90
+ _points: observable.ref,
91
+ _vHeight: observable,
92
+ _routeChangedTime: observable,
93
+
94
+ showVariants: action,
95
+ showRecentVariants: action,
96
+ hideVariants: action,
97
+ setClosedByUser: action,
98
+ setCheckingOut: action,
99
+ setActivePoint: action,
100
+ setMobile: action,
101
+ setViewportHeight: action,
102
+ setRouteChangedTime: action,
103
+
104
+ activePoint: computed,
105
+ checkingOut: computed,
106
+ closedByUser: computed,
107
+ currentSkuPath: computed,
108
+ microHeight: computed,
109
+ modal: computed,
110
+ points: computed,
111
+ showRecent: computed,
112
+ showBuy: computed,
113
+ showCheckout: computed,
114
+ snapPointPx: computed,
115
+ state: computed,
116
+ open: computed
117
+ })
118
+ }
119
+
120
+ initialize = (): void => {
121
+
122
+ this._reactionDisposers.push(reaction(
123
+ () => ( this.state ),
124
+ (s) => {
125
+ if (this.ignoreStateChange) {
126
+ log(`STATE CHANGE to "${s}" (IGNORED)`) // ===========
127
+ this.setIgnoreStateChange(false)
128
+ return
129
+ }
130
+ else {
131
+ log(`STATE CHANGE to "${s}" (UI REACTED)`) // ===========
132
+ this._syncUIToState(s)
133
+ }
134
+ }
135
+ ))
136
+ /*
137
+ this._reactionDisposers.push(autorun(() => {
138
+ log('AUTORUN: OPEN: ' + this.open)
139
+ log('AUTORUN:' + // ===============
140
+ '[showCheckout: ' + this.showCheckout +
141
+ '], [showRecent: ' + this.showRecent +
142
+ '], [showBuy: ' + this.showBuy +
143
+ '], [closedByUser: ' + this._closedByUser +
144
+ '], [checkingOut: ' + this._checkingOut + ']'
145
+ ) // ===========
146
+ }))
147
+ */
148
+ }
149
+
150
+ newRoute = () => {
151
+ this.setRouteChangedTime(new Date().getTime())
152
+ this.hideVariants()
153
+ this.setClosedByUser(false)
154
+ // DO NOT reset _checkingOut!
155
+ }
156
+
157
+ onActivePointChanged = (newPoint: SnapPoint | null): void => {
158
+ log("ON onActivePointChanged: " + newPoint) // ===========
159
+ if (newPoint === this._points.micro && this.activePoint === this._points.full) {
160
+ this.setIgnoreStateChange(true)
161
+ this.hideVariants()
162
+ }
163
+ else if (newPoint === this._points.full && this.activePoint === this._points.micro) {
164
+ this.setIgnoreStateChange(true)
165
+ this.showRecentVariants()
166
+ }
167
+ this.setActivePoint(newPoint)
168
+ }
169
+
170
+ showVariants = (skuPath: string): void => {
171
+ this._service.setCurrentItem(undefined)
172
+ this._currentSkuPath = skuPath
173
+ this._closedByUser = false
174
+ }
175
+
176
+ showRecentVariants = (): void => {
177
+ const recentItemInfo = this._service.recentItem
178
+ if (recentItemInfo) {
179
+ this._service.setCurrentItem(undefined)
180
+ this._currentSkuPath = recentItemInfo.item.sku
181
+ this._closedByUser = false
182
+ }
183
+ }
184
+
185
+ hideVariants = (): void => { this._currentSkuPath = undefined }
186
+ get currentSkuPath(): string | undefined { return this._currentSkuPath }
187
+
188
+ get closedByUser(): boolean { return this._closedByUser }
189
+ setClosedByUser = (b: boolean): void => { this._closedByUser = b}
190
+
191
+ get ignoreStateChange(): boolean { return this._ignoreStateChange }
192
+ setIgnoreStateChange = (b: boolean): void => { this._ignoreStateChange = b}
193
+
194
+ get checkingOut(): boolean | undefined { return this._checkingOut }
195
+ setCheckingOut = (b: boolean): void => { this._checkingOut = b }
196
+
197
+ get activePoint(): SnapPoint | null { return this._activePoint }
198
+ setActivePoint = (pt: SnapPoint | null): void => { this._activePoint = pt}
199
+
200
+ setRouteChangedTime = (t: number): void => {this._routeChangedTime = t}
201
+
202
+ get points(): SnapPoint[] {
203
+ return [this._points.micro, this._points.full]
204
+ }
205
+
206
+ _syncUIToState = (s: DrawerState) => {
207
+ log("_syncUIToState: " + s) // ===========
208
+ if (s === 'micro') {
209
+ this.setActivePoint(this.points[0])
210
+ }
211
+ else if (s === 'full') {
212
+ this.setActivePoint(this.points[this.points.length - 1])
213
+ }
214
+ }
215
+
216
+ get open(): boolean {
217
+
218
+ log('open():' + // ===============
219
+ ' showCheckout: ' + this.showCheckout +
220
+ ' showRecent: ' + this.showRecent +
221
+ ' showBuy: ' + this.showBuy
222
+ ) // ===========
223
+
224
+ return (
225
+ this._checkingOut !== undefined
226
+ &&
227
+ !this._checkingOut
228
+ &&
229
+ !this.closedByUser
230
+ &&
231
+ (this.showCheckout || this.showRecent || this.showBuy)
232
+ )
233
+ }
234
+
235
+ get state(): DrawerState {
236
+ if (!this.closedByUser && !this._checkingOut) {
237
+ if (this.showBuy) {
238
+ return 'full'
239
+ }
240
+ else if (this.showRecent || this.showCheckout) {
241
+ return 'micro'
242
+ }
243
+ }
244
+ return 'closed'
245
+ }
246
+
247
+ get showRecent(): boolean {
248
+
249
+ const recentInfo = this._service.recentItem
250
+ return !!recentInfo && recentInfo.modified > this._routeChangedTime
251
+ }
252
+
253
+ get showBuy(): boolean {return !!this.currentSkuPath}
254
+ get showCheckout(): boolean { return !this._service.cartEmpty}
255
+ get modal(): boolean { return this.state !== 'micro'}
256
+
257
+ get microHeight(): SnapPoint {
258
+ return this._points.micro
259
+ }
260
+
261
+ get isMobile(): boolean { return this._pointsConfig.mb === this._points }
262
+ setMobile = (b: boolean): void => {
263
+ log("setMobile: " + b) // ===========
264
+ this._points = b ? this._pointsConfig.mb : this._pointsConfig.dt
265
+ }
266
+
267
+ setViewportHeight = (v: number) => {this._vHeight = v}
268
+ get snapPointPx(): number {
269
+ if (!this._activePoint || this._vHeight === 0) return 0
270
+
271
+ if (typeof this._activePoint === 'string') {
272
+ return parseInt(this._activePoint)
273
+ }
274
+
275
+ return this._vHeight * this._activePoint as number
276
+ }
277
+
278
+ dispose = () => {
279
+ this._reactionDisposers.forEach((d) => {d()})
280
+ }
281
+ }
282
+
283
+ export {
284
+ CommerceUIStore,
285
+ type CommerceDrawer,
286
+ type SelectAndBuy,
287
+ type SnapPointsConfig,
288
+ type SnapPoints,
289
+ type SnapPoint
290
290
  }