@sly-rentals/core 1.2.0 → 3.0.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 (136) hide show
  1. package/dist/api.json +12695 -9074
  2. package/dist/cjs/calculator/ContestTimeline.js +407 -0
  3. package/dist/cjs/calculator/ContestTimeline.js.map +1 -0
  4. package/dist/cjs/calculator/MinBidChart.js +424 -0
  5. package/dist/cjs/calculator/MinBidChart.js.map +1 -0
  6. package/dist/cjs/calculator/dom.js +39 -0
  7. package/dist/cjs/calculator/dom.js.map +1 -0
  8. package/dist/cjs/calculator/emitter.js +36 -0
  9. package/dist/cjs/calculator/emitter.js.map +1 -0
  10. package/dist/cjs/calculator/index.js +20 -0
  11. package/dist/cjs/calculator/index.js.map +1 -0
  12. package/dist/cjs/cost/constants.js +54 -6
  13. package/dist/cjs/cost/constants.js.map +1 -1
  14. package/dist/cjs/cost/estimate.js +7 -4
  15. package/dist/cjs/cost/estimate.js.map +1 -1
  16. package/dist/cjs/cost/estimate.test.js +16 -4
  17. package/dist/cjs/cost/estimate.test.js.map +1 -1
  18. package/dist/cjs/cost/index.js +32 -17
  19. package/dist/cjs/cost/index.js.map +1 -1
  20. package/dist/cjs/cost/sizes.js +20 -3
  21. package/dist/cjs/cost/sizes.js.map +1 -1
  22. package/dist/cjs/generated/codama/errors/srsly.js +13 -16
  23. package/dist/cjs/generated/codama/errors/srsly.js.map +1 -1
  24. package/dist/cjs/idl/srsly.json +300 -2396
  25. package/dist/cjs/instructions/closeContract.js +3 -37
  26. package/dist/cjs/instructions/closeContract.js.map +1 -1
  27. package/dist/cjs/instructions/createContract.js +2 -4
  28. package/dist/cjs/instructions/createContract.js.map +1 -1
  29. package/dist/cjs/instructions/createContractThread.js +1 -2
  30. package/dist/cjs/instructions/createContractThread.js.map +1 -1
  31. package/dist/cjs/instructions/index.js +65 -42
  32. package/dist/cjs/instructions/index.js.map +1 -1
  33. package/dist/cjs/kit/index.js +5 -27
  34. package/dist/cjs/kit/index.js.map +1 -1
  35. package/dist/cjs/legacy/index.js +5 -3
  36. package/dist/cjs/legacy/index.js.map +1 -1
  37. package/dist/cjs/package.json +10 -3
  38. package/dist/cjs/react/ContestTimeline.js +59 -0
  39. package/dist/cjs/react/ContestTimeline.js.map +1 -0
  40. package/dist/cjs/react/MinBidChart.js +34 -0
  41. package/dist/cjs/react/MinBidChart.js.map +1 -0
  42. package/dist/cjs/react/index.js +18 -0
  43. package/dist/cjs/react/index.js.map +1 -0
  44. package/dist/cjs/utils/contestChain.js +222 -0
  45. package/dist/cjs/utils/contestChain.js.map +1 -0
  46. package/dist/cjs/utils/index.js +8 -1
  47. package/dist/cjs/utils/index.js.map +1 -1
  48. package/dist/cjs/version.js +1 -1
  49. package/dist/esm/calculator/ContestTimeline.js +403 -0
  50. package/dist/esm/calculator/ContestTimeline.js.map +1 -0
  51. package/dist/esm/calculator/MinBidChart.js +417 -0
  52. package/dist/esm/calculator/MinBidChart.js.map +1 -0
  53. package/dist/esm/calculator/dom.js +35 -0
  54. package/dist/esm/calculator/dom.js.map +1 -0
  55. package/dist/esm/calculator/emitter.js +32 -0
  56. package/dist/esm/calculator/emitter.js.map +1 -0
  57. package/dist/esm/calculator/index.js +13 -0
  58. package/dist/esm/calculator/index.js.map +1 -0
  59. package/dist/esm/cost/constants.js +52 -5
  60. package/dist/esm/cost/constants.js.map +1 -1
  61. package/dist/esm/cost/estimate.js +9 -6
  62. package/dist/esm/cost/estimate.js.map +1 -1
  63. package/dist/esm/cost/estimate.test.js +18 -6
  64. package/dist/esm/cost/estimate.test.js.map +1 -1
  65. package/dist/esm/cost/index.js +13 -3
  66. package/dist/esm/cost/index.js.map +1 -1
  67. package/dist/esm/cost/sizes.js +19 -2
  68. package/dist/esm/cost/sizes.js.map +1 -1
  69. package/dist/esm/generated/codama/errors/srsly.js +14 -17
  70. package/dist/esm/generated/codama/errors/srsly.js.map +1 -1
  71. package/dist/esm/idl/srsly.json +300 -2396
  72. package/dist/esm/instructions/closeContract.js +1 -2
  73. package/dist/esm/instructions/closeContract.js.map +1 -1
  74. package/dist/esm/instructions/createContract.js +2 -4
  75. package/dist/esm/instructions/createContract.js.map +1 -1
  76. package/dist/esm/instructions/createContractThread.js +2 -3
  77. package/dist/esm/instructions/createContractThread.js.map +1 -1
  78. package/dist/esm/instructions/index.js +36 -28
  79. package/dist/esm/instructions/index.js.map +1 -1
  80. package/dist/esm/kit/index.js +4 -4
  81. package/dist/esm/kit/index.js.map +1 -1
  82. package/dist/esm/legacy/index.js +4 -2
  83. package/dist/esm/legacy/index.js.map +1 -1
  84. package/dist/esm/package.json +10 -3
  85. package/dist/esm/react/ContestTimeline.js +56 -0
  86. package/dist/esm/react/ContestTimeline.js.map +1 -0
  87. package/dist/esm/react/MinBidChart.js +30 -0
  88. package/dist/esm/react/MinBidChart.js.map +1 -0
  89. package/dist/esm/react/index.js +12 -0
  90. package/dist/esm/react/index.js.map +1 -0
  91. package/dist/esm/utils/contestChain.js +214 -0
  92. package/dist/esm/utils/contestChain.js.map +1 -0
  93. package/dist/esm/utils/index.js +2 -0
  94. package/dist/esm/utils/index.js.map +1 -1
  95. package/dist/esm/version.js +1 -1
  96. package/dist/idl/srsly.json +301 -2397
  97. package/dist/types/calculator/ContestTimeline.d.ts +69 -0
  98. package/dist/types/calculator/ContestTimeline.d.ts.map +1 -0
  99. package/dist/types/calculator/MinBidChart.d.ts +73 -0
  100. package/dist/types/calculator/MinBidChart.d.ts.map +1 -0
  101. package/dist/types/calculator/dom.d.ts +16 -0
  102. package/dist/types/calculator/dom.d.ts.map +1 -0
  103. package/dist/types/calculator/emitter.d.ts +13 -0
  104. package/dist/types/calculator/emitter.d.ts.map +1 -0
  105. package/dist/types/calculator/index.d.ts +13 -0
  106. package/dist/types/calculator/index.d.ts.map +1 -0
  107. package/dist/types/cost/constants.d.ts +49 -5
  108. package/dist/types/cost/constants.d.ts.map +1 -1
  109. package/dist/types/cost/estimate.d.ts +12 -1
  110. package/dist/types/cost/estimate.d.ts.map +1 -1
  111. package/dist/types/cost/index.d.ts +13 -3
  112. package/dist/types/cost/index.d.ts.map +1 -1
  113. package/dist/types/cost/sizes.d.ts +19 -2
  114. package/dist/types/cost/sizes.d.ts.map +1 -1
  115. package/dist/types/generated/codama/errors/srsly.d.ts +11 -13
  116. package/dist/types/generated/codama/errors/srsly.d.ts.map +1 -1
  117. package/dist/types/instructions/closeContract.d.ts.map +1 -1
  118. package/dist/types/instructions/createContract.d.ts.map +1 -1
  119. package/dist/types/instructions/index.d.ts +36 -28
  120. package/dist/types/instructions/index.d.ts.map +1 -1
  121. package/dist/types/kit/index.d.ts +0 -2
  122. package/dist/types/kit/index.d.ts.map +1 -1
  123. package/dist/types/legacy/index.d.ts +0 -2
  124. package/dist/types/legacy/index.d.ts.map +1 -1
  125. package/dist/types/react/ContestTimeline.d.ts +17 -0
  126. package/dist/types/react/ContestTimeline.d.ts.map +1 -0
  127. package/dist/types/react/MinBidChart.d.ts +12 -0
  128. package/dist/types/react/MinBidChart.d.ts.map +1 -0
  129. package/dist/types/react/index.d.ts +12 -0
  130. package/dist/types/react/index.d.ts.map +1 -0
  131. package/dist/types/utils/contestChain.d.ts +130 -0
  132. package/dist/types/utils/contestChain.d.ts.map +1 -0
  133. package/dist/types/utils/index.d.ts +1 -0
  134. package/dist/types/utils/index.d.ts.map +1 -1
  135. package/dist/types/version.d.ts +1 -1
  136. package/package.json +38 -2
@@ -0,0 +1,214 @@
1
+ /**
2
+ * @purpose Pure-math chain-of-contests simulator.
3
+ *
4
+ * Walks a sequence of reservation events (calc defender + user-added
5
+ * takeovers) and produces per-row floor / bonus / owner-take values
6
+ * plus the segment breakdown UIs use to render piecewise curves.
7
+ *
8
+ * No React, no IO, no RPC. Feeds a calculator/visualization layer
9
+ * (`@sly-rentals/core/react/calculator`) but is callable standalone
10
+ * from any environment.
11
+ */
12
+ import { computeMinimumBid } from './bidMath';
13
+ function clamp(n, lo, hi) {
14
+ return Math.max(lo, Math.min(hi, n));
15
+ }
16
+ /**
17
+ * Convert a stardust value into the caller's display currency.
18
+ *
19
+ * ATLAS: stardust / stardustPerAtlas.
20
+ * POINTS: stardust / (stardustPerAtlas × atlasPerPoint), with a
21
+ * min-capture floor since the on-chain threshold rejects sub-floor bids.
22
+ */
23
+ export function stardustToDisplay(stardust, cur, stardustPerAtlas, atlasPerPoint, minCaptureThresholdPoints) {
24
+ const atlas = Number(stardust) / stardustPerAtlas;
25
+ if (cur === 'ATLAS')
26
+ return atlas;
27
+ return Math.max(atlas / atlasPerPoint, minCaptureThresholdPoints);
28
+ }
29
+ /**
30
+ * Walk a chain of contest events and produce per-contest math + segment
31
+ * breakdown.
32
+ *
33
+ * The chain begins with an optional calc defender row (the simulator's
34
+ * "your bid" entry). Subsequent takeover knobs are computed via
35
+ * `computeMinimumBid` against the previous row's bid.
36
+ *
37
+ * v1 assumes same-currency ATLAS knockoffs; tier-upgrade compensation
38
+ * is not modeled.
39
+ */
40
+ export function computeContestChain(args) {
41
+ const { cfg, rateStardust, activeDays, userDefender, defenderCur, takeoverKnobs, displayCur, stardustPerAtlas, atlasPerPoint, minCaptureThresholdPoints, contestedThreshold, contestedCountStart, } = args;
42
+ // Same-currency POINTS rotation: on-chain bonus formula evaluates to
43
+ // zero (no ATLAS escrow movement) and the owner takes nothing. Gate
44
+ // the chain math so downstream rows + totals reflect that.
45
+ const pointsOnly = displayCur === 'POINTS' && (defenderCur ?? displayCur) === 'POINTS';
46
+ const safeSpan = Math.max(0.0001, activeDays);
47
+ const sorted = [...takeoverKnobs].sort((a, b) => a.atDay - b.atDay);
48
+ const rows = [];
49
+ const segments = [];
50
+ const toDisplay = (s) => stardustToDisplay(s, displayCur, stardustPerAtlas, atlasPerPoint, minCaptureThresholdPoints);
51
+ const callMinBid = (closeness, defenderBidStardust) => computeMinimumBid({
52
+ rateStardust,
53
+ defenderBidStardust,
54
+ contestedMultiplierMaxBps: cfg.contestedMultiplierMaxBps,
55
+ captureRateBps: cfg.captureRateBps,
56
+ closenessFraction: closeness,
57
+ });
58
+ const tmp = [];
59
+ if (userDefender) {
60
+ tmp.push({
61
+ id: '__calc',
62
+ atDay: userDefender.atDay,
63
+ bidStardust: userDefender.bidStardust,
64
+ bidDisplay: toDisplay(userDefender.bidStardust),
65
+ defenderBidStardust: 0n,
66
+ defenderAtDay: 0,
67
+ source: 'calc',
68
+ });
69
+ }
70
+ const firstEventAt = tmp[0]?.atDay ?? 0;
71
+ if (firstEventAt > 0) {
72
+ segments.push({
73
+ startDay: 0,
74
+ endDay: firstEventAt,
75
+ defenderBidStardust: 0n,
76
+ hasDefender: false,
77
+ });
78
+ }
79
+ let cursorBid = userDefender?.bidStardust ?? 0n;
80
+ let cursorAt = userDefender?.atDay ?? 0;
81
+ for (const k of sorted) {
82
+ segments.push({
83
+ startDay: cursorAt,
84
+ endDay: k.atDay,
85
+ defenderBidStardust: cursorBid,
86
+ hasDefender: true,
87
+ });
88
+ const closeness = clamp(k.atDay / safeSpan, 0, 1);
89
+ const floor = callMinBid(closeness, cursorBid);
90
+ tmp.push({
91
+ id: k.id,
92
+ atDay: k.atDay,
93
+ bidStardust: floor,
94
+ bidDisplay: toDisplay(floor),
95
+ defenderBidStardust: cursorBid,
96
+ defenderAtDay: cursorAt,
97
+ source: 'knob',
98
+ });
99
+ cursorBid = floor;
100
+ cursorAt = k.atDay;
101
+ }
102
+ if (tmp.length > 0) {
103
+ segments.push({
104
+ startDay: cursorAt,
105
+ endDay: activeDays,
106
+ defenderBidStardust: cursorBid,
107
+ hasDefender: true,
108
+ });
109
+ }
110
+ // Bonus multiplier — config knob, scales the same-cur knockoff bonus.
111
+ // 100 bps = 1× = no-op (current on-chain formula).
112
+ // TODO(bonus_multiplier_bps): drop the `?? 100` fallback once the
113
+ // on-chain field is guaranteed present.
114
+ const bonusMult = (cfg.bonusMultiplierBps ?? 100) / 100;
115
+ const bonusByIdx = tmp.map((_, i) => {
116
+ // POINTS-only chain: no bonus path on-chain.
117
+ if (pointsOnly)
118
+ return 0;
119
+ const next = tmp[i + 1];
120
+ if (!next)
121
+ return 0;
122
+ const closeness = clamp((next.atDay - tmp[i].atDay) / safeSpan, 0, 1);
123
+ const raw = Math.max(0, (next.bidDisplay - tmp[i].bidDisplay) * closeness * bonusMult);
124
+ // Match on-chain `b.min(bid_atlas)` — bonus capped at challenger's bid.
125
+ return Math.min(next.bidDisplay, raw);
126
+ });
127
+ // Owner-take is realized only by the LAST contester in the chain — every
128
+ // earlier contester gets their bid back as refund when outbid, plus a
129
+ // bonus from the next challenger's bid. Net contract escrow at end of
130
+ // chain = bid_last − Σ bonuses paid across the chain (the deficit on
131
+ // each refund is covered by the next challenger's bid). Intermediate
132
+ // rows therefore contribute 0 to owner take.
133
+ const totalBonusForOwner = bonusByIdx.reduce((acc, b) => acc + b, 0);
134
+ const lastIdx = tmp.length - 1;
135
+ let contestedCount = contestedCountStart;
136
+ let bumpFlagged = false;
137
+ for (let i = 0; i < tmp.length; i++) {
138
+ const t = tmp[i];
139
+ const bonusEarned = bonusByIdx[i];
140
+ // POINTS-only chain routes nothing to the owner — the points stake
141
+ // is forfeited to the protocol's points sink, not the owner's escrow.
142
+ const ownerTake = pointsOnly
143
+ ? 0
144
+ : i === lastIdx
145
+ ? Math.max(0, t.bidDisplay - totalBonusForOwner)
146
+ : 0;
147
+ contestedCount = contestedCount + 1;
148
+ const isInitial = i === 0;
149
+ const triggersRateBump = !bumpFlagged && contestedThreshold > 0 && contestedCount >= contestedThreshold && !isInitial;
150
+ if (triggersRateBump)
151
+ bumpFlagged = true;
152
+ // Min bid required to beat THIS row at its atDay — i.e. the floor
153
+ // curve's y-value at `t.atDay` going forward. For takeover rows the
154
+ // row's bid equals the floor it cleared, so this matches `bidDisplay`.
155
+ // For seat-zero rows whose bid is below the floor (e.g. a first
156
+ // reservation at 0 or any on-chain defender that beat a lower prior),
157
+ // this is strictly greater than the row's own bid — and matches the
158
+ // value the chart's cyan curve takes at `atDay`.
159
+ const curveCloseness = clamp(t.atDay / safeSpan, 0, 1);
160
+ const curveAtAtDay = callMinBid(curveCloseness, t.bidStardust);
161
+ rows.push({
162
+ id: t.id,
163
+ idx: i + 1,
164
+ atDay: t.atDay,
165
+ floorStardust: t.bidStardust,
166
+ floorDisplay: t.bidDisplay,
167
+ bonusDisplay: bonusEarned,
168
+ ownerTakeDisplay: ownerTake,
169
+ defenderBidStardust: t.defenderBidStardust,
170
+ defenderAtDay: t.defenderAtDay,
171
+ source: t.source,
172
+ isInitial,
173
+ contestedCountAfter: contestedCount,
174
+ triggersRateBump,
175
+ curveAtAtDayDisplay: toDisplay(curveAtAtDay),
176
+ });
177
+ }
178
+ const baselineAtlas = (Number(rateStardust) / stardustPerAtlas) * activeDays;
179
+ const baselineDisplay = displayCur === 'ATLAS'
180
+ ? baselineAtlas
181
+ : Math.max(baselineAtlas / atlasPerPoint, minCaptureThresholdPoints);
182
+ const totalOwnerDisplay = rows.reduce((acc, r) => acc + r.ownerTakeDisplay, 0);
183
+ const totalBonusDisplay = rows.reduce((acc, r) => acc + r.bonusDisplay, 0);
184
+ const multiplier = baselineDisplay > 0 ? totalOwnerDisplay / baselineDisplay : 0;
185
+ return {
186
+ segments,
187
+ rows,
188
+ totalOwnerDisplay,
189
+ totalBonusDisplay,
190
+ baselineDisplay,
191
+ multiplier,
192
+ };
193
+ }
194
+ /** Even spacing across [from, to] excluding endpoints. */
195
+ export function distributeEven(count, from, to) {
196
+ if (count <= 0 || to <= from)
197
+ return [];
198
+ const step = (to - from) / (count + 1);
199
+ return Array.from({ length: count }, (_, i) => from + step * (i + 1));
200
+ }
201
+ /** Quadratic bias toward `to` — clusters knobs near the snipe window. */
202
+ export function distributeSnipeHeavy(count, from, to) {
203
+ if (count <= 0 || to <= from)
204
+ return [];
205
+ const span = to - from;
206
+ return Array.from({ length: count }, (_, i) => {
207
+ const t = (i + 1) / (count + 1);
208
+ const skewed = 1 - Math.pow(1 - t, 2);
209
+ return from + span * skewed;
210
+ });
211
+ }
212
+ let knobCounter = 0;
213
+ export const nextKnobId = () => `k${++knobCounter}`;
214
+ //# sourceMappingURL=contestChain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contestChain.js","sourceRoot":"","sources":["../../../src/utils/contestChain.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ export { fetchLookupTable, getLookupTableAddress, } from './lookupTable';
22
22
  export { hasActiveRental, hasQueuedRental } from './rental';
23
23
  // Bid Math (pure formula + type)
24
24
  export { computeMinimumBid } from './bidMath';
25
+ // Contest Chain (multi-contest simulator, pure math)
26
+ export { computeContestChain, stardustToDisplay, distributeEven, distributeSnipeHeavy, nextKnobId, } from './contestChain';
25
27
  // Contract Snapshot (aggregated one-shot fetch + derived bid)
26
28
  export { getContractSnapshot, resolveContractSnapshot, computeMinimumBidFromSnapshot, getMinimumBid, } from './contractSnapshot';
27
29
  // Discount Authorization
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,gBAAgB,GAIjB,MAAM,UAAU,CAAC;AAElB,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GAKnB,MAAM,aAAa,CAAC;AAErB,mBAAmB;AACnB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,WAAW,EACX,eAAe,GAEhB,MAAM,UAAU,CAAC;AAElB,wBAAwB;AACxB,OAAO,EACL,iBAAiB,EACjB,SAAS,GAIV,MAAM,UAAU,CAAC;AAElB,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAmC,MAAM,gBAAgB,CAAC;AAEtF,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAA0B,MAAM,qBAAqB,CAAC;AAEhF,gBAAgB;AAChB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAElE,iCAAiC;AACjC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,eAAe,CAAC;AAEvB,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5D,iCAAiC;AACjC,OAAO,EAAE,iBAAiB,EAAmB,MAAM,WAAW,CAAC;AAE/D,8DAA8D;AAC9D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,aAAa,GAGd,MAAM,oBAAoB,CAAC;AAE5B,yBAAyB;AACzB,OAAO,EACL,cAAc,EACd,uBAAuB,GAIxB,MAAM,gBAAgB,CAAC;AAExB,8CAA8C;AAC9C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,gBAAgB,GAIjB,MAAM,UAAU,CAAC;AAElB,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GAKnB,MAAM,aAAa,CAAC;AAErB,mBAAmB;AACnB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,WAAW,EACX,eAAe,GAEhB,MAAM,UAAU,CAAC;AAElB,wBAAwB;AACxB,OAAO,EACL,iBAAiB,EACjB,SAAS,GAIV,MAAM,UAAU,CAAC;AAElB,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAmC,MAAM,gBAAgB,CAAC;AAEtF,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAA0B,MAAM,qBAAqB,CAAC;AAEhF,gBAAgB;AAChB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAElE,iCAAiC;AACjC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,eAAe,CAAC;AAEvB,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5D,iCAAiC;AACjC,OAAO,EAAE,iBAAiB,EAAmB,MAAM,WAAW,CAAC;AAE/D,qDAAqD;AACrD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,UAAU,GAQX,MAAM,gBAAgB,CAAC;AAExB,8DAA8D;AAC9D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,aAAa,GAGd,MAAM,oBAAoB,CAAC;AAE5B,yBAAyB;AACzB,OAAO,EACL,cAAc,EACd,uBAAuB,GAIxB,MAAM,gBAAgB,CAAC;AAExB,8CAA8C;AAC9C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
1
  // Auto-generated from package.json - DO NOT EDIT
2
2
  // Run "pnpm run generate:version" to update
3
- export const VERSION = '1.2.0';
3
+ export const VERSION = '3.0.0';
4
4
  //# sourceMappingURL=version.js.map