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