@solvapay/react 1.0.8-preview.6 → 1.0.8-preview.7

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 (106) hide show
  1. package/README.md +12 -95
  2. package/dist/CancelPlanButton-Bb7cvym9.d.cts +1105 -0
  3. package/dist/CancelPlanButton-CieT9swn.d.cts +1102 -0
  4. package/dist/CancelPlanButton-Cq117t7h.d.ts +1105 -0
  5. package/dist/CancelPlanButton-f56UlQN-.d.ts +1102 -0
  6. package/dist/PaymentForm-B5dw0i1X.d.ts +934 -0
  7. package/dist/PaymentForm-CesoRQWu.d.cts +934 -0
  8. package/dist/chunk-C7SKOENW.js +1889 -0
  9. package/dist/chunk-ISYAH4ZL.js +1889 -0
  10. package/dist/chunk-MOP3ZBGC.js +4749 -0
  11. package/dist/chunk-Q7GPX6X4.js +4748 -0
  12. package/dist/chunk-TP4JPKE2.js +3126 -0
  13. package/dist/chunk-VTGIXJQU.js +4755 -0
  14. package/dist/chunk-XMQ4GBWQ.js +4752 -0
  15. package/dist/index-DLl3UwO3.d.ts +798 -0
  16. package/dist/index-Sj2lHLl8.d.cts +798 -0
  17. package/dist/index.cjs +11 -25
  18. package/dist/index.d.cts +2 -2
  19. package/dist/index.d.ts +2 -2
  20. package/dist/index.js +1 -1
  21. package/dist/primitives/index.cjs +4 -21
  22. package/dist/primitives/index.d.cts +2 -2
  23. package/dist/primitives/index.d.ts +2 -2
  24. package/dist/primitives/index.js +1 -1
  25. package/dist/src/PaymentForm.d.ts +56 -0
  26. package/dist/src/PaymentForm.d.ts.map +1 -0
  27. package/dist/src/PaymentForm.js +212 -0
  28. package/dist/src/PaymentForm.js.map +1 -0
  29. package/dist/src/SolvaPayProvider.d.ts +84 -0
  30. package/dist/src/SolvaPayProvider.d.ts.map +1 -0
  31. package/dist/src/SolvaPayProvider.js +537 -0
  32. package/dist/src/SolvaPayProvider.js.map +1 -0
  33. package/dist/src/adapters/auth.d.ts +43 -0
  34. package/dist/src/adapters/auth.d.ts.map +1 -0
  35. package/dist/src/adapters/auth.js +38 -0
  36. package/dist/src/adapters/auth.js.map +1 -0
  37. package/dist/src/components/PlanBadge.d.ts +31 -0
  38. package/dist/src/components/PlanBadge.d.ts.map +1 -0
  39. package/dist/src/components/PlanBadge.js +119 -0
  40. package/dist/src/components/PlanBadge.js.map +1 -0
  41. package/dist/src/components/PlanSelector.d.ts +49 -0
  42. package/dist/src/components/PlanSelector.d.ts.map +1 -0
  43. package/dist/src/components/PlanSelector.js +82 -0
  44. package/dist/src/components/PlanSelector.js.map +1 -0
  45. package/dist/src/components/Spinner.d.ts +10 -0
  46. package/dist/src/components/Spinner.d.ts.map +1 -0
  47. package/dist/src/components/Spinner.js +14 -0
  48. package/dist/src/components/Spinner.js.map +1 -0
  49. package/dist/src/components/StripePaymentFormWrapper.d.ts +17 -0
  50. package/dist/src/components/StripePaymentFormWrapper.d.ts.map +1 -0
  51. package/dist/src/components/StripePaymentFormWrapper.js +158 -0
  52. package/dist/src/components/StripePaymentFormWrapper.js.map +1 -0
  53. package/dist/src/components/SubscriptionGate.d.ts +21 -0
  54. package/dist/src/components/SubscriptionGate.d.ts.map +1 -0
  55. package/dist/src/components/SubscriptionGate.js +32 -0
  56. package/dist/src/components/SubscriptionGate.js.map +1 -0
  57. package/dist/src/hooks/__tests__/useSubscription.test.d.ts +2 -0
  58. package/dist/src/hooks/__tests__/useSubscription.test.d.ts.map +1 -0
  59. package/dist/src/hooks/__tests__/useSubscription.test.js +554 -0
  60. package/dist/src/hooks/__tests__/useSubscription.test.js.map +1 -0
  61. package/dist/src/hooks/__tests__/useSubscriptionStatus.test.d.ts +2 -0
  62. package/dist/src/hooks/__tests__/useSubscriptionStatus.test.d.ts.map +1 -0
  63. package/dist/src/hooks/__tests__/useSubscriptionStatus.test.js +719 -0
  64. package/dist/src/hooks/__tests__/useSubscriptionStatus.test.js.map +1 -0
  65. package/dist/src/hooks/useCheckout.d.ts +59 -0
  66. package/dist/src/hooks/useCheckout.d.ts.map +1 -0
  67. package/dist/src/hooks/useCheckout.js +138 -0
  68. package/dist/src/hooks/useCheckout.js.map +1 -0
  69. package/dist/src/hooks/useCustomer.d.ts +43 -0
  70. package/dist/src/hooks/useCustomer.d.ts.map +1 -0
  71. package/dist/src/hooks/useCustomer.js +31 -0
  72. package/dist/src/hooks/useCustomer.js.map +1 -0
  73. package/dist/src/hooks/usePlans.d.ts +28 -0
  74. package/dist/src/hooks/usePlans.d.ts.map +1 -0
  75. package/dist/src/hooks/usePlans.js +181 -0
  76. package/dist/src/hooks/usePlans.js.map +1 -0
  77. package/dist/src/hooks/useSolvaPay.d.ts +44 -0
  78. package/dist/src/hooks/useSolvaPay.d.ts.map +1 -0
  79. package/dist/src/hooks/useSolvaPay.js +52 -0
  80. package/dist/src/hooks/useSolvaPay.js.map +1 -0
  81. package/dist/src/hooks/useSubscription.d.ts +46 -0
  82. package/dist/src/hooks/useSubscription.d.ts.map +1 -0
  83. package/dist/src/hooks/useSubscription.js +50 -0
  84. package/dist/src/hooks/useSubscription.js.map +1 -0
  85. package/dist/src/hooks/useSubscriptionStatus.d.ts +19 -0
  86. package/dist/src/hooks/useSubscriptionStatus.d.ts.map +1 -0
  87. package/dist/src/hooks/useSubscriptionStatus.js +68 -0
  88. package/dist/src/hooks/useSubscriptionStatus.js.map +1 -0
  89. package/dist/src/index.d.ts +24 -0
  90. package/dist/src/index.d.ts.map +1 -0
  91. package/dist/src/index.js +26 -0
  92. package/dist/src/index.js.map +1 -0
  93. package/dist/src/types/index.d.ts +339 -0
  94. package/dist/src/types/index.d.ts.map +1 -0
  95. package/dist/src/types/index.js +5 -0
  96. package/dist/src/types/index.js.map +1 -0
  97. package/dist/src/utils/__tests__/subscriptions.test.d.ts +2 -0
  98. package/dist/src/utils/__tests__/subscriptions.test.d.ts.map +1 -0
  99. package/dist/src/utils/__tests__/subscriptions.test.js +121 -0
  100. package/dist/src/utils/__tests__/subscriptions.test.js.map +1 -0
  101. package/dist/src/utils/subscriptions.d.ts +57 -0
  102. package/dist/src/utils/subscriptions.d.ts.map +1 -0
  103. package/dist/src/utils/subscriptions.js +85 -0
  104. package/dist/src/utils/subscriptions.js.map +1 -0
  105. package/dist/tsconfig.tsbuildinfo +1 -0
  106. package/package.json +2 -2
@@ -0,0 +1,5 @@
1
+ /**
2
+ * TypeScript type definitions for @solvapay/react
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subscriptions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.test.d.ts","sourceRoot":"","sources":["../../../../src/utils/__tests__/subscriptions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,121 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isPaidSubscription, filterSubscriptions, getActiveSubscriptions, getCancelledSubscriptionsWithEndDate, } from '../subscriptions';
3
+ const createSubscription = (overrides = {}) => ({
4
+ reference: 'sub_123',
5
+ planName: 'Test Plan',
6
+ agentName: 'Test Agent',
7
+ status: 'active',
8
+ startDate: '2024-01-01T00:00:00Z',
9
+ amount: 1000,
10
+ ...overrides,
11
+ });
12
+ describe('filterSubscriptions', () => {
13
+ it('should filter to only include active subscriptions', () => {
14
+ const subscriptions = [
15
+ createSubscription({ status: 'active', planName: 'Active Plan' }),
16
+ createSubscription({ status: 'cancelled', planName: 'Cancelled Plan' }),
17
+ createSubscription({ status: 'expired', planName: 'Expired Plan' }),
18
+ createSubscription({ status: 'active', planName: 'Another Active' }),
19
+ ];
20
+ const filtered = filterSubscriptions(subscriptions);
21
+ expect(filtered).toHaveLength(2);
22
+ expect(filtered.every(sub => sub.status === 'active')).toBe(true);
23
+ expect(filtered.some(sub => sub.planName === 'Active Plan')).toBe(true);
24
+ expect(filtered.some(sub => sub.planName === 'Another Active')).toBe(true);
25
+ });
26
+ it('should include cancelled subscriptions with status active', () => {
27
+ const subscriptions = [
28
+ createSubscription({
29
+ status: 'active',
30
+ planName: 'Cancelled but Active',
31
+ cancelledAt: '2024-06-01T00:00:00Z',
32
+ }),
33
+ ];
34
+ const filtered = filterSubscriptions(subscriptions);
35
+ expect(filtered).toHaveLength(1);
36
+ expect(filtered[0].status).toBe('active');
37
+ });
38
+ });
39
+ describe('getActiveSubscriptions', () => {
40
+ it('should return only subscriptions with status active', () => {
41
+ const subscriptions = [
42
+ createSubscription({ status: 'active', planName: 'Active 1' }),
43
+ createSubscription({ status: 'active', planName: 'Active 2' }),
44
+ createSubscription({ status: 'cancelled', planName: 'Cancelled' }),
45
+ ];
46
+ const active = getActiveSubscriptions(subscriptions);
47
+ expect(active).toHaveLength(2);
48
+ expect(active.every(sub => sub.status === 'active')).toBe(true);
49
+ });
50
+ });
51
+ describe('getCancelledSubscriptionsWithEndDate', () => {
52
+ it('should return cancelled subscriptions with status active and future endDate', () => {
53
+ const futureDate = new Date();
54
+ futureDate.setFullYear(futureDate.getFullYear() + 1);
55
+ const subscriptions = [
56
+ createSubscription({
57
+ status: 'active',
58
+ cancelledAt: '2024-06-01T00:00:00Z',
59
+ endDate: futureDate.toISOString(),
60
+ planName: 'Cancelled Active',
61
+ }),
62
+ createSubscription({
63
+ status: 'active',
64
+ cancelledAt: undefined,
65
+ planName: 'Not Cancelled',
66
+ }),
67
+ createSubscription({
68
+ status: 'active',
69
+ cancelledAt: '2024-06-01T00:00:00Z',
70
+ endDate: '2024-01-01T00:00:00Z', // Past date
71
+ planName: 'Expired Cancelled',
72
+ }),
73
+ ];
74
+ const cancelled = getCancelledSubscriptionsWithEndDate(subscriptions);
75
+ expect(cancelled).toHaveLength(1);
76
+ expect(cancelled[0].planName).toBe('Cancelled Active');
77
+ });
78
+ });
79
+ describe('isPaidSubscription', () => {
80
+ it('should return true for subscription with amount > 0', () => {
81
+ const sub = createSubscription({ amount: 1000 });
82
+ expect(isPaidSubscription(sub)).toBe(true);
83
+ });
84
+ it('should return false for subscription with amount === 0', () => {
85
+ const sub = createSubscription({ amount: 0 });
86
+ expect(isPaidSubscription(sub)).toBe(false);
87
+ });
88
+ it('should return false for subscription with undefined amount', () => {
89
+ const sub = createSubscription({ amount: undefined });
90
+ expect(isPaidSubscription(sub)).toBe(false);
91
+ });
92
+ });
93
+ describe('Integration: status active + isPaidSubscription', () => {
94
+ it('should correctly identify cancelled paid subscription with status active as granting access', () => {
95
+ const futureDate = new Date();
96
+ futureDate.setFullYear(futureDate.getFullYear() + 1);
97
+ const sub = createSubscription({
98
+ status: 'active',
99
+ amount: 2000,
100
+ cancelledAt: '2024-06-01T00:00:00Z',
101
+ endDate: futureDate.toISOString(),
102
+ });
103
+ expect(sub.status === 'active').toBe(true);
104
+ expect(isPaidSubscription(sub)).toBe(true);
105
+ // This combination should grant access
106
+ expect(sub.status === 'active' && isPaidSubscription(sub)).toBe(true);
107
+ });
108
+ it('should correctly identify expired subscription as not granting access', () => {
109
+ const sub = createSubscription({
110
+ status: 'expired',
111
+ amount: 2000,
112
+ cancelledAt: '2024-06-01T00:00:00Z',
113
+ endDate: '2024-01-01T00:00:00Z', // Past date
114
+ });
115
+ expect(sub.status === 'active').toBe(false);
116
+ expect(isPaidSubscription(sub)).toBe(true);
117
+ // This combination should NOT grant access
118
+ expect(sub.status === 'active' && isPaidSubscription(sub)).toBe(false);
119
+ });
120
+ });
121
+ //# sourceMappingURL=subscriptions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.test.js","sourceRoot":"","sources":["../../../../src/utils/__tests__/subscriptions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Subscription utility functions
3
+ *
4
+ * Provides shared logic for filtering and prioritizing subscriptions
5
+ */
6
+ import type { SubscriptionInfo } from '../types';
7
+ /**
8
+ * Filter subscriptions to only include active ones
9
+ *
10
+ * Rules:
11
+ * - Keep subscriptions with status === 'active'
12
+ * - Filter out subscriptions with status === 'cancelled', 'expired', 'suspended', 'refunded', etc.
13
+ *
14
+ * Note: Backend now keeps subscriptions with status 'active' until expiration,
15
+ * even when cancelled. Cancellation is tracked via cancelledAt field.
16
+ */
17
+ export declare function filterSubscriptions(subscriptions: SubscriptionInfo[]): SubscriptionInfo[];
18
+ /**
19
+ * Get active subscriptions
20
+ *
21
+ * Returns subscriptions with status === 'active'.
22
+ * Note: Backend keeps subscriptions as 'active' until expiration, even when cancelled.
23
+ * Use cancelledAt field to check if a subscription is cancelled.
24
+ */
25
+ export declare function getActiveSubscriptions(subscriptions: SubscriptionInfo[]): SubscriptionInfo[];
26
+ /**
27
+ * Get cancelled subscriptions with valid endDate (not expired)
28
+ *
29
+ * Returns subscriptions with cancelledAt set and status === 'active' that have a future endDate.
30
+ * Backend keeps cancelled subscriptions as 'active' until expiration.
31
+ */
32
+ export declare function getCancelledSubscriptionsWithEndDate(subscriptions: SubscriptionInfo[]): SubscriptionInfo[];
33
+ /**
34
+ * Get the most recent subscription by startDate
35
+ */
36
+ export declare function getMostRecentSubscription(subscriptions: SubscriptionInfo[]): SubscriptionInfo | null;
37
+ /**
38
+ * Get the primary subscription to display
39
+ *
40
+ * Prioritization:
41
+ * 1. Active subscriptions (most recent by startDate)
42
+ * 2. null if no valid subscriptions
43
+ *
44
+ * Note: Backend keeps subscriptions as 'active' until expiration, so we only
45
+ * need to check for active subscriptions. Cancelled subscriptions are still
46
+ * active until their endDate.
47
+ */
48
+ export declare function getPrimarySubscription(subscriptions: SubscriptionInfo[]): SubscriptionInfo | null;
49
+ /**
50
+ * Check if a subscription is paid
51
+ * Uses subscription amount field: amount > 0 = paid, amount === 0 or undefined = free
52
+ *
53
+ * @param sub - Subscription to check
54
+ * @returns true if subscription is paid (amount > 0)
55
+ */
56
+ export declare function isPaidSubscription(sub: SubscriptionInfo): boolean;
57
+ //# sourceMappingURL=subscriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../src/utils/subscriptions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAEzF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAE5F;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,aAAa,EAAE,gBAAgB,EAAE,GAChC,gBAAgB,EAAE,CAWpB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,gBAAgB,EAAE,GAChC,gBAAgB,GAAG,IAAI,CAMzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,IAAI,CAUjG;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAEjE"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Subscription utility functions
3
+ *
4
+ * Provides shared logic for filtering and prioritizing subscriptions
5
+ */
6
+ /**
7
+ * Filter subscriptions to only include active ones
8
+ *
9
+ * Rules:
10
+ * - Keep subscriptions with status === 'active'
11
+ * - Filter out subscriptions with status === 'cancelled', 'expired', 'suspended', 'refunded', etc.
12
+ *
13
+ * Note: Backend now keeps subscriptions with status 'active' until expiration,
14
+ * even when cancelled. Cancellation is tracked via cancelledAt field.
15
+ */
16
+ export function filterSubscriptions(subscriptions) {
17
+ return subscriptions.filter(sub => sub.status === 'active');
18
+ }
19
+ /**
20
+ * Get active subscriptions
21
+ *
22
+ * Returns subscriptions with status === 'active'.
23
+ * Note: Backend keeps subscriptions as 'active' until expiration, even when cancelled.
24
+ * Use cancelledAt field to check if a subscription is cancelled.
25
+ */
26
+ export function getActiveSubscriptions(subscriptions) {
27
+ return subscriptions.filter(sub => sub.status === 'active');
28
+ }
29
+ /**
30
+ * Get cancelled subscriptions with valid endDate (not expired)
31
+ *
32
+ * Returns subscriptions with cancelledAt set and status === 'active' that have a future endDate.
33
+ * Backend keeps cancelled subscriptions as 'active' until expiration.
34
+ */
35
+ export function getCancelledSubscriptionsWithEndDate(subscriptions) {
36
+ const now = new Date();
37
+ return subscriptions.filter(sub => {
38
+ const subAny = sub; // Type assertion to access optional properties
39
+ return (sub.status === 'active' &&
40
+ subAny.cancelledAt &&
41
+ subAny.endDate &&
42
+ new Date(subAny.endDate) > now);
43
+ });
44
+ }
45
+ /**
46
+ * Get the most recent subscription by startDate
47
+ */
48
+ export function getMostRecentSubscription(subscriptions) {
49
+ if (subscriptions.length === 0)
50
+ return null;
51
+ return subscriptions.reduce((latest, current) => {
52
+ return new Date(current.startDate) > new Date(latest.startDate) ? current : latest;
53
+ });
54
+ }
55
+ /**
56
+ * Get the primary subscription to display
57
+ *
58
+ * Prioritization:
59
+ * 1. Active subscriptions (most recent by startDate)
60
+ * 2. null if no valid subscriptions
61
+ *
62
+ * Note: Backend keeps subscriptions as 'active' until expiration, so we only
63
+ * need to check for active subscriptions. Cancelled subscriptions are still
64
+ * active until their endDate.
65
+ */
66
+ export function getPrimarySubscription(subscriptions) {
67
+ // Filter to only include active subscriptions
68
+ const filtered = filterSubscriptions(subscriptions);
69
+ // Get most recent active subscription
70
+ if (filtered.length > 0) {
71
+ return getMostRecentSubscription(filtered);
72
+ }
73
+ return null;
74
+ }
75
+ /**
76
+ * Check if a subscription is paid
77
+ * Uses subscription amount field: amount > 0 = paid, amount === 0 or undefined = free
78
+ *
79
+ * @param sub - Subscription to check
80
+ * @returns true if subscription is paid (amount > 0)
81
+ */
82
+ export function isPaidSubscription(sub) {
83
+ return (sub.amount ?? 0) > 0;
84
+ }
85
+ //# sourceMappingURL=subscriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../../src/utils/subscriptions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAiC;IACnE,OAAO,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAiC;IACtE,OAAO,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oCAAoC,CAClD,aAAiC;IAEjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,OAAO,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAChC,MAAM,MAAM,GAAG,GAAU,CAAA,CAAC,+CAA+C;QACzE,OAAO,CACL,GAAG,CAAC,MAAM,KAAK,QAAQ;YACvB,MAAM,CAAC,WAAW;YAClB,MAAM,CAAC,OAAO;YACd,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAC/B,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,aAAiC;IAEjC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAE3C,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QAC9C,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;IACpF,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAiC;IACtE,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAEnD,sCAAsC;IACtC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAqB;IACtD,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC"}