@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,417 @@
1
+ /**
2
+ * @purpose Vanilla floor + bonus curve renderer for the SRSLY reservation
3
+ * calculator. Wraps uPlot's imperative API with a class-based lifecycle
4
+ * (constructor / update / destroy) so the component is framework-agnostic.
5
+ * The `@sly-rentals/core/react/MinBidChart` is a thin React wrapper that
6
+ * forwards lifecycle to this class.
7
+ */
8
+ import uPlot from 'uplot';
9
+ import { computeMinimumBid, stardustToDisplay, } from '../utils';
10
+ import { el } from './dom';
11
+ export const DEFAULT_MIN_BID_CHART_THEME = {
12
+ floor: '#22d3ee',
13
+ bonus: '#6ee7b7',
14
+ defenderBid: '#f5c451',
15
+ axis: '#9bb0bd',
16
+ grid: 'rgba(120,190,220,0.14)',
17
+ knobDot: '#22d3ee',
18
+ dotStroke: '#0a0f12',
19
+ };
20
+ const SAMPLES = 128;
21
+ const SAMPLES_PER_SEGMENT = 32;
22
+ function clamp(n, lo, hi) {
23
+ return Math.max(lo, Math.min(hi, n));
24
+ }
25
+ function fmt(n) {
26
+ return Math.round(n).toLocaleString();
27
+ }
28
+ export class MinBidChart {
29
+ container;
30
+ root;
31
+ canvasWrap;
32
+ canvasHost;
33
+ tooltip;
34
+ legend;
35
+ plot = null;
36
+ resizeObs = null;
37
+ props;
38
+ theme;
39
+ knobMarks = [];
40
+ defenderActive = false;
41
+ defenderVal = 0;
42
+ constructor(container, props) {
43
+ this.container = container;
44
+ this.props = props;
45
+ this.theme = { ...DEFAULT_MIN_BID_CHART_THEME, ...(props.theme ?? {}) };
46
+ this.root = el('div', { className: props.classNames?.root ?? 'calc-chart' });
47
+ this.legend = el('div', { className: props.classNames?.legend ?? 'calc-chart-legend' });
48
+ this.canvasWrap = el('div', {
49
+ className: props.classNames?.canvasWrap ?? 'calc-chart-canvas-wrap',
50
+ });
51
+ this.canvasHost = el('div', { className: props.classNames?.canvas ?? 'calc-chart-canvas' });
52
+ this.tooltip = el('div', { className: props.classNames?.tooltip ?? 'calc-chart-tooltip' });
53
+ this.canvasWrap.append(this.canvasHost, this.tooltip);
54
+ this.root.append(this.legend, this.canvasWrap);
55
+ this.canvasWrap.addEventListener('pointerleave', this.onLeaveCanvas);
56
+ this.container.append(this.root);
57
+ this.renderLegend();
58
+ this.mountPlot();
59
+ this.applyData();
60
+ }
61
+ update(next) {
62
+ const prev = this.props;
63
+ this.props = { ...prev, ...next };
64
+ if (next.theme !== undefined) {
65
+ this.theme = { ...DEFAULT_MIN_BID_CHART_THEME, ...(this.props.theme ?? {}) };
66
+ }
67
+ this.renderLegend();
68
+ this.applyData();
69
+ }
70
+ destroy() {
71
+ this.resizeObs?.disconnect();
72
+ this.resizeObs = null;
73
+ this.plot?.destroy();
74
+ this.plot = null;
75
+ this.canvasWrap.removeEventListener('pointerleave', this.onLeaveCanvas);
76
+ if (this.root.parentNode)
77
+ this.root.parentNode.removeChild(this.root);
78
+ }
79
+ onLeaveCanvas = () => {
80
+ this.tooltip.style.opacity = '0';
81
+ };
82
+ renderLegend() {
83
+ const { classNames, chain, challengeCur } = this.props;
84
+ const items = [
85
+ el('span', { className: classNames?.legendItem ?? 'calc-chart-legend-item' }, [
86
+ el('span', { className: 'calc-chart-swatch calc-chart-swatch-cyan' }),
87
+ ' min bid floor',
88
+ ]),
89
+ el('span', { className: classNames?.legendItem ?? 'calc-chart-legend-item' }, [
90
+ el('span', { className: 'calc-chart-swatch calc-chart-swatch-mint-solid' }),
91
+ ' defender bonus',
92
+ ]),
93
+ ];
94
+ if (chain && chain.rows.length > 0) {
95
+ items.push(el('span', { className: classNames?.legendItem ?? 'calc-chart-legend-item' }, [
96
+ el('span', { className: 'calc-chart-swatch calc-chart-swatch-cyan-dashed' }),
97
+ ' your bid / contests',
98
+ ]));
99
+ }
100
+ items.push(el('span', {
101
+ className: classNames?.legendUnit ?? 'calc-chart-legend-unit',
102
+ text: challengeCur,
103
+ }));
104
+ while (this.legend.firstChild)
105
+ this.legend.removeChild(this.legend.firstChild);
106
+ for (const it of items)
107
+ this.legend.append(it);
108
+ }
109
+ toDisplay(stardust) {
110
+ const p = this.props;
111
+ return stardustToDisplay(stardust, p.challengeCur, p.stardustPerAtlas, p.atlasPerPoint, p.minCaptureThresholdPoints);
112
+ }
113
+ callMinBid(closeness, defenderBid) {
114
+ const { rateStardust, cfg } = this.props;
115
+ return computeMinimumBid({
116
+ rateStardust,
117
+ defenderBidStardust: defenderBid,
118
+ contestedMultiplierMaxBps: cfg.contestedMultiplierMaxBps,
119
+ captureRateBps: cfg.captureRateBps,
120
+ closenessFraction: closeness,
121
+ });
122
+ }
123
+ computeData() {
124
+ const { cfg, defenderBidStardust, activeDays, hasDefender, defenderReservedAt, chain } = this.props;
125
+ const span = activeDays > 0 ? activeDays : 1;
126
+ const xs = [];
127
+ const floor = [];
128
+ const bonus = [];
129
+ if (chain && (chain.segments.length > 0 || hasDefender)) {
130
+ const reservedAt = hasDefender ? clamp(defenderReservedAt, 0, span) : 0;
131
+ if (reservedAt > 0) {
132
+ xs.push(0);
133
+ floor.push(0);
134
+ bonus.push(null);
135
+ xs.push(reservedAt);
136
+ floor.push(0);
137
+ bonus.push(null);
138
+ }
139
+ else if (!hasDefender && chain.rows.length === 0) {
140
+ xs.push(0);
141
+ floor.push(0);
142
+ bonus.push(null);
143
+ xs.push(span);
144
+ floor.push(0);
145
+ bonus.push(null);
146
+ return [xs, floor, bonus];
147
+ }
148
+ const walkSegment = (seg) => {
149
+ const segSpan = Math.max(0, seg.endDay - seg.startDay);
150
+ const defenderDisplay = this.toDisplay(seg.defenderBidStardust);
151
+ if (!seg.hasDefender) {
152
+ xs.push(seg.startDay);
153
+ floor.push(0);
154
+ bonus.push(null);
155
+ if (segSpan > 0) {
156
+ xs.push(seg.endDay);
157
+ floor.push(0);
158
+ bonus.push(null);
159
+ }
160
+ return;
161
+ }
162
+ const samples = segSpan <= 0 ? 1 : SAMPLES_PER_SEGMENT;
163
+ for (let i = 0; i <= samples; i++) {
164
+ const t = i / samples;
165
+ const day = seg.startDay + segSpan * t;
166
+ const closenessFloor = clamp(day / span, 0, 1);
167
+ const floorStardust = this.callMinBid(closenessFloor, seg.defenderBidStardust);
168
+ const floorDisplay = this.toDisplay(floorStardust);
169
+ const bonusCloseness = clamp((day - seg.startDay) / span, 0, 1);
170
+ // TODO(bonus_multiplier_bps): drop the `?? 100` fallback once
171
+ // the on-chain field is guaranteed present on ConfigState.
172
+ const bonusMult = (cfg.bonusMultiplierBps ?? 100) / 100;
173
+ const bonusRaw = Math.max(0, (floorDisplay - defenderDisplay) * bonusCloseness * bonusMult);
174
+ const bonusDisplay = Math.min(floorDisplay, bonusRaw);
175
+ xs.push(day);
176
+ floor.push(floorDisplay);
177
+ bonus.push(bonusDisplay);
178
+ }
179
+ };
180
+ for (const seg of chain.segments)
181
+ walkSegment(seg);
182
+ return [xs, floor, bonus];
183
+ }
184
+ const reservedAt = hasDefender ? clamp(defenderReservedAt, 0, span) : 0;
185
+ for (let i = 0; i < SAMPLES; i++) {
186
+ const day = (i / (SAMPLES - 1)) * span;
187
+ xs.push(day);
188
+ if (!hasDefender || day < reservedAt) {
189
+ floor.push(0);
190
+ bonus.push(null);
191
+ continue;
192
+ }
193
+ const closenessFloor = clamp(day / span, 0, 1);
194
+ const floorStardust = this.callMinBid(closenessFloor, defenderBidStardust);
195
+ const floorDisplay = this.toDisplay(floorStardust);
196
+ const defenderDisplay = this.toDisplay(defenderBidStardust);
197
+ const bonusCloseness = clamp((day - reservedAt) / span, 0, 1);
198
+ // TODO(bonus_multiplier_bps): drop the `?? 100` fallback once
199
+ // the on-chain field is guaranteed present on ConfigState.
200
+ const bonusMult = (cfg.bonusMultiplierBps ?? 100) / 100;
201
+ const bonusRaw = defenderBidStardust > 0n
202
+ ? Math.max(0, (floorDisplay - defenderDisplay) * bonusCloseness * bonusMult)
203
+ : 0;
204
+ const bonusDisplay = Math.min(floorDisplay, bonusRaw);
205
+ floor.push(floorDisplay);
206
+ bonus.push(bonusDisplay > 0 ? bonusDisplay : null);
207
+ }
208
+ return [xs, floor, bonus];
209
+ }
210
+ syncRefs() {
211
+ const p = this.props;
212
+ this.defenderActive = p.defenderBidStardust > 0n;
213
+ this.defenderVal = this.toDisplay(p.defenderBidStardust);
214
+ this.knobMarks = p.chain
215
+ ? p.chain.rows.map(r => ({
216
+ atDay: r.atDay,
217
+ // `curveAtAtDayDisplay` lands the dot on the min-bid floor
218
+ // curve (= what the next challenger needs). `floorDisplay`
219
+ // would put it at the row's own bid, which for a seat-zero
220
+ // first reservation (bid=0) or any sub-floor stake sits
221
+ // BELOW the cyan curve.
222
+ curveDisplay: r.curveAtAtDayDisplay,
223
+ source: r.source,
224
+ }))
225
+ : [];
226
+ }
227
+ mountPlot() {
228
+ this.syncRefs();
229
+ const drawKnobDots = (u) => {
230
+ const marks = this.knobMarks;
231
+ if (marks.length === 0)
232
+ return;
233
+ const ctx = u.ctx;
234
+ const yMin = u.scales.y.min;
235
+ const yMax = u.scales.y.max;
236
+ const xMin = u.scales.x.min;
237
+ const xMax = u.scales.x.max;
238
+ for (const m of marks) {
239
+ if (xMin != null && xMax != null && (m.atDay < xMin || m.atDay > xMax))
240
+ continue;
241
+ if (yMin != null && yMax != null && (m.curveDisplay < yMin || m.curveDisplay > yMax)) {
242
+ continue;
243
+ }
244
+ const cx = u.valToPos(m.atDay, 'x', true);
245
+ const cy = u.valToPos(m.curveDisplay, 'y', true);
246
+ ctx.save();
247
+ ctx.fillStyle = this.theme.knobDot;
248
+ ctx.strokeStyle = this.theme.dotStroke;
249
+ ctx.lineWidth = 1.5;
250
+ ctx.beginPath();
251
+ ctx.arc(cx, cy, 4, 0, Math.PI * 2);
252
+ ctx.fill();
253
+ ctx.stroke();
254
+ ctx.restore();
255
+ }
256
+ };
257
+ const drawKnobVerticals = (u) => {
258
+ const marks = this.knobMarks;
259
+ if (marks.length === 0)
260
+ return;
261
+ const ctx = u.ctx;
262
+ for (const m of marks) {
263
+ const cx = u.valToPos(m.atDay, 'x', true);
264
+ ctx.save();
265
+ ctx.strokeStyle = this.theme.floor;
266
+ ctx.globalAlpha = 0.35;
267
+ ctx.lineWidth = 1;
268
+ ctx.setLineDash([2, 3]);
269
+ ctx.beginPath();
270
+ ctx.moveTo(cx, u.bbox.top);
271
+ ctx.lineTo(cx, u.bbox.top + u.bbox.height);
272
+ ctx.stroke();
273
+ ctx.restore();
274
+ }
275
+ };
276
+ const drawDefenderLine = (u) => {
277
+ if (!this.defenderActive)
278
+ return;
279
+ if (this.knobMarks.length > 0)
280
+ return;
281
+ const y = this.defenderVal;
282
+ const yMin = u.scales.y.min;
283
+ const yMax = u.scales.y.max;
284
+ if (yMin == null || yMax == null)
285
+ return;
286
+ if (y < yMin || y > yMax)
287
+ return;
288
+ const cy = u.valToPos(y, 'y', true);
289
+ const ctx = u.ctx;
290
+ ctx.save();
291
+ ctx.setLineDash([2, 3]);
292
+ ctx.strokeStyle = this.theme.defenderBid;
293
+ ctx.globalAlpha = 0.7;
294
+ ctx.lineWidth = 1;
295
+ ctx.beginPath();
296
+ ctx.moveTo(u.bbox.left, cy);
297
+ ctx.lineTo(u.bbox.left + u.bbox.width, cy);
298
+ ctx.stroke();
299
+ ctx.restore();
300
+ };
301
+ const opts = {
302
+ width: this.canvasHost.clientWidth || 320,
303
+ height: 180,
304
+ padding: [10, 12, 4, 4],
305
+ legend: { show: false },
306
+ cursor: {
307
+ drag: { x: false, y: false, setScale: false },
308
+ points: { show: true, size: 6, fill: this.theme.floor, stroke: this.theme.floor },
309
+ focus: { prox: 24 },
310
+ },
311
+ scales: {
312
+ x: {
313
+ time: false,
314
+ range: () => {
315
+ const now = this.props.nowDay ?? 0;
316
+ const xStart = now > 0 ? now : 0;
317
+ return [xStart, Math.max(xStart + 0.1, this.props.activeDays)];
318
+ },
319
+ },
320
+ y: { range: (_u, _dmin, dmax) => [0, (dmax || 1) * 1.1] },
321
+ },
322
+ axes: [
323
+ {
324
+ stroke: this.theme.axis,
325
+ grid: { stroke: this.theme.grid, width: 1 },
326
+ ticks: { stroke: this.theme.grid, width: 1 },
327
+ font: '10px "JetBrains Mono", monospace',
328
+ splits: (_u, _ax, scaleMin, scaleMax) => {
329
+ const start = Math.ceil(scaleMin);
330
+ const end = Math.floor(scaleMax);
331
+ const out = [];
332
+ for (let v = start; v <= end; v++)
333
+ out.push(v);
334
+ return out;
335
+ },
336
+ values: (_u, vals) => vals.map(v => `${Math.round(v)}d`),
337
+ size: 26,
338
+ },
339
+ {
340
+ stroke: this.theme.axis,
341
+ grid: { stroke: this.theme.grid, width: 1 },
342
+ ticks: { stroke: this.theme.grid, width: 1 },
343
+ font: '10px "JetBrains Mono", monospace',
344
+ values: (_u, vals) => vals.map(v => fmt(Math.round(v))),
345
+ size: 54,
346
+ },
347
+ ],
348
+ series: [
349
+ { label: 'day' },
350
+ {
351
+ label: 'min bid',
352
+ stroke: this.theme.floor,
353
+ width: 1.5,
354
+ fill: 'rgba(34, 211, 238, 0.08)',
355
+ points: { show: false },
356
+ },
357
+ {
358
+ label: 'bonus',
359
+ stroke: this.theme.bonus,
360
+ width: 1.25,
361
+ fill: 'rgba(110, 231, 183, 0.06)',
362
+ points: { show: false },
363
+ },
364
+ ],
365
+ hooks: {
366
+ draw: [drawDefenderLine, drawKnobVerticals, drawKnobDots],
367
+ setCursor: [
368
+ (u) => {
369
+ const tip = this.tooltip;
370
+ const idx = u.cursor.idx;
371
+ const left = u.cursor.left ?? -1;
372
+ const top = u.cursor.top ?? -1;
373
+ if (idx == null || idx < 0 || left < 0 || top < 0) {
374
+ tip.style.opacity = '0';
375
+ return;
376
+ }
377
+ const xs = u.data[0];
378
+ const floorYs = u.data[1];
379
+ const bonusYs = u.data[2];
380
+ const day = xs[idx];
381
+ const floorVal = floorYs[idx] ?? 0;
382
+ const bonusVal = bonusYs[idx] ?? 0;
383
+ const cur = this.props.challengeCur;
384
+ const dayCls = this.props.classNames?.tooltipDay ?? 'calc-chart-tooltip-day';
385
+ const rowCls = this.props.classNames?.tooltipRow ?? 'calc-chart-tooltip-row';
386
+ tip.innerHTML = `
387
+ <div class="${dayCls}">day ${day.toFixed(2)}</div>
388
+ <div class="${rowCls}"><span class="dot cyan"></span> min bid <strong>${fmt(floorVal)}</strong> <span class="u">${cur}</span></div>
389
+ <div class="${rowCls}"><span class="dot mint"></span> bonus <strong>${fmt(bonusVal)}</strong> <span class="u">${cur}</span></div>
390
+ `;
391
+ const wrapW = u.bbox.left + u.bbox.width;
392
+ const tipW = tip.offsetWidth || 140;
393
+ const flipLeft = left + 12 + tipW > wrapW;
394
+ tip.style.left = flipLeft ? `${left - 12 - tipW}px` : `${left + 12}px`;
395
+ tip.style.top = `${Math.max(0, top - 8)}px`;
396
+ tip.style.opacity = '1';
397
+ },
398
+ ],
399
+ },
400
+ };
401
+ this.plot = new uPlot(opts, this.computeData(), this.canvasHost);
402
+ this.resizeObs = new ResizeObserver(() => {
403
+ const p = this.plot;
404
+ if (!p)
405
+ return;
406
+ p.setSize({ width: this.canvasHost.clientWidth, height: 180 });
407
+ });
408
+ this.resizeObs.observe(this.canvasHost);
409
+ }
410
+ applyData() {
411
+ this.syncRefs();
412
+ if (!this.plot)
413
+ return;
414
+ this.plot.setData(this.computeData());
415
+ }
416
+ }
417
+ //# sourceMappingURL=MinBidChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinBidChart.js","sourceRoot":"","sources":["../../../src/calculator/MinBidChart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @purpose Minimal DOM helper used by the vanilla calculator components
3
+ * to build element trees without JSX. Sets className + text + appends
4
+ * children in one call.
5
+ */
6
+ export function el(tag, props, children) {
7
+ const node = document.createElement(tag);
8
+ if (props?.className)
9
+ node.className = props.className;
10
+ if (props?.text != null)
11
+ node.textContent = props.text;
12
+ if (props?.title)
13
+ node.title = props.title;
14
+ if (props?.ariaLabel)
15
+ node.setAttribute('aria-label', props.ariaLabel);
16
+ if (props?.attrs) {
17
+ for (const k of Object.keys(props.attrs))
18
+ node.setAttribute(k, props.attrs[k]);
19
+ }
20
+ if (props?.style)
21
+ Object.assign(node.style, props.style);
22
+ if (children) {
23
+ for (const c of children) {
24
+ if (c == null)
25
+ continue;
26
+ node.append(typeof c === 'string' ? document.createTextNode(c) : c);
27
+ }
28
+ }
29
+ return node;
30
+ }
31
+ export function clearChildren(node) {
32
+ while (node.firstChild)
33
+ node.removeChild(node.firstChild);
34
+ }
35
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../src/calculator/dom.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,UAAU,EAAE,CAChB,GAAM,EACN,KAAe,EACf,QAAyD;IAEzD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACvD,IAAI,KAAK,EAAE,IAAI,IAAI,IAAI;QAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,KAAK,EAAE,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3C,IAAI,KAAK,EAAE,SAAS;QAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACvE,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,KAAK,EAAE,KAAK;QAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,IAAI;gBAAE,SAAS;YACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,IAAI,CAAC,UAAU;QAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @purpose Typed event emitter — replaces React callback props in the
3
+ * vanilla calculator components. Subscribers register via `.on(event,
4
+ * handler)` and receive an unsubscribe thunk.
5
+ */
6
+ export class Emitter {
7
+ listeners = {};
8
+ on(event, handler) {
9
+ let set = this.listeners[event];
10
+ if (!set) {
11
+ set = new Set();
12
+ this.listeners[event] = set;
13
+ }
14
+ set.add(handler);
15
+ return () => {
16
+ set.delete(handler);
17
+ };
18
+ }
19
+ emit(event, ...args) {
20
+ const set = this.listeners[event];
21
+ if (!set)
22
+ return;
23
+ for (const h of set)
24
+ h(...args);
25
+ }
26
+ clear() {
27
+ for (const k of Object.keys(this.listeners)) {
28
+ delete this.listeners[k];
29
+ }
30
+ }
31
+ }
32
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/calculator/emitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,OAAO,OAAO;IACD,SAAS,GAAmC,EAAE,CAAC;IAEhE,EAAE,CAAoB,KAAQ,EAAE,OAAa;QAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAQ,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QAC9B,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,GAAG,EAAE;YACV,GAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAoB,KAAQ,EAAE,GAAG,IAAsB;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,MAAM,CAAC,IAAI,GAAG;YAAG,CAA0C,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK;QACH,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAY,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @purpose Framework-agnostic calculator components for the SRSLY
3
+ * reservation system. Class-based lifecycle (constructor / update /
4
+ * destroy) — works in any environment with a DOM. React consumers
5
+ * should prefer `@sly-rentals/core/react` which wraps these classes.
6
+ *
7
+ * Pair with `@sly-rentals/core/react/styles.css` for the default
8
+ * SRSLY look, or supply your own classNames / theme.
9
+ */
10
+ export { MinBidChart, DEFAULT_MIN_BID_CHART_THEME, } from './MinBidChart';
11
+ export { ContestTimeline, } from './ContestTimeline';
12
+ export { Emitter } from './emitter';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/calculator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,WAAW,EACX,2BAA2B,GAI5B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,GAIhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,OAAO,EAAiB,MAAM,WAAW,CAAC"}
@@ -2,15 +2,62 @@
2
2
  * @purpose Cost-related constants shared across SDK modules.
3
3
  *
4
4
  * Single source of truth for thread funding, execution budgets, and per-tx fees.
5
- * Mirrors on-chain constants in `rust/programs/srsly/src/instructions/contract_thread.rs`.
6
5
  */
7
6
  /**
8
- * Infrastructure base auto-added by the SDK when creating a contract thread.
9
- * Covers thread rent + 3 fiber rents (~0.034 SOL) plus a ~0.006 SOL buffer.
7
+ * Floor for the `amount` field passed into `antegen::create_thread`.
10
8
  *
11
- * On-chain minimum: `rust/programs/srsly/src/instructions/contract_thread.rs:119`.
9
+ * Matches the on-chain `MINIMUM_THREAD_LAMPORTS` enforcement in
10
+ * `rust/programs/srsly/src/instructions/contract_thread.rs:119`.
11
+ * Callers should NOT use this constant directly — prefer
12
+ * `computeThreadLamports(executionBudget)` which sizes the funding
13
+ * to what the contract's actual fiber set + execution budget needs
14
+ * and only falls back to this floor when the computed value is
15
+ * smaller (e.g. weekly/monthly contracts).
12
16
  */
13
- export const MINIMUM_THREAD_FUNDING = 40000000n;
17
+ export const MINIMUM_THREAD_FUNDING = 30000000n;
18
+ /**
19
+ * Rent-exempt minimum for one antegen `FiberState` account (1092
20
+ * bytes — 32 thread + 4+1024 compiled_instruction + 8 last_executed
21
+ * + 8 exec_count + 8 priority_fee + 8 discriminator). The thread
22
+ * pre-funds this for every fiber it'll ever hold so lazy
23
+ * `update_fiber(init_if_needed)` calls can pay rent from the
24
+ * thread's own balance.
25
+ *
26
+ * Hardcoded against antegen-fiber-program v5.0.7. If Antegen
27
+ * changes the struct, update here.
28
+ */
29
+ export const FIBER_STATE_RENT_LAMPORTS = 8500000n;
30
+ /**
31
+ * Number of fibers the srsly contract thread provisions over its
32
+ * lifetime. Currently 2:
33
+ * • Fiber 0 — controller (`contract_process`), created inline at
34
+ * `thread_create`.
35
+ * • Fiber 1 — close fiber (`rental_close` ix). Created lazily on
36
+ * the first `rental_accept` / `rental_reserve`, with its
37
+ * instruction payload swapped between accept and reserve
38
+ * contexts as needed (same slot, different content).
39
+ *
40
+ * Bump this if a future contract design adds another fiber.
41
+ */
42
+ export const SRSLY_THREAD_FIBER_COUNT = 2n;
43
+ /**
44
+ * Total lamports to pass into `antegen::create_thread.amount`.
45
+ *
46
+ * Sized to the contract's actual needs:
47
+ * • Rent for every fiber the thread will hold (pre-funded from
48
+ * the thread's balance for lazy creation).
49
+ * • Execution budget — drained per tick at `PER_TICK_LAMPORTS`.
50
+ *
51
+ * Floors at `MINIMUM_THREAD_FUNDING` so the on-chain validation
52
+ * passes. For @daily/@weekly/@monthly contracts the computed
53
+ * value is below the floor so we still pay the 30M; for `@hourly`
54
+ * contracts the execution budget alone exceeds the floor and we
55
+ * pass the actual required amount.
56
+ */
57
+ export function computeThreadLamports(executionBudget) {
58
+ const computed = FIBER_STATE_RENT_LAMPORTS * SRSLY_THREAD_FIBER_COUNT + executionBudget;
59
+ return computed > MINIMUM_THREAD_FUNDING ? computed : MINIMUM_THREAD_FUNDING;
60
+ }
14
61
  /**
15
62
  * Default execution budget for contract thread ticks when caller does not
16
63
  * specify one. 0.00219 SOL funds ~365 ticks at 0.000006 SOL each
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/cost/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAW,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAU,CAAC;AAEnD,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAM,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAM,CAAC;AAExC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,MAAO,CAAC;AAEvC,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/cost/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAW,CAAC;AAElD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAU,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAC,eAAuB;IAC3D,MAAM,QAAQ,GAAG,yBAAyB,GAAG,wBAAwB,GAAG,eAAe,CAAC;IACxF,OAAO,QAAQ,GAAG,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAU,CAAC;AAEnD,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAM,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAM,CAAC;AAExC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,MAAO,CAAC;AAEvC,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC"}