calculation-breakdown 0.0.0-stage → 0.1.1

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 (50) hide show
  1. package/CHANGELOG-ARCHIVE.md +3 -0
  2. package/CHANGELOG.md +13 -0
  3. package/LICENSE +21 -0
  4. package/README.md +179 -2
  5. package/dist/calculation-breakdown-builder.d.ts +56 -0
  6. package/dist/calculation-breakdown-builder.d.ts.map +1 -0
  7. package/dist/calculation-breakdown-builder.js +242 -0
  8. package/dist/calculation-breakdown-builder.js.map +1 -0
  9. package/dist/calculation-breakdown-human-string.d.ts +24 -0
  10. package/dist/calculation-breakdown-human-string.d.ts.map +1 -0
  11. package/dist/calculation-breakdown-human-string.js +86 -0
  12. package/dist/calculation-breakdown-human-string.js.map +1 -0
  13. package/dist/calculation-breakdown.error.d.ts +14 -0
  14. package/dist/calculation-breakdown.error.d.ts.map +1 -0
  15. package/dist/calculation-breakdown.error.js +16 -0
  16. package/dist/calculation-breakdown.error.js.map +1 -0
  17. package/dist/calculation-breakdown.interface.d.ts +134 -0
  18. package/dist/calculation-breakdown.interface.d.ts.map +1 -0
  19. package/dist/calculation-breakdown.interface.js +2 -0
  20. package/dist/calculation-breakdown.interface.js.map +1 -0
  21. package/dist/calculation-breakdown.type.d.ts +20 -0
  22. package/dist/calculation-breakdown.type.d.ts.map +1 -0
  23. package/dist/calculation-breakdown.type.js +2 -0
  24. package/dist/calculation-breakdown.type.js.map +1 -0
  25. package/dist/cjs/calculation-breakdown-builder.d.ts +55 -0
  26. package/dist/cjs/calculation-breakdown-builder.js +245 -0
  27. package/dist/cjs/calculation-breakdown-human-string.d.ts +23 -0
  28. package/dist/cjs/calculation-breakdown-human-string.js +88 -0
  29. package/dist/cjs/calculation-breakdown.error.d.ts +13 -0
  30. package/dist/cjs/calculation-breakdown.error.js +19 -0
  31. package/dist/cjs/calculation-breakdown.interface.d.ts +133 -0
  32. package/dist/cjs/calculation-breakdown.interface.js +2 -0
  33. package/dist/cjs/calculation-breakdown.type.d.ts +19 -0
  34. package/dist/cjs/calculation-breakdown.type.js +2 -0
  35. package/dist/cjs/index.d.ts +5 -0
  36. package/dist/cjs/index.js +9 -0
  37. package/dist/cjs/package.json +3 -0
  38. package/dist/index.d.ts +6 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +4 -0
  41. package/dist/index.js.map +1 -0
  42. package/docs/_config.yml +19 -0
  43. package/docs/assets/calculation-breakdown/index.js +4 -0
  44. package/docs/changelog-archive.md +9 -0
  45. package/docs/changelog.md +19 -0
  46. package/docs/index.md +13 -0
  47. package/docs/playground/index.html +106 -0
  48. package/docs/playground/playground.css +374 -0
  49. package/docs/playground/playground.js +1251 -0
  50. package/package.json +66 -4
@@ -0,0 +1,374 @@
1
+ :root {
2
+ color-scheme: dark;
3
+ --canvas: #11110f;
4
+ --panel: #191916;
5
+ --panel-raised: #20201c;
6
+ --line: #35352e;
7
+ --muted: #96968a;
8
+ --text: #f3f1e8;
9
+ --accent: #d9ff57;
10
+ --danger: #ff806d;
11
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
12
+ "Segoe UI", sans-serif;
13
+ }
14
+
15
+ * { box-sizing: border-box; }
16
+
17
+ html,
18
+ body {
19
+ height: 100%;
20
+ overflow: hidden;
21
+ }
22
+
23
+ body {
24
+ margin: 0;
25
+ display: flex;
26
+ flex-direction: column;
27
+ background: var(--canvas);
28
+ color: var(--text);
29
+ }
30
+
31
+ .topbar {
32
+ flex: 0 0 auto;
33
+ min-height: 68px;
34
+ padding: 12px 18px;
35
+ border-bottom: 1px solid var(--line);
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: space-between;
39
+ gap: 20px;
40
+ }
41
+
42
+ .brand {
43
+ color: var(--text);
44
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
45
+ font-size: 15px;
46
+ font-weight: 700;
47
+ text-decoration: none;
48
+ }
49
+
50
+ .badge {
51
+ margin-left: 10px;
52
+ padding: 3px 7px;
53
+ border: 1px solid #55651f;
54
+ border-radius: 999px;
55
+ color: var(--accent);
56
+ font-size: 11px;
57
+ text-transform: uppercase;
58
+ letter-spacing: .08em;
59
+ }
60
+
61
+ .actions,
62
+ .locale-control {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 9px;
66
+ }
67
+
68
+ .locale-control { color: var(--muted); font-size: 12px; }
69
+
70
+ select,
71
+ .button {
72
+ height: 36px;
73
+ border: 1px solid var(--line);
74
+ border-radius: 7px;
75
+ font: inherit;
76
+ }
77
+
78
+ select {
79
+ padding: 0 30px 0 10px;
80
+ background: var(--panel);
81
+ color: var(--text);
82
+ }
83
+
84
+ .button {
85
+ padding: 0 14px;
86
+ background: var(--accent);
87
+ color: #181a0c;
88
+ font-size: 13px;
89
+ font-weight: 750;
90
+ cursor: pointer;
91
+ }
92
+
93
+ .button:hover { filter: brightness(1.08); }
94
+ .button-secondary { background: transparent; color: var(--text); }
95
+
96
+ .workspace {
97
+ flex: 1;
98
+ min-height: 0;
99
+ display: grid;
100
+ grid-template-columns: minmax(280px, .92fr) minmax(260px, .72fr) minmax(360px, 1.25fr);
101
+ }
102
+
103
+ .panel {
104
+ min-width: 0;
105
+ min-height: 0;
106
+ overflow: hidden;
107
+ display: flex;
108
+ flex-direction: column;
109
+ border-right: 1px solid var(--line);
110
+ }
111
+
112
+ .panel:last-child { border-right: 0; }
113
+
114
+ .panel-heading {
115
+ min-height: 50px;
116
+ padding: 0 14px;
117
+ border-bottom: 1px solid var(--line);
118
+ display: flex;
119
+ align-items: center;
120
+ justify-content: space-between;
121
+ gap: 12px;
122
+ color: var(--muted);
123
+ font-size: 11px;
124
+ letter-spacing: .04em;
125
+ }
126
+
127
+ .panel-heading > div { display: flex; align-items: center; gap: 9px; }
128
+ .panel-heading-meta { justify-content: flex-end; text-align: right; }
129
+ .panel-heading h1, .panel-heading h2 { margin: 0; color: var(--text); font-size: 13px; }
130
+ .step { color: var(--accent); font-family: ui-monospace, monospace; }
131
+
132
+ .code-editor {
133
+ position: relative;
134
+ flex: 1;
135
+ min-height: 0;
136
+ overflow: hidden;
137
+ background: var(--panel);
138
+ }
139
+
140
+ textarea,
141
+ .code-highlight {
142
+ position: absolute;
143
+ inset: 0;
144
+ width: 100%;
145
+ height: 100%;
146
+ margin: 0;
147
+ resize: none;
148
+ border: 0;
149
+ outline: 0;
150
+ padding: 18px;
151
+ overflow: auto;
152
+ white-space: pre;
153
+ overflow-wrap: normal;
154
+ font: 13px/21px Menlo, Monaco, Consolas, "Liberation Mono", monospace;
155
+ font-synthesis: none;
156
+ font-variant-ligatures: none;
157
+ letter-spacing: 0;
158
+ word-spacing: 0;
159
+ text-indent: 0;
160
+ tab-size: 2;
161
+ }
162
+
163
+ .code-highlight {
164
+ pointer-events: none;
165
+ overflow: hidden;
166
+ color: #d7d7c8;
167
+ }
168
+
169
+ #builder {
170
+ overflow-x: scroll;
171
+ overflow-y: auto;
172
+ }
173
+
174
+ textarea {
175
+ z-index: 1;
176
+ background: transparent;
177
+ color: transparent;
178
+ -webkit-text-fill-color: transparent;
179
+ caret-color: var(--accent);
180
+ }
181
+
182
+ textarea::selection {
183
+ background: rgba(123, 148, 54, .42);
184
+ -webkit-text-fill-color: transparent;
185
+ }
186
+
187
+ textarea:focus { box-shadow: inset 0 0 0 1px #596927; }
188
+
189
+ .code-editor:focus-within .code-highlight {
190
+ visibility: hidden;
191
+ }
192
+
193
+ .code-editor textarea:focus {
194
+ color: #d7d7c8;
195
+ -webkit-text-fill-color: #d7d7c8;
196
+ }
197
+
198
+ .token-comment { color: #707568; }
199
+ .token-keyword, .token-atrule { color: #d780f5; }
200
+ .token-string { color: #b7d77a; }
201
+ .token-number, .token-color { color: #f2a65a; }
202
+ .token-function { color: #78c7f2; }
203
+ .token-property { color: #7bd8c4; }
204
+ .token-selector { color: #f1d17b; }
205
+ .preview-panel { background: #151513; }
206
+
207
+ .preview-stage {
208
+ flex: 1;
209
+ min-height: 0;
210
+ padding: clamp(20px, 4vw, 54px);
211
+ display: grid;
212
+ place-items: start center;
213
+ overflow-x: hidden;
214
+ overflow-y: auto;
215
+ background-image: radial-gradient(#34342e 1px, transparent 1px);
216
+ background-size: 18px 18px;
217
+ }
218
+
219
+ .preview-list {
220
+ width: min(100%, 620px);
221
+ min-width: 0;
222
+ display: grid;
223
+ gap: 24px;
224
+ }
225
+
226
+ .calculation-card {
227
+ position: relative;
228
+ width: min(100%, 560px);
229
+ min-width: 0;
230
+ justify-self: center;
231
+ overflow-x: auto;
232
+ overflow-y: hidden;
233
+ padding: 30px;
234
+ border: 1px solid #d9dfc2;
235
+ border-radius: 18px;
236
+ background: #f7f8f1;
237
+ color: #1c2114;
238
+ box-shadow: 0 28px 70px rgba(0, 0, 0, .32);
239
+ font-family: Inter, system-ui, sans-serif;
240
+ }
241
+
242
+ .calculation-card__header {
243
+ display: flex;
244
+ align-items: center;
245
+ justify-content: space-between;
246
+ gap: 16px;
247
+ margin-bottom: 14px;
248
+ }
249
+
250
+ .calculation-card__eyebrow {
251
+ margin: 0;
252
+ color: #637236;
253
+ font-size: 11px;
254
+ font-weight: 800;
255
+ letter-spacing: .12em;
256
+ text-transform: uppercase;
257
+ }
258
+
259
+ .card-controls {
260
+ display: flex;
261
+ align-items: center;
262
+ justify-content: flex-start;
263
+ gap: 9px;
264
+ margin-bottom: 18px;
265
+ }
266
+
267
+ .language-switcher,
268
+ .view-switcher {
269
+ display: grid;
270
+ grid-template-columns: 1fr 1fr;
271
+ padding: 3px;
272
+ border: 1px solid #d4d9c5;
273
+ border-radius: 999px;
274
+ background: #e9ecdf;
275
+ }
276
+
277
+ .view-switcher {
278
+ grid-template-columns: repeat(3, 1fr);
279
+ }
280
+
281
+ .language-switcher button,
282
+ .view-switcher button {
283
+ min-width: 34px;
284
+ padding: 5px 8px;
285
+ border: 0;
286
+ border-radius: 999px;
287
+ background: transparent;
288
+ color: #747966;
289
+ font: 800 10px/1 ui-monospace, monospace;
290
+ cursor: pointer;
291
+ }
292
+
293
+ .language-switcher button[aria-pressed="true"],
294
+ .view-switcher button[aria-pressed="true"] {
295
+ background: #1c2114;
296
+ color: #f7f8f1;
297
+ }
298
+
299
+ .calculation-card__meta {
300
+ display: grid;
301
+ grid-template-columns: 1fr;
302
+ gap: 12px;
303
+ margin: 26px 0 0;
304
+ }
305
+
306
+ .calculation-card__meta div {
307
+ padding-top: 12px;
308
+ border-top: 1px solid #d9dfc2;
309
+ }
310
+
311
+ .calculation-card__meta dt {
312
+ color: #6b705f;
313
+ font-size: 11px;
314
+ text-transform: uppercase;
315
+ }
316
+
317
+ .calculation-card__meta dd {
318
+ margin: 5px 0 0;
319
+ font: 600 13px ui-monospace, monospace;
320
+ }
321
+
322
+ .calculation-card__command {
323
+ display: block;
324
+ margin-bottom: 14px;
325
+ color: #6b705f;
326
+ font: 11px/1.5 ui-monospace, monospace;
327
+ white-space: nowrap;
328
+ }
329
+
330
+ .calculation-card__command[hidden] { display: none; }
331
+
332
+ .calculation-card__json { margin-top: 24px; }
333
+ .calculation-card__json summary { cursor: pointer; font-size: 13px; }
334
+ .calculation-card__json pre {
335
+ max-height: 240px;
336
+ overflow: auto;
337
+ padding: 14px;
338
+ border-radius: 9px;
339
+ background: #e9ecdf;
340
+ font: 11px/1.5 ui-monospace, monospace;
341
+ }
342
+
343
+ .preview-error {
344
+ width: min(100%, 560px);
345
+ padding: 18px;
346
+ border: 1px solid #693b33;
347
+ border-radius: 10px;
348
+ background: #291b18;
349
+ color: var(--danger);
350
+ font: 13px/1.55 ui-monospace, monospace;
351
+ white-space: pre-wrap;
352
+ }
353
+
354
+ #status[data-state="error"] { color: var(--danger); }
355
+ #status[data-state="success"] { color: var(--accent); }
356
+
357
+ @media (max-width: 980px) {
358
+ .workspace {
359
+ grid-template-columns: 1fr 1fr;
360
+ grid-template-rows: repeat(2, minmax(0, 1fr));
361
+ }
362
+ .preview-panel { grid-column: 1 / -1; }
363
+ }
364
+
365
+ @media (max-width: 650px) {
366
+ .topbar { align-items: flex-start; flex-direction: column; }
367
+ .actions { width: 100%; flex-wrap: wrap; }
368
+ .workspace {
369
+ grid-template-columns: 1fr;
370
+ grid-template-rows: repeat(3, minmax(0, 1fr));
371
+ }
372
+ .preview-panel { grid-column: auto; }
373
+ .panel { border-right: 0; border-bottom: 1px solid var(--line); }
374
+ }