@luxfi/core 5.3.1 → 5.3.3

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 (183) hide show
  1. package/commerce/ui/conf.ts +13 -13
  2. package/commerce/ui/context.tsx +123 -126
  3. package/commerce/ui/store.ts +289 -304
  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 -42
  11. package/components/chat-widget.tsx +85 -85
  12. package/components/commerce/{checkout-widget → _to_deprecate_checkout-widget}/const.ts +13 -13
  13. package/components/commerce/{checkout-widget/index.tsx → _to_deprecate_checkout-widget/index.tsx_} +188 -192
  14. package/components/commerce/{checkout-widget → _to_deprecate_checkout-widget}/obs-string-set.ts +48 -48
  15. package/components/commerce/{checkout-widget → _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 -0
  20. package/components/commerce/checkout-panel/checkout-panel-props.ts +10 -0
  21. package/components/commerce/checkout-panel/{dt-bag-carousel.tsx → desktop-bag-carousel.tsx} +36 -36
  22. package/components/commerce/checkout-panel/desktop-cp.tsx +83 -0
  23. package/components/commerce/checkout-panel/index.tsx +126 -129
  24. package/components/commerce/checkout-panel/mobile-cp.tsx +67 -0
  25. package/components/commerce/checkout-panel/policy-links.tsx +29 -0
  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 -99
  31. package/components/commerce/drawer/micro.tsx +145 -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 -107
  35. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  36. package/components/commerce/mobile-nav-menu-ai.tsx +50 -51
  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 -51
  46. package/components/header/index.tsx +50 -50
  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 -27
  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 -50
  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
  180. package/components/commerce/add-widget.tsx +0 -20
  181. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +0 -85
  182. package/components/commerce/checkout-panel/links-row.tsx +0 -21
  183. package/components/commerce/checkout-panel/mb-checkout-panel.tsx +0 -55
@@ -1,305 +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, LineItem, ObsLineItemRef } from '@hanzo/commerce/types'
12
-
13
- const LOG = false ////////////////////
14
-
15
- const log = (s: string) => {
16
- if (LOG) {
17
- console.log('COMMERCE_UI ' + s)
18
- }
19
- }
20
-
21
- type SnapPoint = number | string
22
-
23
- type SnapPoints = {
24
- full: SnapPoint
25
- micro: SnapPoint
26
- }
27
-
28
- type SnapPointsConfig = {
29
- mb: SnapPoints
30
- dt: SnapPoints
31
- }
32
-
33
- type DrawerState = 'closed' | 'micro' | 'full'
34
-
35
- interface RecentActivity extends ObsLineItemRef {
36
- quantityChanged(sku: string, val: number, prevVal: number): void
37
- }
38
-
39
- interface SelectAndBuy {
40
- showVariants: (skuPath: string) => void
41
- hideVariants: () => void
42
- get currentSkuPath(): string | undefined
43
- }
44
-
45
- interface CommerceDrawer {
46
-
47
- get open(): boolean
48
- get state(): DrawerState
49
- get closedByUser(): boolean
50
- setClosedByUser(b: boolean): void
51
- get modal(): boolean
52
- get points(): SnapPoint[]
53
- get activePoint(): SnapPoint | null
54
- // Called by UI Gesture
55
- onActivePointChanged: (p: SnapPoint | null) => void
56
- get showCheckout(): boolean
57
- get showAdded(): boolean
58
- get showBuy(): boolean
59
-
60
- get microHeight(): SnapPoint
61
- get isMobile(): boolean
62
- get snapPointPx(): number
63
- }
64
-
65
- class CommerceUIStore implements
66
- RecentActivity,
67
- SelectAndBuy,
68
- CommerceDrawer
69
- {
70
- _vHeight: number = 0
71
-
72
- _currentSkuPath: string | undefined = undefined
73
- _closedByUser: boolean = false
74
- _checkingOut: boolean | undefined = undefined
75
- _ignoreStateChange: boolean = false
76
- _activePoint: SnapPoint | null = null
77
-
78
- _activeItem: LineItem | undefined = undefined
79
- _reactionDisposers: IReactionDisposer[] = []
80
- _service: CommerceService
81
- _pointsConfig: SnapPointsConfig
82
- _points: SnapPoints // points to either this._pointsConfig.md or this._pointsConfig.dt
83
-
84
- constructor(s: CommerceService, conf: SnapPointsConfig) {
85
- this._service = s
86
- this._pointsConfig = conf
87
- this._points = this._pointsConfig.dt
88
-
89
- makeObservable(this, {
90
- _currentSkuPath: observable,
91
- _activeItem: observable.ref,
92
- _closedByUser: observable,
93
- _checkingOut: observable,
94
- _activePoint: observable,
95
- _points: observable.ref,
96
- _vHeight: observable,
97
-
98
- showVariants: action,
99
- hideVariants: action,
100
- quantityChanged: action,
101
- setClosedByUser: action,
102
- setCheckingOut: action,
103
- setActivePoint: action,
104
- setMobile: action,
105
- setViewportHeight: action,
106
- clearActiveItem: action,
107
-
108
- activePoint: computed,
109
- checkingOut: computed,
110
- closedByUser: computed,
111
- currentSkuPath: computed,
112
- item: computed,
113
- microHeight: computed,
114
- modal: computed,
115
- points: computed,
116
- showAdded: computed,
117
- showBuy: computed,
118
- showCheckout: computed,
119
- snapPointPx: computed,
120
- state: computed,
121
- open: computed
122
- })
123
- }
124
-
125
- initialize = (): void => {
126
-
127
- this._reactionDisposers.push(reaction(
128
- () => ( this.state ),
129
- (s) => {
130
- if (this.ignoreStateChange) {
131
- log(`STATE CHANGE to "${s}" (IGNORED)`) // ===========
132
- this.setIgnoreStateChange(false)
133
- return
134
- }
135
- else {
136
- log(`STATE CHANGE to "${s}" (UI REACTED)`) // ===========
137
- this._syncUIToState(s)
138
- }
139
- }
140
- ))
141
- this._reactionDisposers.push(autorun(() => {
142
- log('AUTORUN: OPEN: ' + this.open)
143
- log('AUTORUN:' + // ===============
144
- '[showCheckout: ' + this.showCheckout +
145
- '], [showAdded: ' + this.showAdded +
146
- '], [showBuy: ' + this.showBuy +
147
- '], [closedByUser: ' + this._closedByUser +
148
- '], [checkingOut: ' + this._checkingOut + ']'
149
- ) // ===========
150
- }))
151
- }
152
-
153
- reset = () => {
154
- this.hideVariants()
155
- this.setClosedByUser(false)
156
- this.clearActiveItem()
157
- // DO NOT reset _checkingOut!
158
- }
159
-
160
- onActivePointChanged = (pt: SnapPoint | null): void => {
161
- log("ON onActivePointChanged: " + pt) // ===========
162
- if (pt === this._points.micro && this.activePoint === this._points.full) {
163
- this.setIgnoreStateChange(true)
164
- this.hideVariants()
165
- }
166
- else if (pt === this._points.full && this.activePoint === this._points.micro) {
167
- this.setIgnoreStateChange(true)
168
- this.showVariants(this.item?.sku ?? '')
169
- }
170
- this.setActivePoint(pt)
171
- }
172
-
173
- showVariants = (skuPath: string): void => {
174
- this._service.setCurrentItem(undefined)
175
- this._currentSkuPath = skuPath
176
- this._closedByUser = false
177
- }
178
-
179
- hideVariants = (): void => { this._currentSkuPath = undefined }
180
-
181
- get currentSkuPath(): string | undefined { return this._currentSkuPath }
182
-
183
- quantityChanged = (sku: string, val: number, oldVal: number): void => {
184
-
185
- if (val === 0) {
186
- if (this._activeItem?.sku === sku) {
187
- this._activeItem = undefined
188
- }
189
- // otherwise ignore
190
- }
191
- else {
192
- if (!this._activeItem || this._activeItem.sku !== sku) {
193
- this._activeItem = this._service.getItemBySku(sku)
194
- }
195
- }
196
- }
197
-
198
- get item(): LineItem | undefined { return this._activeItem }
199
- clearActiveItem = (): void => { this._activeItem = undefined }
200
-
201
- get closedByUser(): boolean { return this._closedByUser }
202
- setClosedByUser = (b: boolean): void => { this._closedByUser = b}
203
-
204
- get ignoreStateChange(): boolean { return this._ignoreStateChange }
205
- setIgnoreStateChange = (b: boolean): void => { this._ignoreStateChange = b}
206
-
207
- get checkingOut(): boolean | undefined { return this._checkingOut }
208
- setCheckingOut = (b: boolean): void => { this._checkingOut = b }
209
-
210
- get activePoint(): SnapPoint | null { return this._activePoint }
211
- setActivePoint = (pt: SnapPoint | null): void => { this._activePoint = pt}
212
-
213
- get points(): SnapPoint[] {
214
- if (this.showBuy && !(this.showAdded || this.showCheckout)) {
215
- return [this._points.full]
216
- }
217
- else if (!this.showBuy && !this.showAdded && this.showCheckout) {
218
- return [this._points.micro]
219
- }
220
- return [this._points.micro, this._points.full]
221
- }
222
-
223
- _syncUIToState = (s: DrawerState) => {
224
- log("_syncUIToState: " + s) // ===========
225
- if (s === 'micro') {
226
- this.setActivePoint(this.points[0])
227
- }
228
- else if (s === 'full') {
229
- this.setActivePoint(this.points[this.points.length - 1])
230
- }
231
- }
232
-
233
- get open(): boolean {
234
-
235
- log('open():' + // ===============
236
- ' showCheckout: ' + this.showCheckout +
237
- ' showAdded: ' + this.showAdded +
238
- ' showBuy: ' + this.showBuy
239
- ) // ===========
240
-
241
-
242
-
243
- return (
244
- this._checkingOut !== undefined
245
- &&
246
- !this._checkingOut
247
- &&
248
- !this.closedByUser
249
- &&
250
- (this.showCheckout || this.showAdded || this.showBuy)
251
- )
252
- }
253
-
254
- get state(): DrawerState {
255
- if (!this.closedByUser && !this._checkingOut) {
256
- if (this.showBuy) {
257
- return 'full'
258
- }
259
- else if (this.showAdded || this.showCheckout) {
260
- return 'micro'
261
- }
262
- }
263
- return 'closed'
264
- }
265
-
266
- get showBuy(): boolean {return !!this.currentSkuPath}
267
- get showAdded(): boolean { return !!this.item}
268
- get showCheckout(): boolean { return !this._service.cartEmpty}
269
- get modal(): boolean { return this.state !== 'micro'}
270
-
271
- get microHeight(): SnapPoint {
272
- return this._points.micro
273
- }
274
-
275
- get isMobile(): boolean { return this._pointsConfig.mb === this._points }
276
- setMobile = (b: boolean): void => {
277
- log("setMobile: " + b) // ===========
278
- this._points = b ? this._pointsConfig.mb : this._pointsConfig.dt
279
- }
280
-
281
- setViewportHeight = (v: number) => {this._vHeight = v}
282
- get snapPointPx(): number {
283
- if (!this._activePoint || this._vHeight === 0) return 0
284
-
285
- if (typeof this._activePoint === 'string') {
286
- return parseInt(this._activePoint)
287
- }
288
-
289
- return this._vHeight * this._activePoint as number
290
- }
291
-
292
- dispose = () => {
293
- this._reactionDisposers.forEach((d) => {d()})
294
- }
295
- }
296
-
297
- export {
298
- CommerceUIStore,
299
- type CommerceDrawer,
300
- type RecentActivity,
301
- type SelectAndBuy,
302
- type SnapPointsConfig,
303
- type SnapPoints,
304
- 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
305
290
  }